Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage ARM7 Interrupt


von Mark .. (mork)


Lesenswert?

Hallo,

bin gerade ein Buch über ARM7s am lesen, und da gibt es eine Sache, die 
ich nicht so ganz verstehe: In dem Buch steht, dass bei einer Exception 
ZUERST PC in LR gespeichert und ERST DANN in den entsprechenden 
Exception-Modus gewechselt wird. Aber wodurch ist es sichergestellt, 
dass im LR des vorherigen Modus' nichts "wertvolles" drinstand? Oder ist 
das falsch und es wird doch erst der Modus gewechselt und der neue LR 
verwendet?

MfG Mark

von (prx) A. K. (prx)


Lesenswert?

Weiss nicht wo das steht, es ist aber falsch. Die Return-Adresse landet 
im LR vom IRQ/FIQ Kontext.

Das Problem allerdings bleibt dennoch erhalten. Bei nested Interrupts 
nämlich, die wegen dieses zweifelhaften Interrupt-Verfahrens eher 
kompliziert ablaufen müssen.

von Mark .. (mork)


Lesenswert?

Danke für die richtige Erklärung!

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

A. K. wrote:
> Weiss nicht wo das steht, es ist aber falsch. Die Return-Adresse landet
> im LR vom IRQ/FIQ Kontext.

Genaugenommen ist die Reihenfolge egal, solange sichergestellt ist, dass 
in jedem Fall das lr des künftigen Modes verwendet wird.

> Das Problem allerdings bleibt dennoch erhalten. Bei nested Interrupts
> nämlich, die wegen dieses zweifelhaften Interrupt-Verfahrens eher
> kompliziert ablaufen müssen.

Nested interrupts auf ARM Cores != Cortex-Mx (v7M, bzw. v6M) sind nur 
deswegen zweifelhaft, weil sie so bescheiden implementiert sind. Da 
braucht der Code zum Sichern des Kontexts unter Umständen länger als die 
Interrupt Routine selbst. Aber eben nur manchmal.

Gruß
Marcus

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Wobei v6-M eigentlich gar keine Nested Interrupts unterstützt...

--
Marcus

von (prx) A. K. (prx)


Lesenswert?

Marcus Harnisch wrote:

> Genaugenommen ist die Reihenfolge egal, solange sichergestellt ist, dass
> in jedem Fall das lr des künftigen Modes verwendet wird.

Wessen Haare willst du hier eigentlich spalten? ;-)

> Nested interrupts auf ARM Cores != Cortex-Mx (v7M, bzw. v6M) sind nur
> deswegen zweifelhaft, weil sie so bescheiden implementiert sind.

Jo, aber da rennst du grad offene Türen ein, denn mit dem zweifelhaften 
Verfahren meinte ich das Interrupt-Konzept von ursprünglichen ARM, nicht 
nested Interrupts als solche. Gegen die habe ich nix.

Es geht hier ausserdem um ARM7, nicht ARMv7.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

A. K. wrote:
> Marcus Harnisch wrote:
>
>> Genaugenommen ist die Reihenfolge egal, solange sichergestellt ist, dass
>> in jedem Fall das lr des künftigen Modes verwendet wird.
>
> Wessen Haare willst du hier eigentlich spalten? ;-)

Nun ja es ist nicht ganz so haarspalterisch wie es auf den ersten Blick 
scheint: Würde man zuerst den Mode wechseln müssen um auf die banked 
Register zugreifen zu können, wie würde beim Interrupt entry dann das 
CPSR des vorherigen Modes ins SPSR_irq retten?

Man sollte sich eben nicht zu sehr an einer zeitlichen Reihenfolge 
festhalten.

> Es geht hier ausserdem um ARM7, nicht ARMv7.

Schon klar. Aber hätte ich allgemein von "bescheidener Implementierung" 
und "ARM" gesprochen, dann hätte hier gleich der nächste Haarspalter 
vorgesprochen 8-)

Gruß
Marcus

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.