api-hal-interrupt.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "api-hal-interrupt.h"
  2. #include <furi.h>
  3. #include <main.h>
  4. #include <stm32wbxx_ll_tim.h>
  5. volatile ApiHalInterruptISR api_hal_tim_tim2_isr = NULL;
  6. void TIM2_IRQHandler(void) {
  7. if (api_hal_tim_tim2_isr) {
  8. api_hal_tim_tim2_isr();
  9. } else {
  10. HAL_TIM_IRQHandler(&htim2);
  11. }
  12. }
  13. void api_hal_interrupt_set_timer_isr(TIM_TypeDef *timer, ApiHalInterruptISR isr) {
  14. if (timer == TIM2) {
  15. if (isr) {
  16. furi_assert(api_hal_tim_tim2_isr == NULL);
  17. } else {
  18. furi_assert(api_hal_tim_tim2_isr != NULL);
  19. }
  20. api_hal_tim_tim2_isr = isr;
  21. } else {
  22. furi_check(0);
  23. }
  24. }
  25. extern void api_interrupt_call(InterruptType type, void* hw);
  26. /* ST HAL symbols */
  27. /* Comparator trigger event */
  28. void HAL_COMP_TriggerCallback(COMP_HandleTypeDef* hcomp) {
  29. api_interrupt_call(InterruptTypeComparatorTrigger, hcomp);
  30. }
  31. /* Timer update event */
  32. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
  33. api_interrupt_call(InterruptTypeTimerUpdate, htim);
  34. }