Hallo, Ich wollte den Watchdog-Timer in meinem Programm implementieren um einen Reset zu erzwingen, falls sich die Software irgendwo auf gehangen hat. Bei einem Neustart durch einen Watchdog-Reset erhoffe ich mir, meine verwendeten Variablen beim Neustart zurück zu setzen. Der Watchdog besitzt im IFG1-Register ein WDTIFG-Flag doch irgendwie ist dieses immer gesetzt und zurücksetzen funktioniert nicht. (Der Watchdog ist bis jetzt noch deaktiviert, ich habe nur erstmal dieses Flag versucht auszulesen und zu löschen) Gibt es noch eine Möglichkeit die anderen Reset-Varianten bei einem Neustart auszuwerten(Bsp.-weise einen Brown-Out oder Power-On-Reset)? Verwendeter Controller ist der MSP430F169. Ich danke schon mal für die Tipps und Ratschläge.
Den Watchdog setzen/bearbeiten geht nur mit Passwort, also nur mit exaktem Zugriff. Im IFG1-Register kannst du daher garnichts machen.
Dennis schrieb: > Den Watchdog setzen/bearbeiten geht nur mit Passwort, also nur mit > exaktem Zugriff. Wenn ich das richtig verstanden habe will er das Watchdog Register ja bisher nur lesen. Das geht auch ohne Passwort. Auf das IFG1 Register kann man auch ohne Passwort schreiben.
@ Jörg Aber um das Watchdog-Interruptflag zurück setzen zu können, muss ich das Passwort mit senden? Gibt es noch andere Interruptflags für Brown-Out oder Power-On-Resets? Ich weiß das man beim ATMEGA 8 diese Resets durch gesetzte Flags abrufen konnte, geht das beim MSP430 auch?
Im User's Guide der entsprechenden MSP430-Familie ist der Watchdog Timer ausführlich beschrieben. Beim 'F169 ist das slau049*. Dort in Kapitel 10, das auf Seite 192 beginnt. Die Brown-Out-Detection erfolgt über den SVS, Kapitel 6, ab Seite 148. Für Dich ist das auf Seite 154 beschriebene Register SVSCTL und dort das Bit SVSFG interessant. *) http://focus.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=slau049f&fileType=pdf
Hallo, ich habe mir jetzt mal ein TI-example zum Thema Watchdog zur Hand genommen und dieses etwas modifiziert. Damit wollte ich testen wann das Interrupt-Flag vom Watchdog zurück gesetzt wird. Ich habe gelesen, dass das Interruptflag nach verlassen der Serviceroutine zurueck gesetzt wird, leider konnte ich das bei mir nicht bestätigen. Auch Softwareseitiges zurücksetzen des IFG bringt keinen Erfolg. Entweder habe ich es überlesen oder man benötigt das Passwort nur wenn man in das Watchdog-Control-Register schreiben möchte und nicht wenn man auf das Interrupt-Flag-Register zugreift Sieht jemand einen Fehler in meinem Testprogramm? Ich bin für jeden Tipp dankbar. Programm-Code:
1 | #include <msp430f169.h> |
2 | |
3 | unsigned char a='0'; // Test-Variable |
4 | unsigned char b='0'; // Test-Variable |
5 | |
6 | void main(void) |
7 | {
|
8 | WDTCTL = WDT_MDLY_32; // Set Watchdog Timer interval to ~30ms |
9 | IE1 |= WDTIE; // Enable WDT interrupt |
10 | P4DIR |= 0x04; // Set P4.3 to output direction |
11 | |
12 | while(1) |
13 | {
|
14 | b='0'; |
15 | if(WDTIFG) |
16 | {b='1';} // >BREAKPOINT< |
17 | else
|
18 | {b='2';} |
19 | _BIS_SR(LPM0_bits + GIE); // interrupt |
20 | }
|
21 | }
|
22 | |
23 | // Watchdog Timer interrupt service routine
|
24 | #pragma vector=WDT_VECTOR
|
25 | __interrupt void watchdog_timer(void) |
26 | {
|
27 | if(WDTIFG) |
28 | {a='1';} // >BREAKPOINT< |
29 | |
30 | P4OUT ^= 0x04; // Toggle P4.3 |
31 | |
32 | IFG1 &= ~WDTIFG; // Interruptflag soll geloescht werden |
33 | |
34 | if(WDTIFG) |
35 | {a='2';} |
36 | else
|
37 | {a='3';} // Auswertung ob es wirklich gelöscht wurde |
38 | _BIC_SR_IRQ(LPM0_bits); // >BREAKPOINT< |
39 | }
|
PS: Die Breakpoints haben den Programmablauf angehalten und meine Variablenüberwachung im CodeComposerStudio aktualisiert!
Daniel S. schrieb: > Aber um das Watchdog-Interruptflag zurück setzen zu können, muss ich das > Passwort mit senden? Nein, nur schreibende Zugriffe auf das WDTCTL Register benötigen das Passwort.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.