static void sam_oneshot_handler(TC_HANDLE tch, void *arg, uint32_t sr) { struct sam_oneshot_s *oneshot = (struct sam_oneshot_s *)arg; oneshot_handler_t oneshot_handler; void *oneshot_arg; tmrinfo("Expired...\n"); DEBUGASSERT(oneshot && oneshot->handler); /* The clock was stopped, but not disabled when the RC match occurred. * Disable the TC now and disable any further interrupts. */ sam_tc_attach(oneshot->tch, NULL, NULL, 0); sam_tc_stop(oneshot->tch); /* The timer is no longer running */ oneshot->running = false; /* Forward the event, clearing out any vestiges */ oneshot_handler = (oneshot_handler_t)oneshot->handler; oneshot->handler = NULL; oneshot_arg = (void *)oneshot->arg; oneshot->arg = NULL; oneshot->start_count = 0; oneshot_handler(oneshot_arg); }
static int stm32l4_oneshot_handler(int irq, void *context, void *arg) { struct stm32l4_oneshot_s *oneshot = (struct stm32l4_oneshot_s *) arg; oneshot_handler_t oneshot_handler; FAR void *oneshot_arg; tmrinfo("Expired...\n"); DEBUGASSERT(oneshot != NULL && oneshot->handler); /* The clock was stopped, but not disabled when the RC match occurred. * Disable the TC now and disable any further interrupts. */ STM32L4_TIM_SETISR(oneshot->tch, NULL, NULL, 0); STM32L4_TIM_DISABLEINT(oneshot->tch, 0); STM32L4_TIM_SETMODE(oneshot->tch, STM32L4_TIM_MODE_DISABLED); STM32L4_TIM_ACKINT(oneshot->tch, 0); /* The timer is no longer running */ oneshot->running = false; /* Forward the event, clearing out any vestiges */ oneshot_handler = (oneshot_handler_t)oneshot->handler; oneshot->handler = NULL; oneshot_arg = (void *)oneshot->arg; oneshot->arg = NULL; oneshot_handler(oneshot_arg); return OK; }