Forum: Mikrocontroller und Digitale Elektronik I2C Twint Bit Funktion


von Homer (Gast)


Lesenswert?

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?

von S. Landolt (Gast)


Lesenswert?

TWINT wird nur durch die Hardware gesetzt; gelöscht wird es nur durch 
die Software, und zwar durch Beschreiben mit einer 1.

"The TWINT Flag must be cleared by software by writing a logic one to 
it. Note that this flag is not automatically cleared by hardware when 
executing the interrupt routine."

von Homer (Gast)


Lesenswert?

Ja, so hatte ich es auch verstanden, aber es wird doch erst durch 
Hardware gesetzt, wenn die Aktion abgeschlossen ist. So lange bleibt es 
doch auf 1, also müsste ich doch warten, solange TWINT eins ist, und 
nicht, solange es Null ist?

von S. Landolt (Gast)


Lesenswert?

Wenn TWINT mit einer 1 beschrieben wird, ist es anschließend gelöscht, 
also 0. Mag anfangs etwas ungewohnt sein, aber so hatten es sich die 
Entwickler bei Atmel nun mal ausgedacht.

von S. Landolt (Gast)


Lesenswert?

PS:
Das gilt für viele (alle?) Interrupt-Flags, und vor kurzem gab es hier 
im Forum sogar eine plausible Erläuterung, aber die finde ich jetzt 
nicht mehr.

von Homer (Gast)


Lesenswert?

Aaaah, vielen vielen Dank, da wäre ich jetzt wirklich nicht drauf 
gekommen!
Das heißt, wenn ich eine eins in TWINT schreibe, ist TWINT null, und 
wird durch Hardware auf eins gesetzt, wenn die Aktion abgeschlossen ist. 
Stimmt so, gel?

von S. Landolt (Gast)


Lesenswert?

Ja.

von Homer (Gast)


Lesenswert?

Ok, nochmal Danke und schönen Abend...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.