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?
Das ist richtig. Es muss nur ein flankengetriggerter Interrupt sein.
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.