原始线程已锁定、... 所以我来到这里。 原始主题为: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/819643/msp430fr5994-nothing-but-issues-with-i2c
与 Ashton 非常相似、我在 TI 的 I2C 事务中已经工作了很多周。 MSP430FR599x 用户指南第32.3.4节说:最新的代码示例可在 MSP430网络的"代码示例"下找到。 我没有找到任何结果。 用户指南中提供的示例很基本、无法深入了解实际的中断系统实现方式。 即它是无用器件。 I2C 库不提供对代码运行的深入见解。 因此请勿打扰。 直到我在阿什顿的帖子上喘不过气,这些论坛都没有提供任何东西。 非常感谢 Ashton 发表了有用的内容。 (TI 因不提供任何产品而受到严重损害。)
Ashton 的最后一篇文章评论了一个简单的修复。 我不知道这可能是什么、但我发现 stop-ISR 有问题。 停止的优先级高于 RX。 因此、在抓取最后一个 Rx 字节之前、可以对停止进行处理。 为了解决这个问题、我在 stop-ISR 中添加了一个"检查最后一个字节": (添加了2行)
案例 USCI_I2C_UCSTPIFG: if (TRANSMIT_Initiated){TRANSMIT_Initiated = false;} if (receive_initiated){
IF (* UCBXIFG 和 UCRXIFG) // RX 是否有数据?
* rxBuffer++= UCB2RXBUF; //获取 RX 数据
RECEIVE_Initiated = false;
}
中断;
终于 一个正常工作的中断驱动型 I2C。 (为什么这么冷?)