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