Nach Interrupt-Routine lange Pause!?

Gast #207022
Hallo,
ist das nromal wenn eine Interrupt-Routine beendet wird (mit reti) das
es lange dauert bis der Controller zum Hauptprogramm zurück springt?
Bei mir ist das nämlich der Fall, wenn der Hardwareinterrupt (ATmega16
@16MHz) ausgelöst und abgearbeitet wurde, dauert es ca. 1 Minute bis
das Hauptprogramm wieder ausgeführt wird.
Gast #207025
Also ich frage im HP Bitzustände am PORTC ab und gebe dementsprechend
Meldungen auf einem LCD aus.
Der Hardwareinterrupt wird durch ein Funksignal ausgelöst. Dadurch wird
dann ein Bit an PORTx auf High gesetzt und eine Meldung am LCD
erscheint, danach wird das LCD gelöscht und die Routine mit "reti"
beendet.
Normalerweise sollten doch sofort wieder am PORTC die Zustände
abgefragt werden, aber das LCD bleibt für ca. 1 Minute leer. Erst
danach läuft wieder alles wie gehabt.

.org 0x0000
rjmp Main
.org INT0addr
rjmp ZV

Das ist doch so korrekt oder?
Gast #207026
Poste mal deinen Code, dann können wir dir besser helfen.
Ich tippe auf einen Fehler in der Routine, wo das LCD gelöscht wird.
Vielleicht ret vergessen oder so??? Was anderes kanns eigentlich nicht
sein. Ein Interrupt is schneller als die Polizei erlaubt...der geht
keine Minute.
Gast #207027
Also den Code posten wäre wahrscheinlich zu unübersichtlich. Der ist
nämlich sehr lang.
Liegt das vielleicht an den Vektoren (siehe Seite 43 Datenblatt)?
Gast #207028
Hallo Steffen,

natürlich kann das an den Vektoren liegen. Aber wenn Dein Code sehr
lang und sehr unübersichtlich ist, dann liegt es vermutlich an Deinem
Code.
Hast Du schon mal etwas mit Interrupts programmiert? Wenn nein, dann
schreib doch mal ein ganz einfaches und kurzes Programm, was ein
Hauptprogramm und eine Interruptroutine beinhaltet. Vielleicht erkennst
Du dann was.

Ich kann Dir jedenfalls mit Deinen sehr spärlichen Angaben nicht
weiterhelfen. Und ein ewig langes Programm mag ich auch nicht lesen.

Gruß
Gerd
Gast #207030
Hi!
Ist das der einzige Int. der da läuft?
Es klingt jedenfalls wie Stackfehler. Irgendwas gesichert und nicht
zurückgeschrieben? Stack initialisiert? ISR falsch verlassen?....
Leider kannst du uns dein Prog ja nicht zeigen, weshalb unsere Hilfe
auch nur Vermutung sein kann.

MFG Uwe
Gast #207033
Welches Interrupt Flag durch RETI gelöscht wird und welches nicht wird
bei den einzelnen Prozessortypen ziemlich unterschiedlich gehandhabt.
Am besten das Datenblatt ausführlich zu diesem Thema durchlesen und
zwar zu allen im Programm benutzten Interrupts.

Dieter
#207034
"Mit RETI wird doch der Betreffende Interrupt gelöscht oder ?"

RETI löscht garnichts !

Manche Interrupts werden mit Einsprung in den Interruptvektor gelöscht
und manche müssen manuell gelöscht werden, steht aber im Datenblatt bei
jedem Interruptbit mit dabei.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.