www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zum Interrupt bei Mikrocontrollern


Autor: Horst (Gast)
Datum:

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

Autor: Nullpointer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist richtig. Es muss nur ein flankengetriggerter Interrupt sein.

Autor: Axel H. (axelh)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

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.