Watchdog Resetgrund herausfinden: MCUCSR und WDRF

Gast #170762
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?
Gast #170763
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
Gast #170764
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.
Gast #170767
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.
Gast #170769
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.
Gast #758432
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren