1
0

hal_gpio.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /* SPDX-License-Identifier: BSD-3-Clause */
  2. /*
  3. * Copyright (c) 2020-2021 Rockchip Electronics Co., Ltd.
  4. */
  5. #include "hal_conf.h"
  6. /** @addtogroup RK_HAL_Driver
  7. * @{
  8. */
  9. /** @addtogroup GPIO
  10. * @{
  11. */
  12. #ifndef __HAL_GPIO_H
  13. #define __HAL_GPIO_H
  14. #include "hal_def.h"
  15. #include "hal_pinctrl.h"
  16. /***************************** MACRO Definition ******************************/
  17. /** @defgroup GPIO_Exported_Definition_Group1 Basic Definition
  18. * @{
  19. */
  20. #ifndef GPIO_VER_ID
  21. #define GPIO_VER_ID (0U)
  22. #endif
  23. #define PIN_NUMBER_PER_BANK (32)
  24. #define GPIO_PIN_SHIFT (0) /**< Bits 0-4: GPIO Pin number: 0 - 31 */
  25. #define GPIO_PIN_MASK (0x1f << GPIO_PIN_SHIFT)
  26. #define GPIO_BANK_SHIFT (5) /**< Bits 5-7: GPIO Port number: 0 - 7 */
  27. #define GPIO_BANK_MASK (0x7 << GPIO_BANK_SHIFT)
  28. #define BANK_PIN(BANK, PIN) ((((BANK) << GPIO_BANK_SHIFT) & GPIO_BANK_MASK) + (((PIN) << GPIO_PIN_SHIFT) & GPIO_PIN_MASK))
  29. /***************************** Structure Definition **************************/
  30. /** GPIO pin level definition */
  31. typedef enum {
  32. GPIO_LOW,
  33. GPIO_HIGH
  34. } eGPIO_pinLevel;
  35. /** GPIO pin direction definition */
  36. typedef enum {
  37. GPIO_IN,
  38. GPIO_OUT
  39. } eGPIO_pinDirection;
  40. /** GPIO pin debounce definition */
  41. typedef enum {
  42. GPIO_DEBOUNCE_DIS,
  43. GPIO_DEBOUNCE_EN
  44. } eGPIO_pinDebounce;
  45. /** GPIO pin interrupt enable definition */
  46. typedef enum {
  47. GPIO_INT_ENABLE,
  48. GPIO_INT_DISABLE
  49. } eGPIO_intEnable;
  50. /** GPIO pin interrupt type definition */
  51. typedef enum {
  52. GPIO_INT_TYPE_NONE = 0x00000000,
  53. GPIO_INT_TYPE_EDGE_RISING = 0x00000001,
  54. GPIO_INT_TYPE_EDGE_FALLING = 0x00000002,
  55. GPIO_INT_TYPE_EDGE_BOTH = (GPIO_INT_TYPE_EDGE_FALLING | GPIO_INT_TYPE_EDGE_RISING),
  56. GPIO_INT_TYPE_LEVEL_HIGH = 0x00000004,
  57. GPIO_INT_TYPE_LEVEL_LOW = 0x00000008,
  58. GPIO_INT_TYPE_LEVEL_MASK = (GPIO_INT_TYPE_LEVEL_LOW | GPIO_INT_TYPE_LEVEL_HIGH),
  59. GPIO_INT_TYPE_SENSE_MASK = 0x0000000f,
  60. GPIO_INT_TYPE_DEFAULT = GPIO_INT_TYPE_SENSE_MASK,
  61. } eGPIO_intType;
  62. /** GPIO pin interrupt mode definition */
  63. typedef enum {
  64. GPIO_INT_MODE_EDGE_RISING,
  65. GPIO_INT_MODE_EDGE_FALLING,
  66. GPIO_INT_MODE_EDGE_RISING_FALLING,
  67. GPIO_INT_MODE_LEVEL_HIGH,
  68. GPIO_INT_MODE_LEVEL_LOW,
  69. GPIO_INT_MODE_INVALID
  70. } eGPIO_intMode;
  71. #define IS_GPIO_PIN_DIR(ACTION) (((ACTION) == GPIO_IN) || ((ACTION) == GPIO_OUT))
  72. #define IS_GPIO_PIN_LEVEL(ACTION) (((ACTION) == GPIO_LOW) || ((ACTION) == GPIO_HIGH))
  73. #define IS_GPIO_PIN(PIN) ((PIN) != 0x00000000U)
  74. #define IS_GPIO_HIGH_PIN(PIN) IS_GPIO_PIN(((PIN) & 0xFFFF0000U))
  75. #define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_PIN_A0) || \
  76. ((PIN) == GPIO_PIN_A1) || \
  77. ((PIN) == GPIO_PIN_A2) || \
  78. ((PIN) == GPIO_PIN_A3) || \
  79. ((PIN) == GPIO_PIN_A4) || \
  80. ((PIN) == GPIO_PIN_A5) || \
  81. ((PIN) == GPIO_PIN_A6) || \
  82. ((PIN) == GPIO_PIN_A7) || \
  83. ((PIN) == GPIO_PIN_B0) || \
  84. ((PIN) == GPIO_PIN_B1) || \
  85. ((PIN) == GPIO_PIN_B2) || \
  86. ((PIN) == GPIO_PIN_B3) || \
  87. ((PIN) == GPIO_PIN_B4) || \
  88. ((PIN) == GPIO_PIN_B5) || \
  89. ((PIN) == GPIO_PIN_B6) || \
  90. ((PIN) == GPIO_PIN_B7) || \
  91. ((PIN) == GPIO_PIN_C0) || \
  92. ((PIN) == GPIO_PIN_C1) || \
  93. ((PIN) == GPIO_PIN_C2) || \
  94. ((PIN) == GPIO_PIN_C3) || \
  95. ((PIN) == GPIO_PIN_C4) || \
  96. ((PIN) == GPIO_PIN_C5) || \
  97. ((PIN) == GPIO_PIN_C6) || \
  98. ((PIN) == GPIO_PIN_C7) || \
  99. ((PIN) == GPIO_PIN_D0) || \
  100. ((PIN) == GPIO_PIN_D1) || \
  101. ((PIN) == GPIO_PIN_D2) || \
  102. ((PIN) == GPIO_PIN_D3) || \
  103. ((PIN) == GPIO_PIN_D4) || \
  104. ((PIN) == GPIO_PIN_D5) || \
  105. ((PIN) == GPIO_PIN_D6) || \
  106. ((PIN) == GPIO_PIN_D7))
  107. /** @} */
  108. /***************************** Function Declare ******************************/
  109. /** @defgroup GPIO_Exported_Definition_Group2 Public Functions Declare.
  110. * @{
  111. */
  112. eGPIO_pinDirection HAL_GPIO_GetPinDirection(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin);
  113. eGPIO_pinLevel HAL_GPIO_GetPinLevel(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin);
  114. eGPIO_pinLevel HAL_GPIO_GetPinData(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin);
  115. uint32_t HAL_GPIO_GetBankLevel(struct GPIO_REG *pGPIO);
  116. HAL_Status HAL_GPIO_SetPinLevel(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin, eGPIO_pinLevel level);
  117. HAL_Status HAL_GPIO_SetPinDirection(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin, eGPIO_pinDirection direction);
  118. HAL_Status HAL_GPIO_SetIntType(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin, eGPIO_intType mode);
  119. HAL_Status HAL_GPIO_SetPinsLevel(struct GPIO_REG *pGPIO, uint32_t mPins, eGPIO_pinLevel level);
  120. HAL_Status HAL_GPIO_SetPinsDirection(struct GPIO_REG *pGPIO, uint32_t mPins, eGPIO_pinDirection direction);
  121. void HAL_GPIO_EnableIRQ(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin);
  122. void HAL_GPIO_DisableIRQ(struct GPIO_REG *pGPIO, ePINCTRL_GPIO_PINS pin);
  123. void HAL_GPIO_IRQHandler(struct GPIO_REG *pGPIO, eGPIO_bankId bank);
  124. /* The parameter pin for this function is special, it's 0~31. */
  125. void HAL_GPIO_IRQDispatch(eGPIO_bankId bank, uint32_t pin);
  126. /** @} */
  127. #endif
  128. /** @} */
  129. /** @} */