mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [ARM7] Watchdog aktivieren = µC Absturz


Autor: µ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

Ich zweifel solangsam an meiner Intelligenz. Ich versuche auf einem
AT91SAM7X256 den Watchdog zu konfigurieren. Ich habe schon verschiedene
Wege ausprobiert:

AT91C_BASE_WDTC->WDTC_WDMR = AT91F_WDTGetPeriod(1000) |      //Watchdog 
Counter Value
                (AT91F_WDTGetPeriod(1000) << 16) |  //Watchdog Delta 
Value
                 AT91C_WDTC_WDRSTEN |        //A Watchdog fault triggers 
a Watchdog reset
                 AT91C_WDTC_WDRPROC;        //A Watchdog fault activates 
the processor reset

AT91C_BASE_WDTC->WDTC_WDMR = 250 |          //Watchdog Counter Value
                (250 << 16) |      //Watchdog Delta Value
                 AT91C_WDTC_WDRSTEN |  //A Watchdog fault triggers a 
Watchdog reset
                 AT91C_WDTC_WDRPROC;  //A Watchdog fault activates the 
processor reset

usw.

Allerdings startet dann der ARM nicht mehr (oder stürzt sofort ab).
Schalte ich den WD aus mit

AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;

 dann läuft alles los.

Reseten tue ich ihn dann mit

AT91F_WDTRestart(AT91C_BASE_WDTC); //Restart the Watchdog Timer

 bzw.

AT91C_BASE_WDTC->WDTC_WDCR = 0xA5000001;

Was mache ich falsch?

Autor: µ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sry, Codetags vergessen -.-

AT91C_BASE_WDTC->WDTC_WDMR =  AT91F_WDTGetPeriod(1000) |    //Watchdog Counter Value
        (AT91F_WDTGetPeriod(1000) << 16) |  //Watchdog Delta Value
        AT91C_WDTC_WDRSTEN |      //A Watchdog fault triggers a Watchdog reset
        AT91C_WDTC_WDRPROC;      //A Watchdog fault activates the processor reset
AT91C_BASE_WDTC->WDTC_WDMR =  250 |      //Watchdog Counter Value
        (250 << 16) |    //Watchdog Delta Value
        AT91C_WDTC_WDRSTEN |  //A Watchdog fault triggers a Watchdog reset
        AT91C_WDTC_WDRPROC;  //A Watchdog fault activates the processor reset

AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;

AT91F_WDTRestart(AT91C_BASE_WDTC); //Restart the Watchdog Timer
AT91C_BASE_WDTC->WDTC_WDCR = 0xA5000001;

Autor: µ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab es gelößt. Für den Fall, dass später jemand per Google hier landet:

AT91C_WDTC_WDRSTEN und AT91C_WDTC_WDRPROC vertragen sich scheinbar 
nicht.


So funktioniert es nun:
AT91C_BASE_WDTC->WDTC_WDMR =  AT91F_WDTGetPeriod(5000) |         //Watchdog Counter Value
                             (AT91F_WDTGetPeriod(5000) << 16) |  //Watchdog Delta Value
                              AT91C_WDTC_WDRSTEN;                //A Watchdog fault triggers a Watchdog reset

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.