NVIC(Nested Vectored Interrupt Controller):嵌套向量中斷控制器
庫函數程式(以USART1為例)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設定優先級分組為2
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優先級為3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //響應優先級為3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根據設定的參數初始化NVIC寄存器
優先級分組
中斷優先級寄存器IP為8位,原則上可為外部中斷設定的優先級為0~255,實際上隻用到了高4位就夠用了,這高四位又被分為搶占式優先和響應式優先兩種,因為隻用到了高四位,是以一共有5中分組,NVIC_PriorityGroup_0~4,每個組配置設定的搶占式優先和響應式優先非常容易記混淆,我是這樣記得:幾組就是給搶占式優先配置設定了幾個位寬,比如NVIC_PriorityGroup_1就是1位給搶占式優先,可以取0~1,3位給響應式優先,可以取0~7。
中斷優先有下面幾個規則:
1、優先級号越低者,優先級越高,PreemptionPriority=3的優先級就低于PreemptionPriority=0
2、隻有搶占式有限可以中斷嵌套,搶占式優先級高的可以打斷搶占式優先級低的中斷
3、搶占式優先級與響應式優先級都相同的,則比較它們的硬體中斷編号,中斷編号越小,優先級越高。(硬體中斷編号從中斷向量表當中檢視)