Was passiert ohne sei(), wenn dies im Programm gesetzt wird

Gast #2824801
Lesenswert?
• ▲
▼
Hallo,

Prozessor AVR Atmega8

ich habe eine Frage.
Angenommen ich habe ein ICP Interrupt, schalte aber die globalen 
Interrupts nicht frei, also schreibe im Code kein sei();
Interrupt Vektor ist konfiguriert auf eine Flanke.

Was passiert im Prozessor? Wird das Interrupt Flag im Interrupt Status 
Register für das Input Capture gesetzt?

Konkreter:
Im Programm treten ICP Interrupts auf, aber globale Interrupts sind 
nicht freigeschaltet. Nun schaltet das Programm aber die globalen 
Interrupts irgendwann frei. Wird das Interrupt dann direkt ausgeführt 
(weil evtl. im Status Register das Flag gesetzt wurde) oder erst beim 
nächsten Interrupt-Auftritt?
Lesenswert?
• ▲
▼
Daniel schrieb:
> Wird das Interrupt Flag im Interrupt Status
> Register für das Input Capture gesetzt?
Ja.
Das bleibt dann solange stehen, bis es gelöscht wird. Also üblicherweise 
beim Sprung auf den Interruptvektor.

> Wird das Interrupt dann direkt ausgeführt
> (weil evtl. im Status Register das Flag gesetzt wurde)
Ja.
Wenn du das verhindern willst, musst du das Flag vor dem Aufruf von 
sei() löschen(1 reinschreiben).

mfg.
Lesenswert?
• ▲
▼
Überlege mal logisch.
Interrupts sind in der Regel nicht nur höllisch eilig, sondern auch 
höllisch wichtig.
Und da wäre es doch saublöd, wenn bei zeitweiliger Interruptsperre (z.B. 
atomarer Zugriff) alle Interrupts verloren gingen.

Auch muß man Interruptereignisse nicht unbedingt in einem Interrupt 
behandeln. Man kann auch das Interrupt-Pending-Flag per Code testen, 
rücksetzen und behandeln. Das nennt sich dann Polling.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.