關於嵌入式學習隨筆->6《NVIC中斷優先級管理》
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中斷優先級管理》