""" RTC IRQ test for the CC3200 based boards. """ from machine import RTC import machine import os import time mch = os.uname().machine if not "LaunchPad" in mch and not "WiPy" in mch: raise Exception("Board not supported!") def rtc_ticks_ms(rtc): timedate = rtc.now() return (timedate[5] * 1000) + (timedate[6] // 1000) rtc_irq_count = 0 def alarm_handler(rtc_o): global rtc_irq global rtc_irq_count if rtc_irq.flags() & RTC.ALARM0: rtc_irq_count += 1 rtc = RTC() rtc.alarm(time=500, repeat=True) rtc_irq = rtc.irq(trigger=RTC.ALARM0, handler=alarm_handler) # active mode time.sleep_ms(1000) rtc.alarm_cancel() print(rtc_irq_count == 2) rtc_irq_count = 0 rtc.alarm(time=200, repeat=True) time.sleep_ms(1000) rtc.alarm_cancel() print(rtc_irq_count == 5) rtc_irq_count = 0 rtc.alarm(time=100, repeat=True) time.sleep_ms(1000) rtc.alarm_cancel() print(rtc_irq_count == 10) # deep sleep mode rtc.alarm_cancel() rtc_irq_count = 0 rtc.alarm(time=50, repeat=True) rtc_irq.init(trigger=RTC.ALARM0, handler=alarm_handler, wake=machine.SLEEP | machine.IDLE) while rtc_irq_count < 3: machine.sleep() print(rtc_irq_count == 3) # no repetition rtc.alarm_cancel() rtc_irq_count = 0 rtc.alarm(time=100, repeat=False) time.sleep_ms(250) print(rtc_irq_count == 1) rtc.alarm_cancel() t0 = rtc_ticks_ms(rtc) rtc.alarm(time=500, repeat=False) machine.sleep() t1 = rtc_ticks_ms(rtc) print(abs(t1 - t0 - 500) < 20) # deep sleep repeated mode rtc.alarm_cancel() rtc_irq_count = 0 rtc.alarm(time=500, repeat=True) t0 = rtc_ticks_ms(rtc) rtc_irq = rtc.irq(trigger=RTC.ALARM0, handler=alarm_handler, wake=machine.SLEEP) while rtc_irq_count < 3: machine.sleep() t1 = rtc_ticks_ms(rtc) print(abs(t1 - t0 - (500 * rtc_irq_count)) < 25) # next ones must raise try: rtc_irq = rtc.irq(trigger=10, handler=alarm_handler) except: print("Exception") try: rtc_irq = rtc.irq(trigger=RTC.ALARM0, wake=1789456) except: print("Exception")