| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include "bsp/mc_hall_gpio.h"
- static void _gpio_irq_enable(void);
- void mc_hall_init(void){
- rcu_periph_clock_enable(HALL_GPOI_CLK);
- gpio_init(HALL_1_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, HALL_1_PIN);
- gpio_init(HALL_2_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, HALL_2_PIN);
- gpio_init(HALL_3_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, HALL_3_PIN);
- _gpio_irq_enable();
- }
- #if 0
- int get_hall_stat(int samples) {
- int h1 = 0, h2 = 0, h3 = 0;
- int tres = (samples + 1) / 2;
- while (samples--) {
- h1 += READ_HALL1();
- h2 += READ_HALL2();
- h3 += READ_HALL3();
- }
- #if HALL_PLACE==DEGREES_60
- return (((h2>tres)^1) << 2) | ((h3 > tres) << 1) | (h2 > tres);
- #else
- return (h1 > tres) | ((h2 > tres) << 1) | ((h3 > tres) << 2);
- #endif
- }
- #else
- int get_hall_stat(int samples) {
- #if HALL_PLACE==DEGREES_60
- return (((READ_HALL2())^1) << 2) | ((READ_HALL3()) << 1) | (READ_HALL1());
- #else
- return (READ_HALL1()) | ((READ_HALL2()) << 1) | ((READ_HALL3()) << 2);
- #endif
- }
- #endif
- static void _gpio_irq_enable(void){
- gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_6);
- exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
- exti_interrupt_flag_clear(EXTI_6);
- exti_interrupt_enable(EXTI_6);
- gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_7);
- exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
- exti_interrupt_flag_clear(EXTI_7);
- exti_interrupt_enable(EXTI_7);
- gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_8);
- exti_init(EXTI_8, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
- exti_interrupt_flag_clear(EXTI_8);
- exti_interrupt_enable(EXTI_8);
- nvic_irq_enable(EXTI5_9_IRQn, HALL_IRQ_PRIORITY, 0U);
- }
|