lib_i2c.h 7.9 KB

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