Forum: Mikrocontroller und Digitale Elektronik Probleme nach Watchdog-Reset [ARM] [LPC2138]


von heinvonnewerft (Gast)


Lesenswert?

Hi!

Ich programmiere für meine Diplomarbeit einen LPC2138, was auch bislang 
recht gut funktionierte.
Jetzt wollte ich jedoch eine Funktion einbauen, die den Microcontroller 
über die USB-Schnittstelle zurücksetzt.
Dazu mache ich den WD scharf und lass mein Programm in eine 
Endlosschleife laufen:
1
[...]
2
Intern_wdtc   = _PCLK/4*3;    // 3s timeout (pclk/4 =1s)
3
Intern_wdmod  = 3;      // watchdog reset ein
4
Intern_wdfeed = 0xaa;    // start
5
Intern_wdfeed = 0x55;    //  watchdog
6
while (1);      //endlosschleife, um WD auszuloesen
Allerdings gibt es danach immer ein Problem: Wenn der WD einmal 
zugeschlagen und einen RESET ausgeführt hat, ist es mir nicht mehr 
möglich den Microcontroller über mein JTAG zu flashen oder 
zurückzusetzen, ich muss zuerst immer einmal die Stromzufuhr 
unterbrechen, um über mein JTAG wieder Zugriff auf den Controller zu 
bekommen.

Meine Frage lautet nun: Kann ich dieses Problem irgendwie beheben 
(vielleicht muss ich noch irgendein Register setzen oder abfragen, bevor 
ich in die Endlosschleife gehe?)? Oder gibt es hierfür keine Lösung?

Wäre schön, wenn mir jemand helfen könnte, oder wenn sich zumindest 
jemand meldet, der das gleiche Problem hat (dann wüsste ich wenigstens, 
dass ich nicht alleine bin)!

Mit Dank und freundlichem Gruß

Hein vonne Werft

von Robert Teufel (Gast)


Lesenswert?

Hallo Hein,

Du bist nicht der einzige mit diesem Problem. Bei Reset wird JTAG 
kurzzeitig abgeschalten, dadurch kann der JTAG Adapter den Faden 
verlieren. Je nachdem was fuer eine Software mit der JTAG arbeitet z.B. 
die Kombinationen IAR + Segger J-Link oder Keil + U-Link sollten laufen. 
Da muss die debugger software wieder synchronisieren nach einem Reset 
und dazu erst mal warten bis der interne Reset komplett ausgefuehrt ist.

Also kurz und gut, es ist nicht primaer Dein Problem aber evtl. kommst 
Du nicht drum rum die Stromzufuhr zu unterbrechen

Robert

von A.K. (Gast)


Lesenswert?

Standardverfahren: Als erste Aktivität im Code, vorzugsweise im 
Startup-Code (crt0.s, startup.s oder wie auch immer das heisst), eine 
Warteschleife einbauen, die dem JTAG hinreiched Zeit gibt, den Prozessor 
wieder einzufangen.

von heinvonnewerft (Gast)


Lesenswert?

Hi!

Danke euch für die Antworten!
Zuersteinmal bin ich ja ganz froh, dass ich nicht der einzige bin, der 
diese Probleme hat!
Die Sache mit der Schleife, die dem JTAG Zeit gibt, den Prozessor wieder 
einzufangen, werde ich mal ausprobieren!

Gruß,

Hein vonne Werft

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.