driver_gpio.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /*
  2. * @File name : driver_gpio.h
  3. * @Author : Bluetrum IOT Team
  4. * @Date : 2023-02-13
  5. * @Description : This file contains all the functions prototypes for the GPIO library.
  6. *
  7. * Copyright (c) by Bluetrum, All Rights Reserved.
  8. */
  9. #ifndef _DRIVER_GPIO_H
  10. #define _DRIVER_GPIO_H
  11. #include "driver_com.h"
  12. /**
  13. * @brief GPIO_Pins_Definition
  14. */
  15. #define GPIO_PIN_ALL ((uint16_t)0xffff) /* All PIN bits definition */
  16. #define GPIO_PIN_0 ((uint16_t)0x0001) /* PIN 0 bit definition */
  17. #define GPIO_PIN_1 ((uint16_t)0x0002) /* PIN 1 bit definition */
  18. #define GPIO_PIN_2 ((uint16_t)0x0004) /* PIN 2 bit definition */
  19. #define GPIO_PIN_3 ((uint16_t)0x0008) /* PIN 3 bit definition */
  20. #define GPIO_PIN_4 ((uint16_t)0x0010) /* PIN 4 bit definition */
  21. #define GPIO_PIN_5 ((uint16_t)0x0020) /* PIN 5 bit definition */
  22. #define GPIO_PIN_6 ((uint16_t)0x0040) /* PIN 6 bit definition */
  23. #define GPIO_PIN_7 ((uint16_t)0x0080) /* PIN 7 bit definition */
  24. #define GPIO_PIN_8 ((uint16_t)0x0100) /* PIN 8 bit definition */
  25. #define GPIO_PIN_9 ((uint16_t)0x0200) /* PIN 9 bit definition */
  26. #define GPIO_PIN_10 ((uint16_t)0x0400) /* PIN 10 bit definition */
  27. #define GPIO_PIN_11 ((uint16_t)0x0800) /* PIN 11 bit definition */
  28. #define GPIO_PIN_12 ((uint16_t)0x1000) /* PIN 12 bit definition */
  29. #define GPIO_PIN_13 ((uint16_t)0x2000) /* PIN 13 bit definition */
  30. #define GPIO_PIN_14 ((uint16_t)0x4000) /* PIN 14 bit definition */
  31. #define GPIO_PIN_15 ((uint16_t)0x8000) /* PIN 15 bit definition */
  32. /**
  33. * @brief GPIO Function Mapping Crossbar Peripheral Definition
  34. */
  35. typedef enum {
  36. GPIO_CROSSBAR_OUT_I2CSCL = 5,
  37. GPIO_CROSSBAR_OUT_I2CSDA,
  38. GPIO_CROSSBAR_OUT_T3PWM0,
  39. GPIO_CROSSBAR_OUT_T3PWM1,
  40. GPIO_CROSSBAR_OUT_T3PWM2,
  41. GPIO_CROSSBAR_OUT_TOC1,
  42. GPIO_CROSSBAR_OUT_TOC1N,
  43. GPIO_CROSSBAR_OUT_TOC2,
  44. GPIO_CROSSBAR_OUT_TOC2N,
  45. GPIO_CROSSBAR_OUT_TOC3,
  46. GPIO_CROSSBAR_OUT_TOC3N,
  47. GPIO_CROSSBAR_OUT_TOC4,
  48. GPIO_CROSSBAR_OUT_UARTTX,
  49. GPIO_CROSSBAR_OUT_UDETTX,
  50. GPIO_CROSSBAR_OUT_HURTX,
  51. GPIO_CROSSBAR_OUT_HURRTS,
  52. GPIO_CROSSBAR_OUT_SPI1D0,
  53. GPIO_CROSSBAR_OUT_SPI1D1,
  54. GPIO_CROSSBAR_OUT_SPI1D2,
  55. GPIO_CROSSBAR_OUT_SPI1D3,
  56. GPIO_CROSSBAR_OUT_SPI1CLK,
  57. GPIO_CROSSBAR_OUT_LPWM,
  58. GPIO_CROSSBAR_OUT_LEDCDAT,
  59. GPIO_CROSSBAR_OUT_IRTX,
  60. GPIO_CROSSBAR_OUT_CLKOUT,
  61. GPIO_CROSSBAR_PERIPHERAL_INPUT_BASE,
  62. GPIO_CROSSBAR_IN_UARTRX,
  63. GPIO_CROSSBAR_IN_UDETRX,
  64. GPIO_CROSSBAR_IN_SPI1CLK,
  65. GPIO_CROSSBAR_IN_SPI1DI0,
  66. GPIO_CROSSBAR_IN_SPI1DI1,
  67. GPIO_CROSSBAR_IN_HURRX,
  68. GPIO_CROSSBAR_IN_HURCTS,
  69. GPIO_CROSSBAR_IN_T0CAP,
  70. GPIO_CROSSBAR_IN_T1CAP,
  71. GPIO_CROSSBAR_IN_T2CAP,
  72. GPIO_CROSSBAR_IN_T3CAP,
  73. GPIO_CROSSBAR_IN_TBKIN,
  74. GPIO_CROSSBAR_IN_TETR,
  75. GPIO_CROSSBAR_IN_I2CSCL,
  76. GPIO_CROSSBAR_IN_I2CSDA,
  77. GPIO_CROSSBAR_IN_IRRX,
  78. GPIO_CROSSBAR_IN_QDECXDI0,
  79. GPIO_CROSSBAR_IN_QDECXDI1,
  80. GPIO_CROSSBAR_IN_QDECYDI0,
  81. GPIO_CROSSBAR_IN_QDECYDI1,
  82. GPIO_CROSSBAR_IN_QDECZDI0,
  83. GPIO_CROSSBAR_IN_QDECZDI1,
  84. GPIO_CROSSBAR_IN_SDCMD,
  85. GPIO_CROSSBAR_IN_SDDAT0,
  86. GPIO_CROSSBAR_PERIPHERAL_MAX_IDX,
  87. } GPIO_CROSSBAR_PERIPHERAL_DEF;
  88. /**
  89. * @brief Bits detinition for GPIO
  90. */
  91. typedef enum {
  92. BIT_RESET = 0,
  93. BIT_SET,
  94. } BIT_ACTION;
  95. /**
  96. * @brief GPIO direction enumeration
  97. */
  98. typedef enum {
  99. GPIO_DIR_OUTPUT = 0x00,
  100. GPIO_DIR_INPUT = 0x01,
  101. } GPIO_DIR_TYPEDEF;
  102. /**
  103. * @brief GPIO input pull resistance enumeration
  104. */
  105. typedef enum {
  106. GPIO_PUPD_NULL = 0x00,
  107. GPIO_PUPD_PU10K = 0x01,
  108. GPIO_PUPD_PD10K = 0x02,
  109. GPIO_PUPD_PU200K = 0x03,
  110. GPIO_PUPD_PD200K = 0x04,
  111. GPIO_PUPD_PU300 = 0x05,
  112. GPIO_PUPD_PD300 = 0x06,
  113. } GPIO_PUPD_TYPEDEF;
  114. /**
  115. * @brief GPIO port type enumeration
  116. */
  117. typedef enum {
  118. GPIO_MODE_ANALOG = 0x00,
  119. GPIO_MODE_DIGITAL = 0x01,
  120. } GPIO_MODE_TYPEDEF;
  121. /**
  122. * @brief GPIO function mapping enable enumeration
  123. */
  124. typedef enum {
  125. GPIO_FEN_GPIO = 0x00,
  126. GPIO_FEN_PER = 0x01,
  127. } GPIO_FEN_TYPEDEF;
  128. /**
  129. * @brief GPIO function mapping direction select register
  130. */
  131. typedef enum {
  132. GPIO_FDIR_SELF = 0x00,
  133. GPIO_FDIR_MAP = 0x01,
  134. } GPIO_FDIR_TYPEDEF;
  135. /**
  136. * @brief GPIO output current enumeration, specially PB4 can output 64mA.
  137. */
  138. typedef enum {
  139. GPIO_DRV_6MA = 0x00,
  140. GPIO_DRV_24MA = 0x01,
  141. GPIO_DRV_64MA = (3 << 10),
  142. } GPIO_DRV_TYPEDEF;
  143. typedef enum {
  144. GPIO_EDGE_RISING = 0x00,
  145. GPIO_EDGE_FALLING = 0x01,
  146. } GPIO_EDGE_SEL;
  147. typedef enum {
  148. WAKEUP_IDX_PA7,
  149. WAKEUP_IDX_PB1,
  150. WAKEUP_IDX_PB2,
  151. WAKEUP_IDX_PB3,
  152. WAKEUP_IDX_PB4,
  153. WAKEUP_IDX_WK0,
  154. WAKEUP_IDX_PORT_FALL,
  155. WAKEUP_IDX_PORT_RISE,
  156. WAKEUP_IDX_MAX,
  157. } GPIO_WAKEUP_IDX;
  158. /**
  159. * @brief GPIO Init Structure
  160. */
  161. typedef struct {
  162. uint32_t gpio_pin;
  163. GPIO_DIR_TYPEDEF gpio_dir;
  164. GPIO_PUPD_TYPEDEF gpio_pupd;
  165. GPIO_MODE_TYPEDEF gpio_mode;
  166. GPIO_FEN_TYPEDEF gpio_fen;
  167. GPIO_FDIR_TYPEDEF gpio_fdir;
  168. GPIO_DRV_TYPEDEF gpio_drv;
  169. } gpio_init_typedef;
  170. typedef struct {
  171. GPIO_EDGE_SEL edge;
  172. gpio_typedef *gpiox;
  173. uint16_t gpio_pin;
  174. GPIO_PUPD_TYPEDEF gpio_pupd;
  175. } gpio_edge_cap_typedef;
  176. #define GPIO_SUPPORT_STRONG_CURRENT(drv, gpiox, pin_idx) ((GPIO_DRV_64MA == drv) && (GPIOB_REG == gpiox) && (GPIO_PIN_4 == (1 << pin_idx)))
  177. /************************ Function used to set or R/W GPIO *************************/
  178. void gpio_init(gpio_typedef *gpiox, gpio_init_typedef *gpio_init_struct);
  179. uint32_t gpio_deinit(gpio_typedef *gpiox, uint16_t gpio_pin);
  180. void gpio_set_bits(gpio_typedef *gpiox, uint16_t gpio_pin);
  181. void gpio_reset_bits(gpio_typedef *gpiox, uint16_t gpio_pin);
  182. void gpio_write_data(gpio_typedef *gpiox, uint16_t port_val);
  183. void gpio_toggle_bits(gpio_typedef *gpiox, uint16_t gpio_pin);
  184. uint16_t gpio_read_data(gpio_typedef *gpiox);
  185. uint8_t gpio_read_bit(gpio_typedef *gpiox, uint16_t gpio_pin);
  186. void gpio_func_mapping_config(gpio_typedef* gpiox, uint16_t gpio_pin, GPIO_CROSSBAR_PERIPHERAL_DEF func_idx);
  187. void gpio_func_mapping_clear(gpio_typedef* gpiox, uint16_t gpio_pin);
  188. void wko_io_config(FUNCTIONAL_STATE pull_up_en, FUNCTIONAL_STATE pull_down_en, FUNCTIONAL_STATE input_en);
  189. FLAG_STATE wko_io_read_bit(void);
  190. void wk0_edge_capture_config(GPIO_EDGE_SEL edge);
  191. void gpio_edge_capture_config(gpio_edge_cap_typedef* config);
  192. bool gpio_is_edge_pending(void);
  193. void gpio_edge_pending_clear(void);
  194. void gpio_edge_pic_config(isr_t isr, int pr);
  195. void gpio_edge_pic_disable(void);
  196. void gpio_set_input(gpio_typedef* gpiox, uint16_t gpio_pin);
  197. void gpio_set_out(gpio_typedef* gpiox, uint16_t gpio_pin);
  198. #endif // _DRIVER_GPIO_H