Archtektura komputerów pracownia specjalistyczna Data: 20.10.2009
Temat: Watchdog Timer, Przerwania Powadzący: Dr J. Baszun
grupa: Lab8
Liżewski Mariusz
Krawiel Robert
Zadanie
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).
Kod wraz z komentarzami:
#include
unsigned int l1 = 0;
unsigned int l2 = 2;
unsigned int l3 = 1;
unsigned int l4 = 0;
void main( void )
{
unsigned int i;
// wyłączenie układu WDT
WDTCTL = WDTPW + WDTHOLD;
P2DIR |= BIT1; // bit P2.1 jako wyjście
P1DIR |= BIT5;
P1DIR |= BIT6;
//Basic clock module ustawiamy na ACLK(8MHz)
BCSCTL1 |= XTS;
do
{
IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
OSCFault
for (i = 0xFF; i > 0; i--); // odczekanie
}
// powtarzanie pętli dopóki OSCFault jest ciągle ustawiona
while ((IFG1 & OFIFG));
// czyszczenie WDT ustaienie w tryb interval ACLK
WDTCTL = WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1;
// Ustawienie odpowiednich bitów w rejestrze przerwań
IE1 |= WDTIE;
// właczenie przerwań
_EINT();
while(1); // pętla nieskończona
}
// procedura obsługi przerwania od WDT
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
l1++;
if (l1 == 15625)
{
l2++;
l3++;
l4++;
l1 = 0;
}
// miganie diód po przez zastosowanie Xor'owania
if (l2 == 3)
{
P2OUT ^= BIT1; //zapalanie/gaszenie diody
l2 = 0;
}
if (l3 == 3)
{
P1OUT ^= BIT5;
l3 = 0;
}
if (l4 == 3)
{
P1OUT ^= BIT6;
l4 = 0;
}
}
Wyszukiwarka
Podobne podstrony:
sprawozdanie felixa2
Sprawozdanie Konduktometria
zmiany w sprawozdaniach fin
Errata do sprawozdania
2009 03 BP KGP Niebieska karta sprawozdanie za 2008rid&657
Sprawozdanie nr 3 inz
Sprawozdanie FundacjaBioEdu2007
Sprawozdanie Ćw 2
sprawozdanie 4
sprawozdanie 2009
Sprawozdanie ćw 10 (4)
więcej podobnych podstron