nu_gpio.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /**************************************************************************//**
  2. * @file gpio.h
  3. * @version V1.00
  4. * @brief N9H30 GPIO driver header file
  5. *
  6. * SPDX-License-Identifier: Apache-2.0
  7. * @copyright (C) 2018 Nuvoton Technology Corp. All rights reserved.
  8. *****************************************************************************/
  9. #ifndef __NU_GPIO_H__
  10. #define __NU_GPIO_H__
  11. #ifdef __cplusplus
  12. extern "C"
  13. {
  14. #endif
  15. /** @addtogroup N9H30_Device_Driver N9H30 Device Driver
  16. @{
  17. */
  18. /** @addtogroup N9H30_GPIO_Driver GPIO Driver
  19. @{
  20. */
  21. /** @addtogroup N9H30_GPIO_EXPORTED_CONSTANTS GPIO Exported Constants
  22. @{
  23. */
  24. /*---------------------------------------------------------------------------------------------------------*/
  25. /* MODE Constant Definitions */
  26. /*---------------------------------------------------------------------------------------------------------*/
  27. /// @cond HIDDEN_SYMBOLS
  28. #ifndef GPIO_ERR_PORT_BUSY
  29. #define GPIO_ERR_PORT_BUSY -1
  30. #define GPIO_ERR_UNSUPPORTED -2
  31. #define GPIO_ERR_BIT_BUSY -3
  32. #define SUCCESSFUL 0
  33. #endif
  34. /// @endcond HIDDEN_SYMBOLS
  35. #define MAX_PORT 10 /*!< GPIO Port Number */
  36. #define GPIOA_MASK 0x0000FFFF /*!< GPIO Port A Mask */
  37. #define GPIOB_MASK 0x0000FFFF /*!< GPIO Port B Mask */
  38. #define GPIOC_MASK 0x00007FFF /*!< GPIO Port C Mask */
  39. #define GPIOD_MASK 0x0000FFFF /*!< GPIO Port D Mask */
  40. #define GPIOE_MASK 0x0000FFFF /*!< GPIO Port E Mask */
  41. #define GPIOF_MASK 0x0000FFFF /*!< GPIO Port F Mask */
  42. #define GPIOG_MASK 0x0000FFFF /*!< GPIO Port G Mask */
  43. #define GPIOH_MASK 0x0000FFFF /*!< GPIO Port H Mask */
  44. #define GPIOI_MASK 0x0000FFFF /*!< GPIO Port I Mask */
  45. #define GPIOJ_MASK 0x0000003F /*!< GPIO Port J Mask */
  46. /// @cond HIDDEN_SYMBOLS
  47. typedef INT32(*GPIO_CALLBACK)(UINT32 status, UINT32 userData);
  48. typedef INT32(*EINT_CALLBACK)(UINT32 status, UINT32 userData);
  49. /// @endcond HIDDEN_SYMBOLS
  50. /** \brief Structure type of GPIO_PORT
  51. */
  52. typedef enum
  53. {
  54. GPIOA = 0x000, /*!< Port A offset of GPIO base address */
  55. GPIOB = 0x040, /*!< Port B offset of GPIO base address */
  56. GPIOC = 0x080, /*!< Port C offset of GPIO base address */
  57. GPIOD = 0x0C0, /*!< Port D offset of GPIO base address */
  58. GPIOE = 0x100, /*!< Port E offset of GPIO base address */
  59. GPIOF = 0x140, /*!< Port F offset of GPIO base address */
  60. GPIOG = 0x180, /*!< Port G offset of GPIO base address */
  61. GPIOH = 0x1C0, /*!< Port H offset of GPIO base address */
  62. GPIOI = 0x200, /*!< Port I offset of GPIO base address */
  63. GPIOJ = 0x240, /*!< Port J offset of GPIO base address */
  64. } GPIO_PORT;
  65. /** \brief Structure type of GPIO_DIR
  66. */
  67. typedef enum
  68. {
  69. DIR_INPUT, /*!< GPIO Output mode */
  70. DIR_OUTPUT /*!< GPIO Input mode */
  71. } GPIO_DIR;
  72. /** \brief Structure type of GPIO_PULL
  73. */
  74. typedef enum
  75. {
  76. NO_PULL_UP, /*!< GPIO Pull-Up Disable */
  77. PULL_UP, /*!< GPIO Pull-Up Enable */
  78. PULL_DOWN /*!< GPIO Pull-Down Enable */
  79. } GPIO_PULL;
  80. /** \brief Structure type of GPIO_DRV
  81. */
  82. typedef enum
  83. {
  84. DRV_LOW, /*!< GPIO Set to Low */
  85. DRV_HIGH /*!< GPIO Set to High */
  86. } GPIO_DRV;
  87. /** \brief Structure type of GPIO_NIRQ
  88. */
  89. typedef enum
  90. {
  91. NIRQ0 = 0, /*!< External interrupt 0 */
  92. NIRQ1, /*!< External interrupt 1 */
  93. NIRQ2, /*!< External interrupt 2 */
  94. NIRQ3, /*!< External interrupt 3 */
  95. NIRQ4, /*!< External interrupt 4 */
  96. NIRQ5, /*!< External interrupt 5 */
  97. NIRQ6, /*!< External interrupt 6 */
  98. NIRQ7, /*!< External interrupt 7 */
  99. } GPIO_NIRQ;
  100. /** \brief Structure type of GPIO_TRIGGER_TYPE
  101. */
  102. typedef enum
  103. {
  104. LOW, /*!< Trigger type set low */
  105. HIGH, /*!< Trigger type set high */
  106. FALLING, /*!< Trigger type set falling edge */
  107. RISING, /*!< Trigger type set rising edge */
  108. BOTH_EDGE /*!< Trigger type set falling edge and rising edge */
  109. } GPIO_TRIGGER_TYPE;
  110. /// @cond HIDDEN_SYMBOLS
  111. /// @endcond HIDDEN_SYMBOLS
  112. /*@}*/ /* end of group N9H30_GPIO_EXPORTED_CONSTANTS */
  113. /** @addtogroup N9H30_GPIO_EXPORTED_FUNCTIONS GPIO Exported Functions
  114. @{
  115. */
  116. /* General GPIO bit function */
  117. INT32 GPIO_OpenBit(GPIO_PORT port, UINT32 bit, GPIO_DIR direction, GPIO_PULL pull);
  118. INT32 GPIO_CloseBit(GPIO_PORT port, UINT32 bit);
  119. INT32 GPIO_SetBit(GPIO_PORT port, UINT32 bit);
  120. INT32 GPIO_ClrBit(GPIO_PORT port, UINT32 bit);
  121. INT32 GPIO_ReadBit(GPIO_PORT port, UINT32 bit);
  122. INT32 GPIO_SetBitDir(GPIO_PORT port, UINT32 bit, GPIO_DIR direction);
  123. INT32 GPIO_EnableTriggerType(GPIO_PORT port, UINT32 bit, GPIO_TRIGGER_TYPE triggerType);
  124. INT32 GPIO_DisableTriggerType(GPIO_PORT port, UINT32 bit);
  125. /* External GPIO interrupt function */
  126. INT32 GPIO_EnableDebounce(INT32 debounceClkSel);
  127. INT32 GPIO_DisableDebounce(void);
  128. /*@}*/ /* end of group N9H30_GPIO_EXPORTED_FUNCTIONS */
  129. /*@}*/ /* end of group N9H30_GPIO_Driver */
  130. /*@}*/ /* end of group N9H30_Device_Driver */
  131. #ifdef __cplusplus
  132. }
  133. #endif
  134. #endif //__NU_GPIO_H__