Forum: Mikrocontroller und Digitale Elektronik [SAM7] Power-Up Reset im laufenden Betrieb


von Sam (Gast)


Lesenswert?

Hallo Forum!

Ich beobachte zur Zeit ein merkwürdiges Phänomen.

An ander Codestelle, die eigentlich nur einmal beim starten des µC 
ausgeführt wird, lese ich das Reset Controller Status Register aus. Der 
Wert darin ist ncoh dem einschalten korrekt ein Power-up Reset.
Jetzt seh ich aber, dass ab und an auch im laufenden Betrieb ein solcher 
reset ausgelesen wird (ich lasse mir den ausgelesenen Wert über die 
Serielle Schnittstelle herausgeben). Der Watchdog ist aktiviert.

Wie kann soetwas passieren?

von Lutz (Gast)


Lesenswert?

Sam schrieb:
> An ander Codestelle, die eigentlich nur einmal beim starten des µC
> ausgeführt wird, lese ich das Reset Controller Status Register aus.
...
> Jetzt seh ich aber, dass ab und an auch im laufenden Betrieb ein solcher
> reset ausgelesen wird ...

Das Register setzt Du nach dem Auslesen auch auf Null?
Btw: Wenn die Codestelle nur beim Starten ausgeführt wird: Wie kannst Du 
dann im Betrieb etwas auslesen? Die Funktion muß dann ja aufgerufen 
werden, was üblicherweise der Programmierer tut.

von Sam (Gast)


Lesenswert?

Hi,

nein, ich setze das Register nach dem Auslesen nicht auf Null. Laut 
Datenblatt ist es Read-Only. Aber der Wert 0 bedeutet ja Power-Up reset.

Und wie der Code im laufenden Betrieb ausgeführt werden kann frage ich 
mich auch.

Ich bin da einwenig ratlos :(

von holger (Gast)


Lesenswert?

>Und wie der Code im laufenden Betrieb ausgeführt werden kann frage ich
>mich auch.

Bauchlandung des uC wegen Spannungseinbruch?

von Lutz (Gast)


Lesenswert?

holger schrieb:
> Bauchlandung des uC wegen Spannungseinbruch?

Das würde ich dann auch tippen, sofern es nicht ein Brown-Out-Reset-Flag 
gibt. Wenn ja: Hast Du ...

Erstmal richtig gefragt: Um welchen Controller genau handelt es sich 
denn überhaupt?

von Sam (Gast)


Lesenswert?

Hi,

oh, stimmt, habe ich ganz vergessen zu schreiben. Es ist ein 
AT91SAM7X256. Der sollte einen Brown-Out-Reset eigentlich erkennen 
können.

von Lutz (Gast)


Lesenswert?

Hast Du den Brownoutreset enabled? Wenn ja, müßte, sofern es einer war, 
ja im Feld RSTTYP des RSTC_SR eine 101 stehen.
Wenn Du den Brownout nicht enabled hat (was Du aber eigentlich immer tun 
solltest), lese auch mal BODSTS im RSTC_SR mit aus. Wegen
"• BODSTS bit: This bit indicates a brownout detection when the brownout 
reset is disabled
(bod_rst_en = 0). It triggers an interrupt if the bit BODIEN in the 
RSTC_MR register enables
the interrupt. Reading the RSTC_SR register resets the BODSTS bit and 
clears the interrupt."

Aber in einem Zug, also nicht z.B. mit zwei if-Abfragen
1
if (RSTC_SR & RSTTYP) {...}
2
if (RSTC_SR & BODSTS) {...}
da die erste Abfrage das Register schon löscht. Also z.B. das Register 
in einer Variablen speichern und dann die ganzen Tests machen. Am 
einfachsten ist aber, den Brownout zu enablen.

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.