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