Forum: Mikrocontroller und Digitale Elektronik Interruptlatenzzeiten bei Mikrocontrollern


von Samuel (Gast)


Lesenswert?

Hallo,
ich benutze den ADuC7021 und habe dort 2 Interruptroutinen (eine für die 
schnellen Interrupts FIQ und eine für die langsamen Interrupts IRQ) in c 
implementiert (mit KEIL Vision 3.x). Im Datenblatt ist als maximale 
Interruptlatenzzeit 1,4 µsec angegeben. Gemessen habe ich aber 2,4 bis 
2,8 µsec. Woran kann diese längere Interruptlatenzzeit liegen?
Am KEIL Compiler, der vielleicht viele Register beim Einsprung sichert?
Oder weil ich dide Interruptroutine in c Implementiert habe? Würde eine 
Assemblerimplementation der Interruptroutine helfen?
Kann man im KEIL µVision 3 irgendwo einstellen, dass er beim 
Interrupteinsprung nur die aller nötigsten Register sichert? Oder habt 
ihr andere Tips und Tricks?
Danke
Gruß
Samuel

von (prx) A. K. (prx)


Lesenswert?

Das Datenblatt gibt die Latenz bis zum ersten Assembler-Befehl des 
Handlers an. Du misst hingegen die Latenz bis zur ersten Zeile in C. 
Dazwischen liegt der Wasserkopf einer C-Funktion als Handler.

Speziell beim FIQ ist Assembler ziemlich hilfreich, weil man dort anders 
als in C vorrangig die automatisch umgeschalteten Register verwenden 
kann, ggf. vorinitialisiert mit irgendwelchen benötigten Basisadressen.

Apropos 1,4µs: Woraus ergibt sich das? Ein Datasheet dürfte das nicht in 
absoluter Zeit sondern in Takten angeben. Zudem scheint mir das 
ausserordentlich viel zu sein.

Wenn ein IRQ/FIQ-Handler auf ADuC schnell sein soll, dann sollte er als 
nativer ARM Code im RAM laufen.

von Gast (Gast)


Lesenswert?

Die Interruptzeit ist ausserdem beim aduc wegen der Pipeline nie 
Konstant. Im Handbuch steht deshalb "bis zu 84 Taktzyklen".

von (prx) A. K. (prx)


Lesenswert?

Konstante Latenzen sind eher selten. Egal bei welchen Controller.

von Thomas (Gast)


Lesenswert?

Beim Cortex-M3, dem Nachfolger vom ARM7, sind die Latenzen konstant.

12 Zyklen für einen IRQ, dazu 6, falls ein höherpriorer dazwischenhaut.

von (prx) A. K. (prx)


Lesenswert?

Mag sein, aber ich möchte mal das Controller-Programm sehen, das nicht 
irgendwo mal für ein paar Befehle die Interrupts ausschaltet.

von einer (Gast)


Lesenswert?

Hab ich keins.

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.