www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Latenzzeiten bei zwei Interrupts


Autor: Axel Höhmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

weiß jemand zufällig, wie die AVRs damit umgehen, wenn
zwei Interrupts "quasi" gleichzeitig eintrudeln?

Mein Problem ist folgendes:
Ich muß sehr schnell auf einen externen Int. reagieren.
Der Proz. läuft schon mit maximalem Takt.

Bekanntlich kann ein Interrupt einen 2-/3-Takt-Befehl
nicht unterbechen. Wie ist es aber erst, wenn der Atmel
gerade  dabei ist einen niedrigeren Int. auzulösen?
Bekanntlich dauert das Dekodieren hier mind. 4Takte.
Kann das unterbrochen werden?

Beispiel: Der UART meldet TX_Complete und noch bevor
der rjmp auf dem Signalhandler ausgeführt wird, kommt
der externe Int..

Gruß
Axel


P.S. In den Datsheets finde ich dazu nichts und
per Debugger läßt sich das nicht ausprobieren ;-)

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Was du vor hast ist beschissen, wenn die Bearbeitung eines speziellen 
Int.so wichtig ist kannst du nur mit einem fahren und die anderen musst 
du per Flagabfrage lösen. Hast du etwas mehr Zeit (Einsprung) kannst du 
nach dem Einspr. in die ISR das I-Bit erneut setzen und bist in der ISR 
Intfähig. Achte dabei aber gut auf den Stack! Die Sache kann aber sehr 
schnell unübersichtlich werden.
Gruss Uwe

Autor: Axel Höhmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich weiß, daß das kniffelig ist.
Daß ich für weitere Ints erst wieder "sei" machen muß, ist klar.
Die Frage zeilete auch mehr darauf ab, ab wann weitere Ints
gesperrt sind. Ist es möglich, daß sich während der vier Takte noch ein 
weiterer Int. dazwischenschiebt?

Mit dem Stack habe ich übrigens keine Probleme.
Der wichtige Int putzt den Stack und setzt neue
Rücksprungadresse für's reti. ;-)


Gruß
Axel

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit ich weiß wird der IRQ wärend der bearbeitung eine IRQ Routine 
abgeschaltet. Es kann also bis IRET kein weitere IRQ bearbeitet werden.
Danach werden alle "gespeicherten" IRQ in der Reiehnefolge ihrer 
Priorität abgearbeitet.
Laufende Befehle lassen sich sowieso nicht unterbrechen
Ich hab es noch nicht ausprobiert, aber theoretisch müsste man aber mit 
SEI innerhalb einer IRQ Funktion den IRQ wieder einschalten können. 
Damit solltest Du aber vorsichtig sein das der Stack nicht verwurschtelt 
wird..
Also verbrauchst Du mindestens die Takte für den ersten IRQ Aufruf (z.B. 
UART), evt PUSH Befehle für Registerrettung, SEI Befehl und IRQ Aufruf 
für Deine dringende Funktion. Drunter wird nix gehen. Die PUSH Befehle 
müssen unbedingt VOR SEI ausgeführt werden.

Ansonsten hilft wirklich nur noch alles von Hand Pollen und nur den 
einen IRQ fahren.

Gruß
Markus
http://www.elektronik-projekt.de/

Autor: Axel Höhmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,


daß man sei machen muß, hatte ich im zweiten Beitrag geschrieben,
das ist klar. Um den Stack brauche ich mich doch wohl nur
kümmern, wenn die Interruptroutine auch Register verwurschelt, oder?

Mir geht's darum, ob die vier Takte bis zum Einsprung
in die Interrupttabelle noch unterbrochen werden können
oder nicht.

Gruß
Axel

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz und kapp, nein

Autor: Axel Höhmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz und knapp zurück: Schade


Gruß und Danke
Axel

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was willst du den machen, weil es dir um jeden einzelnen Takt geht? 
Projektbeschreibung?

Autor: Axel Höhmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe schon gemacht. Ich muß die SW jetzt aber erweitern.
Die Sache ist ziemlich speziell, da ich gerade tief
in den Eingeweiden von Autoelektronik wühle. Das zu erklären,
würde zu lange dauern.

Sobald die Schaltung fertig ist, kann ich hier ja einen Link
posten.


Gruß
Axel

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.