1 //////////////////////////////////////////////////////////////////////////////// 2 /// @file hal_i2c.h 3 /// @author AE TEAM 4 /// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE I2C 5 /// FIRMWARE LIBRARY. 6 //////////////////////////////////////////////////////////////////////////////// 7 /// @attention 8 /// 9 /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE 10 /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE 11 /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR 12 /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH 13 /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN 14 /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS. 15 /// 16 /// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2> 17 //////////////////////////////////////////////////////////////////////////////// 18 19 // Define to prevent recursive inclusion 20 #ifndef __HAL_I2C_H 21 #define __HAL_I2C_H 22 23 // Files includes 24 #include "types.h" 25 #include "reg_i2c.h" 26 27 //////////////////////////////////////////////////////////////////////////////// 28 /// @addtogroup MM32_Hardware_Abstract_Layer 29 /// @{ 30 31 //////////////////////////////////////////////////////////////////////////////// 32 /// @defgroup I2C_HAL 33 /// @brief I2C HAL modules 34 /// @{ 35 36 //////////////////////////////////////////////////////////////////////////////// 37 /// @defgroup I2C_Exported_Types 38 /// @{ 39 40 //////////////////////////////////////////////////////////////////////////////// 41 /// @defgroup DRV_Exported_Constants 42 /// @{ 43 44 #define I2C_OWN_ADDRESS 0x20 45 46 /// @} 47 48 //////////////////////////////////////////////////////////////////////////////// 49 /// @brief I2C Init structure definition 50 //////////////////////////////////////////////////////////////////////////////// 51 typedef struct { 52 union { 53 u16 Mode; ///< Specifies the I2C mode. This parameter can be a value of I2C_mode. 54 u16 I2C_Mode; 55 }; 56 union { 57 u16 Speed; ///< Specifies the I2C speed. This parameter can be a value of I2C_speed. 58 u16 I2C_Speed; 59 }; 60 union { 61 u16 OwnAddress; ///< Specifies the first device own address. This parameter can be a 7-bit or 10-bit address. 62 u16 I2C_OwnAddress; 63 }; 64 65 union { 66 u32 ClockSpeed; ///< Specifies the clock speed. 67 u32 I2C_ClockSpeed; 68 }; 69 } I2C_InitTypeDef; 70 /// @} 71 72 //////////////////////////////////////////////////////////////////////////////// 73 /// @defgroup I2C_Exported_Constants 74 /// @{ 75 76 //////////////////////////////////////////////////////////////////////////////// 77 /// @brief I2C DMA Direction 78 //////////////////////////////////////////////////////////////////////////////// 79 typedef enum { 80 RDMAE_SET = 1, // 1 - DMA read 81 TDMAE_SET // 2 - DMA transmit 82 } I2C_DMA_Dir_TypeDef; 83 //////////////////////////////////////////////////////////////////////////////// 84 /// @brief I2C Transfer Direction 85 //////////////////////////////////////////////////////////////////////////////// 86 typedef enum { 87 I2C_Direction_Transmitter, // I2C Transmitter 88 I2C_Direction_Receiver // I2C Receiver 89 } I2C_Trans_Dir_TypeDef; 90 91 //////////////////////////////////////////////////////////////////////////////// 92 /// @brief I2C Acknowledged Address 93 //////////////////////////////////////////////////////////////////////////////// 94 typedef enum { 95 I2C_AcknowledgedAddress_7bit = 0x4000, // 7-bit address 96 I2C_AcknowledgedAddress_10bit = 0xC000 // 10-bit address 97 } I2C_ACKaddr_TypeDef; 98 99 //////////////////////////////////////////////////////////////////////////////// 100 /// @defgroup I2C_Private_Defines 101 /// @{ 102 #define INTR_MASK ((u16)0xC000) 103 #define FLAG_Mask ((u32)0x00793FFF) 104 #define IC_TAR_ENDUAL_Set ((u16)0x1000) 105 #define IC_TAR_ENDUAL_Reset ((u16)0xEFFF) 106 /// @} 107 108 //////////////////////////////////////////////////////////////////////////////// 109 /// @defgroup I2C_modes 110 /// @{ 111 #define TX_EMPTY_CTRL I2C_CR_EMPINT 112 #define IC_SLAVE_DISABLE I2C_CR_SLAVEDIS 113 #define IC_RESTART_EN I2C_CR_REPEN 114 /// @} 115 116 //////////////////////////////////////////////////////////////////////////////// 117 /// @defgroup I2C_interrupts_definition 118 /// @{ 119 #define I2C_IT_RX_UNDER ((u16)0x0001) 120 #define I2C_IT_RX_OVER ((u16)0x0002) 121 #define I2C_IT_RX_FULL ((u16)0x0004) 122 #define I2C_IT_TX_OVER ((u16)0x0008) 123 #define I2C_IT_TX_EMPTY ((u16)0x0010) 124 #define I2C_IT_RD_REQ ((u16)0x0020) 125 #define I2C_IT_TX_ABRT ((u16)0x0040) 126 #define I2C_IT_RX_DONE ((u16)0x0080) 127 #define I2C_IT_ACTIVITY ((u16)0x0100) 128 #define I2C_IT_STOP_DET ((u16)0x0200) 129 #define I2C_IT_START_DET ((u16)0x0400) 130 #define I2C_IT_GEN_CALL ((u16)0x0800) 131 /// @} 132 133 //////////////////////////////////////////////////////////////////////////////// 134 /// @defgroup I2C_flags_definition 135 /// @{ 136 #define I2C_FLAG_RX_UNDER ((u16)0x0001) 137 #define I2C_FLAG_RX_OVER ((u16)0x0002) 138 #define I2C_FLAG_RX_FULL ((u16)0x0004) 139 #define I2C_FLAG_TX_OVER ((u16)0x0008) 140 #define I2C_FLAG_TX_EMPTY ((u16)0x0010) 141 #define I2C_FLAG_RD_REQ ((u16)0x0020) 142 #define I2C_FLAG_TX_ABRT ((u16)0x0040) 143 #define I2C_FLAG_RX_DONE ((u16)0x0080) 144 #define I2C_FLAG_ACTIVITY ((u16)0x0100) 145 #define I2C_FLAG_STOP_DET ((u16)0x0200) 146 #define I2C_FLAG_START_DET ((u16)0x0400) 147 #define I2C_FLAG_GEN_CALL ((u16)0x0800) 148 /// @} 149 150 //////////////////////////////////////////////////////////////////////////////// 151 /// @defgroup I2C_Events 152 /// @{ 153 #define I2C_EVENT_RX_UNDER ((u16)0x0001) 154 #define I2C_EVENT_RX_OVER ((u16)0x0002) 155 #define I2C_EVENT_RX_FULL ((u16)0x0004) 156 #define I2C_EVENT_TX_OVER ((u16)0x0008) 157 #define I2C_EVENT_TX_EMPTY ((u16)0x0010) 158 #define I2C_EVENT_RD_REQ ((u16)0x0020) 159 #define I2C_EVENT_TX_ABRT ((u16)0x0040) 160 #define I2C_EVENT_RX_DONE ((u16)0x0080) 161 #define I2C_EVENT_ACTIVITY ((u16)0x0100) 162 #define I2C_EVENT_STOP_DET ((u16)0x0200) 163 #define I2C_EVENT_START_DET ((u16)0x0400) 164 #define I2C_EVENT_GEN_CALL ((u16)0x0800) 165 /// @} 166 167 //////////////////////////////////////////////////////////////////////////////// 168 /// @defgroup I2C_Statusflags_definition 169 /// @{ 170 #define I2C_STATUS_FLAG_ACTIVITY ((u16)0x8001) 171 #define I2C_STATUS_FLAG_TFNF ((u16)0x8002) 172 #define I2C_STATUS_FLAG_TFE ((u16)0x8004) 173 #define I2C_STATUS_FLAG_RFNE ((u16)0x8008) 174 #define I2C_STATUS_FLAG_RFF ((u16)0x8010) 175 #define I2C_STATUS_FLAG_M_ACTIVITY ((u16)0x8020) 176 #define I2C_STATUS_FLAG_S_ACTIVITY ((u16)0x8040) 177 /// @} 178 179 180 181 #define IC_SLAVE_ENABLE (0x0000<<6) 182 #define IC_7BITADDR_MASTER (0x0000<<4) 183 #define IC_7BITADDR_SLAVE (0x0000<<3) 184 #define I2C_Speed_STANDARD ((u16)0x0002) 185 #define I2C_Speed_FAST ((u16)0x0004) 186 #define I2C_Mode_MASTER ((u16)0x0001) 187 #define I2C_Mode_SLAVE ((u16)0x0000) 188 #define CMD_READ ((u16)0x0100) 189 #define CMD_WRITE ((u16)0x0000) 190 #define I2C_Mode_I2C ((u16)0x0000) 191 192 /// @} 193 194 //////////////////////////////////////////////////////////////////////////////// 195 /// @defgroup I2C_Exported_Variables 196 /// @{ 197 #ifdef _HAL_I2C_C_ 198 199 #define GLOBAL 200 201 static u8 I2C_CMD_DIR = 0; 202 u16 I2C_DMA_DIR = 0; 203 204 #else 205 #define GLOBAL extern 206 #endif 207 208 #undef GLOBAL 209 /// @} 210 211 //////////////////////////////////////////////////////////////////////////////// 212 /// @defgroup I2C_Exported_Functions 213 /// @{ 214 void I2C_DeInit(I2C_TypeDef* i2c); 215 void I2C_Init(I2C_TypeDef* i2c, I2C_InitTypeDef* init_struct); 216 void I2C_StructInit(I2C_InitTypeDef* init_struct); 217 void I2C_Cmd(I2C_TypeDef* i2c, FunctionalState state); 218 void I2C_DMACmd(I2C_TypeDef* i2c, FunctionalState state); 219 void I2C_GenerateSTART(I2C_TypeDef* i2c, FunctionalState state); 220 void I2C_GenerateSTOP(I2C_TypeDef* i2c, FunctionalState state); 221 void I2C_OwnAddress2Config(I2C_TypeDef* i2c, u8 addr); 222 void I2C_DualAddressCmd(I2C_TypeDef* i2c, FunctionalState state); 223 void I2C_GeneralCallCmd(I2C_TypeDef* i2c, FunctionalState state); 224 void I2C_ITConfig(I2C_TypeDef* i2c, u16 it, FunctionalState state); 225 void I2C_SendData(I2C_TypeDef* i2c, u8 dat); 226 void I2C_ReadCmd(I2C_TypeDef* i2c); 227 void I2C_Send7bitAddress(I2C_TypeDef* i2c, u8 addr, u8 dir); 228 void I2C_ClearFlag(I2C_TypeDef* i2c, u32 flag); 229 void I2C_ClearITPendingBit(I2C_TypeDef* i2c, u32 it); 230 231 u8 I2C_ReceiveData(I2C_TypeDef* i2c); 232 u16 I2C_ReadRegister(I2C_TypeDef* i2c, u8 reg); 233 u32 I2C_GetLastEvent(I2C_TypeDef* i2c); 234 235 ErrorStatus I2C_CheckEvent(I2C_TypeDef* i2c, u32 event); 236 FlagStatus I2C_GetFlagStatus(I2C_TypeDef* i2c, u32 flag); 237 ITStatus I2C_GetITStatus(I2C_TypeDef* i2c, u32 it); 238 239 //////////////////////////////////////////////////////////////////////////////// 240 // Extended function interface 241 //////////////////////////////////////////////////////////////////////////////// 242 void I2C_SendSlaveAddress(I2C_TypeDef* i2c, u8 addr); 243 void I2C_SlaveConfigure(I2C_TypeDef* i2c, FunctionalState state); 244 void I2C_DMAConfigure(I2C_TypeDef* i2c, u8 dir); 245 246 247 /// @} 248 249 /// @} 250 251 /// @} 252 253 //////////////////////////////////////////////////////////////////////////////// 254 #endif //__HAL_I2C_H 255 //////////////////////////////////////////////////////////////////////////////// 256