Hi, ich habe eine Frage. Wenn ich zwei Timer Interrupts habe Timer0 (10ms) und Timer1 (150us) und ich nichts besonderes tue, wird ja beim Timer0 Overflow Int. der globale Int. handler deaktiviert, d.h. Timer0 ISR Routine läuft komplett durch. Braucht sie z.B. länger als 150us muss Timer1 warten und wird dann nach verlassen der Timer0 Overflow routine abgearbeitet. Richtig? ich nehme nicht an das andere Interrupts die während der Abarbeitung von Timer0 Overflow auftreten verfallen oder? Im Datenblatt steht jetzt, das man in der IRS (z.B. von Timer0) den globalen Int. Handler mit SEI wieder aktivieren kann. Dann können andere Interrupts die Routine unterbrechen und werden dann ausgeführt. Frage hierzu: - Spielt die position (prio) im Interrupts Vector eine Rolle dabei oder wird jeder auftretende Int. dann ausgeführt? - Was passiert wenn z.b. Timer1 dann in mitten der Bearbeitung von Timer0 ISR auftritt? Timer0 wird dort unterbrochen wo sie gerade steht, Timer1 ISR wird ausgeführt und anschließend wieder bei Timer0 ISR da weiter gemacht wo man aufgehört hat? oder verfällt dann der Rest von Timer0 ISR? Vielen Dank und Gruß schonmal vorab.
Thomas schrieb: > - Spielt die position (prio) im Interrupts Vector eine Rolle dabei oder > wird jeder auftretende Int. dann ausgeführt? Ich nehme an, es sind AVRs gemeint. Die Prio entscheidet nur bei mehreren gleichzeitig anliegenden Ints, und zwar welcher Vektor zum Zuge kommt. Ausgelassen wird dadurch zunächst keiner, die anderen werden später ausgeführt (wenn ohne SEI in der ISR). > - Was passiert wenn z.b. Timer1 dann in mitten der Bearbeitung von > Timer0 ISR auftritt? Ohne SEI: Kommt dran, wenn T0 ISR durch ist. > Timer0 wird dort unterbrochen wo sie gerade steht, Mit SEI in T0 ISR ja. > Timer1 ISR wird ausgeführt und anschließend wieder bei Timer0 ISR da > weiter gemacht wo man aufgehört hat? Exakt so. Wird natürlich entsprechend mehr Stack benötigt.
Hallo, ja sorry geht um AVR's... und danke für die Antwort, das war es was ich bestätigt haben wollte.
A. K. schrieb: > . Ausgelassen wird dadurch zunächst > keiner, die anderen werden später ausgeführt (wenn ohne SEI in der ISR). "Die anderen" sind in diesem Fall aber nur einmalig einer. Sollten während der Abarbeitung der ISR von Timer0 Timer1 mehrfach einen Interrupt auslösen, dann gehen dessen Interrupts bis auf einen verloren. Oliver
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.