Hallo liebe µC.NET -Gemeinde ich habe eine Frage bezüglich des AVR atmega16. ich möchte verhindern, dass an PD2 bzw. PD3 ein Interrupt ausgelöst wird. Generell habe ich ja die Möglichkeit über das SREG - Register Interrupts durch den Befehl SREG = (1<<7); zu aktivieren bzw. durch SREG = (0 << 7); generell zu verbieten. Mit Hilfe des GICR-Registers können ja dann die Interrupts einzeln (de)aktiviert werden: GICR = 1<<INT0; bzw. GICR = 0<<INT0; (PD2-Interrupt) Wenn ich PD2 als Ausgang definiere mit PORTD = 1<<PD2; kann PD2 auch nicht mehr als Interrupt "stören". Gibt es noch eine Möglichkeit trotz aktivierter Interrupts (global/SREG) und GICR mit der Flankensteuerung (GIFR) diese Interrupts zu verhindern? vielleicht unter Ausnutzung der Pull-Up-Schaltung an den Pins? Grüße Tom Mizek
Tom Mizek schrieb: > GICR = 0<<INT0; Was soll da der Unterschied zu
1 | GICR = 0; |
sein? Guck dir im C-Grundlagenbuch noch mal die Bit-Operationen an.
Ich versteht das Problem nicht. > ich möchte verhindern, dass an PD2 bzw. PD3 > ein Interrupt ausgelöst wird. dann Aktiver sie in GICR nicht und gut ist.
Mike schrieb: > Tom Mizek schrieb: >> GICR = 0<<INT0; > > Was soll da der Unterschied zu >
1 | GICR = 0; |
> sein? > > Guck dir im C-Grundlagenbuch noch mal die Bit-Operationen an. Okay, löschen wir das Int0-Bit durch GICR &=~ (1<<INT0); oder setzen es durch GICR |= (1<<INT0) gleiches gilt für INT1, (==>PD3) wenn ich GICR = 0 setze wird das ganze Register 0 gesetzt und nicht nur das Bit 0 oder?
Auf Anhieb fällt mir nur ein sie dann zu sperren, wenn sie stören (ADC Messung) und wieder erlauben, wenn die Messung vorbei ist. Den ATmega 16 kenne ich aber nicht.
:
Bearbeitet durch User
Tom Mizek schrieb: > Generell habe ich ja die Möglichkeit über das > SREG - Register Interrupts durch den > Befehl > SREG = (1<<7); zu aktivieren > bzw. durch SREG = (0 << 7); generell zu verbieten. Nö, so aber nicht. Du wolltest sicher schreiben
1 | SREG |= (1<<7) ; // Global IRQ freigeben |
2 | SREG &= ~(1<<7); // und sperren |
Schreibe nicht einfach das komplette SREG, das bringt Unglück, denn da sind noch andere Sächelchen drin. Besser ist es sowieso, die Kompilerfunktionen zu nehmen:
1 | sei(); // freigeben |
2 | cli(); // sperren |
Zum Sperren normaler Ext. Ints hat Peter II alles gesagt.
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.