nvic(nested vectored interrupt controller) 巢狀向量中斷控制器
一.優先順序分組
//對中斷源進行分組,每組有乙個搶占優先順序和響應優先順序。
上面的理解是錯誤的,事實上,所有中斷源都是乙個組。
這個操作應該稱之為設定中斷優先順序的控制模式(控制組別)。
清楚地說是:這裡不應該用「組」這個詞,實際上就是設定中斷優先順序的控制方式。
共有方式0~方式4。每種方式中,搶占優先順序和響應優先順序各自所用的位數是不一樣的
優先順序的數值越小,優先順序越高
二.搶占優先順序與響應優先順序
搶斷優先順序》響應優先順序=子優先順序;也是說,當中斷的搶占優先順序不同的時候,不用管他們的響應優先順序
如果中斷a的搶占優先順序》b的搶占優先順序
那麼當同時有ab的中斷請求的時候,會先響應a;當b的中斷服務程式正在執行而a產生了中斷請求,則會在b的中斷服務程式 中巢狀a的中斷服務程式
如果a的搶占優先順序》b的搶占優先順序=c的搶占優先順序》d的搶占優先順序
,d的響應優先順序》c的響應優先順序》b的響應優先順序》a的響應優先順序
那麼比如現在正在執行a的中斷服務程式;b和c和d都產生了中斷服務請求,但是都不能打斷a;
至於a執行完之後先執行誰的中斷服務程式,首先是要考慮bcd的搶占優先順序,搶占優先順序b=c>d,因此再考慮響應優先順序c>b,因此a執行完之後執行c;
雖然此處d的響應優先順序最大,而且此處是考慮響應而非搶占,但是還是要優先考慮搶占優先順序
因此將響應優先順序稱為子優先順序更加合適,而且事實上程式裡的變數也是這麼命名的
nvic_initstructure.nvic_irqchannelpreemptionpriority = 0; //搶占優先順序
nvic_initstructure.nvic_irqchannelsubpriority = 1; //子優先順序
因此上述整個執行過程是a執行完之後執行c,然後再b,然後在d
通常情況下中斷同時發生一般是不太可能的,因此考慮響應的先後一般是在上述情況中,即在等待乙個搶占優先順序更高的中斷執行完,在這前給後面要執行的中斷排個隊;
STM32的搶占優先順序和響應優先順序
野火 零死角玩轉stm32 一 搶占優先順序和響應優先順序 stm32 的中斷向量具有兩個屬性,乙個為搶占屬性,另乙個為響應屬性,其屬性編號 越小,表明它的優先級別越高。搶占,是指打斷其他中斷的屬性,即因為具有這個屬性會出現巢狀中斷 在執行中斷 服務函式a 的過程中被中斷b 打斷,執行完中斷服務函式...
stm32NVIC搶占優先順序
在配置優先順序的時候,還要注意乙個很重要的問題,即中斷種類的數量。nvic 只可 以配置16 種中斷向量的優先順序,也就是說,搶占優先順序和響應優先順序的數量由乙個4 位的 數字來決定,把這個4 位數字的位數分配成搶占優先順序部分和響應優先順序部分。有5 組分 配方式 第0 組 所有4 位用來配置響...
STM32的 NVIC中斷優先順序分組
cm3 核心支援 256 個中斷,其中包含了 16 個核心中斷和 240 個外部中斷,並且具有 256 級的可程式設計中斷設定。stm32 並沒有使用 cm3 核心的全部東西,而是只用了它的一部分。stm32 有 84 個中斷,包括 16 個核心中斷和 68 個可遮蔽中斷,具有 16 級可程式設計的...