Hi,
ich verstehe den eigentlichen Sinn des TWINT Bit in TWCR. Dieses flag
wird gesetzt (also das Bit gelöscht), wenn eine der im Datenblatt
beschriebenen Aktionen abgeschlossen ist, z.B. das Senden einer Start
Condition.
Jetzt stelle ich mir das so vor: ich schreibe etwas in TWCR (z.B. dass
eine Start Condition gesendet werden soll) und schreibe
1 | TWCR = (1<<TWINT)| (1<<TWSTA)| (1<<TWEN); //Start Condition, start TWI
|
Jetzt ist TWINT=1 und wird gelöscht (also das flag gesetzt), sobald der
Vorgang abgeschlossen ist. Das hieße, dass ich warten müsste, solange
TWINT=1 zutrifft, dann kann ich TWSR auslesen etc.
Das würde ich so realisieren:
1 | while(TWCR &(1<<TWINT));
|
Ich finde aber überall, auch im Datenblatt, den Befehl
1 | while (!(TWCR & (1<<TWINT)));
|
und diese Schleife wird ja durchlaufen, solange TWINT gleich Null ist.
Könnt ihr mir erklären, wie das zusammenpasst? Wann, nachdem ich TWINT
auf 1 gesetzt habe, wird es wieder gelöscht?