STM32中NVIC 巢狀向量中斷控制 的理解

2021-06-22 07:49:59 字數 1737 閱讀 8560

本文**: 

nvic,中文名巢狀中斷向量控制器,是cortex-m3系列控制器內部獨有整合單元,與cpu結合緊密,降低中斷延遲時間並且能更加高效處理後續中斷。舉個例子,比如火車站買票,那些火車站的規章制度就是nvic,規定學生和軍人有比一般人更高優先順序,它們則給你單獨安排個視窗,同學與同學之間也有區別,那就是你也得排隊,也就是你的組別(搶斷優先順序)和你的排隊序號(響應優先順序)決定你何時能買到票。

搶斷優先順序,顧名思義,能再別人中斷是搶占別人中斷,實現中斷巢狀。響應優先順序則只能排隊,不能搶在前面插別人的對,即不能巢狀。

stm32中指定優先順序的暫存器為4位,其定義如下:

第0組:所有4位用於指定響應優先順序

第1組:最高1位用於指定搶占式優先順序,最低3位用於指定響應優先順序

第2組:最高2位用於指定搶占式優先順序,最低2位用於指定響應優先順序

第3組:最高3位用於指定搶占式優先順序,最低1位用於指定響應優先順序

第4組:所有4位用於指定搶占式優先順序

基礎了解了就可以對中斷進行操作了。

第一步:使用void nvic_prioritygroupconfig(uint32_t nvic_prioritygroup)函式對優先順序分組配置。nvic_prioritygroup可以配置為

nvic_prioritygroup_0 => 選擇第0組

nvic_prioritygroup_1 => 選擇第1組

nvic_prioritygroup_2 => 選擇第2組

nvic_prioritygroup_3 => 選擇第3組

nvic_prioritygroup_4 => 選擇第4組

例如:nvic_prioritygroupconfig(nvic_prioritygroup_0)配置為0組。

第二步:中斷初始化結構體配置,結構體型別定義如下:

typedef struct

nvic_inittypedef;

例如:stm32外部中斷0配置如下

exti_nvic_initstructure.nvic_irqchannel = exti0_irqn;

exti_nvic_initstructure.nvic_irqchannelpreemptionpriority = 1;  //搶占優先級別(0~1)

exti_nvic_initstructure.nvic_irqchannelsubpriority = 7;  //響應優先級別(0~7)

exti_nvic_initstructure.nvic_irqchannelcmd = enable;

第三步:中斷初始化結構體初始化操作如下

nvic_init(&exti_nvic_initstructure);

第四步:開關總中斷操作。在stm32中是通過改變cpu優先順序來允許和禁止中斷的。

(1)   下面兩個函式等效關閉總中斷

void nvic_setprimask(void);

void nvic_setfaultmask(void);

(2)   下面兩個函式等效開放總中斷

void nvic_resetprimask(void);

void nvic_resetfaultmask(void);

(3)   常用操作是先關後開中斷

nvic_setprimask();     // disable interrupts

nvic_resetprimask(); // enable interrupts

兩種型別函式要成對使用。

STM32 巢狀向量中斷控制器NVIC學習

stm32中有兩個優先順序的概念 搶占式優先順序和響應優先順序 也叫副優先順序 他們的特性是 1 高搶占式優先順序的中斷可以巢狀在低搶占式優先順序的中斷中 即低搶占式優先順序的中斷可以被高搶占式優先順序的中斷打斷 2 當兩個中斷源的搶占式優先順序相同時,這兩個中斷將沒有巢狀關係,當乙個中斷到來後,如...

STM32中斷巢狀

cortex m3核心支援256個中斷,其中包括16個核心中斷和240個外部中斷,且具有256級的可程式設計中斷設定,而stm32只用了其中一部分。stm32有84個中斷,包括16個核心中斷和68個可遮蔽中斷,具有16級可程式設計中斷優先順序。而我所使用的103系列只有60個可遮蔽中斷。優先順序的判...

STM32中EXTI和NVIC的關係

1 nvic 巢狀向量中斷 nvic是cortex m3核心的一部分,關於它的資料不在 stm32的技術參考手冊 中,應查閱arm公司的 cortex m3技術參考手冊 cortex m3的向量中斷統一由nvic管理。2 exti 外部中斷 exti是st公司在其stm32產品上擴充套件的外中斷控制...