gpio.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /******************************************************************************
  2. *
  3. * @brief provide commond GPIO utilities.
  4. *
  5. *******************************************************************************/
  6. #ifndef _GPIO_H_
  7. #define _GPIO_H_
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. #include "common.h"
  12. #include "stdint.h"
  13. /******************************************************************************
  14. *define gpio pin name
  15. *
  16. *//*! @addtogroup gpio_pin_name_list
  17. * @{
  18. *******************************************************************************/
  19. typedef enum
  20. {
  21. /* in GPIOA register */
  22. GPIO_PTA0 = 0, /*!< GPIO Pin PTA0 */
  23. GPIO_PTA1, /*!< GPIO Pin PTA1 */
  24. GPIO_PTA2, /*!< GPIO Pin PTA2 */
  25. GPIO_PTA3, /*!< GPIO Pin PTA3 */
  26. GPIO_PTA4, /*!< GPIO Pin PTA4 */
  27. GPIO_PTA5, /*!< GPIO Pin PTA5 */
  28. GPIO_PTA6, /*!< GPIO Pin PTA6 */
  29. GPIO_PTA7, /*!< GPIO Pin PTA7 */
  30. GPIO_PTB0, /*!< GPIO Pin PTB0 */
  31. GPIO_PTB1, /*!< GPIO Pin PTB1 */
  32. GPIO_PTB2, /*!< GPIO Pin PTB2 */
  33. GPIO_PTB3, /*!< GPIO Pin PTB3 */
  34. GPIO_PTB4, /*!< GPIO Pin PTB4 */
  35. GPIO_PTB5, /*!< GPIO Pin PTB5 */
  36. GPIO_PTB6, /*!< GPIO Pin PTB6 */
  37. GPIO_PTB7, /*!< GPIO Pin PTB7 */
  38. GPIO_PTC0, /*!< GPIO Pin PTC0 */
  39. GPIO_PTC1, /*!< GPIO Pin PTC1 */
  40. GPIO_PTC2, /*!< GPIO Pin PTC2 */
  41. GPIO_PTC3, /*!< GPIO Pin PTC3 */
  42. GPIO_PTC4, /*!< GPIO Pin PTC4 */
  43. GPIO_PTC5, /*!< GPIO Pin PTC5 */
  44. GPIO_PTC6, /*!< GPIO Pin PTC6 */
  45. GPIO_PTC7, /*!< GPIO Pin PTC7 */
  46. GPIO_PTD0, /*!< GPIO Pin PTD0 */
  47. GPIO_PTD1, /*!< GPIO Pin PTD1 */
  48. GPIO_PTD2, /*!< GPIO Pin PTD2 */
  49. GPIO_PTD3, /*!< GPIO Pin PTD3 */
  50. GPIO_PTD4, /*!< GPIO Pin PTD4 */
  51. GPIO_PTD5, /*!< GPIO Pin PTD5 */
  52. GPIO_PTD6, /*!< GPIO Pin PTD6 */
  53. GPIO_PTD7, /*!< GPIO Pin PTD7 */
  54. /* in GPIOB register */
  55. GPIO_PTE0, /*!< GPIO Pin PTE0 */
  56. GPIO_PTE1, /*!< GPIO Pin PTE1 */
  57. GPIO_PTE2, /*!< GPIO Pin PTE2 */
  58. GPIO_PTE3, /*!< GPIO Pin PTE3 */
  59. GPIO_PTE4, /*!< GPIO Pin PTE4 */
  60. GPIO_PTE5, /*!< GPIO Pin PTE5 */
  61. GPIO_PTE6, /*!< GPIO Pin PTE6 */
  62. GPIO_PTE7, /*!< GPIO Pin PTE7 */
  63. GPIO_PTF0, /*!< GPIO Pin PTF0 */
  64. GPIO_PTF1, /*!< GPIO Pin PTF1 */
  65. GPIO_PTF2, /*!< GPIO Pin PTF2 */
  66. GPIO_PTF3, /*!< GPIO Pin PTF3 */
  67. GPIO_PTF4, /*!< GPIO Pin PTF4 */
  68. GPIO_PTF5, /*!< GPIO Pin PTF5 */
  69. GPIO_PTF6, /*!< GPIO Pin PTF6 */
  70. GPIO_PTF7, /*!< GPIO Pin PTF7 */
  71. GPIO_PTG0, /*!< GPIO Pin PTG0 */
  72. GPIO_PTG1, /*!< GPIO Pin PTG1 */
  73. GPIO_PTG2, /*!< GPIO Pin PTG2 */
  74. GPIO_PTG3, /*!< GPIO Pin PTG3 */
  75. GPIO_PTG4, /*!< GPIO Pin PTG4 */
  76. GPIO_PTG5, /*!< GPIO Pin PTG5 */
  77. GPIO_PTG6, /*!< GPIO Pin PTG6 */
  78. GPIO_PTG7, /*!< GPIO Pin PTG7 */
  79. GPIO_PTH0, /*!< GPIO Pin PTH0 */
  80. GPIO_PTH1, /*!< GPIO Pin PTH1 */
  81. GPIO_PTH2, /*!< GPIO Pin PTH2 */
  82. GPIO_PTH3, /*!< GPIO Pin PTH3 */
  83. GPIO_PTH4, /*!< GPIO Pin PTH4 */
  84. GPIO_PTH5, /*!< GPIO Pin PTH5 */
  85. GPIO_PTH6, /*!< GPIO Pin PTH6 */
  86. GPIO_PTH7, /*!< GPIO Pin PTH7 */
  87. /* the following pins are not in NV322 */
  88. GPIO_PTI0, /*!< GPIO Pin PTI0 */
  89. GPIO_PTI1, /*!< GPIO Pin PTI1 */
  90. GPIO_PTI2, /*!< GPIO Pin PTI2 */
  91. GPIO_PTI3, /*!< GPIO Pin PTI3 */
  92. GPIO_PTI4, /*!< GPIO Pin PTI4 */
  93. GPIO_PTI5, /*!< GPIO Pin PTI5 */
  94. GPIO_PTI6, /*!< GPIO Pin PTI6 */
  95. GPIO_PTI7, /*!< GPIO Pin PTI7 */
  96. GPIO_PIN_MAX,
  97. } GPIO_PinType;
  98. /*! @} End of gpio_pin_name_list */
  99. /******************************************************************************
  100. *define gpio pin mask
  101. *
  102. *//*! @addtogroup gpio_pin_mask_list
  103. * @{
  104. *******************************************************************************/
  105. typedef enum
  106. {
  107. /* in GPIOA register */
  108. GPIO_PTA0_MASK = (1<<0), /*!< GPIO Pin PTA0 bit mask */
  109. GPIO_PTA1_MASK = (1<<1), /*!< GPIO Pin PTA1 bit mask */
  110. GPIO_PTA2_MASK = (1<<2), /*!< GPIO Pin PTA2 bit mask */
  111. GPIO_PTA3_MASK = (1<<3), /*!< GPIO Pin PTA3 bit mask */
  112. GPIO_PTA4_MASK = (1<<4), /*!< GPIO Pin PTA4 bit mask */
  113. GPIO_PTA5_MASK = (1<<5), /*!< GPIO Pin PTA5 bit mask */
  114. GPIO_PTA6_MASK = (1<<6), /*!< GPIO Pin PTA6 bit mask */
  115. GPIO_PTA7_MASK = (1<<7), /*!< GPIO Pin PTA7 bit mask */
  116. GPIO_PTB0_MASK = (1<<8), /*!< GPIO Pin PTB0 bit mask */
  117. GPIO_PTB1_MASK = (1<<9), /*!< GPIO Pin PTB1 bit mask */
  118. GPIO_PTB2_MASK = (1<<10), /*!< GPIO Pin PTB2 bit mask */
  119. GPIO_PTB3_MASK = (1<<11), /*!< GPIO Pin PTB3 bit mask */
  120. GPIO_PTB4_MASK = (1<<12), /*!< GPIO Pin PTB4 bit mask */
  121. GPIO_PTB5_MASK = (1<<13), /*!< GPIO Pin PTB5 bit mask */
  122. GPIO_PTB6_MASK = (1<<14), /*!< GPIO Pin PTB6 bit mask */
  123. GPIO_PTB7_MASK = (1<<15), /*!< GPIO Pin PTB7 bit mask */
  124. GPIO_PTC0_MASK = (1<<16), /*!< GPIO Pin PTC0 bit mask */
  125. GPIO_PTC1_MASK = (1<<17), /*!< GPIO Pin PTC1 bit mask */
  126. GPIO_PTC2_MASK = (1<<18), /*!< GPIO Pin PTC2 bit mask */
  127. GPIO_PTC3_MASK = (1<<19), /*!< GPIO Pin PTC3 bit mask */
  128. GPIO_PTC4_MASK = (1<<20), /*!< GPIO Pin PTC4 bit mask */
  129. GPIO_PTC5_MASK = (1<<21), /*!< GPIO Pin PTC5 bit mask */
  130. GPIO_PTC6_MASK = (1<<22), /*!< GPIO Pin PTC6 bit mask */
  131. GPIO_PTC7_MASK = (1<<23), /*!< GPIO Pin PTC7 bit mask */
  132. GPIO_PTD0_MASK = (1<<24), /*!< GPIO Pin PTD0 bit mask */
  133. GPIO_PTD1_MASK = (1<<25), /*!< GPIO Pin PTD1 bit mask */
  134. GPIO_PTD2_MASK = (1<<26), /*!< GPIO Pin PTD2 bit mask */
  135. GPIO_PTD3_MASK = (1<<27), /*!< GPIO Pin PTD3 bit mask */
  136. GPIO_PTD4_MASK = (1<<28), /*!< GPIO Pin PTD4 bit mask */
  137. GPIO_PTD5_MASK = (1<<29), /*!< GPIO Pin PTD5 bit mask */
  138. GPIO_PTD6_MASK = (1<<30), /*!< GPIO Pin PTD6 bit mask */
  139. GPIO_PTD7_MASK = (1<<31), /*!< GPIO Pin PTD7 bit mask */
  140. /* in GPIOB register */
  141. GPIO_PTE0_MASK = (1<<0), /*!< GPIO Pin PTE0 bit mask */
  142. GPIO_PTE1_MASK = (1<<1), /*!< GPIO Pin PTE1 bit mask */
  143. GPIO_PTE2_MASK = (1<<2), /*!< GPIO Pin PTE2 bit mask */
  144. GPIO_PTE3_MASK = (1<<3), /*!< GPIO Pin PTE3 bit mask */
  145. GPIO_PTE4_MASK = (1<<4), /*!< GPIO Pin PTE4 bit mask */
  146. GPIO_PTE5_MASK = (1<<5), /*!< GPIO Pin PTE5 bit mask */
  147. GPIO_PTE6_MASK = (1<<6), /*!< GPIO Pin PTE6 bit mask */
  148. GPIO_PTE7_MASK = (1<<7), /*!< GPIO Pin PTE7 bit mask */
  149. GPIO_PTF0_MASK = (1<<8), /*!< GPIO Pin PTF0 bit mask */
  150. GPIO_PTF1_MASK = (1<<9), /*!< GPIO Pin PTF1 bit mask */
  151. GPIO_PTF2_MASK = (1<<10), /*!< GPIO Pin PTF2 bit mask */
  152. GPIO_PTF3_MASK = (1<<11), /*!< GPIO Pin PTF3 bit mask */
  153. GPIO_PTF4_MASK = (1<<12), /*!< GPIO Pin PTF4 bit mask */
  154. GPIO_PTF5_MASK = (1<<13), /*!< GPIO Pin PTF5 bit mask */
  155. GPIO_PTF6_MASK = (1<<14), /*!< GPIO Pin PTF6 bit mask */
  156. GPIO_PTF7_MASK = (1<<15), /*!< GPIO Pin PTF7 bit mask */
  157. GPIO_PTG0_MASK = (1<<16), /*!< GPIO Pin PTG0 bit mask */
  158. GPIO_PTG1_MASK = (1<<17), /*!< GPIO Pin PTG1 bit mask */
  159. GPIO_PTG2_MASK = (1<<18), /*!< GPIO Pin PTG2 bit mask */
  160. GPIO_PTG3_MASK = (1<<19), /*!< GPIO Pin PTG3 bit mask */
  161. GPIO_PTG4_MASK = (1<<20), /*!< GPIO Pin PTG4 bit mask */
  162. GPIO_PTG5_MASK = (1<<21), /*!< GPIO Pin PTG5 bit mask */
  163. GPIO_PTG6_MASK = (1<<22), /*!< GPIO Pin PTG6 bit mask */
  164. GPIO_PTG7_MASK = (1<<23), /*!< GPIO Pin PTG7 bit mask */
  165. GPIO_PTH0_MASK = (1<<24), /*!< GPIO Pin PTH0 bit mask */
  166. GPIO_PTH1_MASK = (1<<25), /*!< GPIO Pin PTH1 bit mask */
  167. GPIO_PTH2_MASK = (1<<26), /*!< GPIO Pin PTH2 bit mask */
  168. GPIO_PTH3_MASK = (1<<27), /*!< GPIO Pin PTH3 bit mask */
  169. GPIO_PTH4_MASK = (1<<28), /*!< GPIO Pin PTH4 bit mask */
  170. GPIO_PTH5_MASK = (1<<29), /*!< GPIO Pin PTH5 bit mask */
  171. GPIO_PTH6_MASK = (1<<30), /*!< GPIO Pin PTH6 bit mask */
  172. GPIO_PTH7_MASK = (1<<31), /*!< GPIO Pin PTH7 bit mask */
  173. /* in GPIOC register */
  174. GPIO_PTI0_MASK = (1<<0), /*!< GPIO Pin PTI0 bit mask */
  175. GPIO_PTI1_MASK = (1<<1), /*!< GPIO Pin PTI1 bit mask */
  176. GPIO_PTI2_MASK = (1<<2), /*!< GPIO Pin PTI2 bit mask */
  177. GPIO_PTI3_MASK = (1<<3), /*!< GPIO Pin PTI3 bit mask */
  178. GPIO_PTI4_MASK = (1<<4), /*!< GPIO Pin PTI4 bit mask */
  179. GPIO_PTI5_MASK = (1<<5), /*!< GPIO Pin PTI5 bit mask */
  180. GPIO_PTI6_MASK = (1<<6), /*!< GPIO Pin PTI6 bit mask */
  181. GPIO_PTI7_MASK = (1<<7), /*!< GPIO Pin PTI7 bit mask */
  182. } GPIO_PinMaskType;
  183. /*! @} End of gpio_pin_mask_list */
  184. /******************************************************************************
  185. *define gpio pin config type
  186. *
  187. *//*! @addtogroup gpio_pin_config_type_list
  188. * @{
  189. *******************************************************************************/
  190. /*
  191. * . Internal pullup is disabled if the pin is configured as an output
  192. * . High-current drive function is disabled, if the pin is configured as an input
  193. * Only PTH1/0, PTE1/0, PTD1/0, PTB5/4 support Hight-current Drive.
  194. */
  195. typedef enum
  196. {
  197. GPIO_PinOutput = 0, /*!< set pin as outout */
  198. GPIO_PinInput, /*!< set pin as input */
  199. GPIO_PinInput_InternalPullup, /*!< set internal pullup for input pin */
  200. GPIO_PinOutput_HighCurrent, /*!< set high drive for output pin */
  201. } GPIO_PinConfigType;
  202. /*! @} End of gpio_pin_config_type_list */
  203. /******************************************************************************
  204. * define GPIO APIs
  205. *
  206. *//*! @addtogroup gpio_api_list
  207. * @{
  208. *******************************************************************************/
  209. /*****************************************************************************//*!
  210. * @brief Toggle the pins which are specified by u32PinMask in single cycle.
  211. *
  212. * @param[in] pGPIO Pointer to GPIO module, can be FGPIOA/FGPIOB.
  213. * @param[in] u32PinMask Specify GPIO pin need to be toggled
  214. *
  215. * @return none
  216. *
  217. * @ Pass/ Fail criteria: none
  218. *****************************************************************************/
  219. __STATIC_INLINE void FGPIO_Toggle(FGPIO_Type *pFGPIO, uint32_t u32PinMask)
  220. {
  221. pFGPIO->PTOR = u32PinMask; /* Toggle the pins specified by u32PinMask */
  222. }
  223. /*****************************************************************************//*!
  224. * @brief Read input data from GPIO which is specified by pGPIO in single cycle.
  225. *
  226. * @param[in] pGPIO Pointer to GPIO module, can be FGPIOA/FGPIOB.
  227. *
  228. * @return GPIO input value unsigned int 32-bit
  229. *
  230. * @ Pass/ Fail criteria: none
  231. *****************************************************************************/
  232. __STATIC_INLINE uint32_t FGPIO_Read(FGPIO_Type *pFGPIO)
  233. {
  234. return (pFGPIO->PDIR); /* Read Port Data Input Register */
  235. }
  236. /*****************************************************************************//*!
  237. * @brief Write output data to GPIO which is specified by pGPIO in single cycle.
  238. *
  239. * @param[in] pGPIO Pointer to GPIO module, can be FGPIOA/FGPIOB.
  240. * @param[in] u32Value value to output
  241. *
  242. * @return none
  243. *
  244. * @ Pass/ Fail criteria: none
  245. *****************************************************************************/
  246. __STATIC_INLINE void FGPIO_Write(FGPIO_Type *pFGPIO, uint32_t u32Value)
  247. {
  248. pFGPIO->PDOR = u32Value; /* Write Port Ouput Data Register */
  249. }
  250. void GPIO_DeInit(GPIO_Type *pGPIO);
  251. void GPIO_Init(GPIO_Type *pGPIO, uint32_t u32PinMask, GPIO_PinConfigType sGpioType);
  252. void GPIO_Toggle(GPIO_Type *pGPIO, uint32_t u32PinMask);
  253. uint32_t GPIO_Read(GPIO_Type *pGPIO);
  254. void GPIO_Write(GPIO_Type *pGPIO, uint32_t u32Value);
  255. void GPIO_PinInit(GPIO_PinType GPIO_Pin, GPIO_PinConfigType GPIO_PinConfig);
  256. void GPIO_PinToggle(GPIO_PinType GPIO_Pin);
  257. void GPIO_PinSet(GPIO_PinType GPIO_Pin);
  258. void GPIO_PinClear(GPIO_PinType GPIO_Pin);
  259. uint8_t GPIO_BitRead(GPIO_PinType GPIO_Pin);
  260. /*! @} End of gpio_api_list */
  261. #ifdef __cplusplus
  262. }
  263. #endif
  264. #endif /* #ifndef _GPIO_H_ */