Frage

Hallo, ich arbeite derzeit mit einem AT91SAM7X256, der auf "Bare Metal" läuft. Ich habe das Datenblatt sowie das Architekturhandbuch gründlich gelesen, da ich im Hinterkopf mit der Schlussfolgerung gekommen bin, dass FIQ eine höhere Priorität hat als IRQs.

In der Praxis bemerke ich jedoch, dass die IRQs die Ausführung meines FIQ -Handlers aussetzen, obwohl ich das F -Bit im CPSR nicht berühre. Ist es falsch anzunehmen, dass FIQs nicht an IRQs ausgesetzt werden sollten?

Was muss ich tun, um sicherzustellen, dass meine FIQ -Service -Routine nicht unterbrochen wird?

Danke

War es hilfreich?

Lösung

Wenn Sie einen FIQ -Handler eingeben, deaktiviert ARM Core automatisch weitere Interrupts, sowohl FIQ als auch IRQ, indem Sie die Bits 'I' und 'F' in der CPSR einstellen. Dies gibt Ihnen das Gefühl, dass nichts einen FIQ vorbeugen kann. Aber SW kann dieses Verhalten außer Kraft setzen! Ich denke, ein Teil Ihres Codes berührt das CPSR und setzt das "I" zurück. Und daher kann IRQ -Interrupts auch dann ausgelöst werden, wenn Ihr FIQ ausgeführt wird.

Um die obige Erklärung hinzuzufügen, ist der Grund, warum FIQs etwas Besonderes erscheinen, dass, wenn ein IRQ -Handler eingegeben wird, nur das "I" -Bit durch Deaktivieren nur weiterer IRQs festgelegt wird. 'F' Bit ist nicht festgelegt und daher können weitere FIQs einen laufenden IRQ -Handler unterbrechen, ohne dass SW -Intervention erforderlich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top