ARM中斷的基本過程
在IRQ0腳給個(gè)上升沿后,過程是這樣的(比較通用的過程)。
1)如果你沒有打開該中斷的使能寄存器,沒有任何反應(yīng)。
2)如果你打開了使能寄存器,但在對(duì)應(yīng)的屏蔽寄存器中屏蔽了該中斷,也沒有任何反應(yīng)。
3)上述兩個(gè)寄存器都設(shè)置正確了,中斷產(chǎn)生了,CPU保存當(dāng)前程序運(yùn)行環(huán)境,跳到中斷入口,ARM芯片一般是0x?地址處。
4)如果你沒有設(shè)置中斷向量,即0x?處不是你的代碼,程序就會(huì)飛掉,當(dāng)然也可能正常運(yùn)行,這種情況一般發(fā)生在正好飛到正常代碼處。
5)設(shè)置好中斷向量了,中斷向量一般是個(gè)跳轉(zhuǎn)語句,跳到你的正式的中斷處理過程,在這里你可以關(guān)閉所有中斷,清中斷,處理等等,然后退出。記住某些處理器一定要清中斷,否則下次再給個(gè)上升沿就沒有反應(yīng)了。
中斷路徑
如果是irq中斷
產(chǎn)生irq異常中斷 轉(zhuǎn)到 0x18 1 跳 中斷跳
如果啟用向量中斷模式
自動(dòng)轉(zhuǎn)向?qū)?yīng)向量地址 每地址對(duì)應(yīng)一條跳轉(zhuǎn)指令 2 跳
跳轉(zhuǎn)到中斷處理程序
如果使用匯編編寫中斷處理程序
在該處即可編寫處理程序
如果使用c語言編寫中斷處理程序
需要添加與c語言接口程序 3 跳
方法:1 匯編編寫
在內(nèi)存空間定義一向量表,用來存放各中斷c語言中斷處理程序入口地址[即函數(shù)入口地址],
在上述程序跳轉(zhuǎn)到處編寫 將c語言處理程序入口地址放入pc (即跳轉(zhuǎn)到c函數(shù)處)。
2 c編寫
在內(nèi)存空間定義指針表[與匯編向量表對(duì)應(yīng)],用來存放各中斷匯編轉(zhuǎn)向c函數(shù)入口地址,
編寫中斷處理函數(shù),將對(duì)應(yīng)中斷指針內(nèi)容放入函數(shù)入口地址。
如果不啟用中斷向量模式
從0x18直接轉(zhuǎn)向中斷處理程序即可
小結(jié): 上述1 跳為向量中斷模式自動(dòng)完成,可加快尋找中斷源。
2 跳為與c語言相結(jié)合,匯編和c利用共同定義的中斷向量地址表完成掛鉤。
評(píng)論