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.

[参考译文] TMS320F280025:如何平衡两个中断功能?

Guru**** 2576195 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1026984/tms320f280025-how-to-balance-two-interrupt-functions

器件型号:TMS320F280025

尊敬的专家:

  我设置了两个中断函数、ADCA 接口为50us、CPUTimer1中断为100us、 CPUTimer1中的应用程序中断成本约为5us。因此、当 ADCA 接口由于 ADC 采样而发生比 CPUTimer1中断稍晚一点的情况时、即使  ADCA 接口的优先级高于 CPUTimer1中断、ADCA 接口仍需要中断 等待 CPUTimer1中断完成其应用程序。以下是我的测试结果。由于 等待  CPUTimer1中断完成、ADCA 接口的周期有时不稳定:

如果我使  ADCA 接口 能够中断 CPUTimer1中断。 CPUTimer1中断 可能会等待 ADCA 接口中的应用程序长时间完成。如何使 CPUTimer1中断在应用程序完成 后发生并退出 ADCA 接口、则不会发生 相互连接。使用 特殊值初始化 CPUTimer1的转换器?您能给我一些指导思想吗?

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

    吕亨

    通常、当 ISR 执行时间保持在绝对最小值时、C28x 的中断架构效果最佳、这样、在同步中断请求服务时、实时任务只会在可接受的时间内被阻止。

    您能否提供有关 ISR 任务的其他信息、以帮助我了解哪些选项可能有用? 更具体地说、对于每个 ISR:

    • 是否涉及实时期限?
    • 执行是否有抖动要求?
    • 是否可以将任何任务卸载到后台循环?

    如果 ADCA 和 Timer1之间的中断生成速率遵循恒定的整数比(例如100us:50us 的2:1)、 最简单的解决方案可能是将 Timer1 ISR 任务迁移到 ADCA ISR 末尾、这样它们只会在关键实时任务完成后每执行第二次 ISR (例如、当 ADCA_COUNTER++% 2 = 0时)运行一次。

    与单独 ISR 建立固定时序关系的另一个选项可能是使用相同的计时器、ePWM 或相干 ePWM 触发 ADC SOC 和周期性任务。 借助相干时基、您可以确保始终在周期性中断之前生成 ADCA 中断。

    如果任何周期性任务没有实时最后期限、则可以将它们移至后台循环、在该循环中、任务将以100us 的宽松近似值运行、同时仍可由 ADCA ISR 完全中断。 这可以通过后台调度程序来实现、后台调度程序完全通过周期性轮询来监控和服务计时器、 或者使用混合方案、其中计时器 ISR 处理一些非常快的高优先级任务、然后设置全局标志、让后台循环知道何时执行低优先级任务。

    Tommy