106 lines
3.3 KiB
C
106 lines
3.3 KiB
C
|
/**************************************************************************//**
|
||
|
* @file i2c.h
|
||
|
* @brief N9H30 I2C driver header file
|
||
|
*
|
||
|
* @note
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
* Copyright (C) 2018 Nuvoton Technology Corp. All rights reserved.
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#ifndef __NU_I2C_H__
|
||
|
#define __NU_I2C_H__
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/** @addtogroup N9H30_Device_Driver N9H30 Device Driver
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup N9H30_I2C_Driver I2C Driver
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup N9H30_I2C_EXPORTED_CONSTANTS I2C Exported Constants
|
||
|
@{
|
||
|
*/
|
||
|
/// @cond HIDDEN_SYMBOLS
|
||
|
|
||
|
/*-----------------------------------------*/
|
||
|
/* marco, type and constant definitions */
|
||
|
/*-----------------------------------------*/
|
||
|
#define I2C_MAX_BUF_LEN 450
|
||
|
|
||
|
/*-----------------------------------------*/
|
||
|
/* global interface variables declarations */
|
||
|
/*-----------------------------------------*/
|
||
|
/*
|
||
|
bit map in CMDR
|
||
|
*/
|
||
|
#define I2C_CMD_START 0x10
|
||
|
#define I2C_CMD_STOP 0x08
|
||
|
#define I2C_CMD_READ 0x04
|
||
|
#define I2C_CMD_WRITE 0x02
|
||
|
#define I2C_CMD_NACK 0x01
|
||
|
|
||
|
/*
|
||
|
for transfer use
|
||
|
*/
|
||
|
#define I2C_WRITE 0x00
|
||
|
#define I2C_READ 0x01
|
||
|
|
||
|
#define I2C_STATE_NOP 0x00
|
||
|
#define I2C_STATE_READ 0x01
|
||
|
#define I2C_STATE_WRITE 0x02
|
||
|
#define I2C_STATE_PROBE 0x03
|
||
|
|
||
|
/*
|
||
|
i2c register offset
|
||
|
*/
|
||
|
#define I2C_CSR (0x00) /*!< Control and Status Register */
|
||
|
#define I2C_DIVIDER (0x04) /*!< Clock Prescale Register */
|
||
|
#define I2C_CMDR (0x08) /*!< Command Register */
|
||
|
#define I2C_SWR (0x0C) /*!< Software Mode Control Register */
|
||
|
#define I2C_RxR (0x10) /*!< Data Receive Register */
|
||
|
#define I2C_TxR (0x14) /*!< Data Transmit Register */
|
||
|
|
||
|
/// @endcond HIDDEN_SYMBOLS
|
||
|
|
||
|
/*
|
||
|
ioctl commands
|
||
|
*/
|
||
|
#define I2C_IOC_SET_DEV_ADDRESS 0 /*!< Set device slave address */
|
||
|
#define I2C_IOC_SET_SUB_ADDRESS 1 /*!< Set sub address */
|
||
|
#define I2C_IOC_SET_SPEED 2 /*!< Set I2C interface speed */
|
||
|
|
||
|
/*
|
||
|
error code
|
||
|
*/
|
||
|
#define I2C_ERR_ID 0xFFFF1100 /*!< I2C library ID */
|
||
|
#define I2C_ERR_NOERROR (0x00) /*!< No error */
|
||
|
#define I2C_ERR_LOSTARBITRATION (0x01 | I2C_ERR_ID) /*!< Arbitration lost error */
|
||
|
#define I2C_ERR_BUSBUSY (0x02 | I2C_ERR_ID) /*!< Bus busy error */
|
||
|
#define I2C_ERR_NACK (0x03 | I2C_ERR_ID) /*!< data transfer error */
|
||
|
#define I2C_ERR_SLAVENACK (0x04 | I2C_ERR_ID) /*!< slave not respond after address */
|
||
|
#define I2C_ERR_NODEV (0x05 | I2C_ERR_ID) /*!< Wrong device */
|
||
|
#define I2C_ERR_BUSY (0x06 | I2C_ERR_ID) /*!< Device busy */
|
||
|
#define I2C_ERR_IO (0x07 | I2C_ERR_ID) /*!< Interface not open */
|
||
|
#define I2C_ERR_NOTTY (0x08 | I2C_ERR_ID) /*!< Command not support */
|
||
|
|
||
|
/*@}*/ /* end of group N9H30_I2C_EXPORTED_CONSTANTS */
|
||
|
|
||
|
/*@}*/ /* end of group N9H30_I2C_Driver */
|
||
|
|
||
|
/*@}*/ /* end of group N9H30_Device_Driver */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif //__NU_I2C_H__
|
||
|
|
||
|
/*** (C) COPYRIGHT 2018 Nuvoton Technology Corp. ***/
|