2 WDT WDT Laboratorium 2 id 907 Nieznany (2)

background image

Laboratorium 2 : Watchdog Timer, Przerwania.

Watchdog timer

Watchdog Timer w skrócie WDT, jest urządzeniem odpowiedzialnym za sprawdzanie

prawidłowego działania programu. Ma on za zadanie eliminować wszelkie zawieszenia
programu i automatycznie dokonywać restartu urządzenia w przypadku wykrycia
nieprawidłowego działania programu lub jego zawieszenia.


Mikrokontrolery z rodziny MSP430 posiadają wbudowany układ WDT. Jego schemat

jest zamieszczony na rys.1.


Rys1. Schemat blokowy układu Watchdog Timer w MSP430

Głównym zadaniem WDT w procesorach MSP430 jest generowanie sygnału reset w
przypadku zawieszenia programu (watchdog mode). Restart jest dokonywany po upłynięciu
zaprogramowanego wcześniej interwału czasowego. Jednak jeśli ta funkcja nie jest

background image

używana w kodzie programu, WDT może pełnić funkcję licznika odliczającego odstępy
czasu, po upływie których generowane jest przerwanie (interval mode).

Po włączeniu zasilania WDT jest włączany w tryb watchdog, z ustawionym czasem 32

ms., po którym następuje reset układu. Dlatego konfiguracja lub wyłączenie WDT powinny
być pierwszą czynnością wykonaną przez kod programu
.

Z układem WDT związany jest rejestr Watchdog Timer Control: WDTCTL dostępny pod
adresem 0120h.

Rys 2. Rejestr WDTCTL Watchdog Timer w MSP430

Podstawowe parametry, które możemy ustawić w Rejestr WDTCTL opisuje tabela:

WDTPW

Bity 15-8

Watchdog timer password. Hasło WDT. Aby móc pisać do rejestru

należy podać wartość 05ah w przeciwnym wypadku jest wygenerowany PUC. Natomiast podczas
odczytywania rejestru zawsze jest odczytywana wartość 069h.

WDTHOLD

Bit 7

Watchdog timer hold. Bit ten wyłącza układ WDT.
0-Watchdog timer jest włączony.
1-Watchdog timer jest zatrzymany.


WDTNMIES Bit 6

Watchdog timer NMI edge select. Bit ten wybiera rodzaj zbocza przy

którym następuje przerwanie NMI, dzieje się to wyłącznie przy ustawionym WDTNM=1.

0 NMI przy rosnącym zboczu.
1 NMI przy opadającym zboczu.

WDTNMI

Bit 5

Watchdog timer NMI select. Bit ten określa funkcję jaką pełni pin

RST/NMI.

0 Funkcja resetu.
1 Funkcja NMI (przerwanie niemaskowane).


WDTTMSEL Bit 4

Watchdog timer mode select. Tryb pracy WDT.
0 tryb watchdog.
1 tryb odmierzania odcinków czasu.(interval)


WDTCNTCL Bit 3

Watchdog timer counter clear. Ustawiając WDTCNTCL=1 zerujemy

wartość zliczaną przez WDT. Gdy wartość WDTISx jest osiągnięta wówczas WDTCNTCL jest
zerowany automatycznie.

0 Brak reakcji.
1 WDTCNT = 0000h

background image

WDTSSEL

Bit 2

Watchdog timer clock source select. Wybór zegara który będzie

powiązany z WDT.

0 SMCLK
1 ACLK


WDTISx

Bity1-0

Watchdog timer interval select .Bity te ustawiają czas po którym jest

ustawiana flaga WDTIFG i/lub jest generowany PUC.

00 Watchdog clock source /32768
01 Watchdog clock source /8192
10 Watchdog clock source /512
11 Watchdog clock source /64



Definicje stałych związanych z WDT znajdyją się w pliku msp430x14x.h, który należy
dołączyć do kodu programu.

#include <msp430x14x.h>

Wyłaczenie WDT umożliwia następujący kod:

WDTCTL=WDTPW+ WDTHOLD;

Przerwania

Do pracy okładu WDT z przerwaniami konieczne jest ustawienie stanu rejestrów IE1 oraz
IFG1. Będą nas interesowały bity rejestru opisane w poniższych tabelach:

Rys 3. Rejestr IE1 Interrupt Enable Register 1

NMIIE

Bit 4

NMI interrupt enable. Bit ten włącza przerwania NMI. Ponieważ

inne bity w rejestrze IE1 mogą być używane do innych celów, jest zalecane aby do
ustawiania bądź zerowania tego bitu używać instrukcji BIS.B lub BIS.C (asembler) lub |=
oraz &= w języku C.

0 Przerwania nie włączone
1 Przerwania włączone


WDTIE

Bit 0

Watchdog timer interrupt enable. Bit ten włącza przerwania dla

WDT pracującego w trybie interval. Nie jest konieczne ustawianie tego bitu dla trybu
watchdog. Zalecane jest, aby do ustawiania bądź zerowania tego bitu używać instrukcji BIS.B
lub BIS.C (asembler) lub |= oraz &= w języku C.

0 Przerwania nie włączone
1 Przerwania włączone

Rys 4. Rejestr IFG1 Interrupt Flag Register 1

background image


NMIIFG

Bit 4

NMI interrupt flag. NMIIFG must be reset by software.

Because other bits in IFG1 may be used for other modules, it is recommended to clear
NMIIFG by using BIS.B or BIC.B instructions, rather than MOV.B or CLR.B instructions.

0 No interrupt pending
1 Interrupt pending

WDTIFG

Bit 0

Watchdog timer interrupt flag. In watchdog mode, WDTIFG

remains set until reset by software. In interval mode, WDTIFG is reset automatically by
servicing the interrupt, or can be reset by software. Because other bits in IFG1 may be used
for other modules, it is recommended to clear WDTIFG by using BIS.B or BIC.B
instructions, rather than MOV.B or CLR.B instructions.

0 No interrupt pending
1 Interrupt pending

Praca z przerwaniami

W celu uruchomienia przerwań od danego urządzenia, należy ustawić odpowiednie

bity w rejestrze przerwań IE1 oraz wywołać funkcję

_EINT()

włączającą system przerwania

Przykładowo przerwania dla WDT uruchamia kod:

IE1 |= WDTIE; // Wł

ą

czenie przerwa

ń

od WDT

_EINT(); // Wł

ą

czenie przerwa

ń


Dodatkowo musimy napisać procedurę obsługi przerwania i podpiąć ją pod odpowiedni
wektor przerwań. Przykład procedury obsługi przerwania dla WDT:

// procedura obsługi przerwania od WDT
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
P2OUT ^= BIT1; // zapal/zga

ś

diod

ę

}


Przykład procedury obsługi przerwania dla TimerA

// procedura obsługi przerwania od TimerA
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
++licznik;
}

Zegar

WDT wymaga przyporządkowania zegara. Funkcję tę pełni Basic Clock Module.


Basic Clock Module

Podstawą czasu w układzie MSP430 może być jeden z zegarów:
• LFXT1CLK (Low Frequency/High Frequency Oscillator ) – pracuje on z
niskoczęstotliwościowym kwarcem 32678Hz, bądź z rezonatorami z zakresu 450kHz- 8MHz
(tryb pracy wysokoczęstotliwościowej)
• XT2CLK (High Frequency Oscillator) jest używany opcjonalnie, może być zasilany

background image

standardowym kwarcem, bądź rezonatorami z zakresu 450kHz- 8MHz
• DCO- wewnętrzny zegar taktujący posiadający charakterystykę RC

Rys 5. Basic Clock Module

Poszczególne komponenty mikrokontrolera mogą być sterowane zegarami :

• ACLK (Auxilary Clock) –zegar pomocniczy jego źródłem jest LFXT1CLK
• MCLK (Main Clock) – zegar używany przez CPU oraz system, jego źródłem może być
LFXT1CLK, bądź XT2CLK, bądź DCO.
• SMCLK (Sub-main Clock)- jest przeznaczony do współpracy z urządzeniami
peryferyjnymi, jego źródłem jest LFXT1CLK, XT2CLK, bądź DCO.

Po restarcie standardowo zegar procesora jest ustawiany na DCO. DCO generuje
częstotliwość około 800 kHz, jednak jest to częstotliwość niezbyt stabilna.
Aby ustawić taktowanie z rezonatora kwarcowego 8MHz wbudowanego w EasyWeb, należy
wybrać źródło zegara podstawowego Basic Clock na taktowanie przez LFXT1CLK,

background image

Operacje, które należy wykonać są następujące:

1. Włączenie oscylatora
2. Wyczyszczenie flagi OFIFG
3. Odczekanie około 50µs
4. Sprawdzenie stanu flagi OFIFG jeśli jest nadal ustawiona to powtórzenie
kroków 1-4
5. Zmiana taktowania zegarów w rejestrze BCSCTL2


Przykładowy kod realizujący ustawienie zegara podstawowego może być następujący:

// Basic Clock Module ustawiamy na ACLK(zegar 8 MHz )

BCSCTL1 |= XTS; //ACLK = LFXT1 = HF XTAL 8MHz

do
{
IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
for (i = 0xFF; i > 0; i--); // odczekanie
}
while ((IFG1 & OFIFG) == OFIFG); // dopóki OSCFault jest ci

ą

gle

ustawiona

BCSCTL1 |= DIVA_0; // ACLK=8 MHz – bez podzielników
BCSCTL2 |= SELM0 | SELM1; // MCLK= LFTX1 =ACLK



Inne ustawienia podstawowego zegara można wpisać do rejestrów Basic Clock Module,
bazując na dokumentacji modułu.

Zadania

Zadanie 1.
W ćwiczeniu pierwszym zajmiemy się trybem pracy interval.
Należy napisać program, który będzie powodował cykliczne zapalanie i gaszenie diody w
równych odstępach czasu (prowadzący podaje w jakich). Podczas startu urządzenia
standardowo WDT pracuje w trybie watchdog. Zatem będzie trzeba zmienić tryb pracy na
interwal, ustawiając odpowiednio stan rejestru WDTCTL. Dostęp do tego rejestru jest
chroniony hasłem. Oznacza to, że jeśli chcemy coś zapisać do tego rejestru to jako
bardziej znaczący bajt słowa musimy podać hasło (05ah czyli WDTPW). W przypadku gdy
wartość hasła nie jest prawidłowa następuje programowy restart urządzenia PUC. Bity z
mniej znaczącego bajtu rejestru WDTCTL odpowiadają za kontrolę nad pracą WDT.
Program powinien wykorzystywać procedurę obsługi przerwania. Dlatego trzeba pamiętać
o zainicjowaniu głównego wektora przerwań GIE oraz o ustawieniu przerwań od WDT (
WDTIE w rejestrze IE1).

Zadanie 2
Ćwiczenie drugie polega na zastosowaniu WDT w trybie watchdog.

background image

Należy napisać program, który w przypadku zawieszenia będzie przy pomocy WDT
dokonywał restartu i przywracał program do działania. Zawieszenie programu powinno
być powodowane przez użytkownika (poprzez naciśnięcie klawisza), a gdy układ zostanie
zrestartowany przez WDT, powinno to być oznajmione po przez zapalenie diody.
Rozróżnienie, czy układ był restartowany przez WDT czy przez użytkownika zapewnia
flaga WDTIFG umiejscowiona w rejestrze IFG1. Podczas restartu układu przez WDT
flaga WDTIFG jest automatycznie ustawiana . Sprawdzenie jej stanu pozwala na
znalezienie przyczyny restartu.
Po włączeniu zasilania układ ma 2-krotnie zapalić i zgasić wszystkie diody. Po wymuszeniu
restartu przez WDT, układ ma 10- krotnie zapalić i zgasić wszystkie diody.

Zadanie 3
Wykonać zadania 1 i 2 przy użyciu zegara DCO.


Wyszukiwarka

Podobne podstrony:
LABORATORIUM 1 id 261484 Nieznany
instrukcja laboratoryjna id 216 Nieznany
Laboratorium 8 id 261621 Nieznany
Laboratorium 5 id 261589 Nieznany
Badania laboratoryjne id 76309 Nieznany
OS plan laboratoriow id 340951 Nieznany
HiPUA Laboratorium 3 id 202110 Nieznany
Laboratorium 3 id 261550 Nieznany
Laboratorium 4 id 261551 Nieznany
Laboratorium 4 id 261572 Nieznany
laboratorium4 id 261918 Nieznany
lab2 laboratorium2 id 749456 Nieznany
Laboratorium 4 id 261917 Nieznany
Internet laboratorium id 218854 Nieznany
Laboratorium 3 id 261538 Nieznany
LABORATORIUM 1 id 261484 Nieznany
instrukcja laboratoryjna id 216 Nieznany
Laboratorium wiczenie6 id 26186 Nieznany

więcej podobnych podstron