在一段時(shí)間里,我都認(rèn)為中斷與異常沒有很明顯的區(qū)別,因?yàn)楸憩F(xiàn)出來都是當(dāng)前運(yùn)行中的程序被打斷,然后執(zhí)行中斷向量表中的函數(shù),但是其實(shí)這兩個(gè)還是有區(qū)別的。
中斷和異常分別屬于CPU的外因和內(nèi)因。例如CAN接收中斷、GPIO邊沿觸發(fā)中斷都屬于中斷范疇;而算數(shù)溢出、訪問地址越界、除0等導(dǎo)致的則屬于異常。
舉一個(gè)例子來解釋,當(dāng)你在家玩游戲時(shí),如果此時(shí)快遞小哥敲門,你就需要暫停手頭的游戲簽收一下快遞,這個(gè)時(shí)候的快遞小哥就屬于是中斷,是屬于外因打斷了你玩游戲;當(dāng)你繼續(xù)玩游戲時(shí),突然你肚子很痛要上廁所,則此時(shí)暫停玩游戲就屬于是異常,是屬于自身身體出問題的內(nèi)因打斷自己玩游戲。
中斷的引入 ——為了支持CPU與設(shè)備之間的并行操作
◆當(dāng)CPU啟動(dòng)外設(shè)進(jìn)行輸入/輸出后,外設(shè)便可以獨(dú)立工作,CPU轉(zhuǎn)去處理其他與此次輸入/輸出不相關(guān)的事宜;當(dāng)外設(shè)完成輸入/輸出后,通過向CPU發(fā)送中斷報(bào)告此次輸入/輸出的結(jié)果,讓CPU決定如何處理后續(xù)事宜。
異常的引入 ———表示CPU執(zhí)行指令時(shí)本身出現(xiàn)了問題
◆如算術(shù)溢出、除零、取數(shù)時(shí)的奇偶錯(cuò),訪存地址時(shí)越界或執(zhí)行了“陷入指令”等,這時(shí)硬件改變了CPU當(dāng)前的運(yùn)行流程,轉(zhuǎn)到相應(yīng)的錯(cuò)誤處理程序或異常處理程序或執(zhí)行系統(tǒng)調(diào)用
在Cortex-M內(nèi)核中,有三個(gè)中斷屏蔽寄存器,分別是PRIMASK、FAULTMASK、BASEEPRI。如下表所示,通過配置這三個(gè)寄存器,可實(shí)現(xiàn)對(duì)中斷、異常的管理。
為了控制中斷與異常,Cortex-M內(nèi)核專門設(shè)定了CPS指令,有如下四種用法:
CPSID I ;PRIMASK = 1 ;關(guān)中斷
CPSIE I ;PRIMASK = 0 ;開中斷
CPSID F ;FAULTMASK = 1 ;關(guān)異常
CPSIE F ;FAULTMASK = 0 ;開異常
I為Interrupt(中斷)、F為Fault(異常)
-
CAN總線
+關(guān)注
關(guān)注
145文章
1977瀏覽量
132408 -
寄存器
+關(guān)注
關(guān)注
31文章
5426瀏覽量
123669 -
GPIO
+關(guān)注
關(guān)注
16文章
1278瀏覽量
53689 -
中斷控制器
+關(guān)注
關(guān)注
0文章
61瀏覽量
9645 -
Cortex-M
+關(guān)注
關(guān)注
2文章
230瀏覽量
30270
發(fā)布評(píng)論請(qǐng)先 登錄
各位大哥 小弟我攤上事啦!!!求助芯片 ALS1176
如果修改默認(rèn)登錄名和密碼
芯片,半導(dǎo)體,集成電路,傻傻分不清楚?
工業(yè)互聯(lián)網(wǎng)和工業(yè)4.0傻傻分不清楚?
不要再對(duì)各種電機(jī)、舵機(jī)傻傻分不清楚了 精選資料分享
圖像不清楚與矩陣切換器的關(guān)系有哪些?
科普:石墨烯電池、石墨烯基電池二者有何不同?別傻傻分不清
芯片、半導(dǎo)體、集成電路還在傻傻分不清楚
別再傻傻分不清楚光纖和網(wǎng)線了
強(qiáng)弱電傻傻分不清楚 強(qiáng)電弱電怎么區(qū)別-科蘭

評(píng)論