Forum: Mikrocontroller und Digitale Elektronik MSP430 Watchdog Interruptflag


von Daniel S. (nasenschleim)


Lesenswert?

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.

von Dennis (Gast)


Lesenswert?

Den Watchdog setzen/bearbeiten geht nur mit Passwort, also nur mit 
exaktem Zugriff. Im IFG1-Register kannst du daher garnichts machen.

von Jörg S. (joerg-s)


Lesenswert?

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.

von Daniel S. (nasenschleim)


Lesenswert?

@ 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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Daniel S. (nasenschleim)


Lesenswert?

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!

von Jörg S. (joerg-s)


Lesenswert?

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
Noch kein Account? Hier anmelden.