mikrocontroller.net

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


Autor: heinvonnewerft (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
[...]
Intern_wdtc   = _PCLK/4*3;    // 3s timeout (pclk/4 =1s)
Intern_wdmod  = 3;      // watchdog reset ein
Intern_wdfeed = 0xaa;    // start
Intern_wdfeed = 0x55;    //  watchdog
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

Autor: Robert Teufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: heinvonnewerft (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.