Habe mal eine Frage zur I²C Bus Kommunikation beim MSP430F2252 (USCI).
Laut User Guide soll nach absenden der Adresse und empfang des ACK das
UCTXSTT Bit auf 0 gehen. Das wollte ich in meinem Code benutzen, aber so
wie es aussieht wird das Bit nicht 0. Mach ich einen Gedankenfehler oder
ist der Code Mist??
Den auskommentierten Bereich würde ich gerne nutzen, aber er bleibt bei
der Abfrage des UCTXSTT Bit hängen (Bit bleibt auf 1).
1 | unsigned char fram_write_byte (unsigned int addr, unsigned char data)
|
2 | {
|
3 | unsigned char addr_h;
|
4 | unsigned char addr_l;
|
5 |
|
6 | addr_h = addr>>8;
|
7 | addr_l = addr;
|
8 |
|
9 |
|
10 | UCB0I2CSA = ADD_FRAM; // Slave Adresse
|
11 |
|
12 | UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
|
13 |
|
14 | /*
|
15 | while(UCB0CTL1 & UCTXSTT); // Warten bis Start und Adresse gesendet
|
16 |
|
17 | if (UCB0STAT & UCNACKIFG)
|
18 | {
|
19 | UCB0CTL1 |= UCTXSTP; // I2C stop condition
|
20 | UCB0STAT &=~UCNACKIFG;
|
21 | return FALSE;
|
22 | }
|
23 | */
|
24 | while (!(IFG2 & UCB0TXIFG));
|
25 | UCB0TXBUF = addr_h;
|
26 | while (!(IFG2 & UCB0TXIFG));
|
27 | UCB0TXBUF = addr_l;
|
28 | while (!(IFG2 & UCB0TXIFG));
|
29 | UCB0TXBUF = data;
|
30 | while (!(IFG2 & UCB0TXIFG));
|
31 |
|
32 | UCB0CTL1 |= UCTXSTP; // I2C stop condition
|
33 | while(UCB0CTL1 & UCTXSTP);
|
34 |
|
35 | return TRUE;
|
36 | }
|