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
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
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...
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!!!!
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 :-(
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.