Frage zu Signals!

Gast #181260
Lesenswert?

Hallo!

Wollt da mal was wissen:

Ich hab zwei SIGNAL Routinen implementiert, eine für Interrutp 0 (der
wird immer bei LOW Level aufgerufen) und eine für UART Data Buffer
Empty. Wenn nun in den jeweiligen Routinen der "Grund" für den
Interrupt nicht abgeschafft wird (also INT0 ist immer low und UDR ist
immer leer), was passiert ? Bleibt das Programm in der Interruptroutine
hängen die zuerst aufgerufen wurde, oder werden die abwechselnd
aufgerufen ? Kommt das Hauptprogramm gar nicht mehr zum Zuge ?

MfG
Stefan
Gast #181261
Lesenswert?

Eine Interruptroutine wird immer wieder aufgerufen, solange ihre
Ursache fortbesteht.  Besonders bei pegelgetriggerten externen
Interrupts muss man diese also ggf. abklemmen, wenn man das nicht will
-- andernfalls kommt das Hauptprogramm wirklich nicht mehr zum Zuge.

Wenn beim Wieder-Einschalten der Interrupts (nach RETI) mehr als eine
Interruptbedingung anhängig ist, wird die mit der höchsten Priorität
zuerst abgearbeitet.  Das Datenblatt beschreibt, welche das ist (in
diesem Falle wahrscheinlich der Externinterrupt).
Gast #181262
Lesenswert?

Nach der Rückkehr aus einer ISR (mit reti) wird mindestens ein Befehl
ausgeführt bevor der nächste Interrupt ausgelöst wird (Siehe AVR
Datenblatt). Das Hauptprogramm kommt also zum Zuge, aber extrem
"schaumgebremst". Aus eigener Erfahrung, das ist so! ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren