STM32有43個(gè)channel的settable的中斷源:AIRC(Application Interrupt and Reset Register)寄存器中有用于指定優(yōu)先級(jí)的4位。這4個(gè)bits用于分配pre-emption優(yōu)先級(jí)和sub優(yōu)先級(jí)。
前者為搶占優(yōu)先級(jí) 后者為響應(yīng)優(yōu)先級(jí),也稱為副優(yōu)先級(jí)。
具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶占式優(yōu)先級(jí)的中斷處理過(guò)程中被響應(yīng),即中斷嵌套,或者說(shuō)高搶占式優(yōu)先級(jí)的中斷可以嵌套在低搶占式優(yōu)先級(jí)的中斷中。當(dāng)兩個(gè)中斷源的搶占式優(yōu)先級(jí)相同時(shí),這兩個(gè)中斷將沒(méi)有嵌套關(guān)系,當(dāng)一個(gè)中斷到來(lái)后,如果正在處理另一個(gè)中斷,這個(gè)后到來(lái)的中斷就要等到前一個(gè)中斷處理完之后才能被處理。如果這兩個(gè)中斷同時(shí)到達(dá),則中斷控制器根據(jù)他們的響應(yīng)優(yōu)先級(jí)高低來(lái)決定先處理哪一個(gè);如果他們的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相等,則根據(jù)他們?cè)谥袛啾碇械呐盼豁樞驔Q定先處理哪一個(gè)。
? 看了上面的介紹后,相信大家都明白了這里面的關(guān)系了,總結(jié)下便是:搶占式優(yōu)先級(jí)>響應(yīng)優(yōu)先級(jí)>中斷表中的排位順序(其中“>”理解為比較的方向)。
高搶占式優(yōu)先級(jí)的中斷可以打斷低搶占式優(yōu)先級(jí)的中斷。 但是,搶占式優(yōu)先級(jí)相同時(shí),后來(lái)的中斷只能在前一個(gè)中斷處理完成后才被處理,不能打斷。如果兩個(gè)同時(shí)來(lái)臨,先處理高響應(yīng)優(yōu)先級(jí)的中斷。如果兩個(gè)優(yōu)先級(jí)都相同,則按中斷向量表順序決定先處理那一個(gè)。
也就是搶占式優(yōu)先級(jí)>響應(yīng)優(yōu)先級(jí)>中斷表中的排位順序(其中“>”理解為比較的方向)。
在STM32的固件庫(kù)中定義如下:
//-------------------------------Preemption Priority Group ------------------------------------------------
#define?NVIC_PriorityGroup_0?((u32)0x700) //0 bits for pre-emption priority 4 bits for subpriority
#define?NVIC_PriorityGroup_1?((u32)0x600) //1 bits for pre-emption priority 3 bits for subpriority
#define?NVIC_PriorityGroup_2?((u32)0x500) //2 bits for pre-emption priority 2 bits for subpriority
#define?NVIC_PriorityGroup_3?((u32)0x400) // 3 bits for pre-emption priority 1 bits for subpriority
#define?NVIC_PriorityGroup_4?((u32)0x300) //4 bits for pre-emption priority 0 bits for subpriority
NVIC_PriorityGroup_0?代表 4BIT位都是響應(yīng)優(yōu)先級(jí),共16個(gè),無(wú)搶占優(yōu)先級(jí),所有中斷不能被打斷,同時(shí)來(lái)臨時(shí)最高相應(yīng)優(yōu)先級(jí)先處理。即NVIC_IRQChannelPreemptionPriority無(wú)效,NVIC_IRQChannelSubPriority可以賦值為0~15.
NVIC_PriorityGroup_1? 代表有兩位搶占優(yōu)先級(jí),8個(gè)響應(yīng)優(yōu)先級(jí),搶占優(yōu)先級(jí)能夠打斷響應(yīng)優(yōu)先級(jí)。即NVIC_IRQChannelPreemptionPriority可以為0或1,NVIC_IRQChannelSubPriority可以賦值為0~7
NVIC_PriorityGroup_2 ?代表有4個(gè)搶占優(yōu)先級(jí),4個(gè)響應(yīng)優(yōu)先級(jí)。即NVIC_IRQChannelPreemptionPriority可以為0~3,NVIC_IRQChannelSubPriority可以賦值為0~3
NVIC_PriorityGroup_3? 代表有8個(gè)搶占優(yōu)先級(jí)和2個(gè)響應(yīng)優(yōu)先級(jí)。即NVIC_IRQChannelPreemptionPriority可以為0~7,NVIC_IRQChannelSubPriority可以賦值為0或1
NVIC_PriorityGroup_4? 有16個(gè)搶占優(yōu)先級(jí),無(wú)響應(yīng)優(yōu)先級(jí),高搶占優(yōu)先級(jí)可以打斷低搶占優(yōu)先級(jí)。即NVIC_IRQChannelPreemptionPriority可以為0~15,NVIC_IRQChannelSubPriority無(wú)效。
原文鏈接:https://blog.csdn.net/yyyljw/article/details/50539520