www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich (Anfänger) arbeite mit dem ATmega32 und dem AT90S8515 Controllern.
Werden bei der Abarbeitung von Interrupt Service Routinen (Interrupt
Handlern) bei Eintreffen anderer Interruptanforderungen aus meiner
aktuellen Interrupt Service Routine gesprungen um in die andere ISR zu
springen. Geht das (also Vorgehen wie Hauptprogramm -> Sprung in ISR) ?
Wenn ja wie oft darf gesprungen werden, d.h gibt es eine
"Tiefenbegrenzung" von Interruptsprüngen innerhalt einer ISR?
Gibt es eine Interrupt Priorität nach der in einer ISR nur gesprungen
werden darf oder werden generell in einer ISR andere Interrupts
disabeld?

Ich würde mich freuen wenn einer die Antwort wüßte und sie mir
schreiben könnte.

Vielen Dank

Peter

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
die Interrupts beim Atmel haben keine Prioritäten, du müsstest die
Interrupts in der Routine wieder freischalten. Dann begrenzt der Stack
die Einsprungtiefe. Mehr fällt mir da jetzt nicht ein.
Gruß Oliver

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der AVR hat nur eine Interruptpriorität, d.h. sobald ein Interrupt in
Bearbeitung ist, kann kein anderer dazwischen hauen.

Es gibt aber tricky Programmierung, d.h. man kann innerhalb eines
Interrupts das Global-Interupt-Bit wieder neu setzen.
Aber da sollte man schon sehr genau wissen, was man tut, sonst kann es
leicht sein, daß sich solange Interrupts selbst unterbrechen bis der
Stack überläuft.

Generell gilt daher: "Fasse Dich kurz", d.h halte alle Interrupts so
kurz wie nur irgend möglich.

Totsünden, die man leider oft findet, sind Warteschleifen innerhalb von
Interrups.


Peter

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Standardmäßig sind Interrupts gesperrt, während eine ISR läuft.  Du
müßtest sie selbst mit SEI freischalten, dann können sie allerdings
beliebig geschachtelt auftreten.

Interrupt-Prioritäten gibt es nur statisch (siehe Datenblatt), die
sind aber nur von Interesse, wenn mehrere Interrupt-Bedingungen
gleichzeitig anliegen.  Das heißt nicht, das sie gleichzeitig
eingetroffen sein müssen; wenn während eines mit CLI geschützten
Abschnittes mehrere Interruptbedingungen auftreten, dann würde nach
dem folgenden SEI der mit der höchsten Priorität zuerst abgearbeitet.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oliver,
danke für deine Nachricht, aber in der Spec steht das
es Interruptprioritäten gibt der Reset Interrupt hat die höchste
Priorität und der Analog Comperator Interrupt z.B im AT90S8515 hat die
niedrigste Priorität. Was meinst Du mit freischalten ich laß ja
alle Interrupts während der Abarbeitung einer ISR zu...

Gruß
Peter

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich das jetzt richtig verstanden?
1. Ich muß zuerst mit sei den Interrupt freigeben (Bekannt)
2. Interrupt tritt auf -> Sprung in ISR -> kann nicht durch einen
anderen Interrupt unterbrochen werden, es sei denn ich setze erneut das
globale Interrupt Bit mit sei? (dann kann auch innerhalb einer ISR ein
weiterer Interrupt abgearbeitet werden)
3. Oder soll ich wenn ich keinen Interrupt in der ISR wünsche generell
mit CLI arbeiten.

Es ist wichtig für mich den ich habe verschiedene Ereignisse
die ich per Interrupt verarbeiten muss und da ist es wichtig diese
Problematik zu verstehen

Danke

Peter

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst kein CLI in der ISR.

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.