i2c.h
上传用户:yyyd609
上传日期:2022-07-18
资源大小:183k
文件大小:14k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
  2. * File Name          : i2c.h
  3. * Author             : MCD Application Team
  4. * Date First Issued  : 05/09/2003
  5. * Description        : This file provides prototypes of I2C functions
  6. *                      and variable used in code sources
  7. ********************************************************************************
  8. * History:
  9. *  01/01/2004 : V1.2
  10. *  14/07/2004 : V1.3
  11. *******************************************************************************/
  12. #ifndef __i2c_H
  13. #define __i2c_H
  14. #include "71x_lib.h"
  15. typedef enum
  16. {
  17.   I2C_CR   = 0x00,
  18.   I2C_SR1  = 0x04,
  19.   I2C_SR2  = 0x08,
  20.   I2C_CCR  = 0x0C,
  21.   I2C_OAR1 = 0x10,
  22.   I2C_OAR2 = 0x14,
  23.   I2C_DR   = 0x18,
  24.   I2C_ECCR = 0x1C
  25. } I2C_Registers;
  26. typedef enum
  27. {
  28.   I2C_Mode10,
  29.   I2C_Mode7
  30. } I2C_Addressing;
  31. typedef enum
  32. {
  33.   I2C_RX,
  34.   I2C_TX
  35. } I2C_Direction;
  36. typedef enum
  37. {
  38.   I2C_SB    = 0x0001,
  39.   I2C_M_SL  = 0x0002,
  40.   I2C_ADSL  = 0x0004,
  41.   I2C_BTF   = 0x0008,
  42.   I2C_BUSY  = 0x0010,
  43.   I2C_TRA   = 0x0020,
  44.   I2C_ADD10 = 0x0040,
  45.   I2C_EVF   = 0x0080,
  46.   I2C_GCAL  = 0x0100,
  47.   I2C_BERR  = 0x0200,
  48.   I2C_ARLO  = 0x0400,
  49.   I2C_STOPF = 0x0800,
  50.   I2C_AF    = 0x1000,
  51.   I2C_ENDAD = 0x2000,
  52.   I2C_ACK   = 0x4000
  53. } I2C_Flags;
  54. typedef enum
  55. {
  56.   I2C_TX_NO,
  57.   I2C_TX_SB,
  58.   I2C_TX_AF,
  59.   I2C_TX_ARLO,
  60.   I2C_TX_BERR,
  61.   I2C_TX_ADD_OK,
  62.   I2C_TX_DATA_OK,
  63.   I2C_TX_ONGOING
  64. } I2C_Tx_Status;
  65. typedef enum
  66. {
  67.   I2C_RX_NO,
  68.   I2C_RX_SB,
  69.   I2C_RX_AF,
  70.   I2C_RX_ARLO,
  71.   I2C_RX_BERR,
  72.   I2C_RX_ADD_OK,
  73.   I2C_RX_DATA_OK,
  74.   I2C_RX_ONGOING
  75. } I2C_Rx_Status;
  76. #define I2C_PESET_Mask 0x20
  77. #define I2C_PERESET    0xDF
  78. #define I2C_ENGC_Mask  0x10
  79. #define I2C_START_Mask 0x08
  80. #define I2C_STOP_Mask  0x02
  81. #define I2C_ACK_Mask   0x04
  82. #define I2C_ITE_Mask   0x01
  83. /*******************************************************************************
  84. * Function Name  : I2C_Init
  85. * Description    : Initializes I2C peripheral control and registers to their
  86. *                  default reset values.
  87. * Input          : I2Cx ( I2C0 or I2C1 )
  88. * Return         : None.
  89. *******************************************************************************/
  90. void I2C_Init (I2C_TypeDef *I2Cx);
  91. /*******************************************************************************
  92. * Function Name  : I2C_OnOffConfig
  93. * Description    : Enables or disables I2C peripheral.
  94. * Input          : I2Cx ( I2C0 or I2C1 )
  95. *                  condition(ENABLE or DISABLE).
  96. * Return         : None.
  97. *******************************************************************************/
  98. void I2C_OnOffConfig (I2C_TypeDef *I2Cx, FunctionalState NewState);
  99. /*******************************************************************************
  100. * Function Name  : I2C_GeneralCallConfig
  101. * Description    : Enables or disables I2C general call option.
  102. * Input          : I2Cx ( I2C0 or I2C1 )
  103. *                  condition(ENABLE or DISABLE).
  104. * Return         : None.
  105. *******************************************************************************/
  106. inline void I2C_GeneralCallConfig (I2C_TypeDef *I2Cx, FunctionalState NewState)
  107. {
  108.   if (NewState == ENABLE) I2Cx->CR |= I2C_ENGC_Mask;
  109.      else I2Cx->CR &= ~I2C_ENGC_Mask;
  110. }
  111. /*******************************************************************************
  112. * Function Name  : I2C_STARTGenerate
  113. * Description    : Generates I2C communication START condition.
  114. * Input          : I2Cx ( I2C0 or I2C1 )
  115. *                  condition(ENABLE or DISABLE).
  116. * Return         : None.
  117. *******************************************************************************/
  118. inline void I2C_STARTGenerate (I2C_TypeDef *I2Cx, FunctionalState NewState)
  119. {
  120.   if (NewState == ENABLE) I2Cx->CR |= I2C_START_Mask;
  121.     else I2Cx->CR &= ~I2C_START_Mask;
  122. }
  123. /*******************************************************************************
  124. * Function Name  : I2C_STOPGenerate
  125. * Description    : Generates I2C communication STOP condition.
  126. * Input          : I2Cx ( I2C0 or I2C1 )
  127. *                  condition(ENABLE or DISABLE).
  128. * Return         : None.
  129. *******************************************************************************/
  130. inline void I2C_STOPGenerate (I2C_TypeDef *I2Cx, FunctionalState NewState)
  131. {
  132.   if (NewState == ENABLE) I2Cx->CR |= I2C_STOP_Mask;
  133.     else I2Cx->CR &= ~I2C_STOP_Mask;
  134. }
  135. /*******************************************************************************
  136. * Function Name  : I2C_AcknowledgeConfig
  137. * Description    : Enables or disables I2C acknowledge feature.
  138. * Input          : I2Cx ( I2C0 or I2C1 )
  139. *                  condition(ENABLE or DISABLE).
  140. * Return         : None.
  141. *******************************************************************************/
  142. inline void I2C_AcknowledgeConfig (I2C_TypeDef *I2Cx, FunctionalState NewState)
  143. {
  144.   if (NewState == ENABLE) I2Cx->CR |= I2C_ACK_Mask;
  145.     else I2Cx->CR &= ~I2C_ACK_Mask;
  146. }
  147. /*******************************************************************************
  148. * Function Name  : I2C_ITConfig
  149. * Description    : Enables or disables I2C interrupt feature.
  150. * Input          : I2Cx ( I2C0 or I2C1 )
  151. *                  condition(ENABLE or DISABLE).
  152. * Return         : None.
  153. *******************************************************************************/
  154. inline void I2C_ITConfig (I2C_TypeDef *I2Cx, FunctionalState NewState)
  155. {
  156.   if (NewState == ENABLE) I2Cx->CR |= I2C_ITE_Mask;
  157.     else I2Cx->CR &= ~I2C_ITE_Mask;
  158. }
  159. /*******************************************************************************
  160. * Function Name  : I2C_RegisterRead
  161. * Description    : Reads any I2C register and returns its value.
  162. * Input          : I2Cx ( I2C0 or I2C1 )
  163. *                  Reg :the register to be read (I2CCR,I2CSR1,I2CSR2,I2CCCR,
  164. *                                                I2COAR1,I2COAR2,I2CDR,I2CECCR)
  165. * Return         : the value of the register passed as parameter(u8)
  166. *******************************************************************************/
  167. inline u8 I2C_RegisterRead (I2C_TypeDef *I2Cx, I2C_Registers reg)
  168. {
  169.   return (*(u8 *)(*((u32 *)&I2Cx) + reg));
  170. }
  171. /*******************************************************************************
  172. * Function Name  : I2C_FlagStatus
  173. * Description    : Checks whether any I2C Flag is set or not.
  174. * Input          : I2Cx ( I2C0 or I2C1 )
  175. *                  Access(DIRECT or INDIRECT)
  176. *                  Flag : the flag to be read
  177. *                  input 4: an (u8) variable needed in the case
  178. *                                     of the INDIRECT access
  179. * Return         : the NewState of the Flag (SET or RESET).
  180. *******************************************************************************/
  181. FlagStatus I2C_FlagStatus (I2C_TypeDef *I2Cx, RegisterAccess Access, I2C_Flags Flag,...);
  182. /*******************************************************************************
  183. * Function Name  :  I2C_FlagClear
  184. * Description    : Clears the I2C Flag passed as a parameter
  185. * Input          : I2Cx ( I2C0 or I2C1 )
  186. *                  Flag : the flag to be read
  187. *                  input3: an (u8) parameter needed in the case that the flag
  188. *                         to be cleared need a write in one register
  189. * Return         : None.
  190. *******************************************************************************/
  191. void I2C_FlagClear (I2C_TypeDef *I2Cx, I2C_Flags Flag,...);
  192. /*******************************************************************************
  193. * Function Name  : I2C_SpeedConfig
  194. * Description    : Selects I2C clock speed and configures its corresponding mode.
  195. * Input          : I2Cx ( I2C0 or I2C1 )
  196. *                  Clock: I2C expected clock in Hertz.
  197. * Return         : None.
  198. *******************************************************************************/
  199. void I2C_SpeedConfig (I2C_TypeDef *I2Cx, u32 Clock);
  200. /*******************************************************************************
  201. * Function Name  : I2C_AddressConfig
  202. * Description    : Defines the I2C bus address of the interface.
  203. * Input          : I2Cx ( I2C0 or I2C1 ).
  204. *                  Address: an u16 parameter indicating the address
  205. *                           of the interface.
  206. *                  Mode (I2C_Mode10,I2C_Mode7).
  207. * Return         : None.
  208. *******************************************************************************/
  209. void I2C_AddressConfig (I2C_TypeDef *I2Cx, u16 Address, I2C_Addressing Mode);
  210. /*******************************************************************************
  211. * Function Name  : I2C_FCLKConfig
  212. * Description    : Configures frequency bits according to RCLK frequency.
  213. *                  the I2C selected must be disabled
  214. * Input          : I2Cx ( I2C0 or I2C1 )
  215. * Return         : None.
  216. *******************************************************************************/
  217. void I2C_FCLKConfig (I2C_TypeDef *I2Cx);
  218. /*******************************************************************************
  219. * Function Name  : I2C_AddressSend
  220. * Description    : Transmits the address byte to select the slave device.
  221. * Input          : I2Cx ( I2C0 or I2C1 )
  222. *                  Address: an u16 parameter indicating the slave address
  223. *                  Mode (I2C_Mode10,I2C_Mode7).
  224. *                  Direction (I2C_RX,I2C_TX).
  225. * Return         : None.
  226. ********************************************************************************/
  227. void I2C_AddressSend (I2C_TypeDef *I2Cx, u16 Address, I2C_Addressing Mode, I2C_Direction Direction);
  228. /*******************************************************************************
  229. * Function Name  : I2C_ByteSend
  230. * Description    : Send a single byte of data.
  231. * Input          : I2Cx ( I2C0 or I2C1 )
  232. *                  Data : the byte to be sent to the slave
  233. * Return         : None.
  234. *******************************************************************************/
  235. void I2C_ByteSend (I2C_TypeDef *I2Cx, u8 Data);
  236. /*******************************************************************************
  237. * Function Name  : I2C_BufferSend
  238. * Description    : Send data from a buffer whose number of bytes is known
  239. * Input          : I2Cx ( I2C0 or I2C1 )
  240. *                  PtrToBuffer :pointer to the byte of buffer to be transmitted.
  241. *                  NbOfBytes:Number of byte of the buffer
  242. * Return         : I2C_Tx_Status :transmission status (I2C_TX_AF, I2C_TX_ARLO,
  243. *                  I2C_TX_BERR,I2C_TX_DATA_OK)
  244. *******************************************************************************/
  245. I2C_Tx_Status I2C_BufferSend (I2C_TypeDef *I2Cx, u8 *PtrToBuffer, u8 NbOfBytes);
  246. /*******************************************************************************
  247. * Function Name  : I2C_StringSend
  248. * Description    : Send data from a buffer
  249. * Input          : I2Cx ( I2C0 or I2C1 )
  250. *                  PtrToString :pointer to the string to be transmitted.
  251. * Return         : I2C_Tx_Status :transmission status (I2C_TX_AF, I2C_TX_ARLO,
  252. *                  I2C_TX_BERR,I2C_TX_DATA_OK)
  253. *******************************************************************************/
  254. I2C_Tx_Status I2C_StringSend (I2C_TypeDef *I2Cx, char *PtrToString);
  255. /*******************************************************************************
  256. * Function Name  : I2C_TransmissionStatus
  257. * Description    : Report the NewState of the transmission
  258. * Input          : I2Cx ( I2C0 or I2C1 )
  259. * Return         : I2C_Tx_Status :transmission status (I2C_TX_NO, I2C_TX_SB,
  260. *                   I2C_TX_AF, I2C_TX_ARLO, I2C_TX_BERR,I2C_TX_ADD_OK,
  261. *                   I2C_TX_DATA_OK,I2C_TX_ONGOING)
  262. *******************************************************************************/
  263. I2C_Tx_Status I2C_TransmissionStatus (I2C_TypeDef *I2Cx);
  264. /*******************************************************************************
  265. * Function Name  : I2C_ByteReceive
  266. * Description    : Returns the received byte.
  267. * Input          : I2Cx ( I2C0 or I2C1 )
  268. * Return         : the byte received
  269. *******************************************************************************/
  270. u8 I2C_ByteReceive (I2C_TypeDef *I2Cx);
  271. /*******************************************************************************
  272. * Function Name  : I2C_BufferReceive
  273. * Description    : received a buffer. and return the status of error.
  274. * Input          : I2Cx ( I2C0 or I2C1 )
  275. *                  PtrToBuffer :pointer to the byte of buffer received.
  276. *                  NbOfBytes:Number of byte to be received
  277. * Return         : I2C_Rx_Status:the NewState of the reception (,I2C_RX_AF,
  278. *                               I2C_RX_ARLO,I2C_RX_BERR, I2C_RX_DATA_OK)
  279. *******************************************************************************/
  280. I2C_Rx_Status I2C_BufferReceive (I2C_TypeDef *I2Cx, u8 *PtrToBuffer, u8 NbOfBytes);
  281. /*******************************************************************************
  282. * Function Name  :I2C_ReceptionStatus
  283. * Description    : Report the reception NewState.
  284. * Input          : I2Cx ( I2C0 or I2C1 )
  285. * Return         : I2C_Rx_Status:the NewState of the reception ( I2C_RX_NO,
  286. *                  I2C_RX_SB,I2C_RX_AF,I2C_RX_ARLO,I2C_RX_BERR,I2C_RX_ADD_OK,
  287. *                  I2C_RX_DATA_OK, I2C_RX_ONGOING)
  288. *******************************************************************************/
  289. I2C_Rx_Status I2C_ReceptionStatus (I2C_TypeDef *I2Cx);
  290. /*******************************************************************************
  291. * Function Name  : I2C_ErrorClear
  292. * Description    : Clears any error flags.
  293. * Input          : I2Cx ( I2C0 or I2C1 )
  294. * Return         : None.
  295. *******************************************************************************/
  296. inline void I2C_ErrorClear (I2C_TypeDef *I2Cx)
  297. {
  298.   // Clear all error flags by reading the SR2 register
  299.   (void)I2Cx->SR2;
  300. }
  301. /*******************************************************************************
  302. * Function Name  : I2C_ErrorClear
  303. * Description    : Clears any error flags.
  304. * Input          : I2Cx ( I2C0 or I2C1 )
  305. * Return         : None.
  306. *******************************************************************************/
  307. inline u16 I2C_GetStatus(I2C_TypeDef *I2Cx)
  308. {
  309.  return ((I2Cx->SR1|(I2Cx->SR2<<8))&0x3FFF)|((I2Cx->CR&0x04)<<14);
  310. }
  311. #endif /* __i2c_H */
  312. /******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/