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.

[参考译文] MSP430FR59941:I2C 问题重重:第2部分

Guru**** 2378650 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1232772/msp430fr59941-nothing-but-issues-with-i2c-part-2

器件型号:MSP430FR59941

原始线程已锁定、... 所以我来到这里。  原始主题为: 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。  (为什么这么冷?)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    关于代码示例、可在 TI 的开发者区域中找到、然后在工具下转到 Resource Explorer。 以下是 寄存器级别示例 、这里具体介绍了 I2C 的寄存器级别示例之一: I2C 主机 多字节 TX/RX

    我希望这对将来的编程有所帮助、并对 I2C 正常工作感到高兴。

    此致、

    Luke