本文詳細(xì)介紹Cortex-M3中斷優(yōu)先級(jí)相關(guān)知識(shí)。
1、什么是異常和中斷
凡是打斷程序順序執(zhí)行的事件都稱為異常(exception),比如HardFault,外部中斷等。所以中斷也可以說是異常的一種。其實(shí)這也很好理解,因?yàn)槌绦驁?zhí)行不外乎正常和異常而已,所以打擾程序正常運(yùn)行流程的事件都可以叫異常。
2、Cortex-M3異常類型
包括系統(tǒng)異常(異常編號(hào)1-15)和外部中斷(異常編號(hào)16往上),系統(tǒng)異常在Cortex-M3內(nèi)核中,由ARM設(shè)計(jì),芯片廠商都會(huì)實(shí)現(xiàn),外部中斷最多可以有240個(gè),由芯片生產(chǎn)廠家決定數(shù)量種類,比如UART,DMA等中斷。Reset(-3)、NMI(-2)、HardFault(-1)這三個(gè)異常優(yōu)先級(jí)都是負(fù)數(shù)且固定不變,優(yōu)先級(jí)高于其他異常,除了這三個(gè)異常之外其他異常優(yōu)先級(jí)都是可以編程的。
3、什么是中斷搶占
在執(zhí)行低中斷優(yōu)先級(jí)中斷函數(shù)時(shí),高優(yōu)先級(jí)中斷到來,低優(yōu)先級(jí)中斷被打斷,執(zhí)行高優(yōu)先級(jí)中斷,高優(yōu)先級(jí)中斷執(zhí)行完后回到低優(yōu)先級(jí)中斷繼續(xù)執(zhí)行。高優(yōu)先級(jí)中斷搶占了低優(yōu)先級(jí)中斷。如下圖所示:
4、什么是搶占優(yōu)先級(jí)和子優(yōu)先級(jí)
每個(gè)中斷優(yōu)先級(jí)都包含兩個(gè)部分,一部分稱作搶占優(yōu)先級(jí),另一部分稱作子優(yōu)先級(jí)。以下來詳細(xì)說明以下兩個(gè)優(yōu)先級(jí)的含義。
1)搶占優(yōu)先級(jí)不同
具有高搶占優(yōu)先級(jí)的中斷能夠搶占低搶占優(yōu)先級(jí)的中斷,也就是上面提到的中斷嵌套。
2)搶占優(yōu)先級(jí)相同,子優(yōu)先級(jí)不同
當(dāng)兩個(gè)中斷的搶占優(yōu)先級(jí)設(shè)置為相同級(jí)別時(shí),這兩個(gè)中斷不會(huì)出現(xiàn)中斷嵌套。如果其中一個(gè)中斷正在執(zhí)行時(shí),另外一個(gè)中斷到來,后來的中斷將會(huì)等到前一個(gè)中斷執(zhí)行完才能執(zhí)行。如果這兩個(gè)中斷都處在等待響應(yīng)狀態(tài),執(zhí)行條件到來時(shí),首先響應(yīng)子優(yōu)先級(jí)高的中斷。
3)搶占優(yōu)先級(jí)相同,子優(yōu)先級(jí)也相同
這種情況也不會(huì)出現(xiàn)中斷嵌套,內(nèi)核將會(huì)按照向量表中的排位選擇,優(yōu)先執(zhí)行靠前的異常。比如Pend SV和Systick兩個(gè)中斷優(yōu)先級(jí)都設(shè)置為相同,如果兩個(gè)中斷同時(shí)到來,優(yōu)先執(zhí)行PendSV,因?yàn)樗呐判蚩壳埃娚厦嫦蛄勘怼?/p>
5、什么是優(yōu)先級(jí)分組
在Cortex-M3內(nèi)核中最多使用8Bit來表示中斷優(yōu)先級(jí),在這8Bit中一部分用來表示搶占優(yōu)先級(jí),一部分用來表示子優(yōu)先級(jí),這兩種優(yōu)先級(jí)到底各占用幾位,是由內(nèi)核寄存器AIRCR(應(yīng)用程序中斷及復(fù)位控制寄存器)決定的,這個(gè)寄存的Bit8-Bit10代表了優(yōu)先級(jí)分組,共3位,設(shè)置這三3位,可以改變優(yōu)先級(jí)分組,如下幾種組合:
000 高7位搶占優(yōu)先級(jí),低1位子優(yōu)先級(jí)
001 高6位搶占優(yōu)先級(jí),低2位子優(yōu)先級(jí)
010 高5位搶占優(yōu)先級(jí),低3位子優(yōu)先級(jí)
011 高4位搶占優(yōu)先級(jí),低4位子優(yōu)先級(jí)
100 高3位搶占優(yōu)先級(jí),低5位子優(yōu)先級(jí)
101 高2位搶占優(yōu)先級(jí),低6位子優(yōu)先級(jí)
110 高1位搶占優(yōu)先級(jí),低7位子優(yōu)先級(jí)
111 高0位搶占優(yōu)先級(jí),低8位子優(yōu)先級(jí)
另,Cortex-M3內(nèi)核要求最多使用8Bit來表示中斷優(yōu)先級(jí),但是很多芯片廠商為了簡(jiǎn)化設(shè)計(jì)都會(huì)進(jìn)行裁剪,比如STM32只用4位表示優(yōu)先級(jí)。
-
ARM
+關(guān)注
關(guān)注
134文章
9306瀏覽量
374995 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1410瀏覽量
41094 -
中斷
+關(guān)注
關(guān)注
5文章
904瀏覽量
42520 -
Cortex-M3
+關(guān)注
關(guān)注
9文章
276瀏覽量
60114 -
優(yōu)先級(jí)
+關(guān)注
關(guān)注
0文章
21瀏覽量
8936
發(fā)布評(píng)論請(qǐng)先 登錄
Cortex-M3處理器中斷與FreeRTOS中斷優(yōu)先級(jí)配置
詳解STM32中斷優(yōu)先級(jí)
STM32(Cortex-M3)中的優(yōu)先級(jí)概念
STM32中斷優(yōu)先級(jí)和開關(guān)總中斷
STM32中斷優(yōu)先級(jí)和開關(guān)總中斷
探討一下STM32中斷優(yōu)先級(jí)和開關(guān)總中斷
Stm32中斷優(yōu)先級(jí)概念及使用
STM32中斷優(yōu)先級(jí)的相關(guān)概念與使用筆記資料免費(fèi)下載

STM32中斷優(yōu)先級(jí)相關(guān)概念與使用筆記資料免費(fèi)下載

關(guān)于Cortex-M3的中斷優(yōu)先級(jí)描述資料下載

2.FreeRTOS中斷優(yōu)先級(jí)和任務(wù)優(yōu)先級(jí)

STM32筆記之中斷優(yōu)先級(jí)和開關(guān)總中斷

Cortex-M中斷及FreeRTOS中斷優(yōu)先級(jí)配置原理

評(píng)論