You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
7.5 KiB

4 years ago
  1. /*********************************************************
  2. *Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *: lib_iic.h
  4. * : AE Team
  5. * : V1.01
  6. * : 2021/06/09
  7. * : IIC模块库函数头文件
  8. * :
  9. 使
  10. **********************************************************/
  11. #ifndef __LIBIIC_H__
  12. #define __LIBIIC_H__
  13. #include "ES8P5066.h"
  14. #include "type.h"
  15. /* 引脚输出模式 */
  16. typedef enum
  17. {
  18. IIC_PinMode_PP = 0x0, /* 推挽 */
  19. IIC_PinMode_OD = 0x1, /* 开漏 */
  20. } IIC_TYPE_PINOD;
  21. /* 工作模式 */
  22. typedef enum
  23. {
  24. IIC_Mode_Master = 0x0, /* 主控模式 */
  25. IIC_Mode_Slave = 0x1, /* 从动模式 */
  26. } IIC_TYPE_MODE;
  27. /* 延迟时间 */
  28. typedef enum
  29. {
  30. IIC_AckDelay_0P5 = 0x0, /* 0.5个时钟周期 */
  31. IIC_AckDelay_1 = 0x1, /* 1个时钟周期 */
  32. IIC_AckDelay_1P5 = 0x2, /* 1.5个时钟周期 */
  33. IIC_AckDelay_2 = 0x3, /* 2个时钟周期 */
  34. IIC_AckDelay_2P5 = 0x4, /* 2.5个时钟周期 */
  35. IIC_AckDelay_3 = 0x5, /* 3个时钟周期 */
  36. IIC_AckDelay_3P5 = 0x6, /* 3.5个时钟周期 */
  37. IIC_AckDelay_4 = 0x7, /* 4个时钟周期 */
  38. } IIC_TYPE_ADLY;
  39. /* 接收模式 */
  40. typedef enum
  41. {
  42. IIC_RecMode_0 = 0x0, /* 接收1个字节,发送ACK */
  43. IIC_RecMode_1 = 0x1, /* 接收1个字节,发送NACK */
  44. IIC_RecMode_2 = 0x2, /* 接收2个字节,发送ACK */
  45. IIC_RecMode_3 = 0x3, /* 接收2个字节,前发送ACK,后发送NACK */
  46. IIC_RecMode_4 = 0x4, /* 接收4个字节,每字节发送ACK */
  47. IIC_RecMode_5 = 0x5, /* 接收4个字节,前3字节发送ACK,后NACK */
  48. IIC_RecMode_6 = 0x6, /* 连续接收,每个字节发ACK */
  49. IIC_RecMode_7 = 0x7, /* 完成该字节接收发NACK */
  50. } IIC_TYPE_RECMODE;
  51. /* 传输间隔 */
  52. typedef enum
  53. {
  54. IIC_TIS_Disable = 0x0, /* 传输间隔0 */
  55. IIC_TIS_1 = 0x1, /* 传输间隔1 */
  56. IIC_TIS_2 = 0x2, /* 传输间隔2 */
  57. IIC_TIS_3 = 0x3, /* 传输间隔3 */
  58. IIC_TIS_4 = 0x4, /* 传输间隔4 */
  59. IIC_TIS_5 = 0x5, /* 传输间隔5 */
  60. IIC_TIS_6 = 0x6, /* 传输间隔6 */
  61. IIC_TIS_7 = 0x7, /* 传输间隔7 */
  62. IIC_TIS_8 = 0x8, /* 传输间隔8 */
  63. IIC_TIS_9 = 0x9, /* 传输间隔9 */
  64. IIC_TIS_A = 0xA, /* 传输间隔10 */
  65. IIC_TIS_B = 0xB, /* 传输间隔11 */
  66. IIC_TIS_C = 0xC, /* 传输间隔12 */
  67. IIC_TIS_D = 0xD, /* 传输间隔13 */
  68. IIC_TIS_E = 0xE, /* 传输间隔14 */
  69. IIC_TIS_F = 0xF, /* 传输间隔15 */
  70. } IIC_TYPE_TIS;
  71. /* 初始化结构体 */
  72. typedef struct
  73. {
  74. IIC_TYPE_PINOD IIC_SckOd; /* SCK输出模式 */
  75. IIC_TYPE_PINOD IIC_SdaOd; /* SDA输出模式 */
  76. TYPE_FUNCEN IIC_16XSamp; /* 16倍采样使能位 */
  77. uint32_t IIC_Clk; /* IIC频率 */
  78. IIC_TYPE_MODE IIC_Mode; /* IIC工作模式 */
  79. TYPE_FUNCEN IIC_AutoStop; /* 自动停止 */
  80. TYPE_FUNCEN IIC_AutoCall; /* 自动寻呼 */
  81. } IIC_InitStruType;
  82. /* 发送缓冲器空/接收缓冲器满中断类型 */
  83. typedef enum
  84. {
  85. IIC_TRBIM_Byte = 0x0, /* 字节中断 */
  86. IIC_TRBIM_HalfWord = 0x1, /* 半字中断 */
  87. IIC_TRBIM_Word = 0x2, /* 字中断 */
  88. } IIC_TYPE_TRBIM;
  89. /* 工作模式 */
  90. typedef enum
  91. {
  92. IIC_Mode_Write = 0x0, /* 写 */
  93. IIC_Mode_Read = 0x1, /* 读 */
  94. } IIC_TYPE_RWMODE;
  95. /* 中断使能标志位 */
  96. typedef enum
  97. {
  98. IIC_IT_SR = (1 << 0), /* 起始位中断 */
  99. IIC_IT_SP = (1 << 1), /* 停止位中断 */
  100. IIC_IT_TB = (1 << 2), /* 发送缓冲空中断 */
  101. IIC_IT_RB = (1 << 3), /* 接收缓冲满中断 */
  102. IIC_IT_TE = (1 << 4), /* 发送数据错误中断 */
  103. IIC_IT_RO = (1 << 5), /* 接收数据溢出中断 */
  104. IIC_IT_NA = (1 << 6), /* 未应答NACK中断 */
  105. IIC_IT_TBWE = (1 << 7), /* 发送数据写错误中断 */
  106. IIC_IT_TIDLE = (1 << 12), /* 空闲中断中断 */
  107. } IIC_TYPE_IT;
  108. /* 中断标志位 */
  109. typedef enum
  110. {
  111. IIC_IF_SR = (1 << 0), /* 起始位中断 */
  112. IIC_IF_SP = (1 << 1), /* 停止位中断 */
  113. IIC_IF_TB = (1 << 2), /* 发送缓冲器空位中断 */
  114. IIC_IF_RB = (1 << 3), /* 接收缓冲器满中断 */
  115. IIC_IF_TE = (1 << 4), /* 发送数据错误中断 */
  116. IIC_IF_RO = (1 << 5), /* 接收数据溢出中断 */
  117. IIC_IF_NA = (1 << 6), /* 未应答NACK中断 */
  118. IIC_IF_TBWE = (1 << 7), /* 发送数据写错误中断 */
  119. IIC_IF_TIDLE = (1 << 12), /* 空闲中断 */
  120. } IIC_TYPE_IF;
  121. /* 清除中断标志位类型 */
  122. typedef enum
  123. {
  124. IIC_CLR_SR = (1 << 0), /* 起始位中断 */
  125. IIC_CLR_SP = (1 << 1), /* 停止位中断 */
  126. IIC_CLR_TE = (1 << 4), /* 发送数据错误中断 */
  127. IIC_CLR_RO = (1 << 5), /* 接收数据溢出中断 */
  128. IIC_CLR_NA = (1 << 6), /* 未应答NACK中断 */
  129. IIC_CLR_TBWE = (1 << 7), /* 发送数据写错误中断 */
  130. IIC_CLR_TIDLE = (1 << 12), /* 空闲中断 */
  131. } IIC_CLR_IF;
  132. #define IIC0_Enable() (I2C0->CON.EN = 1)
  133. #define IIC0_Disable() (I2C0->CON.EN = 0)
  134. #define IIC0_Reset() (I2C0->CON.RST = 1)
  135. #define IIC0_TJEnable() (I2C0->CON.TJE = 1)
  136. #define IIC0_TJDisable() (I2C0->CON.TJE = 0)
  137. #define IIC0_Read() (I2C0->CON.RW = 1)
  138. #define IIC0_Write() (I2C0->CON.RW = 0)
  139. #define IIC0_CSEnable() (I2C0->MOD.CSE = 1)
  140. #define IIC0_CSDisable() (I2C0->MOD.CSE = 0)
  141. #define IIC0_ANAEnable() (I2C0->MOD.ANAE = 1)
  142. #define IIC0_ANADisable() (I2C0->MOD.ANAE = 0)
  143. #define IIC0_SRAEnable() (I2C0->MOD.SRAE = 1)
  144. #define IIC0_SRADisable() (I2C0->MOD.SRAE = 0)
  145. #define IIC0_SPAEnable() (I2C0->MOD.SPAE = 1)
  146. #define IIC0_SPADisable() (I2C0->MOD.SPAE = 0)
  147. #define IIC0_SRTrigger() (I2C0->MOD.SRT = 1)
  148. #define IIC0_SPTrigger() (I2C0->MOD.SPT = 1)
  149. #define IIC0_RDTrigger() (I2C0->MOD.RDT = 1)
  150. #define IIC0_Release() (I2C0->MOD.BLD = 1)
  151. #define IIC0_TACK() (I2C0->MOD.TAS = 0)
  152. #define IIC0_TNACK() (I2C0->MOD.TAS = 1)
  153. void IIC_Init(I2C_TypeDef *IICx, IIC_InitStruType *IIC_InitStruct);
  154. void IIC_ITConfig(I2C_TypeDef *IICx, IIC_TYPE_IT IIC_IT, TYPE_FUNCEN NewState);
  155. void IIC_SendAddress(I2C_TypeDef *IICx, uint8_t IIC_Address, IIC_TYPE_RWMODE Mode);
  156. void IIC_SetAddress(I2C_TypeDef *IICx, uint8_t IIC_Address);
  157. void IIC_RecModeConfig(I2C_TypeDef *IICx, IIC_TYPE_RECMODE RecType);
  158. void IIC_TBIMConfig(I2C_TypeDef *IICx, IIC_TYPE_TRBIM Type);
  159. void IIC_RBIMConfig(I2C_TypeDef *IICx, IIC_TYPE_TRBIM Type);
  160. void IIC_AckDelay(I2C_TypeDef *IICx, IIC_TYPE_ADLY Type, TYPE_FUNCEN NewStatus);
  161. void IIC_TISConfig(I2C_TypeDef *IICx, IIC_TYPE_TIS Time);
  162. void IIC_SendByte(I2C_TypeDef *IICx, uint8_t Byte);
  163. void IIC_SendHalfWord(I2C_TypeDef *IICx, uint16_t HalfWord);
  164. void IIC_SendWord(I2C_TypeDef *IICx, uint32_t Word);
  165. uint8_t IIC_RecByte(I2C_TypeDef *IICx);
  166. uint16_t IIC_RecHalfWord(I2C_TypeDef *IICx);
  167. uint32_t IIC_RecWord(I2C_TypeDef *IICx);
  168. IIC_TYPE_RWMODE IIC_GetRWMode(I2C_TypeDef *IICx);
  169. FlagStatus IIC_GetTBStatus(I2C_TypeDef *IICx);
  170. FlagStatus IIC_GetFlagStatus(I2C_TypeDef *IICx, IIC_TYPE_IF IIC_Flag);
  171. FlagStatus IIC_GetITStatus(I2C_TypeDef *IICx, IIC_TYPE_IT IIC_Flag);
  172. void IIC_ClearITPendingBit(I2C_TypeDef *IICx, IIC_CLR_IF IIC_IT);
  173. #endif