/** Initialize the low power ticker * */ void lp_ticker_init(void) { lptmr_config_t lptmrConfig; if (lp_ticker_inited) { return; } lp_ticker_inited = true; /* Setup low resolution clock - RTC */ if (!rtc_isenabled()) { rtc_init(); RTC_DisableInterrupts(RTC, kRTC_AlarmInterruptEnable | kRTC_SecondsInterruptEnable); RTC_StartTimer(RTC); } RTC->TAR = 0; /* Write clears the IRQ flag */ NVIC_ClearPendingIRQ(RTC_IRQn); NVIC_SetVector(RTC_IRQn, (uint32_t)rtc_isr); NVIC_EnableIRQ(RTC_IRQn); /* Setup high resolution clock - LPTMR */ LPTMR_GetDefaultConfig(&lptmrConfig); /* Use 32kHz drive */ CLOCK_SetXtal32Freq(OSC32K_CLK_HZ); lptmrConfig.prescalerClockSource = kLPTMR_PrescalerClock_2; LPTMR_Init(LPTMR0, &lptmrConfig); LPTMR_EnableInterrupts(LPTMR0, kLPTMR_TimerInterruptEnable); NVIC_ClearPendingIRQ(LPTMR0_IRQn); NVIC_SetVector(LPTMR0_IRQn, (uint32_t)lptmr_isr); EnableIRQ(LPTMR0_IRQn); }
/* Enable the trigger source of LPTimer */ static void LPTMR_InitTriggerSourceOfAdc(LPTMR_Type *base) { lptmr_config_t lptmrUserConfig; /* * lptmrUserConfig.timerMode = kLPTMR_TimerModeTimeCounter; * lptmrUserConfig.pinSelect = kLPTMR_PinSelectInput_0; * lptmrUserConfig.pinPolarity = kLPTMR_PinPolarityActiveHigh; * lptmrUserConfig.enableFreeRunning = false; * lptmrUserConfig.bypassPrescaler = true; * lptmrUserConfig.prescalerClockSource = kLPTMR_PrescalerClock_1; * lptmrUserConfig.value = kLPTMR_Prescale_Glitch_0; */ LPTMR_GetDefaultConfig(&lptmrUserConfig); /* Init LPTimer driver */ LPTMR_Init(base, &lptmrUserConfig); /* Set the LPTimer period */ LPTMR_SetTimerPeriod(base, LPTMR_COMPARE_VALUE); /* Start the LPTimer */ LPTMR_StartTimer(base); /* Configure SIM for ADC hw trigger source selection */ BOARD_ConfigTriggerSource(); }
/*! * @brief Main function */ int main(void) { uint32_t currentCounter = 0U; lptmr_config_t lptmrConfig; LED_INIT(); /* Board pin, clock, debug console init */ BOARD_InitPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); /* Configure LPTMR */ /* * lptmrConfig.timerMode = kLPTMR_TimerModeTimeCounter; * lptmrConfig.pinSelect = kLPTMR_PinSelectInput_0; * lptmrConfig.pinPolarity = kLPTMR_PinPolarityActiveHigh; * lptmrConfig.enableFreeRunning = false; * lptmrConfig.bypassPrescaler = true; * lptmrConfig.prescalerClockSource = kLPTMR_PrescalerClock_1; * lptmrConfig.value = kLPTMR_Prescale_Glitch_0; */ LPTMR_GetDefaultConfig(&lptmrConfig); /* Initialize the LPTMR */ LPTMR_Init(LPTMR0, &lptmrConfig); /* Set timer period */ LPTMR_SetTimerPeriod(LPTMR0, USEC_TO_COUNT(1000000U, LPTMR_SOURCE_CLOCK)); /* Enable timer interrupt */ LPTMR_EnableInterrupts(LPTMR0, kLPTMR_TimerInterruptEnable); /* Enable at the NVIC */ EnableIRQ(LPTMR0_IRQn); PRINTF("Low Power Timer Example\r\n"); /* Start counting */ LPTMR_StartTimer(LPTMR0); while (1) { if (currentCounter != lptmrCounter) { currentCounter = lptmrCounter; PRINTF("LPTMR interrupt No.%d \r\n", currentCounter); } } }