STM32系列第6篇--NVIC中斷優(yōu)先級(jí)分組
STM32F103系列上面,又只有60個(gè)可屏蔽中斷(在107系列才有68個(gè))
中斷管理方法:
首先,對(duì)STM32中斷進(jìn)行分組,組0~4。同時(shí),對(duì)每個(gè)中斷設(shè)置一個(gè)搶占優(yōu)先級(jí)和一個(gè)響應(yīng)優(yōu)先級(jí)值。
分組配置是在寄存器SCB->AIRCR中配置:
高優(yōu)先級(jí)的搶占優(yōu)先級(jí)是可以打斷正在進(jìn)行的低搶占優(yōu)先級(jí)中斷的。
搶占優(yōu)先級(jí)相同的中斷,高響應(yīng)優(yōu)先級(jí)不可以打斷低響應(yīng)優(yōu)先級(jí)的中斷。
搶占優(yōu)先級(jí)相同的中斷,當(dāng)兩個(gè)中斷同時(shí)發(fā)生的情況下,哪個(gè)響應(yīng)優(yōu)先級(jí)高,哪個(gè)先執(zhí)行。
如果兩個(gè)中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都是一樣的話,則看哪個(gè)中斷先發(fā)生就先執(zhí)行。
中斷設(shè)置相關(guān)寄存器
__IO uint8_t IP[240]; //中斷優(yōu)先級(jí)控制的寄存器組
__IO uint32_t ISER[8]; //中斷使能寄存器組
__IO uint32_t ICER[8]; //中斷失能寄存器組
__IO uint32_t ISPR[8]; //中斷掛起寄存器組
__IO uint32_t ICPR[8]; //中斷解掛寄存器組
__IO uint32_t IABR[8]; //中斷激活標(biāo)志位寄存器組
中斷優(yōu)先級(jí)設(shè)置步驟:
系統(tǒng)運(yùn)行后先設(shè)置中斷優(yōu)先級(jí)分組。在主函數(shù)調(diào)用函數(shù):
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
整個(gè)系統(tǒng)執(zhí)行過(guò)程中,只設(shè)置一次中斷分組。
針對(duì)每個(gè)中斷,設(shè)置對(duì)應(yīng)的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí):
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
如果需要掛起/解掛,查看中斷當(dāng)前激活狀態(tài),分別調(diào)用相關(guān)函數(shù)即可