Forum: Mikrocontroller und Digitale Elektronik Softwarereset AT91SAM7X


von Kilian B. (kilian)


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

von Stephan W. (sir_wedeck)


Lesenswert?

Hi

schau dir mal das Register RSTC_CR an, dort findest du was du suchst.
Dafür brauchst du kein Assembler, geht direkt von C aus!

Stephan

von Kilian B. (kilian)


Lesenswert?

Danke, doch wie muss ich das vom Syntax her machen?

RSTC_CR = AT91C_RSTC_RSTTYP_SOFTWARE; ???

Zudem kennt mein Controller dieses Register nicht. Es ist nur im 
MemoryMap.xml kurz erwähnt...

von Stephan W. (sir_wedeck)


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!!!!

von Kilian B. (kilian)


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 :-(

von Stephan W. (sir_wedeck)


Lesenswert?

Hi

lade dir die SW runter:

http://www.atmel.com/dyn/resources/prod_documents/at91lib_20100901_softpack_1_5_svn_v8476.zip

und schau dort mal unter dem Verzeichnis ..\peripherals\rstc
nach. Dort solltest du fündig werden.

Stephan

von Kilian B. (kilian)


Lesenswert?

Cool, danke hat funktioniert.

Hab das Key Word statt das Password genommen :-(

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.