同时具有相同优先级的两个外部中断(Cortex-M)?

Jur*_*ejc 3 exception interrupt

我或多或少有关于 Cortex-M 异常(IRQ 中断)的理论问题。假设我们有两个外部中断 PINT0 和 PINT1 由同一个外部信号触发。两个中断(在 NVIC 寄存器 IPR0 中)都设置了相同的优先级,假设为 0(默认)。NVIC 如何处理这种情况?这两个中断的NVIC向量数有什么影响吗?

谢谢!

rjp*_*rjp 5

根据您拥有的 NVIC 版本(即 Cortex M3 与 Cortex M0),有中断优先级,可能有子优先级,最后会有硬件优先级。

中断优先级

您所指的优先级是中断优先级。比当前上下文(无论是非中断还是中断)优先级更高的中断请求将中断该上下文。与当前上下文具有相同优先级的中断请求不会中断。在您描述的情况下,总是先处理一个中断,然后再处理另一个。先维修哪一个取决于其他一些因素......

次优先级

NVIC 的某些变体具有子优先级。子优先级仅针对这种情况而存在。您有两个中断,您不希望一个中断另一个,但您希望确保在两个中断都挂起的情况下,一个将在另一个之前得到服务。子优先级允许您仅指定此项。在您的示例中,如果它们具有不同的子优先级,则将首先为具有较高子优先级(较低编号)的那个提供服务。如果它们相同,那么还有最后一个因素......

硬件优先

你在帖子中一针见血。如果 subpriority 不是一个因素,或者 subpriority 也相等,那么 NVIC 中的请求数是最后一个因素,其中较低的请求数具有较高的硬件优先级。

在您描述的特定情况下,两者都将 IPR 设置为零,这意味着两者的优先级和任何子优先级都将为零,因此硬件优先级将打破“平局”,并且将首先处理较低的请求编号.