在一段時間里,我都認為中斷與異常沒有很明顯的區別,因為表現出來都是當前運行中的程序被打斷,然后執行中斷向量表中的函數,但是其實這兩個還是有區別的。
中斷和異常分別屬于CPU的外因和內因。例如CAN接收中斷、GPIO邊沿觸發中斷都屬于中斷范疇;而算數溢出、訪問地址越界、除0等導致的則屬于異常。
舉一個例子來解釋,當你在家玩游戲時,如果此時快遞小哥敲門,你就需要暫停手頭的游戲簽收一下快遞,這個時候的快遞小哥就屬于是中斷,是屬于外因打斷了你玩游戲;當你繼續玩游戲時,突然你肚子很痛要上廁所,則此時暫停玩游戲就屬于是異常,是屬于自身身體出問題的內因打斷自己玩游戲。
中斷的引入 ——為了支持CPU與設備之間的并行操作
◆當CPU啟動外設進行輸入/輸出后,外設便可以獨立工作,CPU轉去處理其他與此次輸入/輸出不相關的事宜;當外設完成輸入/輸出后,通過向CPU發送中斷報告此次輸入/輸出的結果,讓CPU決定如何處理后續事宜。
異常的引入 ———表示CPU執行指令時本身出現了問題
◆如算術溢出、除零、取數時的奇偶錯,訪存地址時越界或執行了“陷入指令”等,這時硬件改變了CPU當前的運行流程,轉到相應的錯誤處理程序或異常處理程序或執行系統調用
在Cortex-M內核中,有三個中斷屏蔽寄存器,分別是PRIMASK、FAULTMASK、BASEEPRI。如下表所示,通過配置這三個寄存器,可實現對中斷、異常的管理。
為了控制中斷與異常,Cortex-M內核專門設定了CPS指令,有如下四種用法:
CPSID I ;PRIMASK = 1 ;關中斷
CPSIE I ;PRIMASK = 0 ;開中斷
CPSID F ;FAULTMASK = 1 ;關異常
CPSIE F ;FAULTMASK = 0 ;開異常
I為Interrupt(中斷)、F為Fault(異常)
-
CAN總線
+關注
關注
145文章
1937瀏覽量
130640 -
寄存器
+關注
關注
31文章
5325瀏覽量
120054 -
GPIO
+關注
關注
16文章
1196瀏覽量
51935 -
中斷控制器
+關注
關注
0文章
59瀏覽量
9442 -
Cortex-M
+關注
關注
2文章
227瀏覽量
29733
發布評論請先 登錄
相關推薦
評論