mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel ATmega8: Interrupts verpassen?


Autor: Dennis Müller (denbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Leute,

ich bin eigentlich Java-Entwickler und die Programmierung in Assembler 
ist ganz schön ungewohnt.

Ich habe einen ATmega8, dessen Timer 0 bei Overflow einen Interrupt 
auslöst (TOV0). Gleichzeitig werden via USART Daten empfangen, und zwar 
auch über Interrupts (RXC). Was passiert nun, wenn der RXC-Handler 
ausgeführt wird und währenddessen ein TOV0-Interrupt auftritt? Bei 
Aufruf des RXC-Handlers werden Interrupts ja zunächst global 
deaktiviert. Geht der TOV0-Event verloren oder wird er nach Beenden des 
RXC-Handlers "nachgeholt"?

Im Manual auf Seite 15 wird auch von zwei Interrupt-Typen gesprochen, 
aber dann wird nicht erklärt welcher Interrupt welchen Typ hat.

Ich freue mich über jeden Hinweis!
Danke schon mal und viele Grüße,
Dennis

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dennis Müller

>Ich habe einen ATmega8, dessen Timer 0 bei Overflow einen Interrupt
>auslöst (TOV0). Gleichzeitig werden via USART Daten empfangen, und zwar
>auch über Interrupts (RXC). Was passiert nun, wenn der RXC-Handler
>ausgeführt wird und währenddessen ein TOV0-Interrupt auftritt? Bei
>Aufruf des RXC-Handlers werden Interrupts ja zunächst global
>deaktiviert. Geht der TOV0-Event verloren oder wird er nach Beenden des
>RXC-Handlers "nachgeholt"?

Er wird nachgeholt. Verpasst wird er nur, wenn dein RXC Interrupt länger 
dauert als ein kompletter Timeroverflowzyklus. Das sollte aber bei 
richtger Programmierung nicht passieren.

MfG
Falk

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupt-Flags werden beim Auftreten des dazugehörigen Ereignisses 
immer gesetzt, auch wenn die Interrupt-Bearbeitung gesperrt ist (global 
durch gelöschtes I-Bit im SREG und/oder lokal durch das betreffende 
Interrupt-Enable-Bit). Wird die Bearbeitung wieder freigegeben, dann 
werden alle anstehenden aktiven Interrupts, deren Flags gesetzt sind, 
der Reihe nach abgearbeitet (Reihenfolge nach Adresse in der 
Vektortabelle, niedrigste Adresse wird als erste bearbeitet).

Ein Ereignis geht nur dann verloren, wenn während der Bearbeitungssperre 
das betreffende Hardware-Ereignis mehrfach auftritt (also in Deinem 
Beispiel wenn während der UART-Interrupt-Subroutine mehrere 
Timer-Überläufe auftreten). Deshalb sollte man Interrupt-Handler so kurz 
wie möglich halten.

Autor: Dennis Müller (denbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure schnellen Antworten! Das mit dem Nachholen hatte ich 
gehofft, denn so wird alles ein bischen besser nachvollziehbar.
Viele Grüße,
Dennis

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.