- 論壇徽章:
- 0
|
系統(tǒng)在引導(dǎo)的時候由loader來完成,中斷控制器的初始化工作,建立起中斷向量列表(如果采用中斷向量的話),ARM體系結(jié)構(gòu)下通常會有這樣的代碼:
handler
B P_abort ; Handler Programme abort
B D_abort ; Handler Data abort
B . ; handlerReserved
LDR PC, =HandlerIRQ
LDR PC, =HandlerFIQ
LDR PC, =HandlerEINT0 ; 0x20
LDR PC, =HandlerEINT1
LDR PC, =HandlerEINT2
LDR PC, =HandlerEINT3
LDR PC, =HandlerEINT4567
這就是你的中斷向量列表,當(dāng)中斷發(fā)生后,運行相應(yīng)的代碼,將中斷的中斷號提交給linux(這項工作應(yīng)該在loader中進行,或者你叫他BIOS也可以),linux利用這個中斷號,檢查先前誰通過request_irq申請過這個中斷號,如果找到的話調(diào)用request_irq中指定的中斷處理程序。
好了大體流程是這樣的,現(xiàn)在就有一個方法的選擇問題。通常的做法是當(dāng)中斷發(fā)生后,由BIOS或loader記錄下中斷號,然后將中斷號發(fā)往linux并清除中斷的pending、開中斷,剩下的就是linux根據(jù)中斷號做相應(yīng)的調(diào)用,這樣做可以實現(xiàn)中斷的快速響應(yīng),如果在你的驅(qū)動開中斷的話,系統(tǒng)的中斷將會被關(guān)閉很長時間而得不到響應(yīng)。
當(dāng)然你也可以選擇其他的操作方法,根本不用BIOS或loader,完全由linux來控制底層,只不過是可以移植性要受到影響~~
[ 本帖最后由 .kaka 于 2008-9-7 16:26 編輯 ] |
|