AT91SAM7 Interrupt Nesting mit ctl_set_isr?

Gast #1891916
Lesenswert?

Hallo,

ich habe gelesen, dass es mit dem ARM7 bei verschachtelten Interrupts 
etwas anders gehandhabt wird und zum Teil umständlich Softwareroutinen 
dafür nötig sind.
Meine Frage ist nun, ob dies mit der Funktion ctl_set_isr Umngangen 
wird. Würde eine verschachtelung funktionieren wenn ich interrupts durch 
diese Funktion unterschiedliche Prioritäten zuweise?

Grüße, H.P.
Gast #1893422
Lesenswert?

Liegt wohl auch an der Entwicklungsumgebung / Bibliotheken.

Die (Haupt-)Besonderheit von ARMs bei nested Interrupts liegt an dem 
Designfehler, dass er nur dann erlaubt werden darf, wenn LR_irq nicht 
für Calls genutzt wird, weil dieser beim Nesting überschrieben wird. 
Also, erst Mode wechseln, dann Nesting erlauben.
#1893678
Lesenswert?

Der Target-spezifische Code von Crossworks für ARM7 sieht einen 
zentralen Interrupt-Handler vor, der abhängig von der Parametrisierung 
nested Interrupts zulässt, indem der notwendige Modeswitch dort 
durchgeführt und erst dann der VIC Vektor aufgerufen wird. In der ISR 
sind dadurch keine speziellen Vorkehrungen für Nesting erforderlich. 
Siehe beispielsweise packages/targets/ARM/VIC_irq_handler.s für manche 
NXP ARM7.
#1893926
Lesenswert?

http://www.13thmonkey.org/documentation/ARM/HAI.pdf
http://www.nxp.com/documents/application_note/AN10381.pdf

Beim ARM führt jeder Interrupt zu einer Zerstörung des vorherigen 
Inhalts von R14 des IRQ-Registerkontextes. Ein Konstruktionsfehler. Wenn 
ein unterbrechbarer IRQ-Handler in diesem Modus liefe, dann dürfte er 
folglich R14 nicht verwenden. Weil das bei darin enthaltenen 
Unterprogrammaufrufen etwas unpraktisch ist wechselt man statt dessen 
den Kontext um ein anderes R14 zu gewinnen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren