mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Interrupt trotz Sperrung


Autor: Christoph Romas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute.

Ich bin dabei mich in AVRs einzuarbeiten und wollte ein kleines 
Timingexperiment machen. Dazu habe ich zwei Tasten an die INT0 und INT1 
Pins eines ATMega16 geklemmt und lasse mit der einen einen Multiplikator 
incrementieren, so das bei dem anderen nach Verstreichen einer Zeit 
10ms*multiplikator eine LED angeht. Nicht wundern warum ich den Int 
genommen habe, ich hab absichtlich keine Entprellung genommen, da ich 
subjektiv testen will wieviel Reaktionszeit durch den Nutzer erkannt 
wird.

Meine Frage ist folgende:
Ich benutze AVR Studio mit GCC und bei Eintritt in die ISR werden die 
Ints gesperrt. Wenn ich den Int nun auf fallende Flanke konfiguriere, so 
wird die ISR zwei mal ausgeführt, obwohl laut Simulation bereits beim 
Springen zum INT Vector das I Flag gelöscht wird. Kann mir das einer 
erklären? Der Compiler sichert vor Ausführen der ISR noch einige 
Register, in der Simulation ist da aber schon (wie gesagt) das I Flag 
0...

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil die das I-Flag bei verlassen der Interruptroutine automatisch 
(durch iret, oder wars reti? ... so viele verschiedene assembler) wieder 
gesetzt wird.

Autor: Erik S. (erik_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein ähnliches Problem hatte ich auch schon: Während der Interruptroutine 
wurde das Flag durch einen erneutes Interruptereignis gesetzt. Ich habe 
es gelöst, indem ich das Flag am Ende des Interrupts per Programmbefehl 
zurücksetze.

Bei dir wird der 2. Aufruf des Interrupts durch das Prellen der Tasten 
herrühren. Also entweder entprellen per HW oder eben Rücksetzen des 
Interruptflag per Code.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Erik s

>Ein ähnliches Problem hatte ich auch schon: Während der Interruptroutine
>wurde das Flag durch einen erneutes Interruptereignis gesetzt. Ich habe

Das halte ich für ein Gerücht. Das wäre ein elementarer BUG, und der 
wäre längst im Errata sheet gelandet.

Das I Flag im SREG wird definitiv NICHT nochmal gesetzt.

ALLERDINGS kann das jeweilig Interrupt-Flag für die diversen Quellen 
(hier Externer Interrupt) während des aktiven Interruots neu gesezt 
werden. Das ist aber der Sinn der Sache.

MfG
Falk


Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Merke: Durch eine "Sperrung" eines oder aller Interrupts (im ersten Fall 
durch das lokale Freigabe-Bit, im zweiten durch das I-Bit im SREG) wird 
nur die Bearbeitung der betreffenden Ereignisse (also der Sprung in 
den Interrupt-Vektor mit allem was damit zusammenhängt) verhindert, 
nicht aber das Setzen der Interrupt-Flags an sich! Diese sollen 
schließlich auch im Polling-Verfahren abgefragt werden können...

Autor: Christoph Romas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah!

Vielen Dank. Das ist dem Verständnis sehr zuträglich.
Ich hab im Datenblatt nun gefunden das das Flag im GIFR dafür 
verantwortlich ist und als ich es simuliert habe hab ich gesehen das es 
erneut gesetzt wird. Das war also mein Denkfehler!

Vielen Dank!

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.