Forum: Mikrocontroller und Digitale Elektronik Beschreibung des I²C-Mode des MSP430F20xx


von Uhu U. (uhu)


Lesenswert?

In der Beschreibung der "MSP430x2xx Family" ist der I²C-Mode in einer 
Weise beschrieben, die nicht zu den 20xx-Samples paßt.

Gibt es für die 20xx irgendwo eine besondere Beschreibung, die die 
Feinheiten enthält?

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Was genau passt daran nicht? Ich finde die Beschreibung sogar sehr 
ausführlich. Das USI benutzt doch in allen 2er Prozessoren die gleichen 
Registeradressen, die F20x2 und ...x3 haben das USCI_B0. Das entspricht 
doch genau dem Family Guide. Was genau stimmt denn nicht?

Grüße,

Peter

von Uhu U. (uhu)


Lesenswert?

Dann vergleiche mal die Namen der Registerbits mit dem, was in 
msp430x20x2 der IAR Workbench, oder was im Beislielprogramm 
msp430x20x3_usi_12.c steht. Das paßt überhaupt nicht zusammen.

von KlaRa (Gast)


Lesenswert?

Hallo,
das hat mich auch verwirrt. Mit ein wenig Fantasie und Vergleichen kommt 
man dann auch dahinter, meistens. Ich vermute IAR hat die Files in einem 
frühen Statium erstellt, als die jetzt bekannte Doku noch nicht vorlag.

Gruss Klaus.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ja beim IAR Compiler kann ich nicht mitreden, den benutze ich nicht. Ich 
arbeite beim MSP430 ausschließlich mit dem MSPGCC. Und die 
vordefinierten Registerbitdefinitionen verwende ich auch nicht und die 
Registeradressen stimmen.

Wenn sie bei deinem Compiler nicht stimmen, sind die entsprechenden 
Headerfiles ja auch gleich geändert. Ich habe für die MSP430 schon ganze 
Adressdefinitionsheader selber geschrieben, das ist nicht so viel 
Arbeit.

Viele Grüße,

Peter

von Uhu U. (uhu)


Lesenswert?

Wenn ich die I²C-Routine nach dem implementiere, was in der .pdf steht - 
nach Übersetzung der Bit-Namen - kommt was anderes heraus, als das, was 
in msp430x20x3_usi_12.c steht.

Laut Beschreibung erzeugt man durch setzen eines Bits im

Unter "I²C Master Transmitter Mode" (Seite 17-15) steht:

"...and setting UCTXSTT to generate a START condition."

Laut Registerbeschreibung liegt UCTXSTT in "USCI_Bx Control Register 1".

Wenn man im Beispielcode nachsieht, findet man keinen Zugriff auf das 
CTRL-Register 1:
1
 // Aus msp430x20x3_usi_12.c
2
   case 0: // Generate Start Condition & send address to slave
3
     P1OUT |= 0x01;                // LED on: sequence start
4
     Bytecount = 0;
5
     USISRL = 0x00;                // Generate Start Condition...
6
     USICTL0 |= USIGE+USIOE;
7
     USICTL0 &= ~USIGE;
8
     if (Transmit == 1){
9
       USISRL = 0x90;              // Address is 0x48 << 1 bit + 0 (rw)
10
     }
11
     if (Transmit == 0){
12
       USISRL = 0x91;               // 0x91 Address is 0x48 << 1 bit 
13
                                    // + 1 for Read
14
     }
15
     USICNT = (USICNT & 0xE0) + 0x08; // Bit counter = 8, TX Address
16
     I2C_State = 2;                // next state: rcv address (N)Ack
17
     break;

von Uhu U. (uhu)


Lesenswert?

Peter Diener wrote:
> Wenn sie bei deinem Compiler nicht stimmen, sind die entsprechenden
> Headerfiles ja auch gleich geändert.

Sie passen aber offenbar strukturell nicht mit dem zusammen, was in der 
Beschreibung steht.

von Jörg S. (joerg-s)


Lesenswert?

>Laut Registerbeschreibung liegt UCTXSTT in "USCI_Bx Control Register 1".
Kann es sein das du das Kapitel über das USCI liest? Dein F20xx MSP hat 
nur USI!

von Uhu U. (uhu)


Lesenswert?

Jörg S. wrote:
>>Laut Registerbeschreibung liegt UCTXSTT in "USCI_Bx Control Register 1".
> Kann es sein das du das Kapitel über das USCI liest? Dein F20xx MSP hat
> nur USI!

Genau das wars. Vielen Dank!

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.