Forum: Mikrocontroller und Digitale Elektronik MSP430: I2C ohne Interupt Problem


von MSP430R (Gast)


Lesenswert?

Hallo,

ich versuche beim MSP430F2274 die I2C Controller (Master) ohne 
Interrupts
zu benutzen, habe aber ein Problem damit.

Im Moment habe ich noch keine I2C Device angeschlossen , aber ich kann
SCL und SDA mit einem Timinganalyzer ansehen.

Ich sehe, dass Daten gesendet werden und dass natürlich KEIN ACK kommt.
Mein Problem ist jetzt zu erkennen, dass eben kein ACK kommt. Im Daten-
blatt des MSP430F2274 steht, dass sobald der Slave das ACK gesendet hat,
das Flag UCTXSST rückgesetzt wird. Daher gehe ich davon aus, dass es
nicht rückgesetzt wird wenn kein ACK kommt. Das ist aber nicht der Fall.
Das besagte Flag wird immer zurückgesetzt.

Meine Frage ist, ist das so richtig? Mache ich was falsch oder wie kann
ich schnell anders erkennen, dass kein ACK gekommen ist. Das NACK Flag
hilft mir da nichts, ich will ja weiter Daten senden wenn das ACK kommt.

Habe ich einen Gedankenfehler ?

Danke für sachdienliche Hinweise.

von Clemens L. (c_l)


Lesenswert?

Das User's Guide sage in Abschnitt 17.3.4.2.1:
> As soon as the slave acknowledges the address the UCTXSTT bit is cleared.

Dasselbe steht in Abbildung 17-2.

Abschnitt 17.4.2 sagt aber:
> UCTXSTT is automatically cleared after START condition and address
> information is transmitted.

MSP430R schrieb:
> wie kann ich schnell anders erkennen, dass kein ACK gekommen ist

Siehe 17.3.4.2.1:
> The data written into UCBxTXBUF is transmitted if arbitration is not
> lost during transmission of the slave address. UCBxTXIFG is set again
> as soon as the data is transferred from the buffer into the shift
> register.

Solange noch kein ACK gekommen ist, hängt dein erstes Datenbyte noch im 
TXBUF fest. Du musst also auf TXIFG (oder NACKIFG) warten.

Wenn man denn dem User's Guide vertrauen darf. Der Beispielcode in 
SLAC123 benutzt auf jeden Fall Interrupts, also sollten die wohl 
funktionieren.

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.