Forum: Compiler & IDEs Wie Interrupts in einer ISR wieder aktiveren?(ARM)


von Mark .. (mork)


Lesenswert?

Hallo,

wie kann man beom LPC2138 in einer ISR die Interrupts wieder aktivieren? 
Wenn ich enableIRQ() an der gewünschten Stelle schreibe, macht der 
Controller einen Dauerreset. Dass der Stack überfüllt wird kann ich 
eigentlich ausschließen, weil mind. 1 ms zwischen zwei Interupts ist und 
in der ISR kaum was gemacht wird. Weiss jemand Rat?

MfG Mark

von Andreas K. (a-k)


Lesenswert?

Wirst dich ein bischen tiefer in die Interrupt-Verarbeitung von ARMs 
einlesen müssen. IRQs werden in einem eigenen Registerkontext 
ausgeführt. Dieses Verfahren erlaubt aber keinen weiteren Interrupt 
innerhalb eines Interrupts. Um sowas zuzulassen muss man vorher den 
Modus wechseln. Kann man als Designfehler der Architektur abbuchen.

Siehe beispielsweise AN10381 von NXP.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Suchbegriffe: "nested interrupts" oder "interrupt nesting".
Diverse AT91 ARM7TDMI Beispiele von Atmel enthalten einen IRQ 
Assembler-Wrapper mit "nesting". Kann man leicht für LPC2000 portieren 
(Anpassung AIC->VIC)

von Mark .. (mork)


Lesenswert?

Hallo mthomas,

vielen Danke für die Stichwörter! Ich hab die bei google eingegeben und 
schnell einen Beispielcode gefunden, der bei mir nach einigen 
Anpassungen problemlos lief.

MfG Mark

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.