1 /** 2 ****************************************************************************** 3 * @file lib_i2c.h 4 * @author Application Team 5 * @version V1.1.0 6 * @date 2019-10-28 7 * @brief IIC library. 8 ****************************************************************************** 9 * @attention 10 * 11 ****************************************************************************** 12 */ 13 #ifndef __LIB_I2C_H 14 #define __LIB_I2C_H 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 #include "target.h" 21 22 typedef struct 23 { 24 uint32_t SlaveAddr; 25 uint32_t GeneralCallAck; 26 uint32_t AssertAcknowledge; 27 uint32_t ClockSource; 28 } I2C_InitType; 29 30 /************** Bits definition for I2C_CTRL register ******************/ 31 #define I2C_CTRL_CR_0 (0x0U << I2C_CTRL_CR0_Pos) /*!< 0x0000000 */ 32 #define I2C_CTRL_CR_1 (0x1U << I2C_CTRL_CR0_Pos) /*!< 0x0000001 */ 33 #define I2C_CTRL_CR_2 (0x2U << I2C_CTRL_CR0_Pos) /*!< 0x0000002 */ 34 #define I2C_CTRL_CR_3 (0x3U << I2C_CTRL_CR0_Pos) /*!< 0x0000003 */ 35 #define I2C_CTRL_CR_4 (0x80U << I2C_CTRL_CR0_Pos) /*!< 0x0000080 */ 36 #define I2C_CTRL_CR_5 (0x81U << I2C_CTRL_CR0_Pos) /*!< 0x0000081 */ 37 #define I2C_CTRL_CR_6 (0x82U << I2C_CTRL_CR0_Pos) /*!< 0x0000082 */ 38 #define I2C_CTRL_CR_7 (0x83U << I2C_CTRL_CR0_Pos) /*!< 0x0000083 */ 39 40 /************** Bits definition for I2C_STS register ******************/ 41 #define I2C_STS_STS_0x00 (0x0U << I2C_STS_STS_Pos) /*!< 0x0000000 */ 42 #define I2C_STS_STS_0x08 (0x1U << I2C_STS_STS_Pos) /*!< 0x0000008 */ 43 #define I2C_STS_STS_0x10 (0x2U << I2C_STS_STS_Pos) /*!< 0x0000010 */ 44 #define I2C_STS_STS_0x18 (0x3U << I2C_STS_STS_Pos) /*!< 0x0000018 */ 45 #define I2C_STS_STS_0x20 (0x4U << I2C_STS_STS_Pos) /*!< 0x0000020 */ 46 #define I2C_STS_STS_0x28 (0x5U << I2C_STS_STS_Pos) /*!< 0x0000028 */ 47 #define I2C_STS_STS_0x30 (0x6U << I2C_STS_STS_Pos) /*!< 0x0000030 */ 48 #define I2C_STS_STS_0x38 (0x7U << I2C_STS_STS_Pos) /*!< 0x0000038 */ 49 #define I2C_STS_STS_0x40 (0x8U << I2C_STS_STS_Pos) /*!< 0x0000040 */ 50 #define I2C_STS_STS_0x48 (0x9U << I2C_STS_STS_Pos) /*!< 0x0000048 */ 51 #define I2C_STS_STS_0x50 (0xAU << I2C_STS_STS_Pos) /*!< 0x0000050 */ 52 #define I2C_STS_STS_0x58 (0xBU << I2C_STS_STS_Pos) /*!< 0x0000058 */ 53 #define I2C_STS_STS_0x60 (0xCU << I2C_STS_STS_Pos) /*!< 0x0000060 */ 54 #define I2C_STS_STS_0x68 (0xDU << I2C_STS_STS_Pos) /*!< 0x0000068 */ 55 #define I2C_STS_STS_0x70 (0xEU << I2C_STS_STS_Pos) /*!< 0x0000070 */ 56 #define I2C_STS_STS_0x78 (0xFU << I2C_STS_STS_Pos) /*!< 0x0000078 */ 57 #define I2C_STS_STS_0x80 (0x10U << I2C_STS_STS_Pos) /*!< 0x0000080 */ 58 #define I2C_STS_STS_0x88 (0x11U << I2C_STS_STS_Pos) /*!< 0x0000088 */ 59 #define I2C_STS_STS_0x90 (0x12U << I2C_STS_STS_Pos) /*!< 0x0000090 */ 60 #define I2C_STS_STS_0x98 (0x13U << I2C_STS_STS_Pos) /*!< 0x0000098 */ 61 #define I2C_STS_STS_0xA0 (0x14U << I2C_STS_STS_Pos) /*!< 0x00000A0 */ 62 #define I2C_STS_STS_0xA8 (0x15U << I2C_STS_STS_Pos) /*!< 0x00000A8 */ 63 #define I2C_STS_STS_0xB0 (0x16U << I2C_STS_STS_Pos) /*!< 0x00000B0 */ 64 #define I2C_STS_STS_0xB8 (0x17U << I2C_STS_STS_Pos) /*!< 0x00000B8 */ 65 #define I2C_STS_STS_0xC0 (0x18U << I2C_STS_STS_Pos) /*!< 0x00000C0 */ 66 #define I2C_STS_STS_0xC8 (0x19U << I2C_STS_STS_Pos) /*!< 0x00000C8 */ 67 #define I2C_STS_STS_0xF8 (0x1FU << I2C_STS_STS_Pos) /*!< 0x00000F8 */ 68 69 //GeneralCallAck 70 #define I2C_GENERALCALLACK_ENABLE I2C_ADDR_GC 71 #define I2C_GENERALCALLACK_DISABLE 0 72 //AssertAcknowledge 73 #define I2C_ASSERTACKNOWLEDGE_ENABLE I2C_CTRL_AA 74 #define I2C_ASSERTACKNOWLEDGE_DISABLE 0 75 //ClockSource 76 #define I2C_CLOCKSOURCE_APBD256 I2C_CTRL_CR_0 77 #define I2C_CLOCKSOURCE_APBD224 I2C_CTRL_CR_1 78 #define I2C_CLOCKSOURCE_APBD192 I2C_CTRL_CR_2 79 #define I2C_CLOCKSOURCE_APBD160 I2C_CTRL_CR_3 80 #define I2C_CLOCKSOURCE_APBD960 I2C_CTRL_CR_4 81 #define I2C_CLOCKSOURCE_APBD120 I2C_CTRL_CR_5 82 #define I2C_CLOCKSOURCE_APBD60 I2C_CTRL_CR_6 83 #define I2C_CLOCKSOURCE_TIM3OFD8 I2C_CTRL_CR_7 84 85 #define I2C_CTRL_CR (0x83) 86 typedef struct 87 { 88 uint16_t SlaveAddr; 89 uint8_t SubAddrType; 90 uint32_t PageRange; 91 uint32_t SubAddress; 92 uint8_t *pBuffer; 93 uint32_t Length; 94 } I2C_WRType; 95 //SubAddrType 96 #define I2C_SUBADDR_1BYTE (1) 97 #define I2C_SUBADDR_2BYTE (2) 98 #define I2C_SUBADDR_OTHER (3) 99 100 //remap 101 #define I2C_REMAP_ENABLE (1) 102 #define I2C_REMAP_DISABLE (0) 103 104 /* Private macros ------------------------------------------------------------*/ 105 106 #define IS_I2C_GC(__GC__) (((__GC__) == I2C_GENERALCALLACK_ENABLE) ||\ 107 ((__GC__) == I2C_GENERALCALLACK_DISABLE)) 108 109 #define IS_I2C_AA(__AA__) (((__AA__) == I2C_ASSERTACKNOWLEDGE_ENABLE) ||\ 110 ((__AA__) == I2C_ASSERTACKNOWLEDGE_DISABLE)) 111 112 #define IS_I2C_CLKSRC(__CLKSRC__) (((__CLKSRC__) == I2C_CLOCKSOURCE_APBD256) ||\ 113 ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD224) ||\ 114 ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD192) ||\ 115 ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD160) ||\ 116 ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD960) ||\ 117 ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD120) ||\ 118 ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD60) ||\ 119 ((__CLKSRC__) == I2C_CLOCKSOURCE_TIM3OFD8)) 120 121 #define I2C_SUBADDR_TYPE(__TYPE__) (((__TYPE__) == I2C_SUBADDR_1BYTE) ||\ 122 ((__TYPE__) == I2C_SUBADDR_2BYTE) ||\ 123 ((__TYPE__) == I2C_SUBADDR_OTHER)) 124 125 /****************************** I2C Instances *********************************/ 126 #define IS_I2C_ALL_INSTANCE(INSTANCE) ((INSTANCE) == I2C) 127 128 129 /* Exported Functions ------------------------------------------------------- */ 130 /* I2C Exported Functions Group1: 131 (De)Initialization ------------------------*/ 132 void I2C_DeInit(uint32_t remap); 133 void I2C_StructInit(I2C_InitType *InitStruct); 134 void I2C_Init(I2C_InitType *InitStruct); 135 /* I2C Exported Functions Group2: 136 Interrupt ---------------------------------*/ 137 void I2C_INTConfig(uint32_t NewState); 138 uint8_t I2C_GetINTStatus(void); 139 void I2C_ClearINTStatus(void); 140 /* I2C Exported Functions Group3: 141 Transfer datas ----------------------------*/ 142 uint16_t I2C_MasterReadBytes(I2C_WRType *InitStruct); 143 uint16_t I2C_MasterWriteBytes(I2C_WRType *InitStruct); 144 /* I2C Exported Functions Group4: 145 MISC Configuration ------------------------*/ 146 void I2C_Cmd(uint32_t NewState); 147 148 /* I2C Exported Functions Group5: 149 Others ------------------------------------*/ 150 void I2C_AssertAcknowledgeConfig(uint32_t NewState); 151 uint8_t I2C_ReceiveData(void); 152 void I2C_SendData(uint8_t Dat); 153 void I2C_GenerateSTART(uint32_t NewState); 154 void I2C_GenerateSTOP(uint32_t NewState); 155 uint8_t I2C_GetStatusCode(void); 156 157 158 #ifdef __cplusplus 159 } 160 #endif 161 162 #endif /* __LIB_I2C_H */ 163 164 /*********************************** END OF FILE ******************************/ 165