You've already forked Core2forAWS-MicroPython
mirror of
https://github.com/m5stack/Core2forAWS-MicroPython.git
synced 2026-05-20 10:30:31 -07:00
stmhal: Fix RTC.wakeup so it correctly calculates WUT for large periods.
Thanks to Peter Hinch. Addresses issue #1488.
This commit is contained in:
+11
-5
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user