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