ATMEGA Reset durchführen

pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

ATMEGA Reset durchführen

 · 
Posted: 22.04.2021 - 13:29  ·  #1
Hallo Leute,

ich muss in einer älteren Steuerung von uns mit ATMEGA diesen bei bestimmten Bedingungen neustarten. Leider gibt es den Befehl/Function HardwareReset nur beim XMEGA.

Gibt es etwas in der Richtung für den ATMEGA?

Ansonsten würde ich es so lösen, ich nutze den Watchdog bei der Steuerung, für den Reset würde ich dann einfach eine Endlosschleife starten, damit der Watchdog den Reset durchführt. Gibt es da eine andere Lösung?

Thorsten
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: ATMEGA Reset durchführen

 · 
Posted: 22.04.2021 - 13:47  ·  #2
The watchdog solution is the one I use. Otherwise

Code
SYSTEM_RESET;


but that of course is software reset not hardware reset. I think, though that hardware reset is less important in ATMegas because the XMegas have a lot more peripherals that are more independent of the main processor.

Regards

Merlin
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: ATMEGA Reset durchführen

 · 
Posted: 24.04.2021 - 11:24  ·  #3
Hi Merlin,

yes, i use the "loop ... endloop" and run in WatchDog.

With "SYSTEM_RESET" not everything is reset.
I think the way via the watchdog is better here.

Thorsten
Heinz
Benutzer
Avatar
Gender:
Age: 71
Homepage: brotz.ch
Posts: 42
Registered: 04 / 2018
Subject:

ATMEGA Reset mit WD => set all Registers to the "Inital Value" gemäss Manual ?

 · 
Posted: 11.05.2021 - 13:47  ·  #4
hallo Thorsten
Verwende auch seit vielen Jahren den ATMega256. Da hat sich auch diese Frage gestellt.
Komme auch zum selben Schluss.
- System_Reset macht nur einen Restart, OHNE Löschen der Register.
Daher wäre System_Restart wohl ein besserer Name gewesen.
- WD-Timeout. Gemäss Timing Diagramm sollte eine interner Reset durchgeführt werden.
??? Hat das mal jemand verifiziert, ob wirklich alle Register gemäss Manual auf den "Initial Value"
??? gesetzt werden ???

Habe mich in diesem Zusammenhang nochmals vergewissert
mit dem kleinen Beispiel:
procedure ResetSWTest;
begin
System_Reset; // vià JUMP ResetVector. Löscht keine I/O-Register
end;

System_Reset macht gemäss Listing letztlich nur einen Restart mit: JMP SYSTEM.Reset.


.FUNC ResetSWTest, 002DBh, 00020h
SMCMDMonitor.ResetSWTest:
.RETURNS 0
.BLOCK 732
.LINE 733
CLI
IN _ACCB, mcusr
CBR _ACCB, 08h
OUT mcusr, _ACCB
LDI _ACCB, 007h
LDI _ACCA, 01Fh
STS wdtcr, _ACCA
STS wdtcr, _ACCB
SBRC Flags, IntFlag
SEI
CLI
LDI _ACCA, 0FEH ROLB IntFlag
AND Flags, _ACCA
IN _ACCB, mcusr
ANDI _ACCB, 0F3h
OUT mcusr, _ACCB
JMP SYSTEM.Reset
.ENDBLOCK 734
SMCMDMonitor.ResetSWTest_X:
.LINE 734
.BRANCH 19
RET
.ENDFUNC 734
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   80   94 · Page-Gen-Time: 0.056661s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI