DC 我是不了解USCI動作部份
我不了解若使用I2C 讀取SMbus 有部份IC資料讀取會正確
START+ADDR(W)+ACK+COMM+ACK+STOP+START+ADDR(R)+ACK+DATA+DATA+NACK+STOP
上述的SMBUS部份我可以讀取正常
但若是下列這一種的
START+ADDR(W)+ACK+COMM+ACK+RSTART+ADDR(R)+ACK+DATA+DATA+NACK+STOP
我會在ADDR(R)就停止回應SCL為LOW 我不明白為什麼會這樣
#pragma vector = USCIAB0TX_VECTOR //傳送中斷副程式
__interrupt void USCIAB0TX_ISR(void)
{
if (IFG2 & UCB0RXIFG) //假設 中斷暫存器(IFG2)
{
if ( byteCtr == 0 ) //假設設定接受數量=0
{
UCB0CTL1 |= UCTXSTP; // I2C stop condition
*TI_receive_field = UCB0RXBUF; //將接收資料暫存器 傳出
TI_receive_field++; //接收數量遞增
}
else
{
*TI_receive_field = UCB0RXBUF; //將接收資料暫存器 資料放入 接收陣列中
TI_receive_field++;
byteCtr--;
}
}
else //假設 中斷暫存器(IFG2)
{
if (byteCtr == 0)
{
UCB0CTL1 |= UCTXSTP; // I2C stop condition
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag
}
else
{
UCB0TXBUF = *TI_transmit_field; //將傳送陣列資料放入 傳送暫存器中
TI_transmit_field++;
byteCtr--;
}
}
}