gpio.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #include "bsp/bsp_driver.h"
  2. #include "libs/utils.h"
  3. /*
  4. * gpio.c
  5. * all pins used as gpio(in/out/irq) must be init&accessed here
  6. */
  7. void gpio_pin_init(void){
  8. rcu_apb2_periph_clock_enable(RCU_GPIOA);
  9. rcu_apb2_periph_clock_enable(RCU_GPIOB);
  10. rcu_apb2_periph_clock_enable(RCU_GPIOC);
  11. rcu_apb2_periph_clock_enable(RCU_GPIOD);
  12. rcu_apb2_periph_clock_enable(RCU_AF);
  13. #ifdef CONFIG_BEEP
  14. gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
  15. gpio_beep(50);
  16. #endif
  17. }
  18. void gpio_beep(u32 ms) {
  19. #ifdef CONFIG_BEEP
  20. gpio_bit_write(GPIOB, GPIO_PIN_2, SET);
  21. delay_ms(ms);
  22. gpio_bit_write(GPIOB, GPIO_PIN_2, RESET);
  23. #endif
  24. }
  25. void gpio_mc_brk_init(void) {
  26. #ifdef GPIO_BRAKE_IN_GROUP
  27. rcu_apb2_periph_clock_enable(GPIO_BRAKE_IN_RCU);
  28. #ifdef GPIO_BRAKE_PIN_REMAP
  29. gpio_pin_remap_config(GPIO_BRAKE_PIN_REMAP, ENABLE);
  30. #endif
  31. gpio_init(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE_IN_PIN);
  32. gpio_exti_source_select(GPIO_BRAKE_EXIT_SRC_GROUP, GPIO_BRAKE_EXIT_SRC_PIN);
  33. exti_init(GPIO_BRAKE_EXTI, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  34. nvic_irq_enable(GPIO_BRAKE_IRQ, EBREAK_IRQ_PRIORITY, 0U);
  35. exti_interrupt_flag_clear(GPIO_BRAKE_EXTI);
  36. exti_interrupt_enable(GPIO_BRAKE_EXTI);
  37. #endif
  38. #ifdef GPIO_BRAKE1_IN_GROUP
  39. rcu_periph_clock_enable(GPIO_BRAKE1_IN_RCU);
  40. gpio_init(GPIO_BRAKE1_IN_GROUP, GPIO_BRAKE1_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE1_IN_PIN);
  41. gpio_exti_source_select(GPIO_BRAKE1_EXIT_SRC_GROUP, GPIO_BRAKE1_EXIT_SRC_PIN);
  42. exti_init(GPIO_BRAKE1_EXTI, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  43. nvic_irq_enable(GPIO_BRAKE1_IRQ, EBREAK_IRQ_PRIORITY, 0U);
  44. exti_interrupt_flag_clear(GPIO_BRAKE1_EXTI);
  45. exti_interrupt_enable(GPIO_BRAKE1_EXTI);
  46. #endif
  47. }
  48. void gpio_mlock_init(void) {
  49. #ifdef GPIO_MLOCK_IN_GROUP
  50. rcu_apb2_periph_clock_enable(GPIO_MLOCK_IN_RCU);
  51. gpio_init(GPIO_MLOCK_IN_GROUP, GPIO_MLOCK_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_MLOCK_IN_PIN);
  52. #endif
  53. }
  54. void gpio_fan_det_init(void) {
  55. #ifdef GPIO_FAN1_IN_GROUP
  56. rcu_apb2_periph_clock_enable(GPIO_FAN1_IN_RCU);
  57. gpio_init(GPIO_FAN1_IN_GROUP, GPIO_FAN1_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_FAN1_IN_PIN);
  58. gpio_exti_source_select(GPIO_FAN1_EXIT_SRC_GROUP, GPIO_FAN1_EXIT_SRC_PIN);
  59. exti_init(GPIO_FAN1_EXTI, EXTI_INTERRUPT, EXTI_TRIG_RISING);
  60. nvic_irq_enable(GPIO_FAN1_IRQ, ENC_OTHER_IRQ_PRIORITY, 0U);
  61. exti_interrupt_flag_clear(GPIO_FAN1_EXTI);
  62. exti_interrupt_enable(GPIO_FAN1_EXTI);
  63. #endif
  64. #ifdef GPIO_FAN2_IN_GROUP
  65. rcu_periph_clock_enable(GPIO_FAN2_IN_RCU);
  66. gpio_init(GPIO_FAN2_IN_GROUP, GPIO_FAN2_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_FAN2_IN_PIN);
  67. gpio_exti_source_select(GPIO_FAN2_EXIT_SRC_GROUP, GPIO_FAN2_EXIT_SRC_PIN);
  68. exti_init(GPIO_FAN2_EXTI, EXTI_INTERRUPT, EXTI_TRIG_RISING);
  69. nvic_irq_enable(GPIO_FAN2_IRQ, ENC_OTHER_IRQ_PRIORITY, 0U);
  70. exti_interrupt_flag_clear(GPIO_FAN2_EXTI);
  71. exti_interrupt_enable(GPIO_FAN2_EXTI);
  72. #endif
  73. }
  74. void gpio_phase_u_detect(bool enable) {
  75. #ifdef GPIO_UDEC_OUT_GROUP
  76. if (enable) {
  77. gpio_init(GPIO_UDEC_OUT_GROUP, GPIO_UDEC_OUT_MODE, GPIO_OSPEED_50MHZ, GPIO_UDEC_OUT_PIN);
  78. #ifdef GPIO_UDEC_OUT_REMAP_DISABLE
  79. gpio_pin_remap_config(GPIO_UDEC_OUT_REMAP_DISABLE, ENABLE);
  80. #endif
  81. gpio_bit_write(GPIO_UDEC_OUT_GROUP, GPIO_UDEC_OUT_PIN, SET);
  82. }else {
  83. gpio_init(GPIO_UDEC_OUT_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_UDEC_OUT_PIN);
  84. #ifdef GPIO_UDEC_OUT_REMAP_ENABLE
  85. gpio_pin_remap_config(GPIO_UDEC_OUT_REMAP_ENABLE, ENABLE);
  86. #endif
  87. }
  88. #endif
  89. }
  90. void gpio_led_init(void) {
  91. #ifdef GPIO_LED_OUT_GROUP
  92. rcu_apb2_periph_clock_enable(GPIO_LED_OUT_RCU);
  93. gpio_init(GPIO_LED_OUT_GROUP, GPIO_LED_OUT_MODE, GPIO_OSPEED_50MHZ, GPIO_LED_OUT_PIN);
  94. gpio_bit_reset(GPIO_LED_OUT_GROUP, GPIO_LED_OUT_PIN);
  95. #endif
  96. }
  97. void gpio_brk_light_init(void) {
  98. #ifdef GPIO_BRAKE_LIGHT_OUT_GROUP
  99. rcu_apb2_periph_clock_enable(GPIO_BRAKE_LIGHT_OUT_RCU);
  100. gpio_init(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE_LIGHT_OUT_PIN);
  101. gpio_bit_reset(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_PIN);
  102. #endif
  103. }
  104. void mc_gpio_init(void) {
  105. gpio_mlock_init();
  106. gpio_mc_brk_init();
  107. gpio_fan_det_init();
  108. gpio_led_init();
  109. gpio_brk_light_init();
  110. }
  111. void gpio_led_enable(bool enable) {
  112. #ifdef GPIO_LED_OUT_GROUP
  113. gpio_bit_write(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_PIN, enable?SET:RESET);
  114. #endif
  115. }
  116. void gpio_brk_light_enable(bool enable) {
  117. #ifdef GPIO_BRAKE_LIGHT_OUT_GROUP
  118. gpio_bit_write(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_PIN, enable?SET:RESET);
  119. #endif
  120. }
  121. bool mc_get_gpio_brake(void) {
  122. return gpio_input_bit_get(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_PIN) == SET;
  123. }
  124. bool mc_get_gpio_brake1(void) {
  125. #ifdef GPIO_BRAKE1_IN_GROUP
  126. return gpio_input_bit_get(GPIO_BRAKE1_IN_GROUP, GPIO_BRAKE1_IN_PIN) == SET;
  127. #else
  128. return mc_get_gpio_brake();
  129. #endif
  130. }
  131. bool gpio_motor_locked(void) {
  132. #ifdef GPIO_MLOCK_IN_GROUP
  133. return gpio_input_bit_get(GPIO_MLOCK_IN_GROUP, GPIO_MLOCK_IN_PIN) == RESET;
  134. #else
  135. return false;
  136. #endif
  137. }