This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我尝试使用 I2C 外设。 MSP4305529控制器 I2C 引脚连接到 I2C EEPROM 存储器。 为了监控发送、我使用了轮询函数而不是中断。
我遇到的问题是、在调试模式期间、指针在 TX 标志和 RX 标志轮询时停止。 有时、它可以顺利地与 FLAG 配合使用、而不会对代码或任何其他内容进行任何更改。
您是否在单步执行您的代码?
就我所记得的、代码如下所示:
1) 1)您发送起始地址、并且立即 TXIFG = 1
2) 2)您在缓冲器中放置了第一个字符、TXIFG = 0
3) 3)您输入某种延迟
4) 4)当地址被发送且接收到 ACK 时、MSP I2C 立即开始传输您输入的第一个字符、并且再次 TXIFG = 1
5) 5) MSP I2C 将在第7位之后停止线路、并且在将另一个字符放入缓冲区之前不会发送第8位
因此、如果您速度太慢(由于较长的延迟或由于单步执行)、从器件可能会拒绝该事务。 我不认为需要延迟、 标志轮询机制确保一切都按时完成。 我还建议您检查 NACK 标志、因此请使用如下所示的内容:
while (((UCB0IFG & UCTXIFG)==0) { //等待时检查 NACK if (UCB0IFG & UCNACKIFG)==1) 返回 TRANSACENT_FAILED_FLAG; }