1. 程式人生 > >關於嵌入式學習隨筆->6《NVIC中斷優先級管理》

關於嵌入式學習隨筆->6《NVIC中斷優先級管理》

tle 請求 順序 pan 執行過程 irq 學習隨筆 width info

1、中斷技術概述

在單片機應用系統中,中斷技術主要用於時時檢測與控制,也就是要求單片機能感及時地響應中斷請求源提出的服務請求,進行快速響應並及時處理,這些工作是由單片機片內的中斷系統來實現的。當中斷請求源發出中斷請求時,如果中斷請求得到允許,單片機暫時中止當前正在執行的主程序,轉到中斷服務處理程序處理中斷請求,處理完中斷服務請求後,再回到原來被中止的程序處(斷點),繼續執行被中斷的主程序。

中斷響應和處理過程如下圖所示:

技術分享圖片












2、中斷源

--》M4/M7內核支持256個中斷,其中包含了16個內核中斷和240個外部中斷,並且具有256級的可編程中斷設置。

--》對於STM32F4/F7來說並沒有使用CM4內核的全部資源,而只是用了其中的一部分》

-->STM32F40xx/STM32F41xx總共有92個中斷:10個內核中斷,82個可屏蔽外部中斷。

-->STM32F42xx/STM32F43xx總共有97個中斷:10個內核中斷,87個可屏蔽外部中斷。

-->STM32F6x總共有118個中斷:10個內核中斷,108個可屏蔽外部中斷。

--》STM32具有16級可編程的中斷優先級,而我們常用的就是這些可屏蔽中斷。

3、中斷向量表

中斷向量是中斷服務程序的入口地址。將所有中斷向量集中放在一起,就形成了中斷向量表。

中斷向量表參考

4、如何管理如此之多的中斷?(NVIC中斷優先級管理)

中斷管理方法:

首先,對於STM32中斷進行分組,0-4組。同時,對每個中斷設置一個搶占優先級和一個響應優先級值。

分組配置實在寄存器SCB->AIRCR中配置:

技術分享圖片

5、搶占優先級和響應優先級的區別

--》高優先級的搶占優先級是可以打斷正在進行的低搶占優先級中斷的。

--》搶占優先級相同的中斷,高響應優先級不可以打斷低響應優先級的中斷。

--》搶占優先級相同的中斷,當兩個中斷同時發生的情況下,哪個響應優先級越高,哪個先執行。

--》如果兩個中斷的搶占優先級和響應優先級都一樣,那麽哪個中斷先發生就先執行。

例子:(假定設置中斷優先級組為2)

設置中斷3的搶占優先級為2,響應優先級為1;

設置中斷6的搶占優先級為3,響應優先級為0;

設置中斷7的搶占優先級為2,響應優先級為0。

則3個中斷的優先級順序為:中斷7>中斷3>中斷6。

註意:優先級數值越小,優先級越高,先看搶占,再看響應。

一般情況下,系統代碼執行過程中,只設置一次中斷優先級分組,比如分組2,設置好分組後一般不會在改變分組。隨意改變分組會導致中斷管理混亂,程序出現意想不到的執行結果。

6、HAL庫中相應設置操作

第一步:設置中斷優先級分組

  1 HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);

第二步:設置單個中斷搶占優先級和響應優先級

  1 HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);

第三步:設置使能中斷通道

  1 HAL_NVIC_EnableIRQ(IRQn_Type IRQn);


關於嵌入式學習隨筆->6《NVIC中斷優先級管理》