gd32f30x_gpio.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  1. /*!
  2. \file gd32f30x_gpio.h
  3. \brief definitions for the GPIO
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-02-10, V1.0.1, firmware for GD32F30x
  8. */
  9. #ifndef GD32F30X_GPIO_H
  10. #define GD32F30X_GPIO_H
  11. #include "gd32f30x.h"
  12. /* GPIOx(x=A,B,C,D,E,F,G) definitions */
  13. #define GPIOA (GPIO_BASE + 0x00000000U)
  14. #define GPIOB (GPIO_BASE + 0x00000400U)
  15. #define GPIOC (GPIO_BASE + 0x00000800U)
  16. #define GPIOD (GPIO_BASE + 0x00000C00U)
  17. #define GPIOE (GPIO_BASE + 0x00001000U)
  18. #define GPIOF (GPIO_BASE + 0x00001400U)
  19. #define GPIOG (GPIO_BASE + 0x00001800U)
  20. /* AFIO definitions */
  21. #define AFIO AFIO_BASE
  22. /* registers definitions */
  23. /* GPIO registers definitions */
  24. #define GPIO_CTL0(gpiox) REG32((gpiox) + 0x00U) /*!< GPIO port control register 0 */
  25. #define GPIO_CTL1(gpiox) REG32((gpiox) + 0x04U) /*!< GPIO port control register 1 */
  26. #define GPIO_ISTAT(gpiox) REG32((gpiox) + 0x08U) /*!< GPIO port input status register */
  27. #define GPIO_OCTL(gpiox) REG32((gpiox) + 0x0CU) /*!< GPIO port output control register */
  28. #define GPIO_BOP(gpiox) REG32((gpiox) + 0x10U) /*!< GPIO port bit operation register */
  29. #define GPIO_BC(gpiox) REG32((gpiox) + 0x14U) /*!< GPIO bit clear register */
  30. #define GPIO_LOCK(gpiox) REG32((gpiox) + 0x18U) /*!< GPIO port configuration lock register */
  31. #define GPIOx_SPD(gpiox) REG32((gpiox) + 0x3CU) /*!< GPIO port bit speed register */
  32. /* AFIO registers definitions */
  33. #define AFIO_EC REG32(AFIO + 0x00U) /*!< AFIO event control register */
  34. #define AFIO_PCF0 REG32(AFIO + 0x04U) /*!< AFIO port configuration register 0 */
  35. #define AFIO_EXTISS0 REG32(AFIO + 0x08U) /*!< AFIO port EXTI sources selection register 0 */
  36. #define AFIO_EXTISS1 REG32(AFIO + 0x0CU) /*!< AFIO port EXTI sources selection register 1 */
  37. #define AFIO_EXTISS2 REG32(AFIO + 0x10U) /*!< AFIO port EXTI sources selection register 2 */
  38. #define AFIO_EXTISS3 REG32(AFIO + 0x14U) /*!< AFIO port EXTI sources selection register 3 */
  39. #define AFIO_PCF1 REG32(AFIO + 0x1CU) /*!< AFIO port configuration register 1 */
  40. #define AFIO_CPSCTL REG32(AFIO + 0x20U) /*!< IO compensation control register */
  41. /* bits definitions */
  42. /* GPIO_CTL0 */
  43. #define GPIO_CTL0_MD0 BITS(0,1) /*!< port 0 mode bits */
  44. #define GPIO_CTL0_CTL0 BITS(2,3) /*!< pin 0 configuration bits */
  45. #define GPIO_CTL0_MD1 BITS(4,5) /*!< port 1 mode bits */
  46. #define GPIO_CTL0_CTL1 BITS(6,7) /*!< pin 1 configuration bits */
  47. #define GPIO_CTL0_MD2 BITS(8,9) /*!< port 2 mode bits */
  48. #define GPIO_CTL0_CTL2 BITS(10,11) /*!< pin 2 configuration bits */
  49. #define GPIO_CTL0_MD3 BITS(12,13) /*!< port 3 mode bits */
  50. #define GPIO_CTL0_CTL3 BITS(14,15) /*!< pin 3 configuration bits */
  51. #define GPIO_CTL0_MD4 BITS(16,17) /*!< port 4 mode bits */
  52. #define GPIO_CTL0_CTL4 BITS(18,19) /*!< pin 4 configuration bits */
  53. #define GPIO_CTL0_MD5 BITS(20,21) /*!< port 5 mode bits */
  54. #define GPIO_CTL0_CTL5 BITS(22,23) /*!< pin 5 configuration bits */
  55. #define GPIO_CTL0_MD6 BITS(24,25) /*!< port 6 mode bits */
  56. #define GPIO_CTL0_CTL6 BITS(26,27) /*!< pin 6 configuration bits */
  57. #define GPIO_CTL0_MD7 BITS(28,29) /*!< port 7 mode bits */
  58. #define GPIO_CTL0_CTL7 BITS(30,31) /*!< pin 7 configuration bits */
  59. /* GPIO_CTL1 */
  60. #define GPIO_CTL1_MD8 BITS(0,1) /*!< port 8 mode bits */
  61. #define GPIO_CTL1_CTL8 BITS(2,3) /*!< pin 8 configuration bits */
  62. #define GPIO_CTL1_MD9 BITS(4,5) /*!< port 9 mode bits */
  63. #define GPIO_CTL1_CTL9 BITS(6,7) /*!< pin 9 configuration bits */
  64. #define GPIO_CTL1_MD10 BITS(8,9) /*!< port 10 mode bits */
  65. #define GPIO_CTL1_CTL10 BITS(10,11) /*!< pin 10 configuration bits */
  66. #define GPIO_CTL1_MD11 BITS(12,13) /*!< port 11 mode bits */
  67. #define GPIO_CTL1_CTL11 BITS(14,15) /*!< pin 11 configuration bits */
  68. #define GPIO_CTL1_MD12 BITS(16,17) /*!< port 12 mode bits */
  69. #define GPIO_CTL1_CTL12 BITS(18,19) /*!< pin 12 configuration bits */
  70. #define GPIO_CTL1_MD13 BITS(20,21) /*!< port 13 mode bits */
  71. #define GPIO_CTL1_CTL13 BITS(22,23) /*!< pin 13 configuration bits */
  72. #define GPIO_CTL1_MD14 BITS(24,25) /*!< port 14 mode bits */
  73. #define GPIO_CTL1_CTL14 BITS(26,27) /*!< pin 14 configuration bits */
  74. #define GPIO_CTL1_MD15 BITS(28,29) /*!< port 15 mode bits */
  75. #define GPIO_CTL1_CTL15 BITS(30,31) /*!< pin 15 configuration bits */
  76. /* GPIO_ISTAT */
  77. #define GPIO_ISTAT_ISTAT0 BIT(0) /*!< pin 0 input status */
  78. #define GPIO_ISTAT_ISTAT1 BIT(1) /*!< pin 1 input status */
  79. #define GPIO_ISTAT_ISTAT2 BIT(2) /*!< pin 2 input status */
  80. #define GPIO_ISTAT_ISTAT3 BIT(3) /*!< pin 3 input status */
  81. #define GPIO_ISTAT_ISTAT4 BIT(4) /*!< pin 4 input status */
  82. #define GPIO_ISTAT_ISTAT5 BIT(5) /*!< pin 5 input status */
  83. #define GPIO_ISTAT_ISTAT6 BIT(6) /*!< pin 6 input status */
  84. #define GPIO_ISTAT_ISTAT7 BIT(7) /*!< pin 7 input status */
  85. #define GPIO_ISTAT_ISTAT8 BIT(8) /*!< pin 8 input status */
  86. #define GPIO_ISTAT_ISTAT9 BIT(9) /*!< pin 9 input status */
  87. #define GPIO_ISTAT_ISTAT10 BIT(10) /*!< pin 10 input status */
  88. #define GPIO_ISTAT_ISTAT11 BIT(11) /*!< pin 11 input status */
  89. #define GPIO_ISTAT_ISTAT12 BIT(12) /*!< pin 12 input status */
  90. #define GPIO_ISTAT_ISTAT13 BIT(13) /*!< pin 13 input status */
  91. #define GPIO_ISTAT_ISTAT14 BIT(14) /*!< pin 14 input status */
  92. #define GPIO_ISTAT_ISTAT15 BIT(15) /*!< pin 15 input status */
  93. /* GPIO_OCTL */
  94. #define GPIO_OCTL_OCTL0 BIT(0) /*!< pin 0 output bit */
  95. #define GPIO_OCTL_OCTL1 BIT(1) /*!< pin 1 output bit */
  96. #define GPIO_OCTL_OCTL2 BIT(2) /*!< pin 2 output bit */
  97. #define GPIO_OCTL_OCTL3 BIT(3) /*!< pin 3 output bit */
  98. #define GPIO_OCTL_OCTL4 BIT(4) /*!< pin 4 output bit */
  99. #define GPIO_OCTL_OCTL5 BIT(5) /*!< pin 5 output bit */
  100. #define GPIO_OCTL_OCTL6 BIT(6) /*!< pin 6 output bit */
  101. #define GPIO_OCTL_OCTL7 BIT(7) /*!< pin 7 output bit */
  102. #define GPIO_OCTL_OCTL8 BIT(8) /*!< pin 8 output bit */
  103. #define GPIO_OCTL_OCTL9 BIT(9) /*!< pin 9 output bit */
  104. #define GPIO_OCTL_OCTL10 BIT(10) /*!< pin 10 output bit */
  105. #define GPIO_OCTL_OCTL11 BIT(11) /*!< pin 11 output bit */
  106. #define GPIO_OCTL_OCTL12 BIT(12) /*!< pin 12 output bit */
  107. #define GPIO_OCTL_OCTL13 BIT(13) /*!< pin 13 output bit */
  108. #define GPIO_OCTL_OCTL14 BIT(14) /*!< pin 14 output bit */
  109. #define GPIO_OCTL_OCTL15 BIT(15) /*!< pin 15 output bit */
  110. /* GPIO_BOP */
  111. #define GPIO_BOP_BOP0 BIT(0) /*!< pin 0 set bit */
  112. #define GPIO_BOP_BOP1 BIT(1) /*!< pin 1 set bit */
  113. #define GPIO_BOP_BOP2 BIT(2) /*!< pin 2 set bit */
  114. #define GPIO_BOP_BOP3 BIT(3) /*!< pin 3 set bit */
  115. #define GPIO_BOP_BOP4 BIT(4) /*!< pin 4 set bit */
  116. #define GPIO_BOP_BOP5 BIT(5) /*!< pin 5 set bit */
  117. #define GPIO_BOP_BOP6 BIT(6) /*!< pin 6 set bit */
  118. #define GPIO_BOP_BOP7 BIT(7) /*!< pin 7 set bit */
  119. #define GPIO_BOP_BOP8 BIT(8) /*!< pin 8 set bit */
  120. #define GPIO_BOP_BOP9 BIT(9) /*!< pin 9 set bit */
  121. #define GPIO_BOP_BOP10 BIT(10) /*!< pin 10 set bit */
  122. #define GPIO_BOP_BOP11 BIT(11) /*!< pin 11 set bit */
  123. #define GPIO_BOP_BOP12 BIT(12) /*!< pin 12 set bit */
  124. #define GPIO_BOP_BOP13 BIT(13) /*!< pin 13 set bit */
  125. #define GPIO_BOP_BOP14 BIT(14) /*!< pin 14 set bit */
  126. #define GPIO_BOP_BOP15 BIT(15) /*!< pin 15 set bit */
  127. #define GPIO_BOP_CR0 BIT(16) /*!< pin 0 clear bit */
  128. #define GPIO_BOP_CR1 BIT(17) /*!< pin 1 clear bit */
  129. #define GPIO_BOP_CR2 BIT(18) /*!< pin 2 clear bit */
  130. #define GPIO_BOP_CR3 BIT(19) /*!< pin 3 clear bit */
  131. #define GPIO_BOP_CR4 BIT(20) /*!< pin 4 clear bit */
  132. #define GPIO_BOP_CR5 BIT(21) /*!< pin 5 clear bit */
  133. #define GPIO_BOP_CR6 BIT(22) /*!< pin 6 clear bit */
  134. #define GPIO_BOP_CR7 BIT(23) /*!< pin 7 clear bit */
  135. #define GPIO_BOP_CR8 BIT(24) /*!< pin 8 clear bit */
  136. #define GPIO_BOP_CR9 BIT(25) /*!< pin 9 clear bit */
  137. #define GPIO_BOP_CR10 BIT(26) /*!< pin 10 clear bit */
  138. #define GPIO_BOP_CR11 BIT(27) /*!< pin 11 clear bit */
  139. #define GPIO_BOP_CR12 BIT(28) /*!< pin 12 clear bit */
  140. #define GPIO_BOP_CR13 BIT(29) /*!< pin 13 clear bit */
  141. #define GPIO_BOP_CR14 BIT(30) /*!< pin 14 clear bit */
  142. #define GPIO_BOP_CR15 BIT(31) /*!< pin 15 clear bit */
  143. /* GPIO_BC */
  144. #define GPIO_BC_CR0 BIT(0) /*!< pin 0 clear bit */
  145. #define GPIO_BC_CR1 BIT(1) /*!< pin 1 clear bit */
  146. #define GPIO_BC_CR2 BIT(2) /*!< pin 2 clear bit */
  147. #define GPIO_BC_CR3 BIT(3) /*!< pin 3 clear bit */
  148. #define GPIO_BC_CR4 BIT(4) /*!< pin 4 clear bit */
  149. #define GPIO_BC_CR5 BIT(5) /*!< pin 5 clear bit */
  150. #define GPIO_BC_CR6 BIT(6) /*!< pin 6 clear bit */
  151. #define GPIO_BC_CR7 BIT(7) /*!< pin 7 clear bit */
  152. #define GPIO_BC_CR8 BIT(8) /*!< pin 8 clear bit */
  153. #define GPIO_BC_CR9 BIT(9) /*!< pin 9 clear bit */
  154. #define GPIO_BC_CR10 BIT(10) /*!< pin 10 clear bit */
  155. #define GPIO_BC_CR11 BIT(11) /*!< pin 11 clear bit */
  156. #define GPIO_BC_CR12 BIT(12) /*!< pin 12 clear bit */
  157. #define GPIO_BC_CR13 BIT(13) /*!< pin 13 clear bit */
  158. #define GPIO_BC_CR14 BIT(14) /*!< pin 14 clear bit */
  159. #define GPIO_BC_CR15 BIT(15) /*!< pin 15 clear bit */
  160. /* GPIO_LOCK */
  161. #define GPIO_LOCK_LK0 BIT(0) /*!< pin 0 lock bit */
  162. #define GPIO_LOCK_LK1 BIT(1) /*!< pin 1 lock bit */
  163. #define GPIO_LOCK_LK2 BIT(2) /*!< pin 2 lock bit */
  164. #define GPIO_LOCK_LK3 BIT(3) /*!< pin 3 lock bit */
  165. #define GPIO_LOCK_LK4 BIT(4) /*!< pin 4 lock bit */
  166. #define GPIO_LOCK_LK5 BIT(5) /*!< pin 5 lock bit */
  167. #define GPIO_LOCK_LK6 BIT(6) /*!< pin 6 lock bit */
  168. #define GPIO_LOCK_LK7 BIT(7) /*!< pin 7 lock bit */
  169. #define GPIO_LOCK_LK8 BIT(8) /*!< pin 8 lock bit */
  170. #define GPIO_LOCK_LK9 BIT(9) /*!< pin 9 lock bit */
  171. #define GPIO_LOCK_LK10 BIT(10) /*!< pin 10 lock bit */
  172. #define GPIO_LOCK_LK11 BIT(11) /*!< pin 11 lock bit */
  173. #define GPIO_LOCK_LK12 BIT(12) /*!< pin 12 lock bit */
  174. #define GPIO_LOCK_LK13 BIT(13) /*!< pin 13 lock bit */
  175. #define GPIO_LOCK_LK14 BIT(14) /*!< pin 14 lock bit */
  176. #define GPIO_LOCK_LK15 BIT(15) /*!< pin 15 lock bit */
  177. #define GPIO_LOCK_LKK BIT(16) /*!< pin sequence lock key */
  178. /* GPIO_SPD */
  179. #define GPIO_SPD_SPD0 BIT(0) /*!< pin 0 set very high output speed when MDx is 0b11 */
  180. #define GPIO_SPD_SPD1 BIT(1) /*!< pin 1 set very high output speed when MDx is 0b11 */
  181. #define GPIO_SPD_SPD2 BIT(2) /*!< pin 2 set very high output speed when MDx is 0b11 */
  182. #define GPIO_SPD_SPD3 BIT(3) /*!< pin 3 set very high output speed when MDx is 0b11 */
  183. #define GPIO_SPD_SPD4 BIT(4) /*!< pin 4 set very high output speed when MDx is 0b11 */
  184. #define GPIO_SPD_SPD5 BIT(5) /*!< pin 5 set very high output speed when MDx is 0b11 */
  185. #define GPIO_SPD_SPD6 BIT(6) /*!< pin 6 set very high output speed when MDx is 0b11 */
  186. #define GPIO_SPD_SPD7 BIT(7) /*!< pin 7 set very high output speed when MDx is 0b11 */
  187. #define GPIO_SPD_SPD8 BIT(8) /*!< pin 8 set very high output speed when MDx is 0b11 */
  188. #define GPIO_SPD_SPD9 BIT(9) /*!< pin 9 set very high output speed when MDx is 0b11 */
  189. #define GPIO_SPD_SPD10 BIT(10) /*!< pin 10 set very high output speed when MDx is 0b11 */
  190. #define GPIO_SPD_SPD11 BIT(11) /*!< pin 11 set very high output speed when MDx is 0b11 */
  191. #define GPIO_SPD_SPD12 BIT(12) /*!< pin 12 set very high output speed when MDx is 0b11 */
  192. #define GPIO_SPD_SPD13 BIT(13) /*!< pin 13 set very high output speed when MDx is 0b11 */
  193. #define GPIO_SPD_SPD14 BIT(14) /*!< pin 14 set very high output speed when MDx is 0b11 */
  194. #define GPIO_SPD_SPD15 BIT(15) /*!< pin 15 set very high output speed when MDx is 0b11 */
  195. /* AFIO_EC */
  196. #define AFIO_EC_PIN BITS(0,3) /*!< event output pin selection */
  197. #define AFIO_EC_PORT BITS(4,6) /*!< event output port selection */
  198. #define AFIO_EC_EOE BIT(7) /*!< event output enable */
  199. /* AFIO_PCF0 */
  200. #ifdef GD32F30X_CL
  201. /* memory map and bit definitions for GD32F30X_CL devices */
  202. #define AFIO_PCF0_SPI0_REMAP BIT(0) /*!< SPI0 remapping */
  203. #define AFIO_PCF0_I2C0_REMAP BIT(1) /*!< I2C0 remapping */
  204. #define AFIO_PCF0_USART0_REMAP BIT(2) /*!< USART0 remapping */
  205. #define AFIO_PCF0_USART1_REMAP BIT(3) /*!< USART1 remapping */
  206. #define AFIO_PCF0_USART2_REMAP BITS(4,5) /*!< USART2 remapping */
  207. #define AFIO_PCF0_TIMER0_REMAP BITS(6,7) /*!< TIMER0 remapping */
  208. #define AFIO_PCF0_TIMER1_REMAP BITS(8,9) /*!< TIMER1 remapping */
  209. #define AFIO_PCF0_TIMER2_REMAP BITS(10,11) /*!< TIMER2 remapping */
  210. #define AFIO_PCF0_TIMER3_REMAP BIT(12) /*!< TIMER3 remapping */
  211. #define AFIO_PCF0_CAN0_REMAP BITS(13,14) /*!< CAN0 remapping */
  212. #define AFIO_PCF0_PD01_REMAP BIT(15) /*!< port D0/port D1 mapping on OSC_IN/OSC_OUT */
  213. #define AFIO_PCF0_TIMER4CH3_IREMAP BIT(16) /*!< TIMER4 channel3 internal remapping */
  214. #define AFIO_PCF0_ENET_REMAP BIT(21) /*!< ethernet MAC I/O remapping */
  215. #define AFIO_PCF0_CAN1_REMAP BIT(22) /*!< CAN1 remapping */
  216. #define AFIO_PCF0_ENET_PHY_SEL BIT(23) /*!< ethernet MII or RMII PHY selection */
  217. #define AFIO_PCF0_SWJ_CFG BITS(24,26) /*!< serial wire JTAG configuration */
  218. #define AFIO_PCF0_SPI2_REMAP BIT(28) /*!< SPI2/I2S2 remapping */
  219. #define AFIO_PCF0_TIMER1ITR0_REMAP BIT(29) /*!< TIMER1 internal trigger 0 remapping */
  220. #define AFIO_PCF0_PTP_PPS_REMAP BIT(30) /*!< ethernet PTP PPS remapping */
  221. #else
  222. /* memory map and bit definitions for GD32F30X_HD devices and GD32F30X_XD devices */
  223. #define AFIO_PCF0_SPI0_REMAP BIT(0) /*!< SPI0 remapping */
  224. #define AFIO_PCF0_I2C0_REMAP BIT(1) /*!< I2C0 remapping */
  225. #define AFIO_PCF0_USART0_REMAP BIT(2) /*!< USART0 remapping */
  226. #define AFIO_PCF0_USART1_REMAP BIT(3) /*!< USART1 remapping */
  227. #define AFIO_PCF0_USART2_REMAP BITS(4,5) /*!< USART2 remapping */
  228. #define AFIO_PCF0_TIMER0_REMAP BITS(6,7) /*!< TIMER0 remapping */
  229. #define AFIO_PCF0_TIMER1_REMAP BITS(8,9) /*!< TIMER1 remapping */
  230. #define AFIO_PCF0_TIMER2_REMAP BITS(10,11) /*!< TIMER2 remapping */
  231. #define AFIO_PCF0_TIMER3_REMAP BIT(12) /*!< TIMER3 remapping */
  232. #define AFIO_PCF0_CAN_REMAP BITS(13,14) /*!< CAN remapping */
  233. #define AFIO_PCF0_PD01_REMAP BIT(15) /*!< port D0/port D1 mapping on OSC_IN/OSC_OUT */
  234. #define AFIO_PCF0_TIMER4CH3_REMAP BIT(16) /*!< TIMER4 channel3 internal remapping */
  235. #define AFIO_PCF0_ADC0_ETRGINS_REMAP BIT(17) /*!< ADC 0 external trigger inserted conversion remapping */
  236. #define AFIO_PCF0_ADC0_ETRGREG_REMAP BIT(18) /*!< ADC 0 external trigger regular conversion remapping */
  237. #define AFIO_PCF0_ADC1_ETRGINS_REMAP BIT(19) /*!< ADC 1 external trigger inserted conversion remapping */
  238. #define AFIO_PCF0_ADC1_ETRGREG_REMAP BIT(20) /*!< ADC 1 external trigger regular conversion remapping */
  239. #define AFIO_PCF0_SWJ_CFG BITS(24,26) /*!< serial wire JTAG configuration */
  240. #endif /* GD32F30X_CL */
  241. /* AFIO_EXTISS0 */
  242. #define AFIO_EXTI0_SS BITS(0,3) /*!< EXTI 0 sources selection */
  243. #define AFIO_EXTI1_SS BITS(4,7) /*!< EXTI 1 sources selection */
  244. #define AFIO_EXTI2_SS BITS(8,11) /*!< EXTI 2 sources selection */
  245. #define AFIO_EXTI3_SS BITS(12,15) /*!< EXTI 3 sources selection */
  246. /* AFIO_EXTISS1 */
  247. #define AFIO_EXTI4_SS BITS(0,3) /*!< EXTI 4 sources selection */
  248. #define AFIO_EXTI5_SS BITS(4,7) /*!< EXTI 5 sources selection */
  249. #define AFIO_EXTI6_SS BITS(8,11) /*!< EXTI 6 sources selection */
  250. #define AFIO_EXTI7_SS BITS(12,15) /*!< EXTI 7 sources selection */
  251. /* AFIO_EXTISS2 */
  252. #define AFIO_EXTI8_SS BITS(0,3) /*!< EXTI 8 sources selection */
  253. #define AFIO_EXTI9_SS BITS(4,7) /*!< EXTI 9 sources selection */
  254. #define AFIO_EXTI10_SS BITS(8,11) /*!< EXTI 10 sources selection */
  255. #define AFIO_EXTI11_SS BITS(12,15) /*!< EXTI 11 sources selection */
  256. /* AFIO_EXTISS3 */
  257. #define AFIO_EXTI12_SS BITS(0,3) /*!< EXTI 12 sources selection */
  258. #define AFIO_EXTI13_SS BITS(4,7) /*!< EXTI 13 sources selection */
  259. #define AFIO_EXTI14_SS BITS(8,11) /*!< EXTI 14 sources selection */
  260. #define AFIO_EXTI15_SS BITS(12,15) /*!< EXTI 15 sources selection */
  261. /* AFIO_PCF1 */
  262. #define AFIO_PCF1_TIMER8_REMAP BIT(5) /*!< TIMER8 remapping */
  263. #define AFIO_PCF1_TIMER9_REMAP BIT(6) /*!< TIMER9 remapping */
  264. #define AFIO_PCF1_TIMER10_REMAP BIT(7) /*!< TIMER10 remapping */
  265. #define AFIO_PCF1_TIMER12_REMAP BIT(8) /*!< TIMER12 remapping */
  266. #define AFIO_PCF1_TIMER13_REMAP BIT(9) /*!< TIMER13 remapping */
  267. #define AFIO_PCF1_EXMC_NADV BIT(10) /*!< EXMC_NADV connect/disconnect */
  268. #define AFIO_PCF1_CTC_REMAP BITS(11,12) /*!< CTC remapping */
  269. /* AFIO_CPSCTL */
  270. #define AFIO_CPSCTL_CPS_EN BIT(0) /*!< I/O compensation cell enable */
  271. #define AFIO_CPSCTL_CPS_RDY BIT(8) /*!< I/O compensation cell is ready or not */
  272. /* constants definitions */
  273. typedef FlagStatus bit_status;
  274. /* GPIO mode values set */
  275. #define GPIO_MODE_SET(n, mode) ((uint32_t)((uint32_t)(mode) << (4U * (n))))
  276. #define GPIO_MODE_MASK(n) (0xFU << (4U * (n)))
  277. /* GPIO mode definitions */
  278. #define GPIO_MODE_AIN ((uint8_t)0x00U) /*!< analog input mode */
  279. #define GPIO_MODE_IN_FLOATING ((uint8_t)0x04U) /*!< floating input mode */
  280. #define GPIO_MODE_IPD ((uint8_t)0x28U) /*!< pull-down input mode */
  281. #define GPIO_MODE_IPU ((uint8_t)0x48U) /*!< pull-up input mode */
  282. #define GPIO_MODE_OUT_OD ((uint8_t)0x14U) /*!< GPIO output with open-drain */
  283. #define GPIO_MODE_OUT_PP ((uint8_t)0x10U) /*!< GPIO output with push-pull */
  284. #define GPIO_MODE_AF_OD ((uint8_t)0x1CU) /*!< AFIO output with open-drain */
  285. #define GPIO_MODE_AF_PP ((uint8_t)0x18U) /*!< AFIO output with push-pull */
  286. /* GPIO output max speed value */
  287. #define GPIO_OSPEED_10MHZ ((uint8_t)0x01U) /*!< output max speed 10MHz */
  288. #define GPIO_OSPEED_2MHZ ((uint8_t)0x02U) /*!< output max speed 2MHz */
  289. #define GPIO_OSPEED_50MHZ ((uint8_t)0x03U) /*!< output max speed 50MHz */
  290. #define GPIO_OSPEED_MAX ((uint8_t)0x04U) /*!< GPIO very high output speed, max speed more than 50MHz */
  291. /* GPIO event output port definitions */
  292. #define GPIO_EVENT_PORT_GPIOA ((uint8_t)0x00U) /*!< event output port A */
  293. #define GPIO_EVENT_PORT_GPIOB ((uint8_t)0x01U) /*!< event output port B */
  294. #define GPIO_EVENT_PORT_GPIOC ((uint8_t)0x02U) /*!< event output port C */
  295. #define GPIO_EVENT_PORT_GPIOD ((uint8_t)0x03U) /*!< event output port D */
  296. #define GPIO_EVENT_PORT_GPIOE ((uint8_t)0x04U) /*!< event output port E */
  297. /* GPIO output port source definitions */
  298. #define GPIO_PORT_SOURCE_GPIOA ((uint8_t)0x00U) /*!< output port source A */
  299. #define GPIO_PORT_SOURCE_GPIOB ((uint8_t)0x01U) /*!< output port source B */
  300. #define GPIO_PORT_SOURCE_GPIOC ((uint8_t)0x02U) /*!< output port source C */
  301. #define GPIO_PORT_SOURCE_GPIOD ((uint8_t)0x03U) /*!< output port source D */
  302. #define GPIO_PORT_SOURCE_GPIOE ((uint8_t)0x04U) /*!< output port source E */
  303. #define GPIO_PORT_SOURCE_GPIOF ((uint8_t)0x05U) /*!< output port source F */
  304. #define GPIO_PORT_SOURCE_GPIOG ((uint8_t)0x06U) /*!< output port source G */
  305. /* GPIO event output pin definitions */
  306. #define GPIO_EVENT_PIN_0 ((uint8_t)0x00U) /*!< GPIO event pin 0 */
  307. #define GPIO_EVENT_PIN_1 ((uint8_t)0x01U) /*!< GPIO event pin 1 */
  308. #define GPIO_EVENT_PIN_2 ((uint8_t)0x02U) /*!< GPIO event pin 2 */
  309. #define GPIO_EVENT_PIN_3 ((uint8_t)0x03U) /*!< GPIO event pin 3 */
  310. #define GPIO_EVENT_PIN_4 ((uint8_t)0x04U) /*!< GPIO event pin 4 */
  311. #define GPIO_EVENT_PIN_5 ((uint8_t)0x05U) /*!< GPIO event pin 5 */
  312. #define GPIO_EVENT_PIN_6 ((uint8_t)0x06U) /*!< GPIO event pin 6 */
  313. #define GPIO_EVENT_PIN_7 ((uint8_t)0x07U) /*!< GPIO event pin 7 */
  314. #define GPIO_EVENT_PIN_8 ((uint8_t)0x08U) /*!< GPIO event pin 8 */
  315. #define GPIO_EVENT_PIN_9 ((uint8_t)0x09U) /*!< GPIO event pin 9 */
  316. #define GPIO_EVENT_PIN_10 ((uint8_t)0x0AU) /*!< GPIO event pin 10 */
  317. #define GPIO_EVENT_PIN_11 ((uint8_t)0x0BU) /*!< GPIO event pin 11 */
  318. #define GPIO_EVENT_PIN_12 ((uint8_t)0x0CU) /*!< GPIO event pin 12 */
  319. #define GPIO_EVENT_PIN_13 ((uint8_t)0x0DU) /*!< GPIO event pin 13 */
  320. #define GPIO_EVENT_PIN_14 ((uint8_t)0x0EU) /*!< GPIO event pin 14 */
  321. #define GPIO_EVENT_PIN_15 ((uint8_t)0x0FU) /*!< GPIO event pin 15 */
  322. /* GPIO output pin source definitions */
  323. #define GPIO_PIN_SOURCE_0 ((uint8_t)0x00U) /*!< GPIO pin source 0 */
  324. #define GPIO_PIN_SOURCE_1 ((uint8_t)0x01U) /*!< GPIO pin source 1 */
  325. #define GPIO_PIN_SOURCE_2 ((uint8_t)0x02U) /*!< GPIO pin source 2 */
  326. #define GPIO_PIN_SOURCE_3 ((uint8_t)0x03U) /*!< GPIO pin source 3 */
  327. #define GPIO_PIN_SOURCE_4 ((uint8_t)0x04U) /*!< GPIO pin source 4 */
  328. #define GPIO_PIN_SOURCE_5 ((uint8_t)0x05U) /*!< GPIO pin source 5 */
  329. #define GPIO_PIN_SOURCE_6 ((uint8_t)0x06U) /*!< GPIO pin source 6 */
  330. #define GPIO_PIN_SOURCE_7 ((uint8_t)0x07U) /*!< GPIO pin source 7 */
  331. #define GPIO_PIN_SOURCE_8 ((uint8_t)0x08U) /*!< GPIO pin source 8 */
  332. #define GPIO_PIN_SOURCE_9 ((uint8_t)0x09U) /*!< GPIO pin source 9 */
  333. #define GPIO_PIN_SOURCE_10 ((uint8_t)0x0AU) /*!< GPIO pin source 10 */
  334. #define GPIO_PIN_SOURCE_11 ((uint8_t)0x0BU) /*!< GPIO pin source 11 */
  335. #define GPIO_PIN_SOURCE_12 ((uint8_t)0x0CU) /*!< GPIO pin source 12 */
  336. #define GPIO_PIN_SOURCE_13 ((uint8_t)0x0DU) /*!< GPIO pin source 13 */
  337. #define GPIO_PIN_SOURCE_14 ((uint8_t)0x0EU) /*!< GPIO pin source 14 */
  338. #define GPIO_PIN_SOURCE_15 ((uint8_t)0x0FU) /*!< GPIO pin source 15 */
  339. /* GPIO pin definitions */
  340. #define GPIO_PIN_0 BIT(0) /*!< GPIO pin 0 */
  341. #define GPIO_PIN_1 BIT(1) /*!< GPIO pin 1 */
  342. #define GPIO_PIN_2 BIT(2) /*!< GPIO pin 2 */
  343. #define GPIO_PIN_3 BIT(3) /*!< GPIO pin 3 */
  344. #define GPIO_PIN_4 BIT(4) /*!< GPIO pin 4 */
  345. #define GPIO_PIN_5 BIT(5) /*!< GPIO pin 5 */
  346. #define GPIO_PIN_6 BIT(6) /*!< GPIO pin 6 */
  347. #define GPIO_PIN_7 BIT(7) /*!< GPIO pin 7 */
  348. #define GPIO_PIN_8 BIT(8) /*!< GPIO pin 8 */
  349. #define GPIO_PIN_9 BIT(9) /*!< GPIO pin 9 */
  350. #define GPIO_PIN_10 BIT(10) /*!< GPIO pin 10 */
  351. #define GPIO_PIN_11 BIT(11) /*!< GPIO pin 11 */
  352. #define GPIO_PIN_12 BIT(12) /*!< GPIO pin 12 */
  353. #define GPIO_PIN_13 BIT(13) /*!< GPIO pin 13 */
  354. #define GPIO_PIN_14 BIT(14) /*!< GPIO pin 14 */
  355. #define GPIO_PIN_15 BIT(15) /*!< GPIO pin 15 */
  356. #define GPIO_PIN_ALL BITS(0,15) /*!< GPIO pin all */
  357. /* GPIO remap definitions */
  358. #define GPIO_SPI0_REMAP ((uint32_t)0x00000001U) /*!< SPI0 remapping */
  359. #define GPIO_I2C0_REMAP ((uint32_t)0x00000002U) /*!< I2C0 remapping */
  360. #define GPIO_USART0_REMAP ((uint32_t)0x00000004U) /*!< USART0 remapping */
  361. #define GPIO_USART1_REMAP ((uint32_t)0x00000008U) /*!< USART1 remapping */
  362. #define GPIO_USART2_PARTIAL_REMAP ((uint32_t)0x00140010U) /*!< USART2 partial remapping */
  363. #define GPIO_USART2_FULL_REMAP ((uint32_t)0x00140030U) /*!< USART2 full remapping */
  364. #define GPIO_TIMER0_PARTIAL_REMAP ((uint32_t)0x00160040U) /*!< TIMER0 partial remapping */
  365. #define GPIO_TIMER0_FULL_REMAP ((uint32_t)0x001600C0U) /*!< TIMER0 full remapping */
  366. #define GPIO_TIMER1_PARTIAL_REMAP0 ((uint32_t)0x00180100U) /*!< TIMER1 partial remapping */
  367. #define GPIO_TIMER1_PARTIAL_REMAP1 ((uint32_t)0x00180200U) /*!< TIMER1 partial remapping */
  368. #define GPIO_TIMER1_FULL_REMAP ((uint32_t)0x00180300U) /*!< TIMER1 full remapping */
  369. #define GPIO_TIMER2_PARTIAL_REMAP ((uint32_t)0x001A0800U) /*!< TIMER2 partial remapping */
  370. #define GPIO_TIMER2_FULL_REMAP ((uint32_t)0x001A0C00U) /*!< TIMER2 full remapping */
  371. #define GPIO_TIMER3_REMAP ((uint32_t)0x00001000U) /*!< TIMER3 remapping */
  372. #define GPIO_PD01_REMAP ((uint32_t)0x00008000U) /*!< PD01 remapping */
  373. #if (defined(GD32F30X_HD) || defined(GD32F30X_XD))
  374. #define GPIO_CAN_PARTIAL_REMAP ((uint32_t)0x001D4000U) /*!< CAN partial remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */
  375. #define GPIO_CAN_FULL_REMAP ((uint32_t)0x001D6000U) /*!< CAN full remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */
  376. #endif /* GD32F30X_HD||GD32F30X_XD */
  377. #if (defined(GD32F30X_CL) || defined(GD32F30X_HD))
  378. #define GPIO_TIMER4CH3_IREMAP ((uint32_t)0x00200001U) /*!< TIMER4 channel3 internal remapping(only for GD32F30X_CL devices and GD32F30X_HD devices) */
  379. #endif /* GD32F30X_CL||GD32F30X_HD */
  380. #if (defined(GD32F30X_HD) || defined(GD32F30X_XD))
  381. #define GPIO_ADC0_ETRGINS_REMAP ((uint32_t)0x00200002U) /*!< ADC0 external trigger inserted conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */
  382. #define GPIO_ADC0_ETRGREG_REMAP ((uint32_t)0x00200004U) /*!< ADC0 external trigger regular conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */
  383. #define GPIO_ADC1_ETRGINS_REMAP ((uint32_t)0x00200008U) /*!< ADC1 external trigger inserted conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */
  384. #define GPIO_ADC1_ETRGREG_REMAP ((uint32_t)0x00200010U) /*!< ADC1 external trigger regular conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */
  385. #endif /* GD32F30X_HD||GD32F30X_XD */
  386. #define GPIO_SWJ_NONJTRST_REMAP ((uint32_t)0x00300100U) /*!< full SWJ(JTAG-DP + SW-DP),but without NJTRST */
  387. #define GPIO_SWJ_SWDPENABLE_REMAP ((uint32_t)0x00300200U) /*!< JTAG-DP disabled and SW-DP enabled */
  388. #define GPIO_SWJ_DISABLE_REMAP ((uint32_t)0x00300400U) /*!< JTAG-DP disabled and SW-DP disabled */
  389. #ifdef GD32F30X_CL
  390. #define GPIO_CAN0_PARTIAL_REMAP ((uint32_t)0x001D4000U) /*!< CAN0 partial remapping(only for GD32F30X_CL devices) */
  391. #define GPIO_CAN0_FULL_REMAP ((uint32_t)0x001D6000U) /*!< CAN0 full remapping(only for GD32F30X_CL devices) */
  392. #define GPIO_ENET_REMAP ((uint32_t)0x00200020U) /*!< ENET remapping(only for GD32F30X_CL devices) */
  393. #define GPIO_CAN1_REMAP ((uint32_t)0x00200040U) /*!< CAN1 remapping(only for GD32F30X_CL devices) */
  394. #define GPIO_SPI2_REMAP ((uint32_t)0x00201100U) /*!< SPI2 remapping(only for GD32F30X_CL devices) */
  395. #define GPIO_TIMER1ITR0_REMAP ((uint32_t)0x00202000U) /*!< TIMER1 internal trigger 0 remapping(only for GD32F30X_CL devices) */
  396. #define GPIO_PTP_PPS_REMAP ((uint32_t)0x00204000U) /*!< ethernet PTP PPS remapping(only for GD32F30X_CL devices) */
  397. #endif /* GD32F30X_CL */
  398. #define GPIO_TIMER8_REMAP ((uint32_t)0x80000020U) /*!< TIMER8 remapping */
  399. #define GPIO_TIMER9_REMAP ((uint32_t)0x80000040U) /*!< TIMER9 remapping */
  400. #define GPIO_TIMER10_REMAP ((uint32_t)0x80000080U) /*!< TIMER10 remapping */
  401. #define GPIO_TIMER12_REMAP ((uint32_t)0x80000100U) /*!< TIMER12 remapping */
  402. #define GPIO_TIMER13_REMAP ((uint32_t)0x80000200U) /*!< TIMER13 remapping */
  403. #define GPIO_EXMC_NADV_REMAP ((uint32_t)0x80000400U) /*!< EXMC_NADV connect/disconnect */
  404. #define GPIO_CTC_REMAP0 ((uint32_t)0x801B0800U) /*!< CTC remapping(PD15)*/
  405. #define GPIO_CTC_REMAP1 ((uint32_t)0x801B1000U) /*!< CTC remapping(PF0) */
  406. #ifdef GD32F30X_CL
  407. /* ethernet MII or RMII PHY selection */
  408. #define GPIO_ENET_PHY_MII ((uint32_t)0x00000000U) /*!< configure ethernet MAC for connection with an MII PHY */
  409. #define GPIO_ENET_PHY_RMII AFIO_PCF0_ENET_PHY_SEL /*!< configure ethernet MAC for connection with an RMII PHY */
  410. #endif /* GD32F30X_CL */
  411. /* I/O compensation cell enable/disable */
  412. #define GPIO_COMPENSATION_ENABLE AFIO_CPSCTL_CPS_EN /*!< I/O compensation cell is enable */
  413. #define GPIO_COMPENSATION_DISABLE ((uint32_t)0x00000000U) /*!< I/O compensation cell is disable */
  414. /* function declarations */
  415. /* reset GPIO port */
  416. void gpio_deinit(uint32_t gpio_periph);
  417. /* reset alternate function I/O(AFIO) */
  418. void gpio_afio_deinit(void);
  419. /* GPIO parameter initialization */
  420. void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin);
  421. /* set GPIO pin bit */
  422. void gpio_bit_set(uint32_t gpio_periph, uint32_t pin);
  423. /* reset GPIO pin bit */
  424. void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin);
  425. /* write data to the specified GPIO pin */
  426. void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value);
  427. /* write data to the specified GPIO port */
  428. void gpio_port_write(uint32_t gpio_periph, uint16_t data);
  429. /* get GPIO pin input status */
  430. FlagStatus gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin);
  431. /* get GPIO port input status */
  432. uint16_t gpio_input_port_get(uint32_t gpio_periph);
  433. /* get GPIO pin output status */
  434. FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin);
  435. /* get GPIO port output status */
  436. uint16_t gpio_output_port_get(uint32_t gpio_periph);
  437. /* lock GPIO pin bit */
  438. void gpio_pin_lock(uint32_t gpio_periph, uint32_t pin);
  439. /* configure GPIO pin event output */
  440. void gpio_event_output_config(uint8_t output_port, uint8_t output_pin);
  441. /* enable GPIO pin event output */
  442. void gpio_event_output_enable(void);
  443. /* disable GPIO pin event output */
  444. void gpio_event_output_disable(void);
  445. /* select GPIO pin exti sources */
  446. void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin);
  447. #ifdef GD32F30X_CL
  448. /* select ethernet MII or RMII PHY */
  449. void gpio_ethernet_phy_select(uint32_t enet_sel);
  450. #endif /* GD32F30X_CL */
  451. /* configure GPIO pin remap */
  452. void gpio_pin_remap_config(uint32_t gpio_remap, ControlStatus newvalue);
  453. /* configure the I/O compensation cell */
  454. void gpio_compensation_config(uint32_t compensation);
  455. /* check the I/O compensation cell is ready or not */
  456. FlagStatus gpio_compensation_flag_get(void);
  457. #endif /* GD32F30X_GPIO_H */