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
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).
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! ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.