nvic兩個屬性:搶占屬性、響應屬性(編號越小,優先順序越高)
nvic_irqchannelsubpriority 引數配置例子:三個中斷向量a、b、c
中斷向量名稱
搶占優先順序
響應優先順序a0
0b10
c11
此處中斷a可以打斷中斷b,但b不能打斷c。
兩個要點:
1、若兩個中斷的搶占優先順序和響應優先順序相同,則哪乙個先發生就先執行。
2、不同的搶占優先順序,高搶占優先順序可以打斷正在進行低搶占優先順序
相同的搶占優先順序,高響應優先順序不可以打斷正在進行低響應優先順序
nvic的優先組
0-1總共五個分配方式:
第0 組: 所有4 位用來配置響應優先順序。即16 種中斷向量具有都不相同的響應優先順序。
第1 組:最高1 位用來配置搶占優先順序,低3 位用來配置響應優先順序。表示有2 種級別的搶占優先順序(0 級,1 級),有8 種響應優先順序,即在16 種中斷向量之中,有8 種中斷,其搶占優先順序都為0 級,而它們的響應優先順序分別為0~7,其餘8 種中斷向量的搶占優先順序則都為1 級,響應優先級別分別為0~7。
第2 組:2 位用來配置搶占優先順序,2 位用來配置響應優先順序。即4 種搶占優先順序,4 種響應優先順序。
第3 組:高3 位用來配置搶占優先順序,最低1 位用來配置響應優先順序。即有8 種搶占優先順序,2 種響應2 優先順序。
第4 組:所有4 位用來配置搶占優先順序,即nvic 配置的16 種中斷向量都是只有搶占屬性,沒有響應屬性。
示例**:
//配置nvic:設定nvic中斷分組2:2位搶占優先順序,2位響應優先順序
nvic_prioritygroupconfig(nvic_prioritygroup_2);
//定義nvic中斷結構體
nvic_inittypedef nvic_initstructure;
//使能***xx_irqn所在的中斷通道
nvic_initstructure.nvic_irqchannel = ***xx_irqn;
//設定搶占優先順序
nvic_initstructure.nvic_irqchannelpreemptionpriority = 0x02;
//設定響應優先順序
nvic_initstructure.nvic_irqchannelsubpriority = 0x03;
//使能中斷通道
nvic_initstructure.nvic_irqchannelcmd = enable;
//初始化中斷結構體
nvic_init(&nvic_initstructure);
stm32f4中斷管理與此次類似,這裡只是介紹基本配置和優先順序高低問題 對STM32 NVIC的理解
整合了網上幾篇部落格,再加上自己的理解 nvic全稱為 nest vector interrupt controller,人們一般稱之為 巢狀中斷向量控制器 是用來管理中斷巢狀的,核心任務就是在於其優先順序的管理。nvic 給每個中斷賦予先佔優先順序和次佔優先順序。它們的關係描述如下 1 擁有較高先...
STM32 NVIC中斷優先順序的理解
我們在學習stm32中串列埠啊,定時器啊等等,都會遇到設定相應的優先順序。下面來揭下這個神秘的面具。我們知道優先順序有兩種 搶占式優先順序preemptionpriority 和 子優先順序 響應優先順序 subpriority。具有高優先順序的中斷可以在低優先順序正在執行時打斷其執行,然後執行自己...
stm32 NVIC中段優先順序
nvic stm32f103有60個遮蔽中斷 管理辦法 首先對中斷進行分組0 4,在每個中斷設定乙個搶占優先順序和乙個響應優先順序值。在scb aircr中配置 在一般的情況下是設定的是2組,由兩個搶占優先順序和兩個響應優先順序分配。搶占優先順序和響應優先順序區別 1 搶占優先順序高的可以打斷搶占優...