CH57x_gpio.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. /********************************** (C) COPYRIGHT *******************************
  2. * File Name : CH57x_gpio.c
  3. * Author : WCH
  4. * Version : V1.0
  5. * Date : 2018/12/15
  6. * Description
  7. *******************************************************************************/
  8. #include "CH57x_common.h"
  9. /*******************************************************************************
  10. * Function Name : GPIOA_ModeCfg
  11. * Description : GPIOA端口引脚模式配置
  12. * Input : pin: PA0-PA15
  13. GPIO_Pin_0 - GPIO_Pin_15
  14. mode:
  15. GPIO_ModeIN_Floating - 浮空输入
  16. GPIO_ModeIN_PU - 上拉输入
  17. GPIO_ModeIN_PD - 下拉输入
  18. GPIO_ModeOut_PP_5mA - 推挽输出最大5mA
  19. GPIO_ModeOut_PP_20mA - 推挽输出最大20mA
  20. * Return : None
  21. *******************************************************************************/
  22. void GPIOA_ModeCfg( UINT32 pin, GPIOModeTypeDef mode )
  23. {
  24. switch(mode)
  25. {
  26. case GPIO_ModeIN_Floating:
  27. R32_PA_PD_DRV &= ~pin;
  28. R32_PA_PU &= ~pin;
  29. R32_PA_DIR &= ~pin;
  30. break;
  31. case GPIO_ModeIN_PU:
  32. R32_PA_PD_DRV &= ~pin;
  33. R32_PA_PU |= pin;
  34. R32_PA_DIR &= ~pin;
  35. break;
  36. case GPIO_ModeIN_PD:
  37. R32_PA_PD_DRV |= pin;
  38. R32_PA_PU &= ~pin;
  39. R32_PA_DIR &= ~pin;
  40. break;
  41. case GPIO_ModeOut_PP_5mA:
  42. R32_PA_PD_DRV &= ~pin;
  43. R32_PA_DIR |= pin;
  44. break;
  45. case GPIO_ModeOut_PP_20mA:
  46. R32_PA_PD_DRV |= pin;
  47. R32_PA_DIR |= pin;
  48. break;
  49. default:
  50. break;
  51. }
  52. }
  53. /*******************************************************************************
  54. * Function Name : GPIOB_ModeCfg
  55. * Description : GPIOB端口引脚模式配置
  56. * Input : pin: PB0-PB23
  57. GPIO_Pin_0 - GPIO_Pin_23
  58. mode:
  59. GPIO_ModeIN_Floating - 浮空输入
  60. GPIO_ModeIN_PU - 上拉输入
  61. GPIO_ModeIN_PD - 下拉输入
  62. GPIO_ModeOut_PP_5mA - 推挽输出最大5mA
  63. GPIO_ModeOut_PP_20mA - 推挽输出最大20mA
  64. * Return : None
  65. *******************************************************************************/
  66. void GPIOB_ModeCfg( UINT32 pin, GPIOModeTypeDef mode )
  67. {
  68. switch(mode)
  69. {
  70. case GPIO_ModeIN_Floating:
  71. R32_PB_PD_DRV &= ~pin;
  72. R32_PB_PU &= ~pin;
  73. R32_PB_DIR &= ~pin;
  74. break;
  75. case GPIO_ModeIN_PU:
  76. R32_PB_PD_DRV &= ~pin;
  77. R32_PB_PU |= pin;
  78. R32_PB_DIR &= ~pin;
  79. break;
  80. case GPIO_ModeIN_PD:
  81. R32_PB_PD_DRV |= pin;
  82. R32_PB_PU &= ~pin;
  83. R32_PB_DIR &= ~pin;
  84. break;
  85. case GPIO_ModeOut_PP_5mA:
  86. R32_PB_PD_DRV &= ~pin;
  87. R32_PB_DIR |= pin;
  88. break;
  89. case GPIO_ModeOut_PP_20mA:
  90. R32_PB_PD_DRV |= pin;
  91. R32_PB_DIR |= pin;
  92. break;
  93. default:
  94. break;
  95. }
  96. }
  97. /*******************************************************************************
  98. * Function Name : GPIOA_ITModeCfg
  99. * Description : GPIOA引脚中断模式配置
  100. * Input : pin: PA0-PA15
  101. GPIO_Pin_0 - GPIO_Pin_15
  102. mode:
  103. GPIO_ITMode_LowLevel - 低电平触发
  104. GPIO_ITMode_HighLevel - 高电平触发
  105. GPIO_ITMode_FallEdge - 下降沿触发
  106. GPIO_ITMode_RiseEdge - 上升沿触发
  107. * Return : None
  108. *******************************************************************************/
  109. void GPIOA_ITModeCfg( UINT32 pin, GPIOITModeTpDef mode )
  110. {
  111. switch( mode )
  112. {
  113. case GPIO_ITMode_LowLevel: // 低电平触发
  114. R16_PA_INT_MODE &= ~pin;
  115. R32_PA_CLR |= pin;
  116. break;
  117. case GPIO_ITMode_HighLevel: // 高电平触发
  118. R16_PA_INT_MODE &= ~pin;
  119. R32_PA_OUT |= pin;
  120. break;
  121. case GPIO_ITMode_FallEdge: // 下降沿触发
  122. R16_PA_INT_MODE |= pin;
  123. R32_PA_CLR |= pin;
  124. break;
  125. case GPIO_ITMode_RiseEdge: // 上升沿触发
  126. R16_PA_INT_MODE |= pin;
  127. R32_PA_OUT |= pin;
  128. break;
  129. default :
  130. break;
  131. }
  132. R16_PA_INT_IF = pin;
  133. R16_PA_INT_EN |= pin;
  134. }
  135. /*******************************************************************************
  136. * Function Name : GPIOB_ITModeCfg
  137. * Description : GPIOB引脚中断模式配置
  138. * Input : pin: PB0-PB15
  139. GPIO_Pin_0 - GPIO_Pin_15
  140. mode:
  141. GPIO_ITMode_LowLevel - 低电平触发
  142. GPIO_ITMode_HighLevel - 高电平触发
  143. GPIO_ITMode_FallEdge - 下降沿触发
  144. GPIO_ITMode_RiseEdge - 上升沿触发
  145. * Return : None
  146. *******************************************************************************/
  147. void GPIOB_ITModeCfg( UINT32 pin, GPIOITModeTpDef mode )
  148. {
  149. switch( mode )
  150. {
  151. case GPIO_ITMode_LowLevel: // 低电平触发
  152. R16_PB_INT_MODE &= ~pin;
  153. R32_PB_CLR |= pin;
  154. break;
  155. case GPIO_ITMode_HighLevel: // 高电平触发
  156. R16_PB_INT_MODE &= ~pin;
  157. R32_PB_OUT |= pin;
  158. break;
  159. case GPIO_ITMode_FallEdge: // 下降沿触发
  160. R16_PB_INT_MODE |= pin;
  161. R32_PB_CLR |= pin;
  162. break;
  163. case GPIO_ITMode_RiseEdge: // 上升沿触发
  164. R16_PB_INT_MODE |= pin;
  165. R32_PB_OUT |= pin;
  166. break;
  167. default :
  168. break;
  169. }
  170. R16_PB_INT_IF = pin;
  171. R16_PB_INT_EN |= pin;
  172. }
  173. /*******************************************************************************
  174. * Function Name : GPIOPinRemap
  175. * Description : 外设功能引脚映射
  176. * Input : s:
  177. ENABLE - 引脚映射
  178. DISABLE - 默认引脚
  179. perph:
  180. RB_PIN_SPI0 - SPI0: PA12/PA13/PA14/PA15 -> PB12/PB13/PB14/PB15
  181. RB_PIN_UART3 - UART3: PA4/PA5 -> PB20/PB21
  182. RB_PIN_UART2 - UART2: PA6/PA7 -> PB22/PB23
  183. RB_PIN_UART1 - UART1: PA8/PA9 -> PB8/PB9
  184. RB_PIN_UART0 - UART0: PB4/PB7 -> PA15/PA14
  185. RB_PIN_TMR3 - TMR3: PA2 -> PB18
  186. RB_PIN_TMR2 - TMR2: PA11 -> PB11
  187. RB_PIN_TMR1 - TMR1: PA10 -> PB10
  188. RB_PIN_TMR0 - TMR0: PA3 -> PB19
  189. * Return : None
  190. *******************************************************************************/
  191. void GPIOPinRemap( UINT8 s, UINT16 perph )
  192. {
  193. if( s ) R16_PIN_ALTERNATE |= perph;
  194. else R16_PIN_ALTERNATE &= ~perph;
  195. }
  196. /*******************************************************************************
  197. * Function Name : GPIOAGPPCfg
  198. * Description : 模拟外设GPIO引脚功能控制
  199. * Input : s:
  200. ENABLE - 打开模拟外设功能,关闭数字功能
  201. DISABLE - 启用数字功能,关闭模拟外设功能
  202. perph:
  203. RB_PIN_ADC0_1_IE - ADC0-1通道
  204. RB_PIN_ADC2_3_IE - ADC2-3通道
  205. RB_PIN_ADC4_5_IE - ADC4-5通道
  206. RB_PIN_ADC6_7_IE - ADC6-7通道
  207. RB_PIN_ADC8_9_IE - ADC8-9通道
  208. RB_PIN_ADC10_11_IE - ADC10-11通道
  209. RB_PIN_ADC12_13_IE - ADC12-13通道
  210. RB_PIN_XT32K_IE - 外部32K引脚
  211. RB_PIN_USB_IE - USB功能信号引脚
  212. RB_PIN_ETH_IE - 以太网功能信号引脚
  213. RB_PIN_SEG0_3_IE - LCD控制器SEG0-3驱动引脚
  214. RB_PIN_SEG4_7_IE - LCD控制器SEG4-7驱动引脚
  215. RB_PIN_SEG8_11_IE - LCD控制器SEG8-11驱动引脚
  216. RB_PIN_SEG12_15_IE - LCD控制器SEG12-15驱动引脚
  217. RB_PIN_SEG16_19_IE - LCD控制器SEG16-19驱动引脚
  218. RB_PIN_SEG20_23_IE - LCD控制器SEG20-23驱动引脚
  219. * Return : None
  220. *******************************************************************************/
  221. void GPIOAGPPCfg( UINT8 s, UINT16 perph )
  222. {
  223. if( s ) R16_PIN_ANALOG_IE |= perph;
  224. else R16_PIN_ANALOG_IE &= ~perph;
  225. }