/* ****************************************************************************** * @file apt32f102_i2c.h * @author APT AE Team * @version V1.08 * @date 2021/06/21 ****************************************************************************** *THIS SOFTWARE WHICH IS FOR ILLUSTRATIVE PURPOSES ONLY WHICH PROVIDES *CUSTOMER WITH CODING INFORMATION REGARDING THEIR PRODUCTS. *APT CHIP SHALL NOT BE HELD RESPONSIBILITY ADN LIABILITY FOR ANY DIRECT, *INDIRECT DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF *SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION *CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.AND APT CHIP RESERVES *THE RIGHT TO MAKE CHANGES IN THE SOFTWARE WITHOUT NOTIFICATION ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef _apt32f102_i2c_H #define _apt32f102_i2c_H /* Includes ------------------------------------------------------------------*/ #include "apt32f102.h" #define BUFSIZE 32 /****************************************************************************** ************************** I2C Structure Definition *************************** ******************************************************************************/ /** ******************************************************************************* @brief description CSP_I2C_T and CSP_I2C_PTR ******************************************************************************* */ /****************************************************************************** ************************** I2C Registers Definition *************************** ******************************************************************************/ /****************************************************************************** * CR : I2C Control Register ******************************************************************************/ #define I2C_MASTER_EN (0x01ul << 0) /**< I2C Master Mode */ #define I2C_MASTER_DIS (0x00ul << 0) /**< I2C Master Mode */ #define I2C_SS (0x01ul << 1) /**< I2C Standard Speed Mode */ #define I2C_FS (0x02ul << 1) /**< I2C Fast Speed Mode */ #define I2C_HS (0x03ul << 1) /**< I2C High Speed Mode */ #define I2C_10BIT_SLAVE (0x01ul << 3) /**< I2C 10bit or 7bit in Slave */ #define I2C_7BIT_SLAVE (0x00ul << 3) /**< I2C 10bit or 7bit in Slave */ #define I2C_10BIT_MASTER (0x01ul << 4) /**< I2C 10bit or 7bit in Master */ #define I2C_7BIT_MASTER (0x00ul << 4) /**< I2C 10bit or 7bit in Master */ #define I2C_RESTART_EN (0x01ul << 5) /**< I2C Restart Enable */ #define I2C_RESTART_DIS (0x00ul << 5) /**< I2C Restart Disable */ #define I2C_SLAVE_EN (0x00ul << 6) /**< I2C Slave Enable */ #define I2C_SLAVE_DIS (0x01ul << 6) /**< I2C Slave Disable */ #define I2C_STOPDET_IFADD (0x01ul << 7) /**< I2C STOPDET If Addressed */ #define I2C_STOPDET_ALS (0x00ul << 7) /**< I2C STOPDET Always */ #define I2C_TX_EMPTY_CTRL (0x01ul << 8) /**< I2C TX_EMPTY Control */ #define I2C_TX_EMPTY_DONE (0x00ul << 8) /**< I2C TX_EMPTY and Send Done */ #define I2C_RX_HOLD_CTRL (0x01ul << 9) /**< I2C Rx Hold Ctrl @FIFO Full */ #define I2C_RX_HOLD_NONE (0x00ul << 9) /**< I2C Rx Hold None @FIFO Full */ #define I2C_STOPDET_MM (0x01ul <<10) /**< I2C STOPDET only in Master */ #define I2C_BUSCLR_EN (0x01ul <<11) /**< I2C Enable Bus Clear Feature*/ #define I2C_BUSCLR_DIS (0x00ul <<11) /**< I2C Disable Bus Clear Feature*/ /****************************************************************************** * DATA_CMD : I2C Data and Command Register ******************************************************************************/ #define I2C_CMD_READ (0x01ul << 8) /**< I2C Read Command */ #define I2C_CMD_WRITE (0x00ul << 8) /**< I2C Write Command */ #define I2C_CMD_STOP (0x01ul << 9) /**< I2C Stop after this byte */ #define I2C_CMD_NONESTOP (0x00ul << 9) /**< I2C None Stop When FIFO Empty or Not */ #define I2C_CMD_RESTART0 (0x00ul <<10) /**< I2C Restart Mode0 */ #define I2C_CMD_RESTART1 (0x01ul <<10) /**< I2C Restart Mode1 */ //#define I2C_CMD_1stDATA (0x01ul <<11) /**< I2C First Data Byte */ #define I2C_DATA(val) (((val) & 0xFFul) << 0) /**< Data Writing Macro */ /***************************************************************************** * ENABLE : I2C Enable Register ******************************************************************************/ #define I2C_ENABLE (0x01ul << 0) /**< I2C Enable */ #define I2C_DISABLE (0x00ul << 0) /**< I2C Enable */ #define I2C_ABORT (0x01ul << 1) /**< I2C Abort Transfer */ #define I2C_ABORT_OV (0x00ul << 1) /**< I2C Abort Transfer Over or No Abort */ //#define I2C_TX_CMD_BLOCK (0x01ul << 2) /**< I2C Block Transmission */ #define I2C_SDA_REC_EN (0x01ul << 3) /**< I2C Enable Stuck Recovery */ #define I2C_SDA_REC_DIS (0x00ul << 3) /**< I2C Enable Stuck Recovery */ /***************************************************************************** * STATUS : I2C STATUS Register ******************************************************************************/ #define I2C_BUSY (0x01ul << 0) /**< I2C Activity */ #define I2C_FREE (0x00ul << 0) /**< I2C Activity */ #define I2C_TFNF (0x01ul << 1) /**< I2C Transmit FIFO Not Full */ #define I2C_TFNF_FULL (0x00ul << 1) /**< I2C Transmit FIFO Is Full */ #define I2C_TFE (0x01ul << 2) /**< I2C Transmit FIFO Empty */ #define I2C_TFE_NOT (0x00ul << 2) /**< I2C Transmit FIFO Not Empty */ #define I2C_RFNE (0x01ul << 3) /**< I2C Receive FIFO Not Empty */ #define I2C_RFNE_EMPTY (0x00ul << 3) /**< I2C Receive FIFO Is Empty */ #define I2C_RFF (0x01ul << 4) /**< I2C Receive FIFO Full */ #define I2C_MST_BUSY (0x01ul << 5) /**< I2C Master FSM Activity */ #define I2C_MST_FREE (0x00ul << 5) /**< I2C Master FSM Free */ #define I2C_SLV_BUSY (0x01ul << 6) /**< I2C Slave FSM Activity */ #define I2C_SLV_FREE (0x01ul << 6) /**< I2C Slave FSM Free */ #define I2C_REC_FREE (0x00ul << 6) /**< I2C Recovery No FAIL */ #define I2C_REC_FAIL (0x01ul << 11) /**< I2C Recovery FAIL */ /***************************************************************************** * RISR/MISR/IMSCR/ICR : I2C Interrupt Mask/Status Register ******************************************************************************/ #define I2C_RX_UNDER (0x01ul << 0) /**< I2C Interrupt Status */ #define I2C_RX_OVER (0x01ul << 1) /**< I2C Interrupt Status */ #define I2C_RX_FULL (0x01ul << 2) /**< I2C Interrupt Status */ #define I2C_TX_OVER (0x01ul << 3) /**< I2C Interrupt Status */ #define I2C_TX_EMPTY (0x01ul << 4) /**< I2C Interrupt Status */ #define I2C_RD_REQ (0x01ul << 5) /**< I2C Interrupt Status */ #define I2C_TX_ABRT (0x01ul << 6) /**< I2C Interrupt Status */ #define I2C_RX_DONE (0x01ul << 7) /**< I2C Interrupt Status */ #define I2C_INT_BUSY (0x01ul << 8) /**< I2C Interrupt Status */ #define I2C_STOP_DET (0x01ul << 9) /**< I2C Interrupt Status */ #define I2C_START_DET (0x01ul <<10) /**< I2C Interrupt Status */ #define I2C_GEN_CALL (0x01ul <<11) /**< I2C Interrupt Status */ #define I2C_RESTART_DET (0x01ul <<12) /**< I2C Interrupt Status */ #define I2C_MST_ON_HOLD (0x01ul <<13) /**< I2C Interrupt Status */ #define I2C_SCL_SLOW (0x01ul <<14) /**< I2C Interrupt Status */ /***************************************************************************** * SDA_HOLD/SETUP : I2C SDA hold/setup Timing Register ******************************************************************************/ #define I2C_TX_HOLD(val) (((val) & 0xFFul) << 0) /**< SDA TX Hold Delay */ #define I2C_RX_HOLD(val) (((val) & 0xFFul) <<16) /**< SDA RX Hold Delay */ #define I2C_SETUP(val) (((val) & 0xFFul) << 0) /**< SDA Setup Delay */ /***************************************************************************** * I2C_SPKLEN : I2C Burr Interference Filter Control Register ******************************************************************************/ #define I2C_SPKLEN(val) (((val) & 0xFFul) << 0) /**