機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
ARM S3C4510B系統(tǒng)中的異常中斷技術(shù)
ARM S3C4510B系統(tǒng)中的異常中斷技術(shù)
 更新時(shí)間:2008-8-18 10:16:43  點(diǎn)擊數(shù):27
【字體: 字體顏色

---S3C4510B系統(tǒng)通過(guò)異常向量表安裝異常中斷處理程序,即將異常向量表指向異常中斷處理程序的入口,實(shí)現(xiàn)面向異常中斷的跳轉(zhuǎn)。這里需要介紹一下S3C4510B系統(tǒng)的中斷向量表。在S3C4510B系統(tǒng)中,無(wú)論在地址重映射之前還是之后,異常中斷向量表的入口地址為固定的(見(jiàn)表1)。當(dāng)系統(tǒng)運(yùn)行到滿足異常中斷條件而產(chǎn)生異常中斷時(shí),系統(tǒng)將自動(dòng)跳入相應(yīng)的異常中斷向量表中。而在異常向量表中保存的,正是利用跳轉(zhuǎn)指令或ldr指令指向該中斷的異常中斷處理程序的指令程序,這樣就實(shí)現(xiàn)了異常中斷處理程序的安裝。以SWI軟中斷為例,異常中斷安裝的基本順序如圖2所示,其中異常中斷向量的地址是固定的,其他地址為假設(shè)的。
2.1 利用跳轉(zhuǎn)指令實(shí)現(xiàn)異常中斷的安裝
---將BL指令放置到中斷向量表的特定位置,跳轉(zhuǎn)目標(biāo)地址為中斷處理程序的首地址,便可直接實(shí)現(xiàn)異常中斷的安裝。其優(yōu)點(diǎn)是BL指令可以直接保存地址,缺點(diǎn)是BL的跳轉(zhuǎn)范圍只有32MB的地址空間,如bl SWI_Handler。
2.2 利用ldr指令實(shí)現(xiàn)異常中斷的安裝
---利用ldr直接向程序計(jì)數(shù)器PC中賦值也可以實(shí)現(xiàn)中斷處理程序的安裝。先要將異常中斷處理程序首地址的絕對(duì)地址放在鄰近的一個(gè)存儲(chǔ)單元中,然后用ldr命令將該內(nèi)存單元中的地址讀取到PC中。其優(yōu)點(diǎn)是可調(diào)用程序的范圍不受限制,如:
--- ;ldr pc,SWI_ADDR
---……
---;SWI_ADDR dcd SWI_Handler
---以上兩種安裝方法各有優(yōu)缺點(diǎn),需要根據(jù)實(shí)際情況來(lái)選擇。

3 S3C4510B系統(tǒng)中SWI異常中斷實(shí)例
---S3C4510B中的SWI指令可以用來(lái)實(shí)現(xiàn)RTOS中的系統(tǒng)功能調(diào)用。它由用戶模式下當(dāng)前執(zhí)行的指令引發(fā),通過(guò)一個(gè)24位的立即數(shù)來(lái)指代SWI需要調(diào)用的系統(tǒng)功能,調(diào)用執(zhí)行的過(guò)程在特權(quán)模式中進(jìn)行。
3.1 SWI異常中斷的處理程序
---通常我們把SWI的中斷處理程序分為兩級(jí),分別完成立即數(shù)的讀取和功能調(diào)用的執(zhí)行。其指令代碼如下:
---……
---stmfd sp!,{r0-r12,lr}
---;保護(hù)現(xiàn)場(chǎng),保存寄存器的值
---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
---;進(jìn)入SWI對(duì)應(yīng)立即數(shù)0的中斷處理程序
---……
---;對(duì)應(yīng)立即數(shù)0的中斷處理程序
---b EndOfSWI
---SWIPro0
---;進(jìn)入SWI對(duì)應(yīng)立即數(shù)1的中斷處理程序
---……
---;對(duì)應(yīng)立即數(shù)1的中斷處理程序
---b EndOfSWI
---……
---;其他的SWI處理程序
---EndOfSWI
---ldmfd sp!,{r0-r12,pc}^
---;恢復(fù)各寄存器
3.2 SWI異常中斷的調(diào)用與返回
---對(duì)于SWI異常中斷的調(diào)用要根據(jù)中斷現(xiàn)場(chǎng)所處的處理器模式進(jìn)行調(diào)用。通常用戶模式下調(diào)用SWI功能只需將處理器所需要的參數(shù)存放于寄存器中,然后調(diào)用相應(yīng)功能號(hào)的系統(tǒng)功能。
--- Mov r0,#80
---;假設(shè)參數(shù)為#80
--- swi 0X1
---;SWI中斷立即數(shù)1
---由于SWI中斷功能調(diào)用在特權(quán)模式下執(zhí)行,故而當(dāng)在特權(quán)模式下調(diào)用SWI功能時(shí),必須對(duì)當(dāng)前模式下的SPSR和寄存器LR進(jìn)行保存。
---stmfd sp!,{r0-r12,lr}
---;保存寄存器
---mov r1,sp
---mov r0, spsr_svc
---stmfd sp!,{r0} ;保存SPSR
---……
---;讀取立即數(shù),調(diào)用SWI中斷處理程序
---ldmfd sp!,{r0}  ;恢復(fù)SPSR
---msr spsr_svc, r0
---ldmdf sp!,{r0-r12,lr}^ ;恢復(fù)其他寄存器

4 S3C4510B系統(tǒng)中的IRQ異常中斷實(shí)例
4.1 IRQ異常中斷的產(chǎn)生
---S3C4510B處理器系統(tǒng)常用于進(jìn)行外部異常的響應(yīng)和操作系統(tǒng)進(jìn)程的控制。CPSR寄存器的I控制位置0時(shí),處理器在指令邊界查詢是否有IRQ請(qǐng)求,系統(tǒng)的外部中斷管理器或者外設(shè)通過(guò)使能處理器的IRQ輸入管腳產(chǎn)生IRQ異常中斷。
4.2 IRQ異常中斷的處理程序
---IRQ異常中斷產(chǎn)生后,根據(jù)中斷向量的指令跳入相應(yīng)的中斷處理程序。系統(tǒng)的外圍中斷管理硬件會(huì)將所用的IRQ中斷請(qǐng)求按照優(yōu)先級(jí)進(jìn)行排列,把最高優(yōu)先級(jí)的IRQ中斷的信息放入寄存器中。通常的IRQ中斷處理程序也需要保存返回地址、寄存器,而且需要屏蔽IRQ中斷,以保證優(yōu)先級(jí)較高的中斷完全處理。
---sub lr,lr,#4
---stmfd sp!,{lr}
---;保存返回地址
---mrs r14,spsr_irq
---stmfd sp!,[r12,r14]
---;保存r12,spsr
---mov r12,#IntBase
---;讀取中斷管理接口的基址
---ldr r12,[r12,#IntLevel]
---;計(jì)算當(dāng)前中斷的物理地址
---mrs r14,cpsr
---bic r14,r14,#0X80
---;清零IRQ中斷禁止位
---msr cpsr_irq,r14
---;開(kāi)IRQ中斷
---ldr pc,[ pc,r12,lsr #2]
---;跳轉(zhuǎn)到相應(yīng)的中斷處理程序
---dcd PirQ0Handler
---dcd PirQ1Handler
---…
---dcd PirQnHandler
---;優(yōu)先級(jí)為n的中斷處理程序地址
---PirQ0Handler
---stmfd sp!,{r0-r11}
---……
---;優(yōu)先級(jí)為1的中斷處理程序
---ldmfd sp!,{r0-r11}
---msr spsr_irq,r14
---;恢復(fù)r12和spsr
---ldmfd sp!,{pc}^ ;中段返回
---……
---dcd PirQnHandler
---;中斷優(yōu)先級(jí)為N的中斷處理程序
---……
4.3 IRQ異常中斷在進(jìn)程控制中的應(yīng)用
---S3C4510B處理器系統(tǒng)中的進(jìn)程之間的切換也是通過(guò)IRQ來(lái)完成的。操作系統(tǒng)中的每一個(gè)進(jìn)程都由進(jìn)程控制塊PCB來(lái)表示,PCB中包含了進(jìn)程相關(guān)的信息。比如,當(dāng)某一進(jìn)程進(jìn)行到一定的程度時(shí),利用IRQ中斷將當(dāng)前進(jìn)程中斷,保存需要保存的寄存器的值之后,切換到另一進(jìn)程中執(zhí)行。

5 結(jié)束語(yǔ)
---S3C4510B的異常中斷機(jī)制較為復(fù)雜,但也正是因?yàn)槠鋸?fù)雜的機(jī)制,使我們?cè)陂_(kāi)發(fā)的過(guò)程中有了更靈活的選擇。用好了異常中斷,不僅可以實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)響應(yīng),而且對(duì)于提高系統(tǒng)效率和提升整體性能方面都有著很大的幫助。希望本文能夠?qū)3C4510B系統(tǒng)的開(kāi)發(fā)者有所幫助。

參考文獻(xiàn)
1 杜春雷.ARM體系結(jié)構(gòu)與編程. 北京:清華大學(xué)出版社
2 馬忠梅,馬廣云等.ARM嵌入式處理器結(jié)構(gòu)與應(yīng)用基礎(chǔ). 北京:北京航空航天大學(xué)出版社,2002.6
3 S3c4510b Data Sheet. SAMSUNG.1999.3
4 ARM Limited. Developer suit(Version 1.1), Assembler Guide.ARM DUI 0068A,2000

  • 上一篇: 使用紅外溫度表進(jìn)行電氣檢修和預(yù)測(cè)/預(yù)防性維護(hù)
  • 下一篇: 《通信局(站)電源、空調(diào)及環(huán)境集中監(jiān)控管理系統(tǒng)》 標(biāo)準(zhǔn)簡(jiǎn)介
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1