mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 03:30:14 +01:00
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>
46 lines
1.1 KiB
Python
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()
|