ARM中有5種異常模式,有7種中斷源。這7種中斷源中有些中斷是我們希望發(fā)生的,但有些中斷是我們不希望發(fā)生的。
我們希望發(fā)生的中斷:
軟中斷:屬于svc模式,通過SWI指令便可以產(chǎn)生軟中斷,進(jìn)入到svc模式。
irq中斷:屬于irq模式,當(dāng)產(chǎn)生普通的外部中斷時(shí),處理器便進(jìn)入到IRQ模式。
fiq中斷:屬于fiq模式,當(dāng)產(chǎn)生高優(yōu)先級外部中斷時(shí),處理器便進(jìn)入到FIQ模式。
我們不希望發(fā)生的中斷:
復(fù)位:屬于svc模式,當(dāng)系統(tǒng)上電時(shí)便會產(chǎn)生復(fù)位中斷,系統(tǒng)進(jìn)入到svc模式。復(fù)位中斷不需要中斷返回。
取指中止中斷:屬于abt模式,當(dāng)預(yù)取指發(fā)生錯誤時(shí),便產(chǎn)生取指中止中斷,進(jìn)入到abt模式。
數(shù)據(jù)中止中斷:屬于abt模式,當(dāng)訪問數(shù)據(jù)存儲器時(shí),便產(chǎn)生數(shù)據(jù)中止中斷,進(jìn)入到abt模式。
未定義指令中斷:屬于und模式,當(dāng)執(zhí)行到一條未定義指令時(shí),便產(chǎn)生未定義指令中斷,系統(tǒng)進(jìn)入到und模式。
中斷的優(yōu)先級:
ARM中有6個優(yōu)先級。各個中斷的優(yōu)先級順序如下:(1 6 6s 5 2 4 3)
復(fù)位: 1
關(guān)于各種中斷在中斷返回時(shí)還需要給LR減去一個不同的偏移量的問題我覺得沒必要深入研究了,這還要涉及到ARM指令的流水線技術(shù),平時(shí)寫中斷代碼都是用C寫的,沒必要知道這個。用到時(shí)再去查表即可。
處理器在進(jìn)入異常和退出異常時(shí)所做的工作:
進(jìn)入異常時(shí):
1、將要返回處的地址保存在對應(yīng)異常模式的LR中。(復(fù)位不需要保存返回地址)2、將cpsr的內(nèi)容復(fù)制到對應(yīng)異常模式的spsr中。3、強(qiáng)制修改cpsr的內(nèi)容,進(jìn)入到相應(yīng)異常模式以及根據(jù)需要修改某些位。4、強(qiáng)制PC從相應(yīng)的中斷向量地址處進(jìn)行取址。
注:以上這些步驟都是有cpu自動完成的,也就是當(dāng)有中斷產(chǎn)生時(shí),硬件就會自動完成上述步驟。
退出異常時(shí):
1、將LR中保存的地址賦給PC。2、將spsr的內(nèi)容恢復(fù)給cpsr。3、將irq中斷禁止位清零。
注:只需要在異常處理程序中寫一句返回指令(如上面的表4.1所示)即可全部實(shí)現(xiàn)上述的步驟。
-
ARM
+關(guān)注
關(guān)注
134文章
9097瀏覽量
367581 -
中斷
+關(guān)注
關(guān)注
5文章
898瀏覽量
41502
原文標(biāo)題:ARM中的異常和中斷
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論