Commit 2a8d7ee0 authored by Damien George's avatar Damien George
Browse files

stmhal: Fix RTC.wakeup so it correctly calculates WUT for large periods.

Thanks to Peter Hinch.  Addresses issue #1488.
parent fd387990
......@@ -419,17 +419,23 @@ mp_obj_t pyb_rtc_wakeup(mp_uint_t n_args, const mp_obj_t *args) {
if (div <= 16) {
wut = 32768 / div * ms / 1000;
} else {
// use 1Hz clock
wucksel = 4;
wut = ms / 1000;
if (ms > 0x10000) {
wucksel = 5;
ms -= 0x10000;
if (ms > 0x10000) {
if (wut > 0x10000) {
// wut too large for 16-bit register, try to offset by 0x10000
wucksel = 6;
wut -= 0x10000;
if (wut > 0x10000) {
// wut still too large
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "wakeup value too large"));
}
}
}
wut -= 1;
// wut register should be 1 less than desired value, but guard against wut=0
if (wut > 0) {
wut -= 1;
}
enable = true;
}
if (n_args == 3) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment