PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Doppelte Interruptquellen bei TWI?



yaro
27.02.2010, 20:58
Hallo Leute,

ich lese mich gerade in das TWI Bus-System der AVRs ein. Dabei kommt mir folgendes unlogisch vor:
Bei den Bedingungen, die ein Interrupt auslösen konnten stehen u.a. diese beiden:

After the TWI has transmitted SLA+R/W.
After the TWI has transmitted an address byte.

Ich sehe dazwischen keinen Unterschied... Seht ihr einen?

Gruß, Yaro

yaro
27.02.2010, 21:36
Und noch eine Frage:
Wenn im Slave-Mode eine STOP anweisung (vom Master) ausgeführt wird, dann wird TWINT gesetzt, was dazu führt, dass SCL auf LOW gehalten wird... Was kann man tun, um SCL wieder auf HIGH (bzw. nicht LOW) zu heben? Kann man einfach eine STOP-Bedingung senden?

mare_crisium
28.02.2010, 08:01
yaro,

ja, SLA wird immer in demselben Byte versendet, wie das R/W-Bit. Deshalb kann es gar keinen Unterschied geben. Es ist so, wie Du es verstehst. Am Beste versteht man die Abläufe, wenn man nach den Zustandsbytes (TWSR) geht. Immer, wenn ein TWI-Interrupt erzeugt wird, steht auch ein neuer Wert in TWSR an, der angibt, was der Interrupt bedeutet.

Bei der STOP-Anweisung hast Du irgendwas in den falschen Hals bekommen ;-) : Nach einer STOP-Anweisung kann SCL gar nicht low sein! Die STOP-Anweisung besteht in einer 0->1-Flanke auf der SDA-Leitung, während die SCL-Leitung stabil auf 1 ist. Wenn SCL Null wäre, wäre der Bus blockiert.

Der heikle Fall ist das "clock stretching" durch den Slave Transmitter: Er kann die SCL-Leitung auf 0 halten, so lange er die Antwort an den Master zusammenstellt. Wenn er sich dabei aufhängt, ist der Bus tot. Deshalb benutze ich kein clock stretching. Eigentlich benutze ich den Slave transmitter-Modus ausschliesslich beim Abfragen externer TWI-Chips (PCF 8574 u.ä.). Bei AVR-AVR-Kommunikation benutze ich nur den Master-Modus.

Ciao,

mare_crisium

yaro
28.02.2010, 09:36
Alles klar.
Danke für die Antwort!

Gruß, Yaro