Hallo zusammen, Bin gerade am C-Programmieren eines ATmega644p Hier gibt es offensichtlich zwei Möglichkeiten den Interrupt z. B. INT0 auf fallende Flanke auszulösen: 1. über das Register EICRA Also beispielsweise : IR soll auf fallende Flanke bei INT0 reagieren: EIMSK |= (1<<INT0)|(1<<INT1); // INT0 und INT1 reagieren mit IR EICRA |= (1<<ISC01); // INT 0 reagiert nun EICRA &= ~(1<<ISC00); // auf abfallene Flanke EIFR &= ~(1<<INTF0); // External Interrupt Flag Register zurücksetzen sei(); // interrupt enable 2. setzen des Registers MCUCR Hier finde ich aber keine Beschreibung der beiden Bits IVSEL und IVCE Geht das mit beiden Möglichkeiten ? bye Bernhard
Gast
#970725
Bernhard S. wrote: > 2. setzen des Registers MCUCR > > Hier finde ich aber keine Beschreibung der beiden Bits > IVSEL und IVCE > > Geht das mit beiden Möglichkeiten ? STOPP. Datenblatt nochmal lesen.
Hallo Sven, Nach ein wenig Nachdenken - IVSEL und IVCE kann die Flanken des INT0,1, und 2 nicht steuern. Dazu sind es zu wenige Bits. Da ich ein Programmbeispiel eines AT90S4434 vorliegen habe: MCUCR = 2; // MCU Control Register INT0 interrupt on falling edge Hier muss MCUCR wohl anders belegt sein. Aber was bedeuten IVSEL und IVCE ? Das Datenblatt des ATmega664p liegt vor mir. Siehe Seite 262. MCUCR: 7 JTD = is enabled when JTGGEN fuse programmed 4 PUD = ? 1 IVSEL ? vielleicht : Interrupt Vector select? 0 IVCE ? vielleicht : Interrupt Vector change enabled? Seite 263 beschäftigt sich schon mit dem nächsten Register MCUSR bye Bernhard
Gast
#970776
Bernhard S. wrote: > 1 IVSEL ? vielleicht : Interrupt Vector select? > 0 IVCE ? vielleicht : Interrupt Vector change enabled? Richtig geraten :-) Kieck mal so ab Seite 58 abwärts...
Hallo Sven, Steht auf Seite 60... Fall erledigt. Vielen Dank. bye Bernhard
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.