Forum: Mikrocontroller und Digitale Elektronik LPC macht RESET nach interrupt


von Fabian K. (fabian_k)


Lesenswert?

Hallo,

es geht um einen LPC2148, der bei jedem Timer1-Match-Interrupt den 
Zustand des Match-Pins wechseln soll.
Interrupts werden generiert, allerdings macht der uC nach ein paar 
Interrupts einen RESET. Ich hab mit ein paar LEDs und Variablen getestet 
(hab leider keinen Debugger), ob es wirklich ein RESET ist, weil ich 
vorher die Vermutung gehabt hab, dass er nur zufällig zum Anfang 
springt.
Hat vielleicht jemand eine Vermutung für dieses Verhalten?

Danke im vorraus
Fabian

von Ralph (Gast)


Lesenswert?

Besorg dir einen Debugger, sonst wirst du da mit dem LPC nicht froh 
werden

Möglichkeiten:
* Data Abort
* Program Abort
* nicht implementierte Interruptroutine
* Pointer auf Adresse 0x00000
* Stack overflow

Das waren mal so die Ursachen die öfter in Frage kommen aber bei weitem 
nicht alle möglichen Ursachen.

Eine genauere Fehlerangabe kann ich dir leider nicht geben da ich meine 
Kristallkugel verlegt habe...

von Fabian K. (fabian_k)


Lesenswert?

Danke schonmal für die Antwort. Ich hab auch noch ein interessantes 
Dokument dazu auf der NXP-Seite entdeckt:
http://www.nxp.com/documents/application_note/AN10414.pdf
Da steht aber nichts von spontanen Interrupts bei Verwendung der 
Timer-Interrupts. Ich werd auf jeden Fall heute Abend mal den 
default-Vector ergänzen und hoffe, dass zumindest das RESET-Problem 
behoben ist.

Danke nochmal für die Hilfe

von Stefan ++ (Gast)


Lesenswert?

Hallo,

ich verwendete mal in einem Projekt ebenfalls den LPC2148 Timer 
Interrupt für eine fast identische Aufgabe, aber ein derartiges 
Verhalten kenne ich nicht!

Lass mal deine Interrupt-Routine sehen !!!

Gruss Stefan

von Fabian K. (fabian_k)


Lesenswert?

Ich hab den Code zwar grad nicht hier, aber die Routine sieht in etwa so 
aus:

void __attribute__((interrupt ("IRQ"))) routine(void)
{
 // isr Code

 T1IR = 0xFF;
 VICVectAddr = 0;
}

von Stefan ++ (Gast)


Lesenswert?

Hallo,

Fabian K. schrieb:
> void __attribute__((interrupt ("IRQ"))) routine(void)
> {
>  // isr Code
>
>  T1IR = 0xFF;
>  VICVectAddr = 0;
> }

dagegen kann man nichts sagen.
Ich hoffe nur dass sich in
>  // isr Code
nichts verbirgt das an den Interrupts (enable, disable, etc. ...) 
rumdreht.

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.