1. 程式人生 > >stm32中斷優先級

stm32中斷優先級

width 寫到 兩個 寫入 位置 app size 在那 table

編 號 分配情況
7 0:4 無搶先式優先級,16 個子優先級
6 1:3 2 個搶先式優先級,8 個子優先級
5 2:2 4 個搶先式優先級,4 個子優先級
4 3:1 8 個搶先式優先級,2 個子優先級
3/2/1/0 4:0 16 個搶先式優先級,無子優先級

中斷分組

在一個系統中,通常只使用上面 5 種分配情況的一種,具體采用哪一種,需要在初始化
時寫入到一個 32 位寄存器 AIRC(Application Interrupt and Reset Control Register)
的第[10:8]這 3 個位中。這 3 個 bit 位有專門的稱呼:PRIGROUP。

比如你將 0x05(即上表中的編號)寫到 AIRC 的[10:8]中,那麽也就規定了你的系統中只
有 4 個搶先式優先級,相同的搶先式優先級下還可以有 4 個不同級別的子優先級。如下:

0 號搶先優先級 0 號子優先級
1 號搶先優先級 1 號子優先級
2 號搶先優先級 2 號子優先級
3 號搶先優先級 3 號子優先級

具體優先級的確定和嵌套規則。ARM cortex_m3(STM32)規定
a/ 只能高搶先優先級的中斷可以打斷低搶先優先級的中斷服務,構成中斷嵌套。
b/ 當 2(n)個相同搶先優先級的中斷出現,它們之間不能構成中斷嵌套,但 STM32 首先響應子優先級高的中斷。
c/ 當 2(n)個相同搶先優先級和相同子優先級的中斷出現,STM32 首先響應中斷通道所對應的中斷向量地址低的那個中斷(見 ROM0008,表 52)。
具體一點:
0 號搶先優先級的中斷,可以打斷任何中斷搶先優先級為非 0 號的中斷;1 號搶先優先級的中斷,可以打斷任何中斷搶先優先級為 2、3、4 號的中斷;……;構成中斷嵌套。
如果兩個中斷的搶先優先級相同,誰先出現,就先響應誰,不構成嵌套。如果一起出現(或掛在那裏等待),就看它們 2 個誰的子優先級高了,如果子優先級也相同,就看它們的中斷向量位置了。


stm32中斷優先級