static void lptmr_isr(void) { LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag); LPTMR_StopTimer(LPTMR0); lp_ticker_irq_handler(); }
void RTC_IRQHandler(void) { uint32_t flags; flags = RTC_IntGet(); if ((flags & RTC_IF_COMP0) && rtc_inited) { RTC_IntClear(RTC_IF_COMP0); lp_ticker_irq_handler(); } }
/** * Interrupt Handler */ void __lp_ticker_irq_handler(void) { if (DualTimer_GetIRQInfo(DUALTIMER0) == SINGLETIMER2) { DualTimer_ClearInterrupt(DUALTIMER0); lp_ticker_overflows_count++; } else { lp_ticker_irq_handler(); } }
static void tmr3_vec(void) { TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); cd_major_minor_clks = (cd_major_minor_clks > cd_minor_clks) ? (cd_major_minor_clks - cd_minor_clks) : 0; if (cd_major_minor_clks == 0) { // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); lp_ticker_irq_handler(); } else { lp_ticker_arm_cd(); } }
/** * Interrupt Handler */ void __lp_ticker_irq_handler(void) { if (DualTimer_GetIRQInfo(DUALTIMER0) == SINGLETIMER2) { DualTimer_ClearInterrupt(DUALTIMER0); /* * For each overflow event adds the timer max represented value to * the delta. This allows the lp_ticker to keep track of the elapsed * time: * elapsed_time = (num_overflow * overflow_limit) + current_time */ lp_ticker_overflows_delta += lp_ticker_overflow_limit; } else { lp_ticker_irq_handler(); } }
void TICKER_COUNTER_Handlr2(void) { uint32_t status=tc_get_status(TICKER_COUNTER_lp, TICKER_COUNTER_CHANNEL2); uint32_t interrupmask=tc_get_interrupt_mask(TICKER_COUNTER_lp, TICKER_COUNTER_CHANNEL2); if (((status & interrupmask) & TC_IER_CPCS)) { if(lp_ticker_interrupt_counter) { lp_ticker_interrupt_counter--; } else { if(lp_ticker_interrupt_offset) { tc_stop(TICKER_COUNTER_lp, TICKER_COUNTER_CHANNEL2); tc_write_rc(TICKER_COUNTER_lp, TICKER_COUNTER_CHANNEL2, (uint32_t)lp_ticker_interrupt_offset); tc_start(TICKER_COUNTER_lp, TICKER_COUNTER_CHANNEL2); lp_ticker_interrupt_offset=0; } else { lp_ticker_irq_handler(); } } } }
static void rtc_isr(void) { uint32_t sr = RTC->SR; if (sr & RTC_SR_TOF_MASK) { // Reset RTC to 0 so it keeps counting RTC_StopTimer(RTC); RTC->TSR = 0; RTC_StartTimer(RTC); } else if (sr & RTC_SR_TAF_MASK) { RTC_DisableInterrupts(RTC, kRTC_AlarmInterruptEnable); RTC->TAR = 0; /* Write clears the IRQ flag */ /* Wait subsecond remainder if any */ if (lptmr_schedule) { LPTMR_SetTimerPeriod(LPTMR0, lptmr_schedule); LPTMR_EnableInterrupts(LPTMR0, kLPTMR_TimerInterruptEnable); LPTMR_StartTimer(LPTMR0); } else { lp_ticker_irq_handler(); } } else if (sr & RTC_SR_TIF_MASK) { RTC_DisableInterrupts(RTC, kRTC_TimeOverflowInterruptEnable); } }
void COMMON_RTC_IRQ_HANDLER(void) #endif { if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, US_TICKER_EVENT)) { us_ticker_irq_handler(); } #if DEVICE_LOWPOWERTIMER if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, LP_TICKER_EVENT)) { lp_ticker_irq_handler(); } #endif if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, NRF_RTC_EVENT_OVERFLOW)) { nrf_rtc_event_clear(COMMON_RTC_INSTANCE, NRF_RTC_EVENT_OVERFLOW); // Don't disable this event. It shall occur periodically. ++m_common_rtc_overflows; } }
static void gpt_isr(void) { GPT_ClearStatusFlags(GPT2, kGPT_OutputCompare1Flag); GPT_DisableInterrupts(GPT2, kGPT_OutputCompare1InterruptEnable); lp_ticker_irq_handler(); }