166 16. Watchdog w SAP 80515 535
Taki sposób reakcji procesora na oba sygnały zerujące umożliwia programową interpretację źródła zerowania mikrokontrolera:
• jeśli znacznik WDTS = 0, to procesor został wyzerowany sprzętowo linią RESET,
• jeśli znacznik WDTS = 1, to procesor został wyzerowany wskutek przepełnienia licznika watchdoga.
Zerowanie licznika watchdoga musi być zrealizowane przed upływem czasu, po którym licznik ten osiągnie stan przepełnienia (pomniejszonego o 4). Jeśli mikrokontroler sterowany jest rezonatorem kwarcowym o częstotliwości drgań własnych równych fGEN = 12 MHz to jeden cykl maszynowy trwa 1 ps. Oznacza to, że jeśli w programie nie zostaną wykonane obie instrukcje wpisujące jedynki logiczne na pozycje bitów WDT i SWDT, to po
65 536 - 4 = 65 532 cyklach maszynowych czyli po 65 532 ps
licznik watchdoga generuje sygnał wewnętrznego zerowania mikrokontrolera. Do okresowego odświeżania licznika watchdoga wykorzystuje się jeden z dostępnych w procesorze liczników ogólnego przeznaczenia, np. licznik TO, Tl lub T2. Licznik taki generuje cykliczne przerwanie, którego zadaniem jest odświeżanie stanu licznika watchdoga. Przerwanie to może zostać wykorzystywane na przykład do odmierzania odcinków czasu, testowania klawiatury, dynamicznej obsługi pola odczytowego, cyklicznego sterowania obiektami itp.
Jeśli do nadzorowania poprawności działania programu w procesorze SAB 80515/535 zastosowano watchdog, to program ten powinien być jak najrzadziej przerywany procedurami zerowania licznika watchdoga. Należy pamiętać, że wewnętrzne zerowanie procesora generowane jest o 4 cykle maszynowe wcześniej niż przepełnienie licznika. W przykładzie do odmierzania czasu, po którym licznik watchdoga ma być zerowany zastosowano licznik Tl mikrokontrolera. Przy obliczaniu okresu tWD powtarzania przerwania od licznika Tl wyrażonego w cyklach maszynowych jako wartość początkową należy przyjąć maksymalną wartość wyrażenia:
t WD = (65 536+ L-TH1.TL1) < 65 532
gdzie L jest liczbą cykli maszynowych potrzebnych do przyjęcia przerwania od licznika Tl i programowego zerowania licznika watchdoga. Jeśli założyć, że wykonywane są tylko instrukcje trwające 2 cykle maszynowe to L=10.
Spełniając powyższe wymagania należy przyjąć TH1, TLI = 14. Przykład programu spełniającego podane założenia przedstawiono poniżej.
;adres obsługi przerwania od licznika Tl
ORG 1BH
WD Obsługa_T1:
MOV TH1,#0 MOV TLI,#14
SETB WDT 5ETB SWDT RETI
;THl<-0, wartość początkowa ;TL1 <- OEH, licznika Tl
;WDT - IEN0.6 <-l, zerowanie licznika ;SWDT = IEN1.6<-1, watchdoga ;zakończenie obsługi przerwania od licznika Tl
WD_Init_l: ;inicjalizacja przerwań i licznika Tl
;rejestr 1EN0 o adresie 0A8h:
EAL |
| WDT ET2 |
ES 1! ET1 |
EX1 ETO EX0 |
MOV |
IF.Mo,#88h |
;IEN0 <- 88h |
= 1000 lOOOb, |
* ;odblokowanie wszystkich przerwań | |||
;i przerwania |
od licznika Tl | ||
MOV |
TH1,#0 |
;TH1 <- 00, |
wartość początkowa |
MOV |
TLI,#14 |
;TL1 OEh, |
licznika Tl |
;rejestr TMOD o adresie 89h: | |||
GATE |
C/T# Ml |
MO | GATE |
C/T# Ml MO |
licznik Tl |
licznik TO | ||
MOV |
TMOD,#50h |
;TMOD <- 50h - 0101 OOOOb | |
SETB |
TRI |
;TR1 <-l, |
start licznika Tl |
SETB |
SWDT |
;SWDT <—1, |
start watchdoga |
dalsza część programu
1. Jaki jest cel stosowania watchdoga w mikrokontrolerach ?
2. W jaki sposób uruchomić i zatrzymać watchdog ?
3. Na czym polega odświeżanie licznika watchdoga i w jaki sposób tego dokonać ?
4. Czym różni się wewnętrzne (od watchdoga) i zewnętrzne (linią RESET) zerowanie mikrokontrolera ?
5. W jaki sposób uprościć procedurę WDObsluga Tl obsługi licznika Tl ?