ARM S3C4510B系統(tǒng)中的異常中斷技術(shù)
2 S3C4510B系統(tǒng)中的異常中斷處理程序的安裝
S3C4510B系統(tǒng)通過異常向量表安裝異常中斷處理程序,即將異常向量表指向異常中斷處理程序的入口,實現(xiàn)面向異常中斷的跳轉(zhuǎn)。這里需要介紹一下 S3C4510B系統(tǒng)的中斷向量表。在S3C4510B系統(tǒng)中,無論在地址重映射之前還是之后,異常中斷向量表的入口地址為固定的(見表1)。當系統(tǒng)運行到滿足異常中斷條件而產(chǎn)生異常中斷時,系統(tǒng)將自動跳入相應(yīng)的異常中斷向量表中。而在異常向量表中保存的,正是利用跳轉(zhuǎn)指令或ldr指令指向該中斷的異常中斷處理程序的指令程序,這樣就實現(xiàn)了異常中斷處理程序的安裝。以SWI軟中斷為例,異常中斷安裝的基本順序如圖2所示,其中異常中斷向量的地址是固定的,其他地址為假設(shè)的。
2.1 利用跳轉(zhuǎn)指令實現(xiàn)異常中斷的安裝
將BL指令放置到中斷向量表的特定位置,跳轉(zhuǎn)目標地址為中斷處理程序的首地址,便可直接實現(xiàn)異常中斷的安裝。其優(yōu)點是BL指令可以直接保存地址,缺點是BL的跳轉(zhuǎn)范圍只有32MB的地址空間,如bl SWI_Handler。
2.2 利用ldr指令實現(xiàn)異常中斷的安裝
利用ldr直接向程序計數(shù)器PC中賦值也可以實現(xiàn)中斷處理程序的安裝。先要將異常中斷處理程序首地址的絕對地址放在鄰近的一個存儲單元中,然后用ldr命令將該內(nèi)存單元中的地址讀取到PC中。其優(yōu)點是可調(diào)用程序的范圍不受限制,如:
ldr pc,SWI_ADDR
……
SWI_ADDR dcd SWI_Handler
以上兩種安裝方法各有優(yōu)缺點,需要根據(jù)實際情況來選擇。 電子技術(shù)書籍網(wǎng)
3 S3C4510B系統(tǒng)中SWI異常中斷實例
S3C4510B中的SWI指令可以用來實現(xiàn)RTOS中的系統(tǒng)功能調(diào)用。它由用戶模式下當前執(zhí)行的指令引發(fā),通過一個24位的立即數(shù)來指代SWI需要調(diào)用的系統(tǒng)功能,調(diào)用執(zhí)行的過程在特權(quán)模式中進行。
3.1 SWI異常中斷的處理程序
通常我們把SWI的中斷處理程序分為兩級,分別完成立即數(shù)的讀取和功能調(diào)用的執(zhí)行。其指令代碼如下:
……
stmfd sp!,{r0-r12,lr}
保護現(xiàn)場,保存寄存器的值
ldr r0,[lr,#-4]
lr寄存器保存指令
bic r0,r0,#0XFF000000 ;讀取指令中的24位立即數(shù)
……
cmp R0,#MaxOfSWI
判斷立即數(shù)是否有效
ldrls pc,[pc,r0,lsl #2]
b OutOfSWIRange ;超出范圍
JumpListofSWI
dcd SWIPro_0
dcd SWIPro_1
……
其他所有的軟中斷入口
SWIPro_0
進入SWI對應(yīng)立即數(shù)0的中斷處理程序
……
對應(yīng)立即數(shù)0的中斷處理程序
b EndOfSWI
SWIPro0
進入SWI對應(yīng)立即數(shù)1的中斷處理程序
……
對應(yīng)立即數(shù)1的中斷處理程序
b EndOfSWI
……
其他的SWI處理程序
EndOfSWI
1dmfd sp!,{r0-r12,pc}^
恢復(fù)各寄存器
評論