在一段時間里,我都認為中斷與異常沒有很明顯的區(qū)別,因為表現出來都是當前運行中的程序被打斷,然后執(zhí)行中斷向量表中的函數,但是其實這兩個還是有區(qū)別的。
中斷和異常分別屬于CPU的外因和內因。例如CAN接收中斷、GPIO邊沿觸發(fā)中斷都屬于中斷范疇;而算數溢出、訪問地址越界、除0等導致的則屬于異常。
舉一個例子來解釋,當你在家玩游戲時,如果此時快遞小哥敲門,你就需要暫停手頭的游戲簽收一下快遞,這個時候的快遞小哥就屬于是中斷,是屬于外因打斷了你玩游戲;當你繼續(xù)玩游戲時,突然你肚子很痛要上廁所,則此時暫停玩游戲就屬于是異常,是屬于自身身體出問題的內因打斷自己玩游戲。
中斷的引入 ——為了支持CPU與設備之間的并行操作
◆當CPU啟動外設進行輸入/輸出后,外設便可以獨立工作,CPU轉去處理其他與此次輸入/輸出不相關的事宜;當外設完成輸入/輸出后,通過向CPU發(fā)送中斷報告此次輸入/輸出的結果,讓CPU決定如何處理后續(xù)事宜。
異常的引入 ———表示CPU執(zhí)行指令時本身出現了問題
◆如算術溢出、除零、取數時的奇偶錯,訪存地址時越界或執(zhí)行了“陷入指令”等,這時硬件改變了CPU當前的運行流程,轉到相應的錯誤處理程序或異常處理程序或執(zhí)行系統(tǒng)調用
在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文章
1968瀏覽量
131984 -
寄存器
+關注
關注
31文章
5401瀏覽量
122781 -
GPIO
+關注
關注
16文章
1238瀏覽量
53309 -
中斷控制器
+關注
關注
0文章
60瀏覽量
9602 -
Cortex-M
+關注
關注
2文章
229瀏覽量
30158
發(fā)布評論請先 登錄
相關推薦
各位大哥 小弟我攤上事啦?。?!求助芯片 ALS1176
芯片,半導體,集成電路,傻傻分不清楚?
工業(yè)互聯網和工業(yè)4.0傻傻分不清楚?
不要再對各種電機、舵機傻傻分不清楚了 精選資料分享
芯片、半導體、集成電路還在傻傻分不清楚
別再傻傻分不清楚光纖和網線了
強弱電傻傻分不清楚 強電弱電怎么區(qū)別-科蘭

評論