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