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.

[参考译文] AM13E23019:MCU 如何处理具有相同优先级的中断

Guru**** 2956430 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1652740/am13e23019-how-mcu-handle-the-interrupt-with-the-same-priority

部件号: AM13E23019
主题: SysConfig 中讨论的其他器件

您好专家

有 2 个问题:

#1 是中断轮询规则

要询问中断用例:有 3 个中断:PWM INT/SPI INT2/计时器 INT3。   

INT1 和 INT2 设置为相同优先级 1、INT3 设置为较低优先级 2。

有一种情况:

CPU 运行 int3、
2.INT1 和 INT2 同时出现
3.INT1 在“2“之后再次出现

根据 TRM CPU->Interrupt 部分、当发生“2“时、CPU 将将 INT3 存储在栈中并提供 INT1 和 INT2。该过程由 NVIC 控制。

问题是“2“何时结束并且 CPU 再次运行 int3 并且出现“3“、INT1 是否可以再次中断 int3、或者是否需要等待 int3 完成?

#2 SysConfig 中的默认中断优先级是什么? TRM 中没有详细信息、它是否包含在 CMSIS 中?

谢谢

Joe

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

    您好 Joe、

    Q1 - INT1 和 INT2 同时发生、具有相同的优先级。 哪一项服务优先?

    答案: IRQ 编号较低(矢量表中较低的中断位置)将胜出。

    • INT1 和 INT2 同时到达、并  在 NVIC 中处于挂起状态。
    • 因为 Priority(INT1) == Priority(INT2)、 单靠优先级不能打破绑定。
    • NVIC 使用 IRQ 编号(矢量编号) 作为断点器 — 首先选择具有数值较小 IRQ 编号 的中断。 这称为 自然秩序仲裁。
    • 所选的中断 会抢占 优先级较低的 INT3、堆叠 INT3 的上下文并运行其 ISR。
    • 第一个 ISR 完成后、NVIC 使用 尾链 、不会解栈和重新堆叠。 它直接获取下一个挂起向量并执行第二个 ISR
    • 关键 ARM 参考: 《ARMv8-M 架构参考手册》第 B3.4 节— “如果两个待处理的异常具有相同的优先级、则具有较低异常编号的异常具有优先级。“

    Q2—维护 INT1 和 INT2 后、INT1 将再次触发。 INT3 是否运行、或者 INT1 是否再次运行? int3 会挨饿吗?

    •  只有 INT1(或 INT2)反复触发并且无限期地 快于所能提供的服务速度时、INT-3 才会耗尽、以便每次 NVIC 即将恢复 INT3 时、一个新的优先级更高的中断都已处于挂起状态。 在这种情况下,int3 永远不会得到 CPU 时间, 这是真正的饥饿。 流程如下:[INT3 ISR]正在运行
    • →INT1 + INT2 同时到达
      →INT3 被抢占(堆叠/挂起)
      →INT1 首先运行(较低 IRQ#)
      →INT1 完成向 INT2 的→尾链
      →INT2 完成→INT1 再次到达(新的待定)
      →INT1 再次运行(优先级高于 INT3)
      →INT1 完成→不再有高优先级中断
       →int3 恢复并完成  
    #2 SysConfig 中的默认中断优先级是多少? TRM 中没有详细信息、是否在 CMSIS 中提供?

    默认情况下、example.syscfg 默认具有一些外设中断优先级设置、

    添加新中断时、您也可以手动设置优先级:

    此致、
    Shaunak