mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Watchdog Interruptflag


Autor: Daniel S. (nasenschleim)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

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

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel S. (nasenschleim)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Daniel S. (nasenschleim)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include  <msp430f169.h>

  unsigned char a='0';    // Test-Variable
  unsigned char b='0';    // Test-Variable

void main(void)
{
    WDTCTL = WDT_MDLY_32;    // Set Watchdog Timer interval to ~30ms
    IE1 |= WDTIE;            // Enable WDT interrupt
    P4DIR |= 0x04;           // Set P4.3 to output direction

  while(1)
  {
    b='0';
    if(WDTIFG)
    {b='1';}                // >BREAKPOINT<
      else
      {b='2';}  
      _BIS_SR(LPM0_bits + GIE);   //  interrupt
  }
}

// Watchdog Timer interrupt service routine
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
  if(WDTIFG)
  {a='1';}                 // >BREAKPOINT<
  
    P4OUT ^= 0x04;                  // Toggle P4.3 
  
    IFG1 &= ~WDTIFG;    // Interruptflag soll geloescht werden
    
    if(WDTIFG)  
  {a='2';}
    else
    {a='3';}    // Auswertung ob es wirklich gelöscht wurde            
    _BIC_SR_IRQ(LPM0_bits);    // >BREAKPOINT<
}

PS: Die Breakpoints haben den Programmablauf angehalten und meine 
Variablenüberwachung im CodeComposerStudio aktualisiert!

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.