【发布时间】:2018-02-01 16:21:33
【问题描述】:
我对 Cortex-M 异常(IRQ 中断)有或多或少的理论问题。假设我们有两个外部中断 PINT0 和 PINT1 由相同的外部信号触发。两个中断(在 NVIC 寄存器 IPR0 中)都设置了相同的优先级,比如说 0(默认)。 NVIC如何处理这种情况?这两个中断的NVIC向量号有影响吗?
谢谢!
【问题讨论】:
我对 Cortex-M 异常(IRQ 中断)有或多或少的理论问题。假设我们有两个外部中断 PINT0 和 PINT1 由相同的外部信号触发。两个中断(在 NVIC 寄存器 IPR0 中)都设置了相同的优先级,比如说 0(默认)。 NVIC如何处理这种情况?这两个中断的NVIC向量号有影响吗?
谢谢!
【问题讨论】:
根据您拥有的 NVIC 版本(即 Cortex M3 与 Cortex M0),有中断优先级,可能有子优先级,最后会有硬件优先级。
中断优先级
您所指的优先级是中断优先级。优先级高于当前上下文的中断请求(无论是非中断还是中断)将中断该上下文。与当前上下文具有相同优先级的中断请求不会中断。在您描述的情况下,总是首先服务一个中断,然后是另一个。先维修哪一个取决于其他一些因素...
次优先级
NVIC 的某些变体具有子优先级。仅针对这种情况存在子优先级。您有两个中断,您不希望一个中断另一个,但是如果两者都处于挂起状态,您希望确保一个将在另一个之前得到服务。子优先级允许您仅指定这一点。在您的示例中,如果它们具有不同的子优先级,则将首先为具有较高子优先级(较低编号)的那个提供服务。如果它们相同,那么还有最后一个因素......
硬件优先级
您在帖子中一针见血。如果子优先级不是一个因素,或者子优先级也相等,则 NVIC 中的请求号是最后一个因素,其中较低的请求号具有较高的硬件优先级。
在您描述的特定情况下,两者都将 IPR 设置为零,这意味着两者的优先级和任何子优先级都将为零,因此硬件优先级将打破“平局”,而较低的请求号将首先得到服务。
【讨论】: