www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interruptlatenzzeiten bei Mikrocontrollern


Autor: Samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konstante Latenzen sind eher selten. Egal bei welchen Controller.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

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

Autor: einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich keins.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.