mc_hall_gpio.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "bsp/mc_hall_gpio.h"
  2. static void _gpio_irq_enable(void);
  3. void mc_hall_init(void){
  4. gpio_init(HALL_1_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, HALL_1_PIN);
  5. gpio_init(HALL_2_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, HALL_2_PIN);
  6. gpio_init(HALL_3_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, HALL_3_PIN);
  7. _gpio_irq_enable();
  8. }
  9. #if 0
  10. int get_hall_stat(int samples) {
  11. int h1 = 0, h2 = 0, h3 = 0;
  12. int tres = (samples + 1) / 2;
  13. while (samples--) {
  14. h1 += READ_HALL1();
  15. h2 += READ_HALL2();
  16. h3 += READ_HALL3();
  17. }
  18. #if HALL_PLACE==DEGREES_60
  19. return (((h2>tres)^1) << 2) | ((h3 > tres) << 1) | (h2 > tres);
  20. #else
  21. return (h1 > tres) | ((h2 > tres) << 1) | ((h3 > tres) << 2);
  22. #endif
  23. }
  24. #else
  25. int get_hall_stat(int samples) {
  26. #if HALL_PLACE==DEGREES_60
  27. return (((READ_HALL2())^1) << 2) | ((READ_HALL3()) << 1) | (READ_HALL1());
  28. #else
  29. return (READ_HALL1()) | ((READ_HALL2()) << 1) | ((READ_HALL3()) << 2);
  30. #endif
  31. }
  32. #endif
  33. #ifdef GD32_DEMO
  34. static void _gpio_irq_enable(void){
  35. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_6);
  36. exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  37. exti_interrupt_flag_clear(EXTI_6);
  38. exti_interrupt_enable(EXTI_6);
  39. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_7);
  40. exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  41. exti_interrupt_flag_clear(EXTI_7);
  42. exti_interrupt_enable(EXTI_7);
  43. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_0);
  44. exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  45. exti_interrupt_flag_clear(EXTI_0);
  46. exti_interrupt_enable(EXTI_0);
  47. nvic_irq_enable(EXTI5_9_IRQn, HALL_IRQ_PRIORITY, 0U);
  48. nvic_irq_enable(EXTI0_IRQn, HALL_IRQ_PRIORITY, 0U);
  49. }
  50. #else
  51. static void _gpio_irq_enable(void){
  52. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_6);
  53. exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  54. exti_interrupt_flag_clear(EXTI_6);
  55. exti_interrupt_enable(EXTI_6);
  56. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_7);
  57. exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  58. exti_interrupt_flag_clear(EXTI_7);
  59. exti_interrupt_enable(EXTI_7);
  60. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_8);
  61. exti_init(EXTI_8, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
  62. exti_interrupt_flag_clear(EXTI_8);
  63. exti_interrupt_enable(EXTI_8);
  64. nvic_irq_enable(EXTI5_9_IRQn, HALL_IRQ_PRIORITY, 0U);
  65. }
  66. #endif