Files
micropython/tests/extmod/machine_hard_timer.py
Chris Webb ec6cdf3718 tests: Test hardware timers as well as software timers.
On platforms where hardware timers are available, test these in each
combination of hard/soft and one-shot/periodic in the same way as for
software timers. Where a platform supports both software (id = -1) and
hardware (id >= 0) timers, the behaviour of both is now checked.

For now, esp8266 is the only platform that supports hardware timers and
both hard and soft callbacks.

Signed-off-by: Chris Webb <chris@arachsys.com>
2025-09-25 23:59:24 +10:00

46 lines
1.1 KiB
Python

import sys
try:
from machine import Timer
from time import sleep_ms
except:
print("SKIP")
raise SystemExit
if sys.platform == "esp8266":
timer = Timer(0)
else:
# Hardware timers are not implemented.
print("SKIP")
raise SystemExit
# Test both hard and soft IRQ handlers and both one-shot and periodic
# timers. We adjust period in tests/extmod/machine_soft_timer.py, so try
# adjusting freq here instead. The heap should be locked in hard callbacks
# and unlocked in soft callbacks.
def callback(t):
print("callback", mode[1], kind[1], freq, end=" ")
try:
allocate = bytearray(1)
print("unlocked")
except MemoryError:
print("locked")
modes = [(Timer.ONE_SHOT, "one-shot"), (Timer.PERIODIC, "periodic")]
kinds = [(False, "soft"), (True, "hard")]
for mode in modes:
for kind in kinds:
for freq in 50, 25:
timer.init(
mode=mode[0],
freq=freq,
hard=kind[0],
callback=callback,
)
sleep_ms(90)
timer.deinit()