www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Interrupts


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend


Die Frage wurde zwar sicherlich schon gestellt, aber über die Suche fand 
ich jetzt nichts was mein Problem anspricht.


Ich habe da folgende Frage:
Angenommen ich habe ein Interruptsignal an einem µC angeschlossen. 
Sobald das Interruptsignal also auf High is geht der µC in die ISR. Was 
geschieht aber, wenn der Interrupt kommt, der µC die kurze ISR ausführt 
und das Interruptsignal immer noch auf High ist? Geht er dann sofort 
wieder in die ISR oder wartet er bis das Signal mindestens einmal wieder 
auf Low war?

Meine Fage richtet sich besonders an AVRs.

mfg
Florian

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian wrote:

> Sobald das Interruptsignal also auf High is geht der µC in die ISR.

Kommt drauf an, ob der Interrupt high oder low aktiv ist.

> Was
> geschieht aber, wenn der Interrupt kommt, der µC die kurze ISR ausführt
> und das Interruptsignal immer noch auf High ist? Geht er dann sofort
> wieder in die ISR oder wartet er bis das Signal mindestens einmal wieder
> auf Low war?

Kommt drauf an, ob der Interrupt Pegel oder Flankengesteuert ist.

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Floria,

Wenn der INT pegelgestriggert ist, dann erfolgt sofort wieder ein neuer 
Interupt wie Benedikt schon schrieb, allerdings nicht wörtlich "sofort".
Es wird zuvor ein ASM-Befehl der Hauptroutine ausgeführt bevor der neue 
Int wieder feuert.

Bei flankengetriggertem INT ist das natürlich anders, denn die Flanke 
ist ja schon vorbei wenn die ISR einmal gezündet hatte.

Jochen Müller

Autor: stepp64 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne das jetzt nur von PICs, aber müsste der AVR nicht auch erst 
seine momentane ISR abarbeiten bis er aus der ISR mit einem Returnbefehl 
zurück in die Hauptroutine springt um dann gleich wieder in die ISR zu 
springen? Ich habe die Frage jetzt zumindest so verstanden, das der 
Poster wissen will, ob die gerade laufende ISR abgebrochen wird, wenn 
ein neuer Interrupt rein kommt oder ob der µC erst die laufende ISR 
abarbeitet.

Sven

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven,

Ich denke zwar nicht, dass der OP das so gemeint hatte, dessen Frage war 
eigentlich offensichtlich. Aber trotzdem würde das, was Du angesprochen 
hast auch gehen, Stichwort verschachtelte Interrupts. Ganz vereinfacht 
müsstest Du dann bereits am Beginn der ISR die INTS wieder enablen und 
nicht erst mit dem abschliessenden RETI wie üblich. Klingt erstmal 
simpel, kann aber einen  ganzen Haufen Zusatzarbeit hinsichtlich 
Sicherheit und Variablenverwaltung bringen. Aber gehen tut es.

Jochen Müller

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Nein, ich habe gemeint ob der µC wieder in eine ISR springt nachdem er 
die vorherige verlassen hat.
Aber nun habe ich es verstanden, ich wusste nicht, dass man den 
Interrupt konfigurieren kann auf welches Ereignis er anspringen soll. 
Ich laß bisher immer nur anwendungen bei denen er auf einen High-Level 
reagiert.


Danke!

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

Bewertung
0 lesenswert
nicht lesenswert
Florian wrote:
> Hallo
>
> Nein, ich habe gemeint ob der µC wieder in eine ISR springt nachdem er
> die vorherige verlassen hat.
Ich fand die Frage auch eigentlich recht eindeutig gestellt.

> Aber nun habe ich es verstanden, ich wusste nicht, dass man den
> Interrupt konfigurieren kann auf welches Ereignis er anspringen soll.
> Ich laß bisher immer nur anwendungen bei denen er auf einen High-Level
> reagiert.
Auf einen High-Pegel kann kein einziger AVR reagieren. Wenn überhaupt, 
dann ein Low-Pegel! Die externen Interrupts können i.A. positive, 
negative Flanke und Low-Pegel, manche können zusätzlich noch auf beide 
Flanken getriggert werden. Die Pin-Change-Interrupts reagieren 
grundsätzlich auf jeden Pegelwechsel (also auf beide Flanken), aber 
nicht auf die Pegel selbst.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe dazu kürzlich eine amüsante Erklärung gefunden:
Beitrag "Re: INT0 auslösen"

...

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.