Watchdog
De watchdog is een teller, die regelmatig via een speciale procedure op
0 terugggezet moet worden. Zodra dit niet meer gebeurt, wordt een
interrupt gegenereerd. Deze interrupt kan niet geblokkeerd worden met het
I-bit.
De watchdog wordt gebruikt om te controleren of het programma van de
micro-controller nog correct loopt. Als bijvoorbeeld het terugzetten van
de watchdog in de hoofdlus van het programma gebeurt, en het programma
door een storing niet langer de hoofdlus doorloopt, komt na bepaalde tijd
automatisch de interrupt van de watchdog. In de routine die deze interrupt
afhandelt kan dan het programma opnieuw opgestart worden (gereset),
waardoor de micro-controller weer de normale functies vervult.
Omdat na een watchdog interrupt alle I/O van de micro-controller is
gereset (in die zin werkt de watchdog dus als een reset-circuit) zal de
afhandeling van de watchdog interrupt er in het algemeen op neerkomen dat
het programma weer opnieuw wordt gestart.
De watchdog is een apart subsysteem, dat normaal gesproken niet actief
is. De watchdog is alleen actief wanneer het NOCOP bit in het CONFIG
register een '0' is. Het CONFIG register is uitgevoerd in EEPROM cellen,
en moet op een speciale manier geprogrammeerd worden. Zie hiervoor
verderop.
De tijd waarbinnen de watchdog afloopt wordt geprogrammeerd in het
OPTION register. Twee bits in dit register bepalen hoe lang het duurt
voordat de watchdog de micro-controller reset. De watchdog moet dus steeds
binnen deze tijd worden teruggezet op 0. De tijden zijn als volgt te
kiezen:
|
CR1
|
CR0
|
tijd
|
|
0
|
0
|
16.384 ms
|
|
0
|
1
|
62.5 ms
|
|
1
|
0
|
250 ms
|
|
1
|
1
|
1 s
|
Terugzetten van de watchdog geschiedt door eerst $55 te schrijven naar
het COPRST register, gevolgd door $AA naar dit register te schrijven.
De registers die de werking van de watchdog bepalen:
COPRST $103A
|
bit7
|
bit6
|
bit5
|
bit4
|
bit3
|
bit2
|
bit1
|
bit0
|
OPTION $1039
|
adpu
|
csel
|
irqe
|
dly
|
cme
|
-
|
cr1
|
cr0
|
CONFIG $103F
|
-
|
-
|
-
|
-
|
nosec
|
nocop
|
romon
|
eeon
|
|