断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
中断优先级分组就是把优先级寄存器分割,分开哪几位是响应优先级,哪几位是抢占优先级。至于怎样设置分组,就要看一个不属于NVIC的寄存器了。
应用中断和复位控制寄存器SCB_AIRCR在这里我们需要看的是[31:16]位和[10:8]位,[31:16]位是识别码,用以保护此寄存器不会被意外修改,[10:8]位就是中断优先级分组的设置位。 [31:16]
写:VECTKEYSTAT
读:VECTKEY
RW注册键:
读为0xFA05
写入时,要写0x05FA到 VECTKEY,否则写入将被忽略。
[10:8]中断优先级
每一个ARM的M4中断优先级设计为可编程的8位,具体到stm32f4就只留给用户4位共16级的可编程优先级,其中低4位已被占用。也就是说stm32f4的优先级分组情况如下表所示:[10:8] 分割点
抢占优先级位
响应优先级位
抢占优先级数
响应优先级数0b011 xxxx [7:4] none 16 10b100 xxx.y
[7:5] [4] 8 20b101 xx.yy [7:6] [5:4]
4 40b110 x.yyy [7] [6:4] 2 80b111
yyyy none [7:4] 1 16