hal_i2c.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
  17. ////////////////////////////////////////////////////////////////////////////////
  18. // Define to prevent recursive inclusion
  19. #ifndef __HAL_I2C_H
  20. #define __HAL_I2C_H
  21. // Files includes
  22. #include "types.h"
  23. #include "reg_i2c.h"
  24. ////////////////////////////////////////////////////////////////////////////////
  25. /// @addtogroup MM32_Hardware_Abstract_Layer
  26. /// @{
  27. ////////////////////////////////////////////////////////////////////////////////
  28. /// @defgroup I2C_HAL
  29. /// @brief I2C HAL modules
  30. /// @{
  31. ////////////////////////////////////////////////////////////////////////////////
  32. /// @defgroup I2C_Exported_Types
  33. /// @{
  34. ////////////////////////////////////////////////////////////////////////////////
  35. /// @defgroup DRV_Exported_Constants
  36. /// @{
  37. #define I2C_OWN_ADDRESS 0x20
  38. /// @}
  39. ////////////////////////////////////////////////////////////////////////////////
  40. /// @brief I2C Init structure definition
  41. ////////////////////////////////////////////////////////////////////////////////
  42. typedef struct {
  43. union {
  44. u16 Mode; ///< Specifies the I2C mode. This parameter can be a value of I2C_mode.
  45. u16 I2C_Mode;
  46. };
  47. union {
  48. u16 Speed; ///< Specifies the I2C speed. This parameter can be a value of I2C_speed.
  49. u16 I2C_Speed;
  50. };
  51. union {
  52. u16 OwnAddress; ///< Specifies the first device own address. This parameter can be a 7-bit or 10-bit address.
  53. u16 I2C_OwnAddress;
  54. };
  55. union {
  56. u32 ClockSpeed; ///< Specifies the clock speed.
  57. u32 I2C_ClockSpeed;
  58. };
  59. } I2C_InitTypeDef;
  60. /// @}
  61. ////////////////////////////////////////////////////////////////////////////////
  62. /// @defgroup I2C_Exported_Constants
  63. /// @{
  64. ////////////////////////////////////////////////////////////////////////////////
  65. /// @brief I2C DMA Direction
  66. ////////////////////////////////////////////////////////////////////////////////
  67. typedef enum {
  68. RDMAE_SET = 1, // 1 - DMA read
  69. TDMAE_SET // 2 - DMA transmit
  70. } I2C_DMA_Dir_TypeDef;
  71. ////////////////////////////////////////////////////////////////////////////////
  72. /// @brief I2C Transfer Direction
  73. ////////////////////////////////////////////////////////////////////////////////
  74. typedef enum {
  75. I2C_Direction_Transmitter, // I2C Transmitter
  76. I2C_Direction_Receiver // I2C Receiver
  77. } I2C_Trans_Dir_TypeDef;
  78. ////////////////////////////////////////////////////////////////////////////////
  79. /// @brief I2C Acknowledged Address
  80. ////////////////////////////////////////////////////////////////////////////////
  81. typedef enum {
  82. I2C_AcknowledgedAddress_7bit = 0x4000, // 7-bit address
  83. I2C_AcknowledgedAddress_10bit = 0xC000 // 10-bit address
  84. } I2C_ACKaddr_TypeDef;
  85. ////////////////////////////////////////////////////////////////////////////////
  86. /// @defgroup I2C_Private_Defines
  87. /// @{
  88. #define INTR_MASK ((u16)0xC000)
  89. #define FLAG_Mask ((u32)0x00793FFF)
  90. #define IC_TAR_ENDUAL_Set ((u16)0x1000)
  91. #define IC_TAR_ENDUAL_Reset ((u16)0xEFFF)
  92. /// @}
  93. ////////////////////////////////////////////////////////////////////////////////
  94. /// @defgroup I2C_modes
  95. /// @{
  96. #define TX_EMPTY_CTRL I2C_CR_EMPINT
  97. #define IC_SLAVE_DISABLE I2C_CR_SLAVEDIS
  98. #define IC_RESTART_EN I2C_CR_REPEN
  99. /// @}
  100. ////////////////////////////////////////////////////////////////////////////////
  101. /// @defgroup I2C_interrupts_definition
  102. /// @{
  103. #define I2C_IT_RX_UNDER ((u16)0x0001)
  104. #define I2C_IT_RX_OVER ((u16)0x0002)
  105. #define I2C_IT_RX_FULL ((u16)0x0004)
  106. #define I2C_IT_TX_OVER ((u16)0x0008)
  107. #define I2C_IT_TX_EMPTY ((u16)0x0010)
  108. #define I2C_IT_RD_REQ ((u16)0x0020)
  109. #define I2C_IT_TX_ABRT ((u16)0x0040)
  110. #define I2C_IT_RX_DONE ((u16)0x0080)
  111. #define I2C_IT_ACTIVITY ((u16)0x0100)
  112. #define I2C_IT_STOP_DET ((u16)0x0200)
  113. #define I2C_IT_START_DET ((u16)0x0400)
  114. #define I2C_IT_GEN_CALL ((u16)0x0800)
  115. /// @}
  116. ////////////////////////////////////////////////////////////////////////////////
  117. /// @defgroup I2C_flags_definition
  118. /// @{
  119. #define I2C_FLAG_RX_UNDER ((u16)0x0001)
  120. #define I2C_FLAG_RX_OVER ((u16)0x0002)
  121. #define I2C_FLAG_RX_FULL ((u16)0x0004)
  122. #define I2C_FLAG_TX_OVER ((u16)0x0008)
  123. #define I2C_FLAG_TX_EMPTY ((u16)0x0010)
  124. #define I2C_FLAG_RD_REQ ((u16)0x0020)
  125. #define I2C_FLAG_TX_ABRT ((u16)0x0040)
  126. #define I2C_FLAG_RX_DONE ((u16)0x0080)
  127. #define I2C_FLAG_ACTIVITY ((u16)0x0100)
  128. #define I2C_FLAG_STOP_DET ((u16)0x0200)
  129. #define I2C_FLAG_START_DET ((u16)0x0400)
  130. #define I2C_FLAG_GEN_CALL ((u16)0x0800)
  131. /// @}
  132. ////////////////////////////////////////////////////////////////////////////////
  133. /// @defgroup I2C_Events
  134. /// @{
  135. #define I2C_EVENT_RX_UNDER ((u16)0x0001)
  136. #define I2C_EVENT_RX_OVER ((u16)0x0002)
  137. #define I2C_EVENT_RX_FULL ((u16)0x0004)
  138. #define I2C_EVENT_TX_OVER ((u16)0x0008)
  139. #define I2C_EVENT_TX_EMPTY ((u16)0x0010)
  140. #define I2C_EVENT_RD_REQ ((u16)0x0020)
  141. #define I2C_EVENT_TX_ABRT ((u16)0x0040)
  142. #define I2C_EVENT_RX_DONE ((u16)0x0080)
  143. #define I2C_EVENT_ACTIVITY ((u16)0x0100)
  144. #define I2C_EVENT_STOP_DET ((u16)0x0200)
  145. #define I2C_EVENT_START_DET ((u16)0x0400)
  146. #define I2C_EVENT_GEN_CALL ((u16)0x0800)
  147. /// @}
  148. ////////////////////////////////////////////////////////////////////////////////
  149. /// @defgroup I2C_Statusflags_definition
  150. /// @{
  151. #define I2C_STATUS_FLAG_ACTIVITY ((u16)0x8001)
  152. #define I2C_STATUS_FLAG_TFNF ((u16)0x8002)
  153. #define I2C_STATUS_FLAG_TFE ((u16)0x8004)
  154. #define I2C_STATUS_FLAG_RFNE ((u16)0x8008)
  155. #define I2C_STATUS_FLAG_RFF ((u16)0x8010)
  156. #define I2C_STATUS_FLAG_M_ACTIVITY ((u16)0x8020)
  157. #define I2C_STATUS_FLAG_S_ACTIVITY ((u16)0x8040)
  158. /// @}
  159. #define IC_SLAVE_ENABLE (0x0000<<6)
  160. #define IC_7BITADDR_MASTER (0x0000<<4)
  161. #define IC_7BITADDR_SLAVE (0x0000<<3)
  162. #define I2C_Speed_STANDARD ((u16)0x0002)
  163. #define I2C_Speed_FAST ((u16)0x0004)
  164. #define I2C_Mode_MASTER ((u16)0x0001)
  165. #define I2C_Mode_SLAVE ((u16)0x0000)
  166. #define CMD_READ ((u16)0x0100)
  167. #define CMD_WRITE ((u16)0x0000)
  168. #define I2C_Mode_I2C ((u16)0x0000)
  169. /// @}
  170. ////////////////////////////////////////////////////////////////////////////////
  171. /// @defgroup I2C_Exported_Variables
  172. /// @{
  173. #ifdef _HAL_I2C_C_
  174. #define GLOBAL
  175. static u8 I2C_CMD_DIR = 0;
  176. u16 I2C_DMA_DIR = 0;
  177. #else
  178. #define GLOBAL extern
  179. #endif
  180. #undef GLOBAL
  181. /// @}
  182. ////////////////////////////////////////////////////////////////////////////////
  183. /// @defgroup I2C_Exported_Functions
  184. /// @{
  185. void I2C_DeInit(I2C_TypeDef* i2c);
  186. void I2C_Init(I2C_TypeDef* i2c, I2C_InitTypeDef* init_struct);
  187. void I2C_StructInit(I2C_InitTypeDef* init_struct);
  188. void I2C_Cmd(I2C_TypeDef* i2c, FunctionalState state);
  189. void I2C_DMACmd(I2C_TypeDef* i2c, FunctionalState state);
  190. void I2C_GenerateSTART(I2C_TypeDef* i2c, FunctionalState state);
  191. void I2C_GenerateSTOP(I2C_TypeDef* i2c, FunctionalState state);
  192. void I2C_OwnAddress2Config(I2C_TypeDef* i2c, u8 addr);
  193. void I2C_DualAddressCmd(I2C_TypeDef* i2c, FunctionalState state);
  194. void I2C_GeneralCallCmd(I2C_TypeDef* i2c, FunctionalState state);
  195. void I2C_ITConfig(I2C_TypeDef* i2c, u16 it, FunctionalState state);
  196. void I2C_SendData(I2C_TypeDef* i2c, u8 dat);
  197. void I2C_ReadCmd(I2C_TypeDef* i2c);
  198. void I2C_Send7bitAddress(I2C_TypeDef* i2c, u8 addr, u8 dir);
  199. void I2C_ClearFlag(I2C_TypeDef* i2c, u32 flag);
  200. void I2C_ClearITPendingBit(I2C_TypeDef* i2c, u32 it);
  201. u8 I2C_ReceiveData(I2C_TypeDef* i2c);
  202. u16 I2C_ReadRegister(I2C_TypeDef* i2c, u8 reg);
  203. u32 I2C_GetLastEvent(I2C_TypeDef* i2c);
  204. ErrorStatus I2C_CheckEvent(I2C_TypeDef* i2c, u32 event);
  205. FlagStatus I2C_GetFlagStatus(I2C_TypeDef* i2c, u32 flag);
  206. ITStatus I2C_GetITStatus(I2C_TypeDef* i2c, u32 it);
  207. ////////////////////////////////////////////////////////////////////////////////
  208. // Extended function interface
  209. ////////////////////////////////////////////////////////////////////////////////
  210. void I2C_SendSlaveAddress(I2C_TypeDef* i2c, u8 addr);
  211. void I2C_SlaveConfigure(I2C_TypeDef* i2c, FunctionalState state);
  212. void I2C_DMAConfigure(I2C_TypeDef* i2c, u8 dir);
  213. /// @}
  214. /// @}
  215. /// @}
  216. ////////////////////////////////////////////////////////////////////////////////
  217. #endif //__HAL_I2C_H
  218. ////////////////////////////////////////////////////////////////////////////////