轉自野火《零死角玩轉STM32》函數
1、搶佔優先級和響應優先級blog
STM32 的中斷向量具備兩個屬性,一個爲搶佔屬性,另外一個爲響應屬性,其屬性編號it
越小,代表它的優先級別越高。
搶佔,是指打斷其餘中斷的屬性,即由於具備這個屬性會出現嵌套中斷(在執行中斷
服務函數A 的過程當中被中斷B 打斷,執行完中斷服務函數B 再繼續執行中斷服務函數io
A),搶佔屬性由NVIC_IRQChannelPreemptionPriority 的參數配置。配置
而響應屬性則應用在搶佔屬性相同的狀況下,當兩個中斷向量的搶佔優先級相同時,
若是兩個中斷同時到達, 則先處理響應優先級高的中斷, 響應屬性由
NVIC_IRQChannelSubPriority 參數配置。例如,如今有三個中斷向量,以下表。
若內核正在執行C 的中斷服務函數,則它能被搶佔優先級更高的中斷A 打斷,因爲B
和C 的搶佔優先級相同,因此C 不能被B 打斷。但若是B 和C 中斷是同時到達的,內核
就會首先響應響應優先級別更高的B 中斷。
2、NVIC 的優先級組
在配置優先級的時候,還要注意一個很重要的問題,即中斷種類的數量。NVIC 只可
以配置16 種中斷向量的優先級,也就是說,搶佔優先級和響應優先級的數量由一個4 位的
數字來決定,把這個4 位數字的位數分配成搶佔優先級部分和響應優先級部分。有5 組分
配方式:
第0 組: 全部4 位用來配置響應優先級。即16 種中斷向量具備都不相同的響應優先
級。
第1 組:最高1 位用來配置搶佔優先級,低3 位用來配置響應優先級。表示有2 種
級別的搶佔優先級(0 級,1 級),有8 種響應優先級,即在16 種中斷向量之中,有
8 種中斷,其搶佔優先級都爲0 級,而它們的響應優先級分別爲0~7,其他8 種中斷向
量的搶佔優先級則都爲1 級,響應優先級別分別爲0~7。
第2 組:2 位用來配置搶佔優先級,2 位用來配置響應優先級。即4 種搶佔優先
級,4 種響應優先級。
第3 組:高3 位用來配置搶佔優先級,最低1 位用來配置響應優先級。即有8 種搶佔
優先級,2 種響應2 優先級。
第4組:全部4 位用來配置搶佔優先級,即NVIC 配置的16 種中斷向量都是隻有im
搶佔屬性,沒有響應屬性。img
要配置這些優先級組,能夠採用庫函數NVIC_PriorityGroupConfi g(),可輸入的參數爲NVIC_PriorityGroup_0 ~ NVIC_PriorityGroup_4,分別爲以上介紹的5 種分配組。
因而,有讀者以爲疑惑了,如此強大的STM32,全部GPIO都可以配置成外部中斷,USART、ADC 等外設也有中斷,而NVIC 只能配置16 種中斷向量,那麼在某個工程中使用超過16 箇中斷怎麼辦呢?注意NVIC 能配置的是16 種中斷向量,而不是16 個,當工程中有超過16 箇中斷向量時,必然有兩個以上的中斷向量是使用相同的中斷種類,而具備相同中斷種類的中斷向量不能互相嵌套。co