Gast
#924393
Hallo zusammen,
ich verwende das TWI Interface eines mega128 zusammen mit dem avrgcc.
Die TWI ISR ist bisher so deklariert, das sie durch andere Interrupts
nicht unterbrochen werden kann. Nun möchte ich aber explizit andere
Interrupts während der TWI ISR Ausführung zulassen. Dabei habe ich
folgende Probleme:
1.) Wenn ich die TWI ISR durch folgendes avrgcc Macro unterbrechbar
mache:
void TWI_vect( void ) __attribute__( ( interrupt ) );
Habe ich das Problem, das die TWI ISR in einer Endlosschleife hängen
bleibt. D.d. sobald in die TWI ISR gesprungen wird, geht der
Controller wohl davon aus das schon wieder ein Interrupt eingetreten
ist und springt wieder in die TWI ISR. Das Verhalten scheint mir
plausibel da das TWINT Bit auch noch gesetzt ist.
2.) Wenn ich in der TWI ISR explizit den TWI Interrupt deaktiviere
( TWIE = 0 ) und darauf durch sei( ) die globalen Interrupts wieder
aktiviere so tritt das Problem von 1.) nicht mehr auf. Die TWI ISR
wird auch unterbrechbar. Jedoch überträgt das TWI interface nur noch
Müll.
Irgendwie komme ich überhaupt nicht weiter. Deshalb meine Frage an euch:
Wie bekomme ich es hin, das die TWI ISR des mega128 durch weitere
Interrupts unterbrechbar wird ? Habe ich irgendwas übersehen ?!