For some reason, the old behavior stopped working at some point (maybe
at the nrfx update?). Change sleep behavior to be more correct.
Этот коммит содержится в:
Ayke van Laethem 2018-09-02 19:16:24 +02:00
родитель 1e90858145
коммит d183f12395
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED

Просмотреть файл

@ -11,8 +11,13 @@ static volatile bool rtc_wakeup;
void rtc_sleep(uint32_t ticks) { void rtc_sleep(uint32_t ticks) {
NRF_RTC0->INTENSET = RTC_INTENSET_COMPARE0_Msk; NRF_RTC0->INTENSET = RTC_INTENSET_COMPARE0_Msk;
rtc_wakeup = false; rtc_wakeup = false;
NRF_RTC0->TASKS_CLEAR = 1; if (ticks == 1) {
NRF_RTC0->CC[0] = ticks; // 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) { while (!rtc_wakeup) {
__WFI(); __WFI();
} }