STM32外部中断的原理与应用分析
1、抢占优先级和响应优先级
在了解中断之前,先了解一下它们之间的优先级别。STM32的中断源具有两种优先级:一种为抢占优先级;另一种为响应优先级(亚优先级),其属性编号越小,表明它的优先级别越高。抢占是指打断其他中断的属性,即低抢占优先级的中断A可以被高抢占优先级的中断B打断,执行完中断服务函数B后,再返回继续执行中断服务函数A,由此会出现中断嵌套。响应属性则应用在抢占属性相同的情况下,即当两个中断源的抢占优先级相同时,分以下几种情况处理:
(1)如果两个中断同时到达,则中断控制器会先处理响应优先级高的中断。
(2)当一个中断到来后,如果正在处理另一个中断,则这个后到的中断就要等到前一个中断处理完之后才能被处理(高响应优先级的中断不可以打断低响应优先级的中断)。
(3)如果它们的抢占式优先级和响应优先级都相等,则根据它们在中断表中的排位顺序决定先处理哪一个。
举个例子,现在有3个中断向量,如下图,若内核正在执行C的中断服务函数,则它能被抢占优先级更高的中断A打断,由于B和C的抢占优先级相同,所以C不能被B打断。但如果B和C中断是同时到达的,内核就会首先执行响应优先级别更高的B中断。如果B和C中有一个先到,不管谁的响应优先级高,都不能打断,只能等待。
2、NVIC的优先级组
STM32使用了4个中断优先级的寄存器位,只可以配置16种优先级,即抢占优先级和响应优先级的数量由一个4位的数字来决定,把这个4位数字的位数分配成抢占优先级部分和响应优先级部分。有以下5种分配方式:
第0种:所有4位用于指定响应优先级,即NVIC配置的2的4次方共16种中断向量都是只有响应属性,没有抢占属性。