Frank schrieb:
> und mein Problem:
>
>> Der Wert 0x00 ist das erste übertragene Datenbyte.
>
> genau und diesen möchte ich als meinen Register Pointer Byte
> nutzen.(Bild) Oder habe ich noch eine andere Möglichkeit außer diese als
> Datenbyte handzuhaben, sowas wie UCBO...
Das ist dann kein Problem, sondern in Ordnung. Daß das vom I2C-Baustein
als "Register Pointer" interpretiert wird, ist egal, von der I2C-Seite
her ist das ein stinknormales Datenbyte.
Und jetzt klärt sich auch das "Geheimnis" um das Adressbyte 0x40 -- Dein
Protokollanalysator wertet das erste Byte des I2C-Rahmens als 8-Bit-Wert
aus, d.h. das R/W-Bit ist Bit 0, und damit wird aus 0x40 0x80 (128).
Das ist also auch in Ordnung.
Was nicht in Ordnung ist, ist, daß Du insgesamt vier Bytes sendest (was
zum Resultat hat, daß es auf das vierte Byte ein NAK als Antwort gibt,
weil Dein Baustein damit nichts anzufangen weiß.
Das zuviel gesendete Byte liegt daran, daß Deine Routine kein Ende
erkennt, das Maskieren des Zählers mit 0x1 im Interrupt hilft da nicht.
Sieh Dir mal an, wie der Code aus msp430g2xx3_uscib0_i2c_08.c aussieht,
hier musst Du Dir insbesondere den Interrupthandler ansehen.
Was da gemacht wird, musst Du auch machen.
Hier werden vier Nutzbytes versendet, und vor dem Versenden wird ein
Pointer auf die zu versendenden Daten gesetzt (das ist PTxData) und ein
Bytezähler initialisiert (das ist TXByteCtr).
Das interruptgesteuerte Senden wird --anders als in Deinem Code-- nicht
durch Beschreiben von UCB0TXBUF mit dem ersten zu sendenden Byte
angestoßen, sondern durch das Setzen der Bits UCTR und UCTXSTT in
UCB0CTL1.
(vorher wird darauf gewartet, daß die vorangehende Übertragung beendet
ist, was durch eine 0 im Bit UCTXSTP im Register UCB0CTL1 erkannt wird).
Um das ganze auf Deine Anwendung anzupassen, kannst Du das Array TxData
um ein Byte verkleinern. Das erste Byte ist der Wert, der als "Register
Pointer" dient, das zweite und dritte Deine Daten.
Natürlich musst Du auch die I2C-Adresse anpassen; Du willst 0x40
verwenden, im Beispiel wird 0x48 verwendet (und in UCB0I2CSA
eingetragen).
Viel Erfolg!