PS: Du scheinst nicht wirklich begriffen zu haben, wie das funktioniert.
Mittels
1 | TWCR = .... ( 1 << TWINT ) ....
|
wird das TWINT Flag GELÖSCHT!
Darauf hin fängt die Hardware zu buddeln an, und wenn sie damit fertig
ist, dann setzt sie TWINT. Ob da jetzt ein Fehler aufgetreten ist oder
nicht, das verrät dir das TWINT Flag überhaupt nicht. TWINT erlaubt dir
nur die Aussage "Ich buddle noch" oder "Ich bin fertig".
D.h. du wirst IMMER darauf warten, dass die TWI fertig wird. Es heißt
immer
1 | // warte bis die TWI fertig ist
|
2 | while( !( TWCR & ( 1 << TWINT ) ) )
|
3 | ;
|
ob die Operation gut gegangen ist oder nicht, das erzählt dir der INhalt
des TWSR Registers. TWINT hat damit nichts zu tun. TWINT erzählt dir
nur, ob du schon in TWSR nachsehen kannst, oder ob die TWI noch am
buddeln ist.