Forum: Mikrocontroller und Digitale Elektronik Watchdog Resetgrund herausfinden: MCUCSR und WDRF


von [int] (Gast)


Lesenswert?

Huhu,
als ich wollte eigentlich am anfang meines programmes verzweigen je
nachdem ob ein Power-Up vorrausgegangen ist oder ein Watschdog-Reset.

also hab ich mir gedacht (ASM auf einem AtmelMega16):

  sbis     MCUCSR, WDRF
  rjmp    kein_reset

oder

  sbis     MCUCSR, 3
  rjmp    kein_reset


Avr-Studio meint dazu nur: Operand 1 out of range: 0x34

Bin ich jetzt knägge?

von plitzi (Gast)


Lesenswert?

Nein, aber das MCUCSR liegt ausserhalb des Bereiches, der mit
sbis/sbic-Befehlen erreichbar ist (IO-Adresse $34, sbis/sbic geht nur
bis 31dez).

Also bleibt nur das Einlsesen in ein Register und das Auswerten der
einzelnen Bits dort.

Jörg

von AxelR. (Gast)


Lesenswert?

Hi, hallo zusammen
in register einlesen und dann
sbrs statt sbis
//FatsAVR//
...
If mcucsr.wdrf=1 Then
  mcucsr.wdrf=0
  Print "WDGR"
  End If
...

//ASSEMBLER (generiert von FastAVR)//
...
;-Line--1570----If mcucsr.wdrf=1 Then--
    in  r24,MCUCSR
    sbrs  r24,WDRF
    rjmp  L0371
L0372:
;-Line--1571----mcucsr.wdrf=0--
    in  zl,MCUCSR
    cbr  zl,0x08
    out  mcucsr,zl

;-Line--1572----Print "WDGR"--
    ldi  zl,Low(S13*2)
    ldi  zh,high(S13*2)
    call  _PSc
    call  _PCL
;-Line--1585----End If--
L0371:
...

Das "WDGR" für'n PRINT-Befehl liegt hinten als tabelle S13 im
Flash.

wie oben bereits gesagt, etwder sbrs statt sbis und/oder über weiteres
Register einlesen.

gruß
AR.

von [int] (Gast)


Lesenswert?

JO! TNX
so hab ichs dann gemacht:

  in    temp,    MCUCSR
  sbrs     temp,     3
  rjmp    kein_reset

GreetX, [int]

von Bernhard S. (bernhard)


Lesenswert?

Habe ich es richtig aus dem Datenblatt gelesen, dass das
POWER-ON-RESET-FLAG
nur manuell gesetzt und zurückgesetzt werden kann?

Man könnte es nuzen, um abzufragen, ob das Register MCUCSR per Software
schon gelöscht wurde?

von mmerten (Gast)


Lesenswert?

nein, die RESET_FLAGS im MCUCSR werden bei einem Reset von der
auslösenden Quelle entsprechenden aktualisiert. Das MCUSR kann nach dem
Programmstart ausgelesen und die Reset-Quelle ausgewertet werden. Ein
setzten und löschen dieser Bits während des Programmablaufs ist auch
jederzeit möglich.

von Bernhard S. (bernhard)


Lesenswert?

@mmerten

>die RESET_FLAGS im MCUCSR werden bei einem Reset von der
>auslösenden Quelle entsprechenden aktualisiert

Das stimmt, doch wie sieht es konkret mit dem "POWER-ON-RESET-FLAG"
(Bit0) im MCUCSR aus?

von mmerten (Gast)


Lesenswert?

Wenn man die Einschränkungen im Datenblatt beachtet (einige ältere AT90S
Typen hatten da etwas Probleme) und auch beim Mega128 gibt es einige
Besonderheiten, funktioniert die korrekte Erkennung der RESET-Quelle
recht sicher. Ebenso muß man auf die passende Dimensionierung der
externen Reset-Beschaltung und Fuse-Bits (Start-Delay) achten. Sonst
wird nach einem POR evtl. noch ein normaler RESET oder Brown-Out-Reset
detektiert. Ebenso sollte man den Hinweis für das Lesen und Löschen des
MCUCSR im Datenblatt beachten.

von Reiner (Gast)


Lesenswert?

Hallo,

mich würde mal interessieren welche Besonderheiten des Mega128 der 
vorhergehende Beitrag wohl meint und von welchem Hinweis fürs Lesen
und Löschen des MCUCSR dessen Autor spricht ???

Beim JTAG-Debuggen meines Mega128 Systems (Olimex/Studio4.11SP2) ist mir 
nämlich aufgefallen daß nach einem Break regelmässig nicht die letzte 
Resetquelle sondern merkwürdigerweise stets die davor angezeigt wird-
und daß obwohl die Resetbits zwischenzeitlich zurückgesetzt wurden!
Im normalen Betrieb dagegen funktioniert alles erwartungsgemäss...

Rainer

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.