Browse Source

nrf: fix sleep

For some reason, the old behavior stopped working at some point (maybe
at the nrfx update?). Change sleep behavior to be more correct.
pull/6/head
Ayke van Laethem 6 years ago
parent
commit
d183f12395
No known key found for this signature in database GPG Key ID: E97FF5335DFDFDED
  1. 9
      src/runtime/runtime_nrf.c

9
src/runtime/runtime_nrf.c

@ -11,8 +11,13 @@ static volatile bool rtc_wakeup;
void rtc_sleep(uint32_t ticks) {
NRF_RTC0->INTENSET = RTC_INTENSET_COMPARE0_Msk;
rtc_wakeup = false;
NRF_RTC0->TASKS_CLEAR = 1;
NRF_RTC0->CC[0] = ticks;
if (ticks == 1) {
// Race condition (even in hardware) at ticks == 1.
// TODO: fix this in a better way by detecting it, like the manual
// describes.
ticks = 2;
}
NRF_RTC0->CC[0] = (NRF_RTC0->COUNTER + ticks) & 0x00ffffff;
while (!rtc_wakeup) {
__WFI();
}

Loading…
Cancel
Save