新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32F4——NVIC中斷優(yōu)先級(jí)及外部中斷

STM32F4——NVIC中斷優(yōu)先級(jí)及外部中斷

作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
NVIC中斷優(yōu)先級(jí)

一、簡介:

CM4內(nèi)核可以支持256個(gè)中斷,包括16個(gè)內(nèi)核中斷和240個(gè)外部中斷,256級(jí)的可編程中斷設(shè)置。對(duì)于STM32F4沒有用到CM4內(nèi)核的所有東西,只是用到了一部分,對(duì)于STM32F40和41系列共有92個(gè)中斷,其中有10個(gè)內(nèi)核中斷和82個(gè)可屏蔽中斷,常用的為82個(gè)可屏蔽中斷。

本文引用地址:http://butianyuan.cn/article/201611/318674.htm

二、相關(guān)寄存器:

ISER[8]—中斷使能寄存器組,用來使能中斷,每一位控制一個(gè)中斷,由于上面已經(jīng)說明了控制82個(gè)可屏蔽的中斷,因此利用ISER[0~2]這三個(gè)32位寄存器就夠了。一下的幾個(gè)寄存器同理。

ICER[8]—中斷除能寄存器組,用來消除中斷。

ISPR[8]—中斷掛起控制寄存器組,用來掛起中斷。

ICPR[8]—中斷解掛控制寄存器組,用來解除掛起。

IABR[8]—中斷激活標(biāo)志寄存器組,對(duì)應(yīng)位如果為1則表示中斷正在被執(zhí)行。

IP[240]—中斷優(yōu)先級(jí)控制寄存器組,它是用來設(shè)置中斷優(yōu)先級(jí)的。我們只用到了IP[0]~IP[81],每個(gè)寄存器只用到了高4位,這4位又用來設(shè)置搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)(有關(guān)搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)后面會(huì)介紹到),而對(duì)于搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)各占多少位則由AIRCR寄存器控制,相關(guān)設(shè)置如下圖所示:

關(guān)于搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的理解,可以將它們簡單的理解為兩個(gè)級(jí)別,搶占優(yōu)先級(jí)的級(jí)別要比響應(yīng)優(yōu)先級(jí)的級(jí)別高,簡單的理解為一個(gè)為長輩的一個(gè)為晚輩的,晚輩要讓著長輩,因此搶占優(yōu)先級(jí)的中斷可以打斷響應(yīng)優(yōu)先級(jí)的中斷,而同級(jí)別的中斷就得有個(gè)先來后到的了,先來的先執(zhí)行。

三、相關(guān)庫函數(shù)應(yīng)用

1、中斷優(yōu)先級(jí)分組函數(shù):void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup),用來設(shè)置設(shè)置中斷優(yōu)先級(jí)的分組,就是設(shè)置AIRCR寄存器的值。

2、中斷初始化:NVIC_Init(),用來設(shè)置一個(gè)中斷的相關(guān)參數(shù),包括中斷通道、搶占優(yōu)先級(jí)、響應(yīng)優(yōu)先級(jí)、通道使能。

外部中斷

一、簡介:

STM32F4的每一個(gè)IO都可以作為外部中斷的中斷輸入口,其中斷控制器支持22個(gè)中斷/事件請(qǐng)求。其中有:1、EXTI線0~15:外部IO口的輸入中斷。2、線16:PVD輸出。3、線17:RTC鬧鐘事件。4、線18:USB OTG FS喚醒事件。5、線19:以太網(wǎng)喚醒。6、線20:USB OTG HS喚醒事件。7、線21:RTC入侵和時(shí)間戳事件。8、線22:RTC喚醒事件。

二、IO口與中斷線的對(duì)應(yīng):

STM32F4IO口遠(yuǎn)比16根中斷線要多,如果要對(duì)應(yīng)上就需要多個(gè)IO口公用一根中斷線,由于每一組IO口都有16個(gè)IO口,則可以做如下對(duì)應(yīng),即:PA0、PB0、……、PI0,對(duì)應(yīng)中斷線0,依次類推則可以做好相應(yīng)對(duì)應(yīng)?;谠摻Y(jié)構(gòu)則有了如下的配置過程。

三、外部中斷配置:

1、使能IO口時(shí)鐘,初始化IO口。

2、開啟SYSCFG時(shí)鐘,設(shè)置IO口和中斷線的映射。相關(guān)函數(shù)為:void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx,uint8_t EXTI_PinSourcex)

3、初始化線上中斷,設(shè)置相關(guān)參數(shù)。相關(guān)函數(shù)為:EXTI_Init();相關(guān)參數(shù)包括:中斷線、中斷模式、中斷觸發(fā)條件、中斷線使能。

4、配置中斷分組。相關(guān)函數(shù)為:NVIC_Init();相關(guān)參數(shù)包括:中斷通道、搶占優(yōu)先級(jí)、響應(yīng)優(yōu)先級(jí)、使能中斷通道。

5、編寫中斷服務(wù)函數(shù)。即中斷觸發(fā)后執(zhí)行的相關(guān)代碼。與其相關(guān)的有兩個(gè)函數(shù)為:ITStatus EXTI_GetITStatus(uint32_t EXTI_Line),用來判斷線上中斷是否發(fā)生。void EXTI_ClearITPendingBit(uint32_t EXTI_Line),用來在中斷函數(shù)結(jié)束時(shí)清除中斷標(biāo)志位。

總結(jié):

有關(guān)NVIC的中斷優(yōu)先級(jí)配置和外部中斷的相關(guān)結(jié)構(gòu)和配置就介紹到這里,這些介紹是編寫相關(guān)代碼的基礎(chǔ),在理解的基礎(chǔ)上也要去書寫相關(guān)的代碼和例程,同時(shí)設(shè)計(jì)的相關(guān)中斷觸發(fā)事件來多用,用的多了自然會(huì)在理論的基礎(chǔ)上得到升華。給自己加油吧??!



評(píng)論


技術(shù)專區(qū)

關(guān)閉