This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

51822 no wakeup

58122,NO WAKEUP,

sometimes no wakeup,code as below:

void Power_Down(void)
{
NVIC_EnableIRQ(RTC0_IRQn);
if(SYSTEM_MODE_NORMAL == gSystemPara.body.mode)
{
NVIC_EnableIRQ(GPIOTE_IRQn);
}

NRF_CLOCK->TASKS_HFCLKSTOP = 1;
if(WAKEUP_FROM_RTC0 == gWakeUpMode)
{
SleepRTC0_Config();
}
gWakeUpMode = MAX_WAKEUP_MODE;
__WFI();
__asm("NOP");__asm("NOP");__asm("NOP");
NVIC_DisableIRQ(GPIOTE_IRQn);
NVIC_DisableIRQ(RTC0_IRQn);
NRF_CLOCK->EVENTS_HFCLKSTARTED = 0; //clear high clock ok event
NRF_CLOCK->TASKS_HFCLKSTART = 1; //start high clock task
while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);//wait high clock event ok
}


void SleepRTC0_Config(void)
{
NRF_RTC0->TASKS_STOP = 1;
NRF_RTC0->TASKS_CLEAR = 1;
NRF_RTC0->PRESCALER = COUNTER_PRESCALER; // Set prescaler to a TICK of RTC_FREQUENCY.
// Compare0 after approx COMPARE_COUNTERTIME seconds.
if(SYSTEM_MODE_SAVE_POWER == gSystemPara.body.mode)
{
NRF_RTC0->CC[0] = RTC_FREQUENCY * 40;
}
else
{
NRF_RTC0->CC[0] = RTC_FREQUENCY;
}
//Enable COMPARE0 event and COMPARE0 interrupt:
NRF_RTC0->EVTEN = RTC_EVTEN_COMPARE0_Msk;
NRF_RTC0->EVTENSET = RTC_EVTENSET_COMPARE0_Msk;
NRF_RTC0->INTENSET = RTC_INTENSET_COMPARE0_Msk;
NRF_RTC0->TASKS_START = 1;
}

Related