Softwarereset AT91SAM7X

OP #1960742
Lesenswert?

Hallo zusammen

Ich möchte gerne bei meinem Controller einen Softwarereset einbauen...
Ich habe nun im File AT91Sam7_startups.S die nötigen Befehle unter dem 
"reset_handler" gefunden. Ist es möglich diese Assembler Routiene aus 
dem C-Code auszuführen?

Grüsse
#1961079
Lesenswert?

Hi

Dir ist schon klar das das nur ein Register war? Ich dachte die 
Base-Adresse vom Reset-Controller sei dir bekannt.
1
AT91C_BASE_RSTC->RSTC_RCR = AT91C_RSTC_PROCRST | RSTC_KEY_PASSWORD;

Schau mal in die AT91Lib von Atmel, da sind viele Libs drin, die dir das 
programmieren des MC erleichtern! (ich hab noch die 1.5, ist etwas 
älter)
Da gibs auch eine für den Reset-Controller.

Stephan

PS: Bitte das DB lesen, wenn du das Password nicht kennst!!!!
OP #1961272
Lesenswert?

Danke, war ja klar, hab mich da ein bisschen doof angestellt. Ich habe 
früher immer mit MSP und PIC gearbeitet, diese Controller sind viel 
simpler als der ARM7! :-(

Ich habe nun verschiedens probiert... doch einen schönen Reset, wie er 
beim Power On kommt bekomme ich einfach nicht hin...

im at91Sam7x.h finde ich folgende Parameter:
// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register 
--------
#define AT91C_RSTC_PROCRST    (0x1 <<  0) // (RSTC) Processor Reset
#define AT91C_RSTC_PERRST     (0x1 <<  2) // (RSTC) Peripheral Reset
#define AT91C_RSTC_EXTRST     (0x1 <<  3) // (RSTC) External Reset
#define AT91C_RSTC_KEY        (0xFF << 24) // (RSTC) Password
// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register --------
#define AT91C_RSTC_URSTS      (0x1 <<  0) // (RSTC) User Reset Status
#define AT91C_RSTC_BODSTS     (0x1 <<  1) // (RSTC) Brownout Detection 
Status
#define AT91C_RSTC_RSTTYP     (0x7 <<  8) // (RSTC) Reset Type
#define   AT91C_RSTC_RSTTYP_POWERUP              (0x0 <<  8) // (RSTC) 
Power-up Reset. VDDCORE rising.
#define   AT91C_RSTC_RSTTYP_WAKEUP               (0x1 <<  8) // (RSTC) 
WakeUp Reset. VDDCORE rising.
#define   AT91C_RSTC_RSTTYP_WATCHDOG             (0x2 <<  8) // (RSTC) 
Watchdog Reset. Watchdog overflow occured.
#define   AT91C_RSTC_RSTTYP_SOFTWARE             (0x3 <<  8) // (RSTC) 
Software Reset. Processor reset required by the software.
#define   AT91C_RSTC_RSTTYP_USER                 (0x4 <<  8) // (RSTC) 
User Reset. NRST pin detected low.
#define   AT91C_RSTC_RSTTYP_BROWNOUT             (0x5 <<  8) // (RSTC) 
Brownout Reset occured.
#define AT91C_RSTC_NRSTL      (0x1 << 16) // (RSTC) NRST pin level
#define AT91C_RSTC_SRCMP      (0x1 << 17) // (RSTC) Software Reset 
Command in Progress.
// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register --------
#define AT91C_RSTC_URSTEN     (0x1 <<  0) // (RSTC) User Reset Enable
#define AT91C_RSTC_URSTIEN    (0x1 <<  4) // (RSTC) User Reset Interrupt 
Enable
#define AT91C_RSTC_ERSTL      (0xF <<  8) // (RSTC) User Reset Length
#define AT91C_RSTC_BODIEN     (0x1 << 16) // (RSTC) Brownout Detection 
Interrupt Enable


Kannst du mir vielleicht sagen, welche ich nun nehmen muss? Ich habe 
einen nach dem andern probiert, doch funktioniert hat keiner :-(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren