Interruptlatenzzeiten bei Mikrocontrollern

Gast #1119699
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
#1119713
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.

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