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


von µ (Gast)


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?

von µ (Gast)


Lesenswert?

Sry, Codetags vergessen -.-

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

1
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;

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

von µ (Gast)


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:
1
AT91C_BASE_WDTC->WDTC_WDMR =  AT91F_WDTGetPeriod(5000) |         //Watchdog Counter Value
2
                             (AT91F_WDTGetPeriod(5000) << 16) |  //Watchdog Delta Value
3
                              AT91C_WDTC_WDRSTEN;                //A Watchdog fault triggers a Watchdog reset

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.