Hi,

Zitat Zitat von DerSchatten
Kann man 2 ISR gleichzeitig laufen lassen? Macht das Sinn? ...
Gleichzeitig geht bei Rechnern (fast) garnix.

Tim/Ls4 hat schon auf die unterschiedlichen Priorisierungen hingewiesen. Wenn zwei ISR "gleichzeitig" anfallen, dann wird die höher priorisierte zuerst gestartet. Ansonsten startet die, die zuerst aufgerufen wird und verbietet damit allen nachfolgenden einen neuerlichen Interrupt durchzuführen - der kommt auf ne Warteliste. Dieses Verfahren läuft in einigen meiner Projektchen völlig störungsfrei: Timer0, Timer1, LED-blinken, ADC auslesen, extINT0 und extINT1 - also sozusagen "viele" Interrupts, die in mehr oder weniger zufälliger Reihenfolge daherkommen.

Deine Frage berührt noch etwas. WENN Du nun eine ISR hast, die beispielsweise (leider) nicht so hoch priorisiert ist, wie Du möchtest, dann kannst Du die trotzdem bevorzugen. Das Stichwort heißt "nested interrupts" - und braucht eine sehr saubere Organisation vor allem der in den jeweiligen ISRn behandelten Daten. Dabei wird beim Aufruf der ISR durch Deine Software das Interrupt enable bit gesetzt "sei();" - das ansonsten erst beim RETI von der controllerinternen Organisation gesetzt wird. JETZT kann ein beliebiger anderer Interrupt SEINE ISR aufrufen - die laufende ISR wird dann genauso unterbrochen, wie das "normale" Programm. Steht in den docs z.B. im Kapitel Reset and Interrupt Handling und liest sich so:

Zitat Zitat von At[size=1
[/size]mel-doc 8161D–AVR–10/09]... When an interrupt occurs, the Global Interrupt Enable I-bit is cleared and all interrupts are disabled. The user software can write logic one to the I-bit to enable nested interrupts. All enabled interrupts can then interrupt the current interrupt routine. The I-bit is automatically set when a Return from Interrupt instruction – RETI – is executed ...