mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eintreten in einen Interrupt


Autor: sep (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,
Ich wollte mich mal mit dem eintreten eines Interrupts beschäftigen, 
jedoch von der Seite des µC und nicht der Programmierung. Und da sind 
bei mir mal ein paar kleine Fragen aufgekommen, wo ich bisher keine 
Antwort gefunden habe. Zum einen mal der Ablauf. Also, wenn ein 
Interrupt auftritt, dann wird PC auf den Stack gespeichert und das 
globale Interrupt Flag wird auf Low gesetzt. Danach wird PC auf die 
Interrupt Vektor Tabelle gesetzt an die Adresse wo sich der Interrupt 
befindet. Dort wird dann das eine Wort, in meinem Fall (ATmega8) 2 Byte 
oder 16Bit, ausgeführt. Dies sollte ja meistens ein rjmp Befehl sein. 
Dann wird PC auf unsere ISR gesetzt und das Ding wird ausgeführt. Nach 
dem Aufruf von reti lade ich dann meine Adresse von dem Stack und 
schalte die Interrupts wieder ein. Ich hoffe mal, dass das so weit 
richtig ist. Wenn nicht, dann bitte ich darum mich in dem Fall 
aufzuklären. ^^
Meine eigentliche Frage ist nun eigentlich:
Was passiert, wenn gerade ein Assembler Befehl ausgeführt wird, welcher 
länger als einen Takt benötigt, und in dieser Zeit ein Interrupt 
auftritt?
Mal ein kleines Bsp. Der µC hat angefangen ein BREQ abzuarbeiten. Es 
prüft nun das Bit Z in SREG in einem Takt und sollte ja dann in dem 
nächsten Takt springen. Nun aber kommt ihm der Interrupt zuvor und bevor 
BREQ springen kann, wird der Interrupt ausgelöst. Die Adresse von BREQ 
wird auf den Stack geschrieben und der Interrupt wird ausgeführt. So. 
nun ist der Interrupt abgehandelt und ich springe zu der Adresse im 
Stack plus 1. Also, der Befehl zum springen von BREQ konnte ja nie 
ausgeführt werden und nun setzte ich danach weiter.
Ist das so, wie ich beschrieben habe, oder wartet ein Interrupt immer so 
lange, bis eine Anweisung ausgeführt wurde?
Und zu dem Beispiel ganz oben noch mal eine Frage, wie viele Takte 
braucht ein Interrupt, um einzutreten?
Also, abschalten der globalen Interrupts 1 Takt und springen zu der 
Interrupt Vektor Tabelle 1 Takt, oder wird das alles vom µC übernommen 
und es vergeht kein Takt beim eintreten in einen Interrupt?

Danke schon mal fr eure Antworten.
MfG
Sep

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die erste Haelfte ist richtig.
ASM Befehle, die laenger wie einen Takt brauchen werden natuerlich nicht 
unterbrochen.
Ein interrupt braucht natuerlich auch Zeit. Daruber sollte das 
Datenblatt Auskunft geben.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sep schrieb:

> Ist das so, wie ich beschrieben habe, oder wartet ein Interrupt immer so
> lange, bis eine Anweisung ausgeführt wurde?

Es gibt auch Prozessoren, bei denen einzelne viele Takte dauernde 
Befehle ggf. abgebrochen werden, um kurze Latenzzeiten für Interrupts 
gewährleisten zu können. Entweder werden diese Befehle dann erneut 
ausgeführt, oder am unterbrochenen Punkt fortgesetzt.

> Also, abschalten der globalen Interrupts 1 Takt

Das macht der AVR gratis.

Über den Daumen gepeilt kann man heute die Anzahl Speicherzyklen zählen, 
die dabei bis zur Ausführung des Interrupt-Handlers ablaufen müssen.

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Datenblatt erklärt auf Seite 14 alles wissenswerte.

Autor: sep (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, danke für eure Antworten. Ich glaub, ich zieh mich mal zurück zum 
lesen! ;)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Daes sich hier offensichtlich um einen AVR handelt, hilft das Datenblatt 
unter 'Reset and Interrupt Handling->Interrupt Response Time' weiter.

MfG Spess

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.