/** Set interrupt for specified timestamp * * @param timestamp The time in ticks to be set */ void lp_ticker_set_interrupt(timestamp_t timestamp) { if (timestamp == 0) { timestamp = 1; } GPT_StopTimer(GPT2); GPT_SetOutputCompareValue(GPT2, kGPT_OutputCompare_Channel1, timestamp); GPT_ClearStatusFlags(GPT2, kGPT_OutputCompare1Flag); GPT_EnableInterrupts(GPT2, kGPT_OutputCompare1InterruptEnable); GPT_StartTimer(GPT2); }
void GPT1_IRQHandler(void) { if (GPT_GetStatusFlags(GPT1, kGPT_OutputCompare1Flag) != 0) { GPT_ClearStatusFlags(GPT1, kGPT_OutputCompare1Flag); rt_device_hwtimer_isr(&GPT_timer1); } /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F, Cortex-M7, Cortex-M7F Store immediate overlapping exception return operation might vector to incorrect interrupt */ #if defined __CORTEX_M && (__CORTEX_M == 4U || __CORTEX_M == 7U) __DSB(); #endif }
static void gpt_isr(void) { GPT_ClearStatusFlags(GPT2, kGPT_OutputCompare1Flag); GPT_DisableInterrupts(GPT2, kGPT_OutputCompare1InterruptEnable); lp_ticker_irq_handler(); }
/** Clear the low power ticker interrupt * */ void lp_ticker_clear_interrupt(void) { GPT_ClearStatusFlags(GPT2, kGPT_OutputCompare1Flag); }