shark_xl.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "shark_xl.h"
  2. #include "common.h"
  3. #include "app_end_ctr.h"
  4. shark_u16 shark_xl_ticks;
  5. shark_u8 shark_xl_skip;
  6. shark_u16 shark_xl_speed_max;
  7. shark_u16 shark_xl_speed_tmp;
  8. shark_u16 shark_xl_speed;
  9. void shark_xl_init(void)
  10. {
  11. rcu_periph_clock_enable(GPIO_RCU_XL);
  12. gpio_init(GPIO_PORT_XL, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_XL);
  13. gpio_exti_source_select(EXTI_PORT_XL, EXTI_PIN_XL);
  14. exti_init(EXTI_XL, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
  15. exti_interrupt_flag_clear(EXTI_XL);
  16. }
  17. void shark_xl_tick(void)
  18. {
  19. if (shark_xl_ticks < CONFIG_XL_TICKS) {
  20. shark_xl_ticks++;
  21. if (gpio_input_bit_get(GPIO_PORT_XL, GPIO_PIN_XL) == RESET) {
  22. shark_xl_speed_tmp++;
  23. }
  24. } else {
  25. shark_xl_ticks = 0;
  26. if (shark_xl_skip > 0) {
  27. shark_xl_skip--;
  28. shark_xl_speed = 0;
  29. } else {
  30. shark_xl_speed = shark_xl_speed_tmp;
  31. }
  32. end_ctr_self_ss_new.xl_sta = (shark_xl_speed > CONFIG_XL_MIN);
  33. if (shark_xl_speed_max < shark_xl_speed) {
  34. shark_xl_speed_max = shark_xl_speed;
  35. }
  36. shark_xl_speed_tmp = 0;
  37. exti_interrupt_enable(EXTI_XL);
  38. }
  39. }
  40. void shark_xl_isr(void)
  41. {
  42. if (++shark_xl_speed_tmp > CONFIG_XL_MAX) {
  43. exti_interrupt_disable(EXTI_XL);
  44. }
  45. }