Interrupt avr

OP #3407323
Lesenswert?
• ▲
▼
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
OP #3407330
Lesenswert?
• ▲
▼
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?
(Firma: matzetronics) #3407335
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren