Other Parts Discussed in Thread: MSP430F5529, MSP430G2553
Hello!
Sorry for my English.
I'm try to build I2C master on MSP430F5529, and slave is MSP430G2553
When I debug this step-by-step, transmit is working ok, but "getData = UCB1RXBUF << 8;" returns previously sended data. UCB1RXBUF register value changes only after this string - "while (!(UCB1IFG & UCRXIFG)) { if (isNack) { break; } };"
BUT! Logic anylizer show that all data is send from slave properly.
unsigned int I2CGetWord(unsigned int reg) {
getData = 0;
UCB1TXBUF = 0;
while (UCB1CTL1 & UCTXSTT);
UCB1CTL1 |= UCTR;
UCB1CTL1 |= UCTXSTT;
while (!(UCB1IFG & UCTXIFG)) { if (isNack) { break; } };
UCB1TXBUF = reg;
while (!(UCB1IFG & UCTXIFG)) { if (isNack) { break; } };
UCB1IFG &= ~UCTXIFG;
UCB1CTL1 &= ~UCTR;
UCB1CTL1 |= UCTXSTT;
while (UCB1CTL1 & UCTXSTT);
//while (!(UCB1IFG & UCRXIFG)) { if (isNack) { break; } };
getData = UCB1RXBUF << 8;
while (!(UCB1IFG & UCRXIFG)) { if (isNack) { break; } };
UCB1CTL1 |= UCTXSTP;
getData = getData | UCB1RXBUF;
while (UCB1CTL1 & UCTXSTP);
while (!(UCB1IFG & UCRXIFG)) { if (isNack) { break; } };
UCB1IFG &= ~UCRXIFG;
return getData;