Reset / reboot
Reset / reboot
Kedves Hozzáértők!
Tudna valaki tippet adni, hogy ha programból resetelni szeretném az ATm64-est, akkor van-e rebootra lehetőség?
Vagy van-e valami ötlet arra, hogy ha fogja a chip-emet egy Wiznet IRQ-ja, akkor hogy tudom újraindítani az egész hóbelebancot?
Köszi!
Tudna valaki tippet adni, hogy ha programból resetelni szeretném az ATm64-est, akkor van-e rebootra lehetőség?
Vagy van-e valami ötlet arra, hogy ha fogja a chip-emet egy Wiznet IRQ-ja, akkor hogy tudom újraindítani az egész hóbelebancot?
Köszi!
poeri
Ha IRQ fogja, akkor is van rá megoldás, ami programfutás alatt is _önállóan_ resetel:
Watchdog.
A goto &H00 az csak akkor igaz, ha nincsen bootloader a chipben! ha van, akkor a Bootloader címére kell ugrani.
mindezt megoldja a watchdog is. Elindítod, és ha leketyeg a beállított idő (1 ms...2 sec), akkor a chip újraindul, hacsak nem kap egy számlálónullázás parancsot (Reset watchdog).
Újraindulás után a RESET regiszter kiolvasásával meg lehet nézni, hogy mi okozta a újraindulást:
- Külső reset (reset láb),
- Watchdog,
- Bekapcsolás történt csak,
- BOD (tápfeszingadozás).
Ha kell, van mintaprogim is....
Watchdog.
A goto &H00 az csak akkor igaz, ha nincsen bootloader a chipben! ha van, akkor a Bootloader címére kell ugrani.
mindezt megoldja a watchdog is. Elindítod, és ha leketyeg a beállított idő (1 ms...2 sec), akkor a chip újraindul, hacsak nem kap egy számlálónullázás parancsot (Reset watchdog).
Újraindulás után a RESET regiszter kiolvasásával meg lehet nézni, hogy mi okozta a újraindulást:
- Külső reset (reset láb),
- Watchdog,
- Bekapcsolás történt csak,
- BOD (tápfeszingadozás).
Ha kell, van mintaprogim is....
Kód: Egész kijelölése
Dim Temp1b as Byte
Temp1b = Mcucsr 'mcucsr az adatlapokban részletesen benne van
If Temp1b.3 = 1 Then Set Led2 'watchdog miatt volt a reset!
Mcucsr = 0
'Print "MCUCSR:" ; Bin(temp1b)
'xxx43210
'4 - 1 ha JTAG reset volt (csak JTAGos procinal)
'3 - 1 ha Watchdog okozta
'2 - 1 ha Brown Out okozta (csak ha a BOD be van kapcsolva FuseBiteknél)
'1 - 1 ha Ext. Reset volt
'0 - 1 ha bekapcsolás (PowerOn) Reset volt
'induláskor:
'xxxx0111 a regiszter
'nullázni kell utána, és onnan látszik h mi okozott resetet.
A program elején legyen, amikor a konfigurálás megtörtént.
Az első rész az nálam debugként az I2C detect, és a RESETregiszter szokik lenni.
Nálam a watchdog volt a lényeg (lsd Watchdog, megszakítás fejezetet). Ez utalt arra h a program valahol "kiakadt" végtelen ciklusban...
Énnekem M8 esetén volt eddig használva, de a legtöbb chipben van ilyen regiszter... M644 esetén a neve MCUSR (MCU Status Register), M8 és régebbi esetekben MCUCSR (MCU Reset Status Register)!
De a véletlen hiba/fagyás lehet más is. Pl. buffer (frames, swstack....) hiba is. erre a dbg és a $dbg parancsokat kell megnézni, és a Bascomban a Debug Toollal elemezni. erre még csak nagyon vázlatom van, a súgója 2 féle debugot is enged. FONTOS! Ezek csak HW UARTtal működnek, viszont _nem_ számít hogy másra is használom, közberondít. DE a DebugTool figyelmen kívül hagyja az én szövegeimet, és csak a $dbg részt jegyzi! Jó, csúnya-csúnya, de működik!