gpio.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "bsp/gpio.h"
  2. #include "libs/utils.h"
  3. #ifdef GD32_FOC_DEMO
  4. #define IR2136S_Enable_pin 0
  5. #define LED1_Enable_pin 1
  6. #define LED2_Enable_pin 2
  7. #define LED3_Enable_pin 3
  8. #define KEY_Start_pin 4
  9. #define KEY_Stop_pin 5
  10. #define KEY_Func_pin 6
  11. #endif
  12. /*
  13. * gpio.c
  14. * all pins used as gpio(in/out/irq) must be init&accessed here
  15. */
  16. const static gpio_pin_config_t _pins[] = {
  17. #ifdef GD32_FOC_DEMO
  18. [IR2136S_Enable_pin] = {GPIOA, GPIO_PIN_12, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
  19. [LED1_Enable_pin] = {GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
  20. [LED2_Enable_pin] = {0, GPIO_PIN_9, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
  21. [LED3_Enable_pin] = {GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
  22. [KEY_Start_pin] = {GPIOB, GPIO_PIN_5, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, 0},
  23. [KEY_Stop_pin] = {GPIOB, GPIO_PIN_11, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, 0},
  24. #endif
  25. };
  26. void gpio_pin_init(void){
  27. rcu_periph_clock_enable(RCU_GPIOA);
  28. rcu_periph_clock_enable(RCU_GPIOB);
  29. rcu_periph_clock_enable(RCU_GPIOC);
  30. rcu_periph_clock_enable(RCU_GPIOD);
  31. rcu_periph_clock_enable(RCU_GPIOF);
  32. rcu_periph_clock_enable(RCU_AF);
  33. for (int i = 0; i < ARRAY_SIZE(_pins); i++){
  34. if (_pins[i].init_value != -1){
  35. gpio_bit_write(_pins[i].group, _pins[i].pin, (bit_status)_pins[i].init_value);
  36. }
  37. if (_pins[i].group != 0) {
  38. gpio_init(_pins[i].group, _pins[i].mode, _pins[i].speed, _pins[i].pin);
  39. }
  40. }
  41. #ifdef CONFIG_BEEP
  42. gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
  43. gpio_beep(50);
  44. #endif
  45. }
  46. void gpio_beep(u32 ms) {
  47. #ifdef CONFIG_BEEP
  48. gpio_bit_write(GPIOB, GPIO_PIN_2, SET);
  49. delay_ms(ms);
  50. gpio_bit_write(GPIOB, GPIO_PIN_2, RESET);
  51. #endif
  52. }
  53. void mc_brk_gpio_init(void) {
  54. #ifdef GPIO_BRAKE_IN_GROUP
  55. rcu_periph_clock_enable(GPIO_BRAKE_IN_RCU);
  56. gpio_init(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE_IN_PIN);
  57. gpio_exti_source_select(GPIO_BRAKE_EXIT_SRC_GROUP, GPIO_BRAKE_EXIT_SRC_PIN);
  58. exti_init(GPIO_BRAKE_EXTI, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  59. nvic_irq_enable(GPIO_BRAKE_IRQ, EBREAK_IRQ_PRIORITY, 0U);
  60. exti_interrupt_flag_clear(GPIO_BRAKE_EXTI);
  61. exti_interrupt_enable(GPIO_BRAKE_EXTI);
  62. #endif
  63. }
  64. void gpio_phase_u_detect(bool enable) {
  65. #ifdef GPIO_UDEC_OUT_GROUP
  66. if (enable) {
  67. gpio_init(GPIO_UDEC_OUT_GROUP, GPIO_UDEC_OUT_MODE, GPIO_OSPEED_50MHZ, GPIO_UDEC_OUT_PIN);
  68. #ifdef GPIO_UDEC_OUT_REMAP_DISABLE
  69. gpio_pin_remap_config(GPIO_UDEC_OUT_REMAP_DISABLE, ENABLE);
  70. #endif
  71. gpio_bit_write(GPIO_UDEC_OUT_GROUP, GPIO_UDEC_OUT_PIN, SET);
  72. }else {
  73. gpio_init(GPIO_UDEC_OUT_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_UDEC_OUT_PIN);
  74. #ifdef GPIO_UDEC_OUT_REMAP_ENABLE
  75. gpio_pin_remap_config(GPIO_UDEC_OUT_REMAP_ENABLE, ENABLE);
  76. #endif
  77. }
  78. #endif
  79. }
  80. bool mc_get_gpio_brake(void) {
  81. return gpio_input_bit_get(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_PIN) == SET;
  82. }
  83. void gpio_ir2136_enable(bool enable) {
  84. #ifdef GD32_FOC_DEMO
  85. gpio_bit_write(_pins[IR2136S_Enable_pin].group, _pins[IR2136S_Enable_pin].pin, (enable)?SET:RESET);
  86. #endif
  87. }
  88. void gpio_led1_enable(bool enable) {
  89. #ifdef GD32_FOC_DEMO
  90. gpio_bit_write(_pins[LED1_Enable_pin].group, _pins[LED1_Enable_pin].pin, (enable)?SET:RESET);
  91. #endif
  92. }
  93. void gpio_led2_enable(bool enable) {
  94. #ifdef GD32_FOC_DEMO
  95. //gpio_bit_write(_pins[LED2_Enable_pin].group, _pins[LED2_Enable_pin].pin, (enable)?SET:RESET);
  96. #endif
  97. }
  98. void gpio_led3_enable(bool enable) {
  99. #ifdef GD32_FOC_DEMO
  100. gpio_bit_write(_pins[LED3_Enable_pin].group, _pins[LED3_Enable_pin].pin, (enable)?SET:RESET);
  101. #endif
  102. }
  103. int gpio_startkey_value(void) {
  104. #ifdef GD32_FOC_DEMO
  105. return gpio_input_bit_get(_pins[KEY_Start_pin].group, _pins[KEY_Start_pin].pin)==SET?1:0;
  106. #else
  107. return 1;
  108. #endif
  109. }
  110. int gpio_stopkey_value(void) {
  111. #ifdef GD32_FOC_DEMO
  112. return gpio_input_bit_get(_pins[KEY_Stop_pin].group, _pins[KEY_Stop_pin].pin)==SET?1:0;
  113. #else
  114. return 1;
  115. #endif
  116. }
  117. int gpio_funckey_value(void) {
  118. return 0;
  119. }