stm32中有兩個優先順序的概念:搶占式優先順序和響應優先順序(也叫副優先順序)。
他們的特性是:
1:高搶占式優先順序的中斷可以巢狀在低搶占式優先順序的中斷中:,即低搶占式優先順序的中斷可以被高搶占式優先順序的中斷打斷;
2:當兩個中斷源的搶占式優先順序相同時,這兩個中斷將沒有巢狀關係,當乙個中斷到來後,如果正在處理另乙個中斷,這個後到來的中斷就要等到前乙個中斷處理完之後才能被處理。
3:如果兩個具有相同搶占式優先順序的中斷同時到達,那麼系統給先處理高響應優先順序的中斷;
3:如果兩個中斷的搶占式優先順序和響應優先順序都相等,則根據他們在中斷表中的排位順序決定先處理哪乙個。
總的來看,它們的級別關係是: 搶占式優先順序 > 響應優先順序 > 中斷表中的排位順序。只有在上一級優先順序相同時下一級優先順序才會起作用。
在stm32系統中使用 搶占式優先順序(nvic_irqchannelpreemptionpriority)和響應優先順序(nvic_irqchannelsubpriority) 共同構成了乙個 中斷優先順序,每個中斷優先順序共有4bit資料來表示其使用的搶占優先順序和響應優先順序,而中斷優先順序又被分成了四組,每一組使用一種搶占優先順序資料位和響應優先順序資料位的組合方式。
#define nvic_prioritygroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
4 bits for subpriority */
#define nvic_prioritygroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
3 bits for subpriority */
#define nvic_prioritygroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
2 bits for subpriority */
#define nvic_prioritygroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
1 bits for subpriority */
#define nvic_prioritygroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
0 bits for subpriority */
如上述**,第0組 nvic_prioritygroup_0 使用0bits表示搶占式優先順序------nvic_irqchannelpreemptionpriority無效,4bits表示響應優先順序--nvic_irqchannelsubpriority值可為0~15。因此,在這一組中的中斷沒有搶占式優先順序,只有響應優先順序,它們互相不可打斷。
第2組 nvic_prioritygroup_2 使用2bits表示搶占優先順序------nvic_irqchannelpreemptionpriority值可為0~3,使用2bits表示響應優先順序nvic_irqchannelsubpriority值可為0~3。
無論使用哪一組,其優先順序總數(搶占優先順序*響應優先順序)都是16.
stm32使用nvic_prioritygroupconfig(uint32_t nvic_prioritygroup)來設定使用的中斷優先順序組。
nvic_prioritygroupconfig(nvic_prioritygroup_1); //使用中斷優先順序組1 -- 1bit表示搶占優先順序,3bits表示響應優先順序
// 設定先佔優先順序0~1,響應優先順序0~7
nvic_initstructure.nvic_irqchannel = exti0_irqn; //選擇中斷線0
nvic_initstructure.nvic_irqchannelpreemptionpriority = 1; //搶占優先順序為 1
nvic_initstructure.nvic_irqchannelsubpriority = 0; //響應優先順序為 0
nvic_initstructure.nvic_irqchannelcmd = enable; //中斷使能
nvic_init(&nvic_initstructure);
STM32 NVIC巢狀向量中斷控制器函式分析
中斷管理函式 cm3核心支援256個中斷,其中包含了16個核心中斷和240個外部中斷,並且具有256級的可程式設計中斷設定。但stm32並沒有使用cm3核心的全部東西,而是只用了它的一部分。stm32有76個中斷,包括16個核心中斷和60個可遮蔽中斷,具有16級可程式設計的中斷優先順序。而我們常用的...
STM32 NVIC巢狀向量中斷控制器函式分析
中斷管理函式 cm3核心支援256個中斷,其中包含了16個核心中斷和240個外部中斷,並且具有256級的可程式設計中斷設定。但stm32並沒有使用cm3核心的全部東西,而是只用了它的一部分。stm32有76個中斷,包括16個核心中斷和60個可遮蔽中斷,具有16級可程式設計的中斷優先順序。而我們常用的...
STM32的NVIC向量中斷控制器概述
1 nvic 的暫存器以儲存器對映的方式來訪問,除了包含控制暫存器和中斷處理的控制邏輯之外,nvic 還包含了 mpu 的控制暫存器 systick 定時器以及除錯控制。2 nvic 共支援 1 至 240 個外部中斷輸入。nvic 還支援乙個 永垂不朽 的不可遮蔽中斷 nmi 輸入。3 中斷的使能...