Forum: Mikrocontroller und Digitale Elektronik Frage zum Interrupt bei Mikrocontrollern


von Horst (Gast)


Lesenswert?

Ich habe ein externes Bauteil, dass einen TImer-Interrupt anbietet. Zur 
Beschreibung steht dabei: Der Interrupt-Pin wird nach Ablauf des Timers 
für die Dauer von 1µs auf "1" gelegt.

Das heist wohl, dass nach dieser Mikrosekunde der Interrupt schon wieder 
verschwunden ist.

Was, wenn während der Auslösung mein µC in einer anderen ISR ist? Wird 
der 1µs-Interrupt gespeichert und dann ausgeführt?

von Nullpointer (Gast)


Lesenswert?

Das ist richtig. Es muss nur ein flankengetriggerter Interrupt sein.

von Axel H. (axelh)


Lesenswert?

Das kommt auf den uC und die ISR an. Schau uns Datenblatt und in der 
Code, dann sollte klar werden, was passiert.

Wenn in der aktuellen ISR die Interrupts deaktiviert wurden, dann geht 
der Interrupt verloren. Wenn der uC verschiedene Interrup-Prioritäten 
unterstützt, dann kann die aktuelle ISR unterbrochen werden, falls der 
neue Iterrupt eine höhere Priorität hat. Wenn der uC einen 
"Interrupt-Buffer" hat, kann der neue Interrupt gepuffert werden und 
nach der ISR ausgelöst werden. Und wenn der uC eine Interrupt-Totzeit 
hat, dann kann es auch sein, das ein Interrupt verloren geht, wenn zwei 
Interrupts innerhalb dieser Totzeit ankommen.

Du kannst aber die externen Interrupt an einen FlipFlip geben, der 
speichert den dann. Oder du vibt den an einen Zähler, dann kannst du 
über den Zählerwert erkennen, ob es einen Interrupt gegeben hat. Es gibt 
hier viele Möglichkeiten, kommt halt drauf an, wie kritisch der 
Interrupt ist und was das ganze System eigentlich machen soll.

Axel

von Johannes M. (johnny-m)


Lesenswert?

@Axel:
Ich kenne keine µC-Familie, wo auf eine solche Weise Interrupts 
"verloren" gehen!

I.d.R. wird das zum Interrupt gehörige Flag auch dann gesetzt, wenn die 
Bearbeitung des Interrupts gerade gesperrt ist. Der Interrupt wird dann 
bearbeitet, sobald die Freigabe erfolgt und er "an der Reihe" ist.

Bei den AVRs gibt es z.B. keine Interrupt-Prioriäten i.e.S.. Während der 
Ausführung eines Interrupt Handlers ist die Bearbeitung aller anderen 
Interrupts gesperrt. Tritt während der Sperrphase ein Interrupt auf, 
dann wird das betreffende Flag gesetzt. Sobald der Interrupt lokal und 
global wieder zur Bearbeitung freigegeben ist, wird er sofort bearbeitet 
(vorausgesetzt, es stehen keine weiteren Interrupts mit niedrigeren 
Vektoradressen an, die dann zuerst abgearbeitet werden).

Interrupt-Ereignisse gehen nur dann wirklich verloren, wenn der 
Interrupt während einer Sperrphase mehrfach ausgelöst wird. Dann wird 
nur eines der Ereignisse bearbeitet.

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.