gd32f3x0_gpio.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. /*!
  2. \file gd32f3x0_gpio.h
  3. \brief definitions for the GPIO
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-06-06, V1.0.0, firmware for GD32F3x0
  8. */
  9. #ifndef GD32F3X0_GPIO_H
  10. #define GD32F3X0_GPIO_H
  11. #include "gd32f3x0.h"
  12. /* GPIOx(x=A,B,C,D,F) 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 GPIOF (GPIO_BASE + 0x00001400U)
  18. /* registers definitions */
  19. #define GPIO_CTL(gpiox) REG32((gpiox) + 0x00U) /*!< GPIO port control register */
  20. #define GPIO_OMODE(gpiox) REG32((gpiox) + 0x04U) /*!< GPIO port output mode register */
  21. #define GPIO_OSPD0(gpiox) REG32((gpiox) + 0x08U) /*!< GPIO port output speed register 0 */
  22. #define GPIO_PUD(gpiox) REG32((gpiox) + 0x0CU) /*!< GPIO port pull-up/pull-down register */
  23. #define GPIO_ISTAT(gpiox) REG32((gpiox) + 0x10U) /*!< GPIO port input status register */
  24. #define GPIO_OCTL(gpiox) REG32((gpiox) + 0x14U) /*!< GPIO port output control register */
  25. #define GPIO_BOP(gpiox) REG32((gpiox) + 0x18U) /*!< GPIO port bit operation register */
  26. #define GPIO_LOCK(gpiox) REG32((gpiox) + 0x1CU) /*!< GPIO port configuration lock register */
  27. #define GPIO_AFSEL0(gpiox) REG32((gpiox) + 0x20U) /*!< GPIO alternate function selected register 0 */
  28. #define GPIO_AFSEL1(gpiox) REG32((gpiox) + 0x24U) /*!< GPIO alternate function selected register 1 */
  29. #define GPIO_BC(gpiox) REG32((gpiox) + 0x28U) /*!< GPIO bit clear register */
  30. #define GPIO_TG(gpiox) REG32((gpiox) + 0x2CU) /*!< GPIO port bit toggle register */
  31. #define GPIO_OSPD1(gpiox) REG32((gpiox) + 0x3CU) /*!< GPIO port output speed register 1 */
  32. /* bits definitions */
  33. /* GPIO_CTL */
  34. #define GPIO_CTL_CTL0 BITS(0,1) /*!< pin 0 configuration bits */
  35. #define GPIO_CTL_CTL1 BITS(2,3) /*!< pin 1 configuration bits */
  36. #define GPIO_CTL_CTL2 BITS(4,5) /*!< pin 2 configuration bits */
  37. #define GPIO_CTL_CTL3 BITS(6,7) /*!< pin 3 configuration bits */
  38. #define GPIO_CTL_CTL4 BITS(8,9) /*!< pin 4 configuration bits */
  39. #define GPIO_CTL_CTL5 BITS(10,11) /*!< pin 5 configuration bits */
  40. #define GPIO_CTL_CTL6 BITS(12,13) /*!< pin 6 configuration bits */
  41. #define GPIO_CTL_CTL7 BITS(14,15) /*!< pin 7 configuration bits */
  42. #define GPIO_CTL_CTL8 BITS(16,17) /*!< pin 8 configuration bits */
  43. #define GPIO_CTL_CTL9 BITS(18,19) /*!< pin 9 configuration bits */
  44. #define GPIO_CTL_CTL10 BITS(20,21) /*!< pin 10 configuration bits */
  45. #define GPIO_CTL_CTL11 BITS(22,23) /*!< pin 11 configuration bits */
  46. #define GPIO_CTL_CTL12 BITS(24,25) /*!< pin 12 configuration bits */
  47. #define GPIO_CTL_CTL13 BITS(26,27) /*!< pin 13 configuration bits */
  48. #define GPIO_CTL_CTL14 BITS(28,29) /*!< pin 14 configuration bits */
  49. #define GPIO_CTL_CTL15 BITS(30,31) /*!< pin 15 configuration bits */
  50. /* GPIO_OMODE */
  51. #define GPIO_OMODE_OM0 BIT(0) /*!< pin 0 output mode bit */
  52. #define GPIO_OMODE_OM1 BIT(1) /*!< pin 1 output mode bit */
  53. #define GPIO_OMODE_OM2 BIT(2) /*!< pin 2 output mode bit */
  54. #define GPIO_OMODE_OM3 BIT(3) /*!< pin 3 output mode bit */
  55. #define GPIO_OMODE_OM4 BIT(4) /*!< pin 4 output mode bit */
  56. #define GPIO_OMODE_OM5 BIT(5) /*!< pin 5 output mode bit */
  57. #define GPIO_OMODE_OM6 BIT(6) /*!< pin 6 output mode bit */
  58. #define GPIO_OMODE_OM7 BIT(7) /*!< pin 7 output mode bit */
  59. #define GPIO_OMODE_OM8 BIT(8) /*!< pin 8 output mode bit */
  60. #define GPIO_OMODE_OM9 BIT(9) /*!< pin 9 output mode bit */
  61. #define GPIO_OMODE_OM10 BIT(10) /*!< pin 10 output mode bit */
  62. #define GPIO_OMODE_OM11 BIT(11) /*!< pin 11 output mode bit */
  63. #define GPIO_OMODE_OM12 BIT(12) /*!< pin 12 output mode bit */
  64. #define GPIO_OMODE_OM13 BIT(13) /*!< pin 13 output mode bit */
  65. #define GPIO_OMODE_OM14 BIT(14) /*!< pin 14 output mode bit */
  66. #define GPIO_OMODE_OM15 BIT(15) /*!< pin 15 output mode bit */
  67. /* GPIO_OSPD0 */
  68. #define GPIO_OSPD0_OSPD0 BITS(0,1) /*!< pin 0 output max speed bits */
  69. #define GPIO_OSPD0_OSPD1 BITS(2,3) /*!< pin 1 output max speed bits */
  70. #define GPIO_OSPD0_OSPD2 BITS(4,5) /*!< pin 2 output max speed bits */
  71. #define GPIO_OSPD0_OSPD3 BITS(6,7) /*!< pin 3 output max speed bits */
  72. #define GPIO_OSPD0_OSPD4 BITS(8,9) /*!< pin 4 output max speed bits */
  73. #define GPIO_OSPD0_OSPD5 BITS(10,11) /*!< pin 5 output max speed bits */
  74. #define GPIO_OSPD0_OSPD6 BITS(12,13) /*!< pin 6 output max speed bits */
  75. #define GPIO_OSPD0_OSPD7 BITS(14,15) /*!< pin 7 output max speed bits */
  76. #define GPIO_OSPD0_OSPD8 BITS(16,17) /*!< pin 8 output max speed bits */
  77. #define GPIO_OSPD0_OSPD9 BITS(18,19) /*!< pin 9 output max speed bits */
  78. #define GPIO_OSPD0_OSPD10 BITS(20,21) /*!< pin 10 output max speed bits */
  79. #define GPIO_OSPD0_OSPD11 BITS(22,23) /*!< pin 11 output max speed bits */
  80. #define GPIO_OSPD0_OSPD12 BITS(24,25) /*!< pin 12 output max speed bits */
  81. #define GPIO_OSPD0_OSPD13 BITS(26,27) /*!< pin 13 output max speed bits */
  82. #define GPIO_OSPD0_OSPD14 BITS(28,29) /*!< pin 14 output max speed bits */
  83. #define GPIO_OSPD0_OSPD15 BITS(30,31) /*!< pin 15 output max speed bits */
  84. /* GPIO_PUD */
  85. #define GPIO_PUD_PUD0 BITS(0,1) /*!< pin 0 pull-up or pull-down bits */
  86. #define GPIO_PUD_PUD1 BITS(2,3) /*!< pin 1 pull-up or pull-down bits */
  87. #define GPIO_PUD_PUD2 BITS(4,5) /*!< pin 2 pull-up or pull-down bits */
  88. #define GPIO_PUD_PUD3 BITS(6,7) /*!< pin 3 pull-up or pull-down bits */
  89. #define GPIO_PUD_PUD4 BITS(8,9) /*!< pin 4 pull-up or pull-down bits */
  90. #define GPIO_PUD_PUD5 BITS(10,11) /*!< pin 5 pull-up or pull-down bits */
  91. #define GPIO_PUD_PUD6 BITS(12,13) /*!< pin 6 pull-up or pull-down bits */
  92. #define GPIO_PUD_PUD7 BITS(14,15) /*!< pin 7 pull-up or pull-down bits */
  93. #define GPIO_PUD_PUD8 BITS(16,17) /*!< pin 8 pull-up or pull-down bits */
  94. #define GPIO_PUD_PUD9 BITS(18,19) /*!< pin 9 pull-up or pull-down bits */
  95. #define GPIO_PUD_PUD10 BITS(20,21) /*!< pin 10 pull-up or pull-down bits */
  96. #define GPIO_PUD_PUD11 BITS(22,23) /*!< pin 11 pull-up or pull-down bits */
  97. #define GPIO_PUD_PUD12 BITS(24,25) /*!< pin 12 pull-up or pull-down bits */
  98. #define GPIO_PUD_PUD13 BITS(26,27) /*!< pin 13 pull-up or pull-down bits */
  99. #define GPIO_PUD_PUD14 BITS(28,29) /*!< pin 14 pull-up or pull-down bits */
  100. #define GPIO_PUD_PUD15 BITS(30,31) /*!< pin 15 pull-up or pull-down bits */
  101. /* GPIO_ISTAT */
  102. #define GPIO_ISTAT_ISTAT0 BIT(0) /*!< pin 0 input status */
  103. #define GPIO_ISTAT_ISTAT1 BIT(1) /*!< pin 1 input status */
  104. #define GPIO_ISTAT_ISTAT2 BIT(2) /*!< pin 2 input status */
  105. #define GPIO_ISTAT_ISTAT3 BIT(3) /*!< pin 3 input status */
  106. #define GPIO_ISTAT_ISTAT4 BIT(4) /*!< pin 4 input status */
  107. #define GPIO_ISTAT_ISTAT5 BIT(5) /*!< pin 5 input status */
  108. #define GPIO_ISTAT_ISTAT6 BIT(6) /*!< pin 6 input status */
  109. #define GPIO_ISTAT_ISTAT7 BIT(7) /*!< pin 7 input status */
  110. #define GPIO_ISTAT_ISTAT8 BIT(8) /*!< pin 8 input status */
  111. #define GPIO_ISTAT_ISTAT9 BIT(9) /*!< pin 9 input status */
  112. #define GPIO_ISTAT_ISTAT10 BIT(10) /*!< pin 10 input status */
  113. #define GPIO_ISTAT_ISTAT11 BIT(11) /*!< pin 11 input status */
  114. #define GPIO_ISTAT_ISTAT12 BIT(12) /*!< pin 12 input status */
  115. #define GPIO_ISTAT_ISTAT13 BIT(13) /*!< pin 13 input status */
  116. #define GPIO_ISTAT_ISTAT14 BIT(14) /*!< pin 14 input status */
  117. #define GPIO_ISTAT_ISTAT15 BIT(15) /*!< pin 15 input status */
  118. /* GPIO_OCTL */
  119. #define GPIO_OCTL_OCTL0 BIT(0) /*!< pin 0 output bit */
  120. #define GPIO_OCTL_OCTL1 BIT(1) /*!< pin 1 output bit */
  121. #define GPIO_OCTL_OCTL2 BIT(2) /*!< pin 2 output bit */
  122. #define GPIO_OCTL_OCTL3 BIT(3) /*!< pin 3 output bit */
  123. #define GPIO_OCTL_OCTL4 BIT(4) /*!< pin 4 output bit */
  124. #define GPIO_OCTL_OCTL5 BIT(5) /*!< pin 5 output bit */
  125. #define GPIO_OCTL_OCTL6 BIT(6) /*!< pin 6 output bit */
  126. #define GPIO_OCTL_OCTL7 BIT(7) /*!< pin 7 output bit */
  127. #define GPIO_OCTL_OCTL8 BIT(8) /*!< pin 8 output bit */
  128. #define GPIO_OCTL_OCTL9 BIT(9) /*!< pin 9 output bit */
  129. #define GPIO_OCTL_OCTL10 BIT(10) /*!< pin 10 output bit */
  130. #define GPIO_OCTL_OCTL11 BIT(11) /*!< pin 11 output bit */
  131. #define GPIO_OCTL_OCTL12 BIT(12) /*!< pin 12 output bit */
  132. #define GPIO_OCTL_OCTL13 BIT(13) /*!< pin 13 output bit */
  133. #define GPIO_OCTL_OCTL14 BIT(14) /*!< pin 14 output bit */
  134. #define GPIO_OCTL_OCTL15 BIT(15) /*!< pin 15 output bit */
  135. /* GPIO_BOP */
  136. #define GPIO_BOP_BOP0 BIT(0) /*!< pin 0 set bit */
  137. #define GPIO_BOP_BOP1 BIT(1) /*!< pin 1 set bit */
  138. #define GPIO_BOP_BOP2 BIT(2) /*!< pin 2 set bit */
  139. #define GPIO_BOP_BOP3 BIT(3) /*!< pin 3 set bit */
  140. #define GPIO_BOP_BOP4 BIT(4) /*!< pin 4 set bit */
  141. #define GPIO_BOP_BOP5 BIT(5) /*!< pin 5 set bit */
  142. #define GPIO_BOP_BOP6 BIT(6) /*!< pin 6 set bit */
  143. #define GPIO_BOP_BOP7 BIT(7) /*!< pin 7 set bit */
  144. #define GPIO_BOP_BOP8 BIT(8) /*!< pin 8 set bit */
  145. #define GPIO_BOP_BOP9 BIT(9) /*!< pin 9 set bit */
  146. #define GPIO_BOP_BOP10 BIT(10) /*!< pin 10 set bit */
  147. #define GPIO_BOP_BOP11 BIT(11) /*!< pin 11 set bit */
  148. #define GPIO_BOP_BOP12 BIT(12) /*!< pin 12 set bit */
  149. #define GPIO_BOP_BOP13 BIT(13) /*!< pin 13 set bit */
  150. #define GPIO_BOP_BOP14 BIT(14) /*!< pin 14 set bit */
  151. #define GPIO_BOP_BOP15 BIT(15) /*!< pin 15 set bit */
  152. #define GPIO_BOP_CR0 BIT(16) /*!< pin 0 clear bit */
  153. #define GPIO_BOP_CR1 BIT(17) /*!< pin 1 clear bit */
  154. #define GPIO_BOP_CR2 BIT(18) /*!< pin 2 clear bit */
  155. #define GPIO_BOP_CR3 BIT(19) /*!< pin 3 clear bit */
  156. #define GPIO_BOP_CR4 BIT(20) /*!< pin 4 clear bit */
  157. #define GPIO_BOP_CR5 BIT(21) /*!< pin 5 clear bit */
  158. #define GPIO_BOP_CR6 BIT(22) /*!< pin 6 clear bit */
  159. #define GPIO_BOP_CR7 BIT(23) /*!< pin 7 clear bit */
  160. #define GPIO_BOP_CR8 BIT(24) /*!< pin 8 clear bit */
  161. #define GPIO_BOP_CR9 BIT(25) /*!< pin 9 clear bit */
  162. #define GPIO_BOP_CR10 BIT(26) /*!< pin 10 clear bit */
  163. #define GPIO_BOP_CR11 BIT(27) /*!< pin 11 clear bit */
  164. #define GPIO_BOP_CR12 BIT(28) /*!< pin 12 clear bit */
  165. #define GPIO_BOP_CR13 BIT(29) /*!< pin 13 clear bit */
  166. #define GPIO_BOP_CR14 BIT(30) /*!< pin 14 clear bit */
  167. #define GPIO_BOP_CR15 BIT(31) /*!< pin 15 clear bit */
  168. /* GPIO_LOCK */
  169. #define GPIO_LOCK_LK0 BIT(0) /*!< pin 0 lock bit */
  170. #define GPIO_LOCK_LK1 BIT(1) /*!< pin 1 lock bit */
  171. #define GPIO_LOCK_LK2 BIT(2) /*!< pin 2 lock bit */
  172. #define GPIO_LOCK_LK3 BIT(3) /*!< pin 3 lock bit */
  173. #define GPIO_LOCK_LK4 BIT(4) /*!< pin 4 lock bit */
  174. #define GPIO_LOCK_LK5 BIT(5) /*!< pin 5 lock bit */
  175. #define GPIO_LOCK_LK6 BIT(6) /*!< pin 6 lock bit */
  176. #define GPIO_LOCK_LK7 BIT(7) /*!< pin 7 lock bit */
  177. #define GPIO_LOCK_LK8 BIT(8) /*!< pin 8 lock bit */
  178. #define GPIO_LOCK_LK9 BIT(9) /*!< pin 9 lock bit */
  179. #define GPIO_LOCK_LK10 BIT(10) /*!< pin 10 lock bit */
  180. #define GPIO_LOCK_LK11 BIT(11) /*!< pin 11 lock bit */
  181. #define GPIO_LOCK_LK12 BIT(12) /*!< pin 12 lock bit */
  182. #define GPIO_LOCK_LK13 BIT(13) /*!< pin 13 lock bit */
  183. #define GPIO_LOCK_LK14 BIT(14) /*!< pin 14 lock bit */
  184. #define GPIO_LOCK_LK15 BIT(15) /*!< pin 15 lock bit */
  185. #define GPIO_LOCK_LKK BIT(16) /*!< pin sequence lock key */
  186. /* GPIO_AFSEL0 */
  187. #define GPIO_AFSEL0_SEL0 BITS(0,3) /*!< pin 0 alternate function selected */
  188. #define GPIO_AFSEL0_SEL1 BITS(4,7) /*!< pin 1 alternate function selected */
  189. #define GPIO_AFSEL0_SEL2 BITS(8,11) /*!< pin 2 alternate function selected */
  190. #define GPIO_AFSEL0_SEL3 BITS(12,15) /*!< pin 3 alternate function selected */
  191. #define GPIO_AFSEL0_SEL4 BITS(16,19) /*!< pin 4 alternate function selected */
  192. #define GPIO_AFSEL0_SEL5 BITS(20,23) /*!< pin 5 alternate function selected */
  193. #define GPIO_AFSEL0_SEL6 BITS(24,27) /*!< pin 6 alternate function selected */
  194. #define GPIO_AFSEL0_SEL7 BITS(28,31) /*!< pin 7 alternate function selected */
  195. /* GPIO_AFSEL1 */
  196. #define GPIO_AFSEL1_SEL8 BITS(0,3) /*!< pin 8 alternate function selected */
  197. #define GPIO_AFSEL1_SEL9 BITS(4,7) /*!< pin 9 alternate function selected */
  198. #define GPIO_AFSEL1_SEL10 BITS(8,11) /*!< pin 10 alternate function selected */
  199. #define GPIO_AFSEL1_SEL11 BITS(12,15) /*!< pin 11 alternate function selected */
  200. #define GPIO_AFSEL1_SEL12 BITS(16,19) /*!< pin 12 alternate function selected */
  201. #define GPIO_AFSEL1_SEL13 BITS(20,23) /*!< pin 13 alternate function selected */
  202. #define GPIO_AFSEL1_SEL14 BITS(24,27) /*!< pin 14 alternate function selected */
  203. #define GPIO_AFSEL1_SEL15 BITS(28,31) /*!< pin 15 alternate function selected */
  204. /* GPIO_BC */
  205. #define GPIO_BC_CR0 BIT(0) /*!< pin 0 clear bit */
  206. #define GPIO_BC_CR1 BIT(1) /*!< pin 1 clear bit */
  207. #define GPIO_BC_CR2 BIT(2) /*!< pin 2 clear bit */
  208. #define GPIO_BC_CR3 BIT(3) /*!< pin 3 clear bit */
  209. #define GPIO_BC_CR4 BIT(4) /*!< pin 4 clear bit */
  210. #define GPIO_BC_CR5 BIT(5) /*!< pin 5 clear bit */
  211. #define GPIO_BC_CR6 BIT(6) /*!< pin 6 clear bit */
  212. #define GPIO_BC_CR7 BIT(7) /*!< pin 7 clear bit */
  213. #define GPIO_BC_CR8 BIT(8) /*!< pin 8 clear bit */
  214. #define GPIO_BC_CR9 BIT(9) /*!< pin 9 clear bit */
  215. #define GPIO_BC_CR10 BIT(10) /*!< pin 10 clear bit */
  216. #define GPIO_BC_CR11 BIT(11) /*!< pin 11 clear bit */
  217. #define GPIO_BC_CR12 BIT(12) /*!< pin 12 clear bit */
  218. #define GPIO_BC_CR13 BIT(13) /*!< pin 13 clear bit */
  219. #define GPIO_BC_CR14 BIT(14) /*!< pin 14 clear bit */
  220. #define GPIO_BC_CR15 BIT(15) /*!< pin 15 clear bit */
  221. /* GPIO_TG */
  222. #define GPIO_TG_TG0 BIT(0) /*!< pin 0 toggle bit */
  223. #define GPIO_TG_TG1 BIT(1) /*!< pin 1 toggle bit */
  224. #define GPIO_TG_TG2 BIT(2) /*!< pin 2 toggle bit */
  225. #define GPIO_TG_TG3 BIT(3) /*!< pin 3 toggle bit */
  226. #define GPIO_TG_TG4 BIT(4) /*!< pin 4 toggle bit */
  227. #define GPIO_TG_TG5 BIT(5) /*!< pin 5 toggle bit */
  228. #define GPIO_TG_TG6 BIT(6) /*!< pin 6 toggle bit */
  229. #define GPIO_TG_TG7 BIT(7) /*!< pin 7 toggle bit */
  230. #define GPIO_TG_TG8 BIT(8) /*!< pin 8 toggle bit */
  231. #define GPIO_TG_TG9 BIT(9) /*!< pin 9 toggle bit */
  232. #define GPIO_TG_TG10 BIT(10) /*!< pin 10 toggle bit */
  233. #define GPIO_TG_TG11 BIT(11) /*!< pin 11 toggle bit */
  234. #define GPIO_TG_TG12 BIT(12) /*!< pin 12 toggle bit */
  235. #define GPIO_TG_TG13 BIT(13) /*!< pin 13 toggle bit */
  236. #define GPIO_TG_TG14 BIT(14) /*!< pin 14 toggle bit */
  237. #define GPIO_TG_TG15 BIT(15) /*!< pin 15 toggle bit */
  238. /* GPIO_OSPD1 */
  239. #define GPIO_OSPD1_SPD0 BIT(0) /*!< set pin 0 very high output speed when OSPD0 is "11" */
  240. #define GPIO_OSPD1_SPD1 BIT(1) /*!< set pin 1 very high output speed when OSPD1 is "11" */
  241. #define GPIO_OSPD1_SPD2 BIT(2) /*!< set pin 2 very high output speed when OSPD2 is "11" */
  242. #define GPIO_OSPD1_SPD3 BIT(3) /*!< set pin 3 very high output speed when OSPD3 is "11" */
  243. #define GPIO_OSPD1_SPD4 BIT(4) /*!< set pin 4 very high output speed when OSPD4 is "11" */
  244. #define GPIO_OSPD1_SPD5 BIT(5) /*!< set pin 5 very high output speed when OSPD5 is "11" */
  245. #define GPIO_OSPD1_SPD6 BIT(6) /*!< set pin 6 very high output speed when OSPD6 is "11" */
  246. #define GPIO_OSPD1_SPD7 BIT(7) /*!< set pin 7 very high output speed when OSPD7 is "11" */
  247. #define GPIO_OSPD1_SPD8 BIT(8) /*!< set pin 8 very high output speed when OSPD8 is "11" */
  248. #define GPIO_OSPD1_SPD9 BIT(9) /*!< set pin 9 very high output speed when OSPD9 is "11" */
  249. #define GPIO_OSPD1_SPD10 BIT(10) /*!< set pin 10 very high output speed when OSPD10 is "11" */
  250. #define GPIO_OSPD1_SPD11 BIT(11) /*!< set pin 11 very high output speed when OSPD11 is "11" */
  251. #define GPIO_OSPD1_SPD12 BIT(12) /*!< set pin 12 very high output speed when OSPD12 is "11" */
  252. #define GPIO_OSPD1_SPD13 BIT(13) /*!< set pin 13 very high output speed when OSPD13 is "11" */
  253. #define GPIO_OSPD1_SPD14 BIT(14) /*!< set pin 14 very high output speed when OSPD14 is "11" */
  254. #define GPIO_OSPD1_SPD15 BIT(15) /*!< set pin 15 very high output speed when OSPD15 is "11" */
  255. /* constants definitions */
  256. typedef FlagStatus bit_status;
  257. /* output mode definitions */
  258. #define CTL_CLTR(regval) (BITS(0,1) & ((uint32_t)(regval) << 0))
  259. #define GPIO_MODE_INPUT CTL_CLTR(0) /*!< input mode */
  260. #define GPIO_MODE_OUTPUT CTL_CLTR(1) /*!< output mode */
  261. #define GPIO_MODE_AF CTL_CLTR(2) /*!< alternate function mode */
  262. #define GPIO_MODE_ANALOG CTL_CLTR(3) /*!< analog mode */
  263. /* pull-up/pull-down definitions */
  264. #define PUD_PUPD(regval) (BITS(0,1) & ((uint32_t)(regval) << 0))
  265. #define GPIO_PUPD_NONE PUD_PUPD(0) /*!< floating mode, no pull-up and pull-down resistors */
  266. #define GPIO_PUPD_PULLUP PUD_PUPD(1) /*!< with pull-up resistor */
  267. #define GPIO_PUPD_PULLDOWN PUD_PUPD(2) /*!< with pull-down resistor */
  268. /* GPIO pin definitions */
  269. #define GPIO_PIN_0 BIT(0) /*!< GPIO pin 0 */
  270. #define GPIO_PIN_1 BIT(1) /*!< GPIO pin 1 */
  271. #define GPIO_PIN_2 BIT(2) /*!< GPIO pin 2 */
  272. #define GPIO_PIN_3 BIT(3) /*!< GPIO pin 3 */
  273. #define GPIO_PIN_4 BIT(4) /*!< GPIO pin 4 */
  274. #define GPIO_PIN_5 BIT(5) /*!< GPIO pin 5 */
  275. #define GPIO_PIN_6 BIT(6) /*!< GPIO pin 6 */
  276. #define GPIO_PIN_7 BIT(7) /*!< GPIO pin 7 */
  277. #define GPIO_PIN_8 BIT(8) /*!< GPIO pin 8 */
  278. #define GPIO_PIN_9 BIT(9) /*!< GPIO pin 9 */
  279. #define GPIO_PIN_10 BIT(10) /*!< GPIO pin 10 */
  280. #define GPIO_PIN_11 BIT(11) /*!< GPIO pin 11 */
  281. #define GPIO_PIN_12 BIT(12) /*!< GPIO pin 12 */
  282. #define GPIO_PIN_13 BIT(13) /*!< GPIO pin 13 */
  283. #define GPIO_PIN_14 BIT(14) /*!< GPIO pin 14 */
  284. #define GPIO_PIN_15 BIT(15) /*!< GPIO pin 15 */
  285. #define GPIO_PIN_ALL BITS(0,15) /*!< GPIO pin all */
  286. /* GPIO mode configuration values */
  287. #define GPIO_MODE_SET(n, mode) ((uint32_t)((uint32_t)(mode) << (2U * (n))))
  288. #define GPIO_MODE_MASK(n) (0x3U << (2U * (n)))
  289. /* GPIO pull-up/pull-down values */
  290. #define GPIO_PUPD_SET(n, pupd) ((uint32_t)((uint32_t)(pupd) << (2U * (n))))
  291. #define GPIO_PUPD_MASK(n) (0x3U << (2U * (n)))
  292. /* GPIO output speed values */
  293. #define GPIO_OSPEED_SET(n, speed) ((uint32_t)((uint32_t)(speed) << (2U * (n))))
  294. #define GPIO_OSPEED_MASK(n) (0x3U << (2U * (n)))
  295. /* GPIO output type */
  296. #define GPIO_OTYPE_PP ((uint8_t)(0x00U)) /*!< push pull mode */
  297. #define GPIO_OTYPE_OD ((uint8_t)(0x01U)) /*!< open drain mode */
  298. /* GPIO output max speed value */
  299. #define OSPD_OSPD0(regval) (BITS(0,1) & ((uint32_t)(regval) << 0))
  300. #define GPIO_OSPEED_2MHZ OSPD_OSPD0(0) /*!< output max speed 2MHz */
  301. #define GPIO_OSPEED_10MHZ OSPD_OSPD0(1) /*!< output max speed 10MHz */
  302. #define GPIO_OSPEED_50MHZ OSPD_OSPD0(3) /*!< output max speed 50MHz */
  303. #define GPIO_OSPEED_MAX 0x0000FFFFU /*!< GPIO very high output speed, max speed more than 50MHz */
  304. /* GPIO alternate function values */
  305. #define GPIO_AFR_SET(n, af) ((uint32_t)((uint32_t)(af) << (4U * (n))))
  306. #define GPIO_AFR_MASK(n) (0xFU << (4U * (n)))
  307. /* GPIO alternate function */
  308. #define AF(regval) (BITS(0,3) & ((uint32_t)(regval) << 0))
  309. #define GPIO_AF_0 AF(0) /*!< alternate function 0 selected */
  310. #define GPIO_AF_1 AF(1) /*!< alternate function 1 selected */
  311. #define GPIO_AF_2 AF(2) /*!< alternate function 2 selected */
  312. #define GPIO_AF_3 AF(3) /*!< alternate function 3 selected */
  313. #define GPIO_AF_4 AF(4) /*!< alternate function 4 selected (port A,B only) */
  314. #define GPIO_AF_5 AF(5) /*!< alternate function 5 selected (port A,B only) */
  315. #define GPIO_AF_6 AF(6) /*!< alternate function 6 selected (port A,B only) */
  316. #define GPIO_AF_7 AF(7) /*!< alternate function 7 selected (port A,B only) */
  317. /* function declarations */
  318. /* reset GPIO port */
  319. void gpio_deinit(uint32_t gpio_periph);
  320. /* set GPIO mode */
  321. void gpio_mode_set(uint32_t gpio_periph, uint32_t mode, uint32_t pull_up_down, uint32_t pin);
  322. /* set GPIO output type and speed */
  323. void gpio_output_options_set(uint32_t gpio_periph, uint8_t otype, uint32_t speed, uint32_t pin);
  324. /* set GPIO pin bit */
  325. void gpio_bit_set(uint32_t gpio_periph, uint32_t pin);
  326. /* reset GPIO pin bit */
  327. void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin);
  328. /* write data to the specified GPIO pin */
  329. void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value);
  330. /* write data to the specified GPIO port */
  331. void gpio_port_write(uint32_t gpio_periph, uint16_t data);
  332. /* get GPIO pin input status */
  333. FlagStatus gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin);
  334. /* get GPIO port input status */
  335. uint16_t gpio_input_port_get(uint32_t gpio_periph);
  336. /* get GPIO pin output status */
  337. FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin);
  338. /* get GPIO port output status */
  339. uint16_t gpio_output_port_get(uint32_t gpio_periph);
  340. /* set GPIO alternate function */
  341. void gpio_af_set(uint32_t gpio_periph,uint32_t alt_func_num, uint32_t pin);
  342. /* lock GPIO pin bit */
  343. void gpio_pin_lock(uint32_t gpio_periph, uint32_t pin);
  344. /* toggle GPIO pin status */
  345. void gpio_bit_toggle(uint32_t gpio_periph, uint32_t pin);
  346. /* toggle GPIO port status */
  347. void gpio_port_toggle(uint32_t gpio_periph);
  348. #endif /* GD32F3X0_GPIO_H */