PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATTINY25 Interrupts



misax
09.11.2020, 17:45
hallo;
kann es sein dass das MCUCR die Art der Interruptauslösung nicht nur für den INT0, sondern auch für den PC-Int steuert, wenn man beide Interrups aktiviert ?

Searcher
10.11.2020, 09:02
kann es sein dass das MCUCR die Art der Interruptauslösung nicht nur für den INT0, sondern auch für den PC-Int steuert, wenn man beide Interrups aktiviert ?

Hallo,
nein. Allerdings wenn der INT0 und PCINT2 (beide liegen ja auf dem gleichen PIN PB2) aktiv sind, kann der INT0-Low-Level-Interrupt den PCINT stören. Interrupt bei Low Level ist Default im MCUCR Register.

Wird PB2 auf Low gezogen, löst der Low Level Interrupt des INT0 aus und bleibt getriggert laut Datenblatt:


When the INT0 interrupt is enabled and is configured as level triggered, the interrupt will trigger as long as the pin is held low.

Auch das PCINT Flag wird gesetzt aber da INT0 ISR höher priorisiert ist, wird diese durch die ununterbrochene Triggerung immer wieder ausgeführt. Die PCINT ISR kommt durch ihre niedrigere Priorisierung dadurch nicht dran.

Wird die Low Level Interrupt Bedingung weggenommen, kann der PCINT ausgeführt werden. Es sieht dann so aus, als wenn der PCINT auf PB2 nur bei steigender Flanke getriggert würde.

Gruß
Searcher

wkrug
10.11.2020, 13:51
Wird die Low Level Interrupt Bedingung weggenommen, kann der PCINT ausgeführt werden. Es sieht dann so aus, als wenn der PCINT auf PB2 nur bei steigender Flanke getriggert würde.
Ich kenn jetzt den Attiny25 nicht so gut, aber von den MEGA Controller her sollte das so sein:
Bei INT0 bei High, oder LOW Pegel geb Ich Searcher recht - So lange der Zustand ansteht wird nur die ISR0 ausgeführt.
Wenn du flankengetriggerte Interrupts für INT0 verwendest würde bei passender Bedingung zuerst der INT0 angesprungen ( da höher priorisiert ) und nach Beendigung von der, die Pin Change Interrupt Routine, weil das Flag ja noch gesetzt ist.
Das Flag wird erst nach Ausführung der Pin Change Routine gelöscht ( oder durch schreiben einer 1 in das entsprechende Register ).