您好!
我将 MSP430F5659用作 I2C 主设备、目前我正在尝试通过 I2C 中断执行干净的读取命令。 从器件按预期发送数据、但主器件似乎会 ACK 最后所需的字节、而不是发送 Nack/stop、因此从器件会发送另一个字节(比需要多一个字节)、然后 MSP 才会发送 Nack/stop。
以下是我在中断中完成的代码示例:
开关(__evo_in_range (UCB2IV、USCI_I2C_UCTXIFG))
/*... 一些其他代码... *
案例 USCI_I2C_UCRXIFG://接收到的数据
count++;
if (count == nBytesToRead)//此事务不需要更多操作
{
//发送停止条件。
UCB2CTL1 |= UCTXSTP;
}
//此处,我们在发送 STOP 并递增计数后读取 UCBxRXBUF,以便立即生成 STOP
buf[count-1]= UCB2RXBUF;//从缓冲区获取数据
中断;
/*... 一些其他代码... *
}
I2C 数据表(slau412e)指出"将 UCTXSTP 位置1会产生一个停止条件。 置位 UCTXSTP 后、在从器件接收到数据后会产生一个 NACK、然后是一个停止条件、如果 USCI 模块当前正在等待 UCBxRXBUF 被读取、则会立即产生一个 NACK。"
我正在尝试达到句子的第二部分、即 发送 STOP 后读取 UCBxRXBUF、以便立即停止。 而我得到的是该句子的第一部分、即停止仅在接收到下一个字节后发送。
扼要重述一下:我打算通过 I2C 主机中断接收2个字节、但我接收3个字节。
是否有任何关于为什么会发生这种情况的想法?
谢谢、
Fred