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.

[参考译文] TMS320F280049C:有关 C28x 中的中断处理的查询

Guru**** 2473260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1476465/tms320f280049c-inquiry-regarding-interrupt-handling-in-c28x

器件型号:TMS320F280049C

工具与软件:

您好!

我目前正在使用 TI C2000微控制器开发一个应用、并且对其中断处理行为有疑问。

我知道、C2000架构默认情况下不支持嵌套中断。 在本例中、我在每个50 µs 上都有一个中断发生。 但是、中断服务例程(ISR)有时需要比50 µs 更长的时间才能完成(例如、70 µs)。

在这种情况下、我想确认预期行为:

  1. 如果下一个中断请求在50 µs 上发生、而之前的 ISR 仍在运行、那么新中断是立即被处理、还是在当前 ISR 完成之前一直保持挂起?
  2. 如果中断保持挂起、它是在当前 ISR 完成后(即在70 µs 时)立即被处理、还是等待下一个预定的中断周期(即在100 µs 时)?
  3. 在默认设置下是否存在 ISR 重新进入或意外执行重叠的风险?
  4. 如有必要、建议使用哪种方法防止在这种情况下出现 ISR 过载或处理延迟?

如果您能对这些要点进行说明、以及对在 C2000中高效处理高频中断的最佳实践有任何指导、我将不胜感激。

谢谢!

Conor

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

    尊敬的 Conor:

    如果在 ISR 执行期间出现另一个(相同)中断、则它将被 PIE 模块锁存、这意味着它将在当前 ISR 完成执行后立即执行。 这是由于下面突出显示的中断处理序列部分:

    在您的情况下、由于中断是定期发生的、ISR 的执行将随着每个中断而被越来越推迟、并将最终导致 ISR 丢失。 我在这里的建议是尽可能缩短 ISR、以尝试使其低于50us。 您是否正在进行内部的任何函数调用(非内联函数)? 是否执行了任何阻塞操作? 是否有任何可在 ISR 外部完成的代码?

    或者、如果您的中断频率适合您的应用、那么最好降低中断频率、使周期大于70us。

    此致、

    Delaney