kopia lustrzana https://github.com/peterhinch/micropython-samples
33 wiersze
1006 B
Python
33 wiersze
1006 B
Python
![]() |
# Class for pybord watchdog timer
|
||
|
import stm, pyb
|
||
|
|
||
|
@micropython.asm_thumb
|
||
|
def clz(r0):
|
||
|
clz(r0, r0) # return no. of leading zeros in passed integer
|
||
|
|
||
|
class wdog(object):
|
||
|
def start(self, ms):
|
||
|
assert ms <= 32768 and ms >= 1, "Time value must be from 1 to 32768mS"
|
||
|
prescaler = 23 - clz(ms -1)
|
||
|
div_value = ((ms << 3) -1) >> prescaler
|
||
|
stm.mem16[stm.IWDG + stm.IWDG_KR] = 0x5555
|
||
|
stm.mem16[stm.IWDG + stm.IWDG_PR] = (stm.mem16[stm.IWDG + stm.IWDG_PR] & 0xfff8) | prescaler
|
||
|
stm.mem16[stm.IWDG + stm.IWDG_RLR] = (stm.mem16[stm.IWDG + stm.IWDG_RLR] & 0xf000) | div_value
|
||
|
stm.mem16[stm.IWDG + stm.IWDG_KR] = 0xcccc
|
||
|
def feed(self):
|
||
|
stm.mem16[stm.IWDG + stm.IWDG_KR] = 0xaaaa
|
||
|
|
||
|
def test():
|
||
|
led = pyb.LED(2)
|
||
|
led1 = pyb.LED(3)
|
||
|
dog = wdog()
|
||
|
dog.start(1000)
|
||
|
for x in range(10):
|
||
|
led.toggle()
|
||
|
pyb.delay(500)
|
||
|
dog.feed()
|
||
|
dog.start(4000)
|
||
|
for x in range(20):
|
||
|
led1.toggle()
|
||
|
pyb.delay(500)
|