/** ****************************************************************************** * @file sdk/include/hal/i2c.h * @author HUGE-IC Application Team * @version V1.0.0 * @date 01-08-2018 * @brief Main program body header file ****************************************************************************** * @attention * *

© COPYRIGHT 2018 HUGE-IC

* * */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef _HAL_I2C_H_ #define _HAL_I2C_H_ #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ /** @addtogroup Template_Project * @{ */ /** * @brief Enumeration constant for IIC ioctrl cmd */ enum i2c_ioctl_cmd { /*! IIC SDA output delay */ IIC_SDA_OUTPUT_DELAY, /*! IIC SCL strong output *@note: I/O cannot be configured when the strong output is on */ IIC_STRONG_OUTPUT, IIC_FILTERING, IIC_SET_DEVICE_ADDR, IIC_SET_WRITE_TABLE_MODE, IIC_GET_TX_STATUS, }; /** * @brief Enumeration constant for IIC mode selection */ enum i2c_mode { /*! IIC selects the master mode. */ IIC_MODE_MASTER, /*! IIC selects the slave mode. */ IIC_MODE_SLAVE, }; /** * @brief Enumeration constant for IIC address bit selection */ enum i2c_addr_mode { /*! The IIC communication address selects the 7-bit mode. */ IIC_ADDR_7BIT, /*! The IIC communication address selects the 10-bit mode. */ IIC_ADDR_10BIT, }; enum i2c_irq_flag { /*! * @brief Interrupt: IIC send data completed. * @Note * This interrupt is only used for IIC transmit. */ I2C_IRQ_FLAG_TX_DONE = BIT(0), /*! * @brief Interrupt: IIC receive data completed. * @Note: * This interrupt is only used for IIC receive. */ I2C_IRQ_FLAG_RX_DONE = BIT(1), /*! * @brief Interrupt: IIC slave nack to IIC master */ I2C_IRQ_FLAG_RX_NACK = BIT(2), /*! * @brief Interrupt: IIC rececive error * @Note: * IIC buf overflow means rx error */ I2C_IRQ_FLAG_RX_ERROR = BIT(3), /*! * @brief Interrupt: IIC detect stop * @Note: * IIC has detected the stop signal on the bus */ I2C_IRQ_FLAG_DETECT_STOP = BIT(4), /* * @brief Interrupt: IIC slave addressed * @Note : * The interrupt triggered when the II slave is addressed */ I2C_IRQ_FLAG_SLAVE_ADDRESSED = BIT(5) }; typedef void (*i2c_irq_hdl)(uint32 irq, uint32 irq_data, uint32 param1, uint32 param2); struct i2c_device { struct dev_obj dev; }; struct i2c_hal_ops{ struct devobj_ops ops; int32(*open)(struct i2c_device *i2c, enum i2c_mode mode, enum i2c_addr_mode addr_mode, uint32 addr); int32(*close)(struct i2c_device *i2c); int32(*ioctl)(struct i2c_device *i2c, int32 cmd, uint32 param); int32(*baudrate)(struct i2c_device *i2c, uint32 baudrate); int32(*read)(struct i2c_device *i2c, int8 *addr, uint32 addr_len, int8 *buf, uint32 len); int32(*write)(struct i2c_device *i2c, int8 *addr, uint32 addr_len, int8 *buf, uint32 len); int32(*write_scatter)(struct i2c_device *i2c, int8 *addr, uint32 addr_len, scatter_data *data, uint32 count); int32(*write_table)(struct i2c_device *i2c, uint8 cmd_len, uint8 slave_id, scatter_data *data); int32(*request_irq)(struct i2c_device *i2c, i2c_irq_hdl irqhdl, uint32 irq_data, uint32 irq_flag); int32(*release_irq)(struct i2c_device *i2c, uint32 irq_flag); }; /** * @} */ /** @defgroup HGI2C_DW_Exported_Functions * @{ */ int32 i2c_open(struct i2c_device *i2c, enum i2c_mode mode, enum i2c_addr_mode addr_mode, uint32 addr); int32 i2c_close(struct i2c_device *i2c); int32 i2c_set_baudrate(struct i2c_device *i2c, uint32 baudrate); int32 i2c_ioctl(struct i2c_device *i2c, uint32 cmd, uint32 param); int32 i2c_read(struct i2c_device *i2c, int8 *addr, uint32 addr_len, int8 *buf, uint32 buf_len); int32 i2c_write(struct i2c_device *i2c, int8 *addr, uint32 addr_len, int8 *buf, uint32 buf_len); int32 i2c_write_scatter(struct i2c_device *i2c, int8 *addr, uint32 addr_len, scatter_data *data, uint32 count); int32 i2c_master_write_table(struct i2c_device *i2c, uint8 cmd_len, uint8 slave_id, scatter_data *data); int32 i2c_request_irq(struct i2c_device *i2c, i2c_irq_hdl handle, uint32 irq_data, uint32 irq_flag); int32 i2c_release_irq(struct i2c_device *i2c, uint32 irq_flag); /** * @} */ #ifdef __cplusplus } #endif #endif