ARM的中斷產(chǎn)生到處理過(guò)程
ARM的中斷產(chǎn)生到處理過(guò)程(底層的東西)
ARM中中斷分兩種IRQ&FIQ,
其中片內(nèi)外設(shè)的東西一般都定義成IRQ,這個(gè)定義是在VIC模塊,即中斷向量控制模塊中控制的,該控制的寄存器為VICintselect共有32位,其中每位都有對(duì)應(yīng)的中斷來(lái)源,比如說(shuō)第18位表示A/D轉(zhuǎn)換,第0位WDT等,當(dāng)然中斷源沒(méi)有32個(gè),但VIC最多可處理32個(gè)中斷源。ARM中的中斷源目前為止有16個(gè),從19--31位為保留位。
ARM處理器分為7種模式:
系統(tǒng)模式,用戶(hù)模式,還有5種異常模式,而這5種異常模式中包含有IRQ&FIQ異常,也就是說(shuō),當(dāng)發(fā)生IRQ或FIQ后,系統(tǒng)要進(jìn)入相應(yīng)的異常模式進(jìn)行處理,這些是由硬件實(shí)現(xiàn)的。
產(chǎn)生異常后,ARM核會(huì)做以下工作:
1.將當(dāng)前的地址加4or加8存到LR寄存器里,即把當(dāng)前狀態(tài)下下一條指令的地址存入LR
2.將CPSR復(fù)制到SPSR,
3.然后將異常模式的狀態(tài)強(qiáng)制寫(xiě)入CPSR
4.強(qiáng)制PC從相關(guān)的異常向量處取指?。?/p>
我想這些東西都是由硬件來(lái)完成的。
當(dāng)然了,進(jìn)入異常模式后就關(guān)中斷吧,為了避免中斷嵌套,這個(gè)不是不可以,只是處理起來(lái)太麻煩,所以最好是禁止中斷嵌套!
那么以下的東西就好理解了,我們來(lái)看看PC從異常向量處取指后的工作,
1.程序進(jìn)入異常處理模式,比如說(shuō)我們現(xiàn)在進(jìn)入了IRQ模式,我看看啟動(dòng)代碼。
發(fā)現(xiàn)在異常向量表中,入口處的第一句指令就是LDR PC,(中斷處理子函數(shù)的地址)
即將也就是說(shuō),程序直接開(kāi)始進(jìn)入了中斷處理子函數(shù),延時(shí)時(shí)間非常短,而子函數(shù)就由你自己來(lái)編寫(xiě)了。
這樣進(jìn)入中斷的過(guò)程以及中斷處理就清楚了吧?。?/p>
當(dāng)然中斷處理結(jié)束以后啊,ARM核還是要做一些工作的。
1.返回原程序,LDR PC,LR
2.將SPSR復(fù)制回CPSR
3.開(kāi)中斷





