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.

[参考译文] TMS570LC4357:如何处理来自同一个源的多个同时到达的中断?

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/991476/tms570lc4357-how-to-deal-with-multiple-interrupts-from-the-same-source-arriving-at-the-same-time

器件型号:TMS570LC4357

我们遇到 DMA BTC 中断的问题。 我们有两个运行在不同 MIBSPI 上的外设、每个外设都使用 DMA 与外设之间传输数据。 两个外设传输中的一个从外部源异步触发、另一个由我们的软件触发、都使用 DMA BTC 中断来处理传输后的数据。 问题是、由于异步特性、我们在极少数情况下会同时触发两个 BTC 中断、 由于它来自相同的中断源、中断不会被请求、因此我们最终会丢失两个中断中的一个(它似乎总是具有较低 DMA 优先级的中断)。

是否有任何方法来处理这个问题 并防止 丢失中断? 我们已经尝试读取各种 DMA 寄存器来查看是否可以检查是否发生了多个中断、但至今未成功。 我们将在未来添加具有异步 DMA 的附加外设、因此我们更喜欢采用同样适用于两个以上冲突中断的通用解决方案。

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

    每个通道的 BTC 状态标志都在 DMA 模块的 BTCFLAG 寄存器中指示。 BTC ISR 可以(应该)读取此状态标志寄存器来处理正确的传输完成条件。 您需要注意这些状态标志的读清零机制、例如、从中断偏移寄存器中读取会清除最高优先级的挂起中断标志。 如果每个 ISR 条目只处理一个中断条件、则应生成第二个中断来指示第二个 BTC 条件。 您也可以尝试不读取偏移寄存器、而只读取 BTFLAG 寄存器来确定 BTC 条件的数量和您想要处理这些条件的优先级。