summaryrefslogtreecommitdiff
path: root/tests/extmod/machine_hard_timer.py
blob: 8fe42ea850842935e66051a7a6b1684465f86df3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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()