www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Softwarereset AT91SAM7X


Autor: Kilian B. (kilian)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kilian B. (kilian)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Dir ist schon klar das das nur ein Register war? Ich dachte die 
Base-Adresse vom Reset-Controller sei dir bekannt.
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!!!!

Autor: Kilian B. (kilian)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

lade dir die SW runter:

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

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

Stephan

Autor: Kilian B. (kilian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cool, danke hat funktioniert.

Hab das Key Word statt das Password genommen :-(

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.