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.

[参考译文] MSP430FR5964:在 RX 发送的最后一个字节中、RXIFG 之前、EUSCI_B 停止中断触发

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1208480/msp430fr5964-eusci_b-stop-interrupt-fires-before-rxifg-in-last-byte-of-rx-transmission

器件型号:MSP430FR5964

您好!

我有一个客户遇到过、偶尔从 I2C RX 操作中接收到的字节比预期的少一个字节。 他们发现、STOP 中断有时会与最后一个 RX 中断同时置为有效、并且由于 I2C ISR 中的 STOP 条件中断具有更高的优先级、因此代码会在将最后一个字节从 RX 缓冲区加载到存储器之前退出。 由于这些消息的长度是可变的、它们一直使用 STOP 条件作为信号来退出 ISR、并使用设置了 RX DONE 标志将控制权返回给应用程序。 当然、采用此实现时、它们会在 RX 缓冲区中丢失一个字节。 这是否是两个 ISR 同时触发的预期行为? 它们目前正在手动检查 STOP 中断条件下是否存在 RXIFG 条件、但是否有办法避免将这两个中断同时置为有效?

Munan

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

    这两个中断条件不会同时发生、但如果某些操作延迟了对它们的服务(另一个 ISR 正在运行)、那么它们可能同时挂起。 从而使它们按照优先级顺序被处理。

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

    嗯,这是一个有趣的想法。 在通信的同时、我确实发生了频繁的计时器和 ADC 转换操作。 因此、两者偶尔会同时发生并使一个和另一个保持关闭。 我将尝试禁用此操作、然后查看是否不会发生该问题。 感谢您的宝贵意见。

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

    因此经过进一步调查后、在16MHz MSP430上运行每1ms 出现一次 QK RTOS 时间节拍中断、这显示为 QP。 有时会延迟 I2C 通信的处理。 对于消息的最后一个 RX 字节、我们会同时收到结束停止条件和消息的最后一个字节 RX。 在400kHz 下处理最后一个 RX 字节和停止条件的计时低于10us。 然后发生的是停止条件具有更高的优先级、并且消息的最后一个字节丢失。 为了解决此问题、我们所做的是在用于处理停止条件的 ISR 中、我们检查是否有挂起的 RX 字节、如果有、我们读取它并将其添加到消息中、然后再将其发布到应用程序中。 感谢您在此问题上的帮助、并希望这能帮助可能遇到同样问题的其他人。