d3bb3e38df
A few tests still fail on PYBLITE, and that's due to differences in the available peripheral block numbers on the different MCUs (eg I2C(2) exists on one, but it's I2C(3) on the other).
80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
import pyb, stm
|
|
from pyb import RTC
|
|
|
|
rtc = RTC()
|
|
rtc.init()
|
|
print(rtc)
|
|
|
|
# make sure that 1 second passes correctly
|
|
rtc.datetime((2014, 1, 1, 1, 0, 0, 0, 0))
|
|
pyb.delay(1002)
|
|
print(rtc.datetime()[:7])
|
|
|
|
def set_and_print(datetime):
|
|
rtc.datetime(datetime)
|
|
print(rtc.datetime()[:7])
|
|
|
|
# make sure that setting works correctly
|
|
set_and_print((2000, 1, 1, 1, 0, 0, 0, 0))
|
|
set_and_print((2000, 1, 31, 1, 0, 0, 0, 0))
|
|
set_and_print((2000, 12, 31, 1, 0, 0, 0, 0))
|
|
set_and_print((2016, 12, 31, 1, 0, 0, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 0, 0, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 1, 0, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 12, 0, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 13, 0, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 23, 0, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 23, 1, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 23, 59, 0, 0))
|
|
set_and_print((2016, 12, 31, 7, 23, 59, 1, 0))
|
|
set_and_print((2016, 12, 31, 7, 23, 59, 59, 0))
|
|
set_and_print((2099, 12, 31, 7, 23, 59, 59, 0))
|
|
|
|
# check that calibration works correctly
|
|
# save existing calibration value:
|
|
cal_tmp = rtc.calibration()
|
|
|
|
def set_and_print_calib(cal):
|
|
rtc.calibration(cal)
|
|
print(rtc.calibration())
|
|
|
|
set_and_print_calib(512)
|
|
set_and_print_calib(511)
|
|
set_and_print_calib(345)
|
|
set_and_print_calib(1)
|
|
set_and_print_calib(0)
|
|
set_and_print_calib(-1)
|
|
set_and_print_calib(-123)
|
|
set_and_print_calib(-510)
|
|
set_and_print_calib(-511)
|
|
|
|
# restore existing calibration value
|
|
rtc.calibration(cal_tmp)
|
|
|
|
# Check register settings for wakeup
|
|
def set_and_print_wakeup(ms):
|
|
try:
|
|
rtc.wakeup(ms)
|
|
wucksel = stm.mem32[stm.RTC + stm.RTC_CR] & 7
|
|
wut = stm.mem32[stm.RTC + stm.RTC_WUTR] & 0xffff
|
|
except ValueError:
|
|
wucksel = -1
|
|
wut = -1
|
|
print((wucksel, wut))
|
|
|
|
set_and_print_wakeup(0)
|
|
set_and_print_wakeup(1)
|
|
set_and_print_wakeup(4000)
|
|
set_and_print_wakeup(4001)
|
|
set_and_print_wakeup(8000)
|
|
set_and_print_wakeup(8001)
|
|
set_and_print_wakeup(16000)
|
|
set_and_print_wakeup(16001)
|
|
set_and_print_wakeup(32000)
|
|
set_and_print_wakeup(32001)
|
|
set_and_print_wakeup(0x10000*1000)
|
|
set_and_print_wakeup(0x10001*1000)
|
|
set_and_print_wakeup(0x1ffff*1000)
|
|
set_and_print_wakeup(0x20000*1000)
|
|
set_and_print_wakeup(0x20001*1000) # exception
|