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.
工具与软件:
尊敬的 Yun:
我们有一个中断软件优先级示例、演示了通过 CPU 计时器中断实现的软件中断优先级。 中断的软件优先级是通过启用中断嵌套来实现的。
请查看这些主题帖:
(+) TMS320F28379D:中断嵌套- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛
(+) TMS320F280039C:中断嵌套- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛
尊敬的 Yun:
很抱歉耽误你的时间。 您尝试使用的中断位于 ePIE 表中的以下位置:
EPWM1 - INT3.1
TIMER0-INT1.7
SCIB_RX - INT9.3
根据 ePIE 中的顺序、以下是硬件的优先级:
如果您可以处理上述优先级顺序、但是只想允许较高优先级中断在较低优先级中断内嵌套、您只需在低优先级 ISR 内添加一个 EINT 即可。 例如:
如果要将这些优先级的顺序更改为与 ePIE 中定义的顺序不同、这时需要更改 IER 寄存器并使用屏蔽定义。
由于您只想嵌套所有来自不同组的中断、因此无需访问 PIEIER 寄存器。 如果要更改组内的优先级、只需要使用 PIEIER 寄存器。 例如、如果您正在使用 TIMER0中断和 XINT1中断、并希望 TIMER0拥有更高的优先级。
请告诉我您要使用的优先级顺序、如果需要、我可以帮助您进行特定的代码实现。
此致、
Delaney
尊敬的 Delaney:
感谢您的耐心等待并予以答复。
1.你的答案解决了我的问题1和 3、解决问题请详细解释第四个问题? 我不太明白。 我希望 SCIB_RX ISR 为最高优先级、 最后是 TIMER0_ISR 和 EPWM1。 因为当 EPWM 周期非常小时、SCI 通信可能会受到 EPWM 中断的干扰。
2.对于检测问题、当 CPU 响应中断时、CPU 不会清除不同组的 IER 寄存器。 我能理解这种情况吗? 因此、对于不同组的中断嵌套、无需在嵌套的中断服务例程中启用 IER 寄存器。 但是、对于同一组内的中断嵌套、IER 寄存器必须启用、以便可以 将中断发送 到 CPU。 我能理解这种情况吗?
非常感谢!
尊敬的 Yun:
很抱歉耽误你的时间。
如果您想详细解释第4个问题? 我不太明白。
有关这方面的说明、请参阅此处链接的《C28x 编程指南》的使用位字段时的6个读-修改-写注意事项部分(尤其是6.1和6.1.1)。
并且我希望 SCIB_RX ISR 是最高优先级、 最后使用 TIMER0_ISR 和 EPWM1。
在这种情况下、您需要 使用掩码更改除 SCIB_RX ISR (最高优先级)之外的所有 ISR 中的 IER 寄存器。
对于 sencond 问题、当 CPU 响应中断时、CPU 不会清除不同组的 IER 寄存器。 我能理解这种情况吗? 因此、对于不同组的中断嵌套、无需在嵌套的中断服务例程中启用 IER 寄存器。 但是、对于同一组内的中断嵌套、IER 寄存器必须启用、以便可以 将中断发送 到 CPU。 我能理解这一点吗?
正确、在正常操作中、当 ISR 跳转到时、其他中断组的 IER 位保持启用。 但是、如果您尝试对3个或更多个中断进行嵌套、您需要优先级方案。 例如、在您的情况下、您希望:
来自 SCIB_RX ISR -无嵌套
从 TIMER0 ISR -仅启用嵌套的 SCIB_RX 中断
从 EPWM1 ISR -启用/同时启用 SCIB_RX ISR 或 TIMER0 ISR 以嵌套
在这种情况下、您希望在 TIMER0 ISR 内禁用 EPWM1 ISR 的 IER、以保持优先级方案。 您正确地认为需要为同一组内的嵌套重新启用 IER、因为这在 ISR 分支到时会自动清除。
请对对您有帮助的任何回答投赞成票
此致、
Delaney