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 | }
 |