Guten Morgen,
ich habe gerade den Anwendungsfall, daß ich bei einer Routine alle
Interrupts anhalten will und nachher wieder starten. Da ich weiß, daß
bei mir nur Timer-Interrupts aktiv sind, sieht das Ganze dann auch sehr
einfach aus:
1 | // Alle nicht hier definierten Interrupts abschalten
|
2 | static void edm_haltotherinterrupts(uint8_t doit) {
|
3 | static uint8_t savetimsk = 0;
|
4 | if (doit) {
|
5 | // disable
|
6 | savetimsk = TIMSK;
|
7 | TIMSK = 0;
|
8 | } else { // restore
|
9 | TIMSK = savetimsk;
|
10 | }
|
11 | }
|
Aber wie sähe so eine Funktion allgemein aus, damit wirklich alles
angehalten wird?
Klar, ich müßte noch ACIE in ADCSRA sichern und löschen (bei meinem
Anwendungsfall brauche ich das noch). Und für SPI und I2C wird es auch
noch Interrupts geben.
Also die Frage: Gibt es irgendwo eine Übersicht über alle
Interruptquellen und wie man sie ein- und abschalten kann?
Viele Grüße
Nicolas