diff options
author | puuu <puuu@users.noreply.github.com> | 2016-06-04 00:21:26 +0900 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-06-06 10:51:12 +0100 |
commit | ee12581a3545c6e950b4a2b5322167eb73326928 (patch) | |
tree | 609ae347a303629663d3c7196e2be3b2643bc72e /esp8266/modpybrtc.c | |
parent | eb78a5c530e21b5ce6bae8d7c28c1508275c7f68 (diff) |
esp8266: Let RTC work correctly after deepsleep.
By design, at wake up from deepsleep, the RTC timer will be reset, but
the data stored in RTC memory will not [1]. Therefore, we have to adjust
delta in RTC memory before going into deepsleep to get almost correct
time after waking up.
[1] http://bbs.espressif.com/viewtopic.php?t=1184#p4082
Diffstat (limited to 'esp8266/modpybrtc.c')
-rw-r--r-- | esp8266/modpybrtc.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/esp8266/modpybrtc.c b/esp8266/modpybrtc.c index 484d0d82f..968524803 100644 --- a/esp8266/modpybrtc.c +++ b/esp8266/modpybrtc.c @@ -120,6 +120,12 @@ uint64_t pyb_rtc_get_us_since_2000() { return (((uint64_t)rtc_ticks * cal) >> 12) + delta; }; +void rtc_prepare_deepsleep(uint64_t sleep_us) { + // RTC time will reset at wake up. Let's be preared for this. + int64_t delta = pyb_rtc_get_us_since_2000() + sleep_us; + system_rtc_mem_write(MEM_DELTA_ADDR, &delta, sizeof(delta)); +} + STATIC mp_obj_t pyb_rtc_datetime(mp_uint_t n_args, const mp_obj_t *args) { if (n_args == 1) { // Get time |