**野火《零死角玩轉stm32》
一、搶占優先順序和響應優先順序
stm32 的中斷向量具有兩個屬性,乙個為搶占屬性,另乙個為響應屬性,其屬性編號
越小,表明它的優先級別越高。
搶占,是指打斷其他中斷的屬性,即因為具有這個屬性會出現巢狀中斷(在執行中斷
服務函式a 的過程中被中斷b 打斷,執行完中斷服務函式b 再繼續執行中斷服務函式
a),搶占屬性由nvic_irqchannelpreemptionpriority 的引數配置。
而響應屬性則應用在搶占屬性相同的情況下,當兩個中斷向量的搶占優先順序相同時,
如果兩個中斷同時到達, 則先處理響應優先順序高的中斷, 響應屬性由
nvic_irqchannelsubpriority 引數配置。例如,現在有三個中斷向量,如下表。
若核心正在執行c 的中斷服務函式,則它能被搶占優先順序更高的中斷a 打斷,由於b
和c 的搶占優先順序相同,所以c 不能被b 打斷。但如果b 和c 中斷是同時到達的,核心
就會首先響應響應優先級別更高的b 中斷。
二、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 種中斷向量都是只有
搶占屬性,沒有響應屬性。
要配置這些優先順序組,可以採用庫函式nvic_prioritygroupconfi g(),可輸入的引數為nvic_prioritygroup_0 ~ nvic_prioritygroup_4,分別為以上介紹的5 種分配組。
於是,有讀者覺得疑惑了,如此強大的stm32,所有gpio都能夠配置成外部中斷,usart、adc 等外設也有中斷,而nvic 只能配置16 種中斷向量,那麼在某個工程中使用超過16 個中斷怎麼辦呢?注意nvic 能配置的是16 種中斷向量,而不是16 個,當工程中有超過16 個中斷向量時,必然有兩個以上的中斷向量是使用相同的中斷種類,而具有相同中斷種類的中斷向量不能互相巢狀。
STM32優先順序分組,搶占優先順序與響應優先順序詳解
nvic nested vectored interrupt controller 巢狀向量中斷控制器 一.優先順序分組 對中斷源進行分組,每組有乙個搶占優先順序和響應優先順序。上面的理解是錯誤的,事實上,所有中斷源都是乙個組。這個操作應該稱之為設定中斷優先順序的控制模式 控制組別 清楚地說是 這裡...
stm32中斷優先順序
cm3 核心支援 256 個中斷,stm32 並沒有使用 cm3 核心的全部只用了它的一部分。stm32 有 84 個中斷,包括 16 個核心中斷和 68 個可遮蔽中斷,stm32f103 系列上面只有 60 個 107 系列才有 68 個 下面針對stm32f103 系列說明。與 nvic 相關的...
stm32的中斷優先順序介紹
一 搶占優先順序和響應優先順序 stm32 的中斷向量具有兩個屬性,乙個為搶占屬性,另乙個為響應屬性,其屬性編號 越小,表明它的優先級別越高。搶占,是指打斷其他中斷的屬性,即因為具有這個屬性會出現巢狀中斷 在執行中斷 服務函式a 的過程中被中斷b 打斷,執行完中斷服務函式b 再繼續執行中斷服務函式 ...