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.

250 lines
7.8 KiB

4 years ago
  1. /*********************************************************
  2. *Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. *: lib_gpio.h
  4. * : AE Team
  5. * : V1.01
  6. * : 2021/06/09
  7. * : GPIO模块库函头文件
  8. * :
  9. 使
  10. **********************************************************/
  11. #ifndef __LIB_GPIO_H__
  12. #define __LIB_GPIO_H__
  13. #include <stdint.h>
  14. #include "ES8P5066.h"
  15. #include "type.h"
  16. /* GPIO引脚编号 */
  17. typedef enum
  18. {
  19. GPIO_Pin_B0 = 0,
  20. GPIO_Pin_B1 = 1,
  21. GPIO_Pin_B8 = 8,
  22. GPIO_Pin_B9 = 9,
  23. GPIO_Pin_B10 = 10,
  24. GPIO_Pin_B11 = 11,
  25. GPIO_Pin_B12 = 12,
  26. GPIO_Pin_B13 = 13,
  27. GPIO_Pin_A1 = 15,
  28. GPIO_Pin_A2 = 16,
  29. GPIO_Pin_A3 = 17,
  30. GPIO_Pin_A4 = 18,
  31. GPIO_Pin_A5 = 19,
  32. GPIO_Pin_A6 = 20,
  33. GPIO_Pin_A7 = 21,
  34. GPIO_Pin_A8 = 22,
  35. GPIO_Pin_A9 = 23,
  36. GPIO_Pin_A10 = 24,
  37. GPIO_Pin_A11 = 25,
  38. GPIO_Pin_A12 = 26,
  39. GPIO_Pin_A13 = 27,
  40. GPIO_Pin_A14 = 28,
  41. GPIO_Pin_A15 = 29,
  42. GPIO_Pin_A16 = 30,
  43. GPIO_Pin_A22 = 36,
  44. GPIO_Pin_A23 = 37,
  45. GPIO_Pin_A24 = 38,
  46. GPIO_Pin_A25 = 39,
  47. GPIO_Pin_A27 = 41,
  48. GPIO_Pin_A28 = 42,
  49. } GPIO_Pin;
  50. /* 引脚复用功能选择 */
  51. typedef enum
  52. {
  53. GPIO_Reuse_Func0 = 0, /* 引脚复用功能0 */
  54. GPIO_Reuse_Func1 = 1, /* 引脚复用功能1 */
  55. GPIO_Reuse_Func2 = 2, /* 引脚复用功能2 */
  56. GPIO_Reuse_Func3 = 3, /* 引脚复用功能3 */
  57. } GPIO_Reuse_Func;
  58. /* 引脚方向选择 */
  59. typedef enum
  60. {
  61. GPIO_Direction_Output = 0, /* 输出方向 */
  62. GPIO_Direction_Input = 1, /* 输入方向 */
  63. } GPIO_Direction;
  64. /* 引脚输出开漏使能位 */
  65. typedef enum
  66. {
  67. GPIO_ODE_Output_Disable = 0, /* 开漏禁止 */
  68. GPIO_ODE_Output_Enable = 1, /* 开漏使能 */
  69. } GPIO_ODE_Output;
  70. /* 引脚输出电流驱动能力选择 */
  71. typedef enum
  72. {
  73. GPIO_DS_Output_Normal = 0, /* 普通电流输出 */
  74. GPIO_DS_Output_Strong = 1, /* 强电流输出 */
  75. } GPIO_DS_Output;
  76. /* 引脚输入弱上拉使能 */
  77. typedef enum
  78. {
  79. GPIO_PUE_Input_Disable = 0, /* 弱上拉禁止 */
  80. GPIO_PUE_Input_Enable = 1, /* 弱上拉使能 */
  81. } GPIO_PUE_Input;
  82. /* 引脚输入弱下拉使能 */
  83. typedef enum
  84. {
  85. GPIO_PDE_Input_Disable = 0, /* 弱下拉禁止 */
  86. GPIO_PDE_Input_Enable = 1, /* 弱下拉使能 */
  87. } GPIO_PDE_Input;
  88. /* 引脚信号类型 */
  89. typedef enum
  90. {
  91. GPIO_Pin_Signal_Digital = 0, /* 数字信号引脚 */
  92. GPIO_Pin_Signal_Analog = 1, /* 模拟信号引脚 */
  93. } GPIO_Pin_Signal;
  94. /* 引脚类型 */
  95. typedef enum
  96. {
  97. GPIO_Pin_CMOS = 0, /* CMOS引脚 */
  98. GPIO_Pin_TTL = 1, /* TTL引脚 */
  99. } GPIO_Pin_Type;
  100. /* 引脚滤波使能 */
  101. typedef enum
  102. {
  103. GPIO_FLT_Disable = 0, /* 端口滤波禁止 */
  104. GPIO_FLT_Enable = 1, /* 端口滤波使能 */
  105. } GPIO_Pin_FLT;
  106. /* GPIO初始化配置结构定义 */
  107. typedef struct
  108. {
  109. GPIO_Pin_Signal Signal; /* 引脚上的信号类型,只有模拟和数字两种 */
  110. GPIO_Direction Dir; /* 数字引脚时,引脚输入、输出方向选择 */
  111. GPIO_Reuse_Func Func; /* 数字引脚时,引脚复用功能选择 */
  112. GPIO_ODE_Output ODE; /* 数字引脚、输出方向时,开漏输出选择 */
  113. GPIO_DS_Output DS; /* 数字引脚、输出方向时,电流输出大小选择 */
  114. GPIO_PUE_Input PUE; /* 数字引脚、输入方向时,弱上拉选择 */
  115. GPIO_PDE_Input PDE; /* 数字引脚、输入方向时,弱下拉选择 */
  116. } GPIO_InitSettingType;
  117. /* 外部端口中断使能 */
  118. typedef enum
  119. {
  120. PINT_IE_Set_Disable = 0, /* 中断禁止 */
  121. PINT_IE_Set_Enable = 1, /* 中断使能 */
  122. } PINT_IE_Set;
  123. /* 外部端口中断触发方式 */
  124. typedef enum
  125. {
  126. PINT_Trigger_Rising_Edge = 0, /* 上升沿触发中断 */
  127. PINT_Trigger_Trailing_Edge = 1, /* 下降沿触发中断 */
  128. PINT_Trigger_High_Level = 2, /* 高电平触发中断 */
  129. PINT_Trigger_Low_Level = 3, /* 低电平触发中断 */
  130. PINT_Trigger_Both_Edge = 4, /* 上升沿和下降沿都触发中断 */
  131. } PINT_Trigger_Style;
  132. /* 外部端口初始化配置结构定义 */
  133. typedef struct
  134. {
  135. PINT_IE_Set IE_Set; /* 中断是否使能 */
  136. PINT_Trigger_Style Trigger_Style; /* 中断触发方式 */
  137. } PINT_InitSettingType;
  138. /* KINT中断使能 */
  139. typedef enum
  140. {
  141. KINT_IE_Set_Disable = 0, /* 中断禁止 */
  142. KINT_IE_Set_Enable = 1, /* 中断使能 */
  143. } KINT_IE_Set;
  144. /* KINT中断方式 */
  145. typedef enum
  146. {
  147. KINT_Trigger_Rising_Edge = 0, /* 上升沿触发中断 */
  148. KINT_Trigger_Trailing_Edge = 1, /* 下降沿触发中断 */
  149. KINT_Trigger_High_Level = 2, /* 高电平触发中断 */
  150. KINT_Trigger_Low_Level = 3, /* 低电平触发中断 */
  151. KINT_Trigger_Both_Edge = 4, /* 上升沿和下降沿都触发中断 */
  152. } KINT_Trigger_Style;
  153. /* KINT初始化配置结构定义 */
  154. typedef struct
  155. {
  156. KINT_IE_Set IE_Set; /* 中断是否使能 */
  157. KINT_Trigger_Style Trigger_Style; /* 中断触发方式 */
  158. } KINT_InitSettingType;
  159. /* 脉宽调制电平 */
  160. typedef enum
  161. {
  162. UART_TXPLV_Low = 0x0, /* 脉宽调制电平:低 */
  163. UART_TXPLV_High = 0x1, /* 脉宽调制电平:高 */
  164. } UART_TYPE_TXPLV;
  165. /* 脉宽PWM脉冲选择 */
  166. typedef enum
  167. {
  168. UART_TX0PS_NO = 0x0, /* 脉宽PWM脉冲选择:非调制输出 */
  169. UART_TX0PS_T16N0Out0 = 0x1, /* 脉宽PWM脉冲选择:T16N1OUT0 */
  170. UART_TX0PS_T16N0Out1 = 0x2, /* 脉宽PWM脉冲选择:T16N1OUT1 */
  171. UART_TX0PS_BUZ = 0x3, /* 脉宽PWM脉冲选择:BUZ,需要固定38K输出 */
  172. } UART_TYPE_TX0PS;
  173. typedef enum
  174. {
  175. UART_TX1PS_NO = 0x0, /* 脉宽PWM脉冲选择:非调制输出 */
  176. UART_TX1PS_T16N1Out0 = 0x1, /* 脉宽PWM脉冲选择:T16N1OUT0 */
  177. UART_TX1PS_T16N1Out1 = 0x2, /* 脉宽PWM脉冲选择:T16N1OUT1 */
  178. UART_TX1PS_BUZ = 0x3, /* 脉宽PWM脉冲选择:BUZ,需要固定38K输出 */
  179. } UART_TYPE_TX1PS;
  180. /*调制波形输出管脚配置*/
  181. typedef enum
  182. {
  183. UART_TYPE_E0TX0 = 0, /* E0TX0管脚输出 */
  184. UART_TYPE_T16N1OUT0 = 1, /* T16N1OUT0管脚输出 */
  185. UART_TYPE_T16N1OUT1 = 2, /* T16N1OUT1管脚输出 */
  186. UART_TYPE_TX1BUZ = 3, /* BUZ管脚输出 */
  187. } UART_TYPE_TX1Sx;
  188. typedef enum
  189. {
  190. UART_TYPE_TXD0 = 0, /* TXD0管脚输出 */
  191. UART_TYPE_T16N0OUT0 = 1, /* T16N0OUT0管脚输出 */
  192. UART_TYPE_T16N0OUT1 = 2, /* T16N0OUT1管脚输出 */
  193. UART_TYPE_TX0BUZ = 3, /* BUZ管脚输出 */
  194. } UART_TYPE_TX0Sx;
  195. /********************* GPIO模块函数声明 *********************/
  196. void GPIO_Init(GPIO_Pin Pin, GPIO_InitSettingType *InitSet);
  197. uint32_t GPIO_ReadBit(GPIO_Pin Pin);
  198. void GPIO_WriteBit(GPIO_Pin Pin, uint32_t value);
  199. void GPIO_SetBit(GPIO_Pin Pin);
  200. void GPIO_ResetBit(GPIO_Pin Pin);
  201. void GPIO_ToggleBit(GPIO_Pin Pin);
  202. void PINT_Init(GPIO_Pin Pin, PINT_InitSettingType *InitSet);
  203. void PINT_ClearITFlag(GPIO_Pin Pin);
  204. uint32_t PINT_GetITStatus(GPIO_Pin Pin);
  205. uint32_t PINT_GetITFlag(GPIO_Pin Pin);
  206. void PINT_SetPMASK(GPIO_Pin Pin, PINT_IE_Set IE);
  207. uint32_t PINT_GetPMASK(GPIO_Pin Pin);
  208. void KINT_Init(GPIO_Pin Pin, KINT_InitSettingType *InitSet);
  209. void KINT_ClearITFlag(GPIO_Pin Pin);
  210. uint32_t KINT_GetITStatus(GPIO_Pin Pin);
  211. uint32_t KINT_GetITFlag(GPIO_Pin Pin);
  212. void KINT_SetKMASK(GPIO_Pin Pin, KINT_IE_Set IE);
  213. uint32_t KINT_GetKMASK(GPIO_Pin Pin);
  214. void GPIO_TX0Config(UART_TYPE_TXPLV Plv, UART_TYPE_TX0PS Ps, UART_TYPE_TX0Sx TX0Sx, TYPE_FUNCEN NewState);
  215. #endif