新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM S3C2410X系統中斷編程機制的研究與應用

        ARM S3C2410X系統中斷編程機制的研究與應用

        作者: 時間:2007-09-10 來源:網絡 收藏

        要:本文介紹了 的異常響應和返回過程,重點討論了 中采用IRQ響應外設向CPU請求服務的,并用一個實例展示這種
        關鍵詞:;IRQ;中斷

        0 引言

        在嵌入式中外部設備的功能實現主要是靠中斷機制來實現的,即將設備功能程序的實現以中斷服務子程序的形式進行組織。中斷功能可以解決CPU內部運行速度遠遠快于外部總線速度而產生的等待延時問題。因此實現中斷的響應,解析中斷源跳轉和中斷返回等操作成為編程的關鍵。這也是困擾初學者的一個難題。中斷處理的編程實現需要深入了解ARM內核和處理器本身的中斷特征,從而設計一種快速簡便的中斷編程機制。

        1 系統的異常中斷

        S3C2410X是基于ARM920T內核處理器。該系統提供的FIQ和IRQ異常中斷用于外部設備向CPU請求服務,一般情況下都是采用IRQ。S3C2410X系統中通常在存儲區的低端固化了一個32字節的硬件中斷向量表,用來指定各異常中斷及其處理程序的對應關系。

        當一個異常出現后, S3C2410X系統中ARM處理器對異常中斷的響應過程如下:

        (1) 保存處理器當前狀態、中斷屏蔽位以及各條件標志位。將當前程序狀態寄存器CPSR的內容保存到將要執行的異常中斷對應的SPSR寄存器中。

        (2) 設置當前程序狀態寄存器CPSR中相應的位。包括設置CPSR中的位,使處理器進入相應的執行模式;設置CPSR中的位,禁止IRQ中斷,當進入FIQ模式時,禁止FIQ中斷。

        (3) 將寄存器lr_mode設置成返回地址。

        (4) 將程序計數器值(PC),設置成該異常中斷的中斷向量地址,從而跳轉到相應的異常中斷處理程序執行。

        從異常中斷處理程序中返回包括下面兩個基本操作:

        (1) 恢復被中斷的程序的處理器狀態,即將SPSR_mode寄存器內容復制到當前程序狀態寄存器CPSR中。

        (2) 返回到發生異常中斷的指令的下一條指令處繼續執行,即將lr_mode寄存器的內容復制到程序計數器PC中。

        當異常中斷發生時,程序計數器PC所指的位置對于各種不同的異常中斷是不同的,同樣,返回地址對于各種不同的異常中斷也是不同的。例外的是復位異常中斷處理程序不需要返回,因為整個系統是從復位異常中斷處理程序開始執行的。

        2 S3C2410X系統的中斷編程機制

        如前所述,S3C2410X系統一般采用IRQ異常中斷來幫助外部設備向CPU請求服務。S3C2410X系統可接受32個異常中斷源,同時也構成了一個IRQ中斷向量表。在該表中可以放置自己編寫的對應中斷源的中斷服務程序入口地址。S3C2410X系統的中斷編程就是基于這張IRQ中斷向量表來進行。具體步驟是:

        (1)在S3C2410X系統初始化程序中放置IRQ異常中斷解析程序的入口地址。通過ARM兩條微指令來實現:

        LDR PC, IRQ_Addr

        IRQ_Addr DCD INT_IRQ

        上面代碼中的INT_IRQ是該系統中IRQ解析程序的入口地址。只要有一個IRQ中斷請求,系統就會自動的跳轉到IRQ異常中斷解析程序。

        (2)編寫IRQ中斷解析程序。中斷服務程序通常是由高級語言編寫,不好控制固定地址開始的跳轉流程。然而ARM處理器響應中斷的時候,總是從固定的地址開始的。為了使得上層程序與硬件中斷跳轉聯系起來,需要編寫一段中間的服務程序來進行連接。這樣的服務程序常被稱作中斷解析程序,通常用ARM匯編指令編寫。IRQ中斷解析程序要做的工作主要是:將相關工作寄存器中的數據壓棧保存;查寄存器INTOFFSET找出對應的中斷源,根據IRQ中斷向量表將該中斷源對應的中斷服務程序的入口地址裝入程序計數器PC中執行。

        (3)編寫對應中斷源的中斷服務程序。流程圖如圖1所示:

        圖1 中斷服務程序流程圖

        其中,中斷現場保存的工作是:切換到System模式,關閉中斷,將中斷返回地址壓棧。中斷返回的工作是:返回到IRQ模式,開中斷,從堆棧中取出返回地址和中斷之前相關工作寄存器中的內容,重新執行主程序。中斷服務的工作是具體實現外部設備向CPU請求的中斷服務。

        基于上述三個步驟,總結出S3C2410X系統中斷編程機制圖如圖2所示:

        圖2 S3C2410X系統中斷編程機制圖

        3 S3C2410X系統中斷編程機制的應用實例

        圖2所示的中斷編程機制可以很好的實現S3C2410X系統中任何外設向CPU請求的服務。下面通過一個實例討論這種中斷編程機制:S3C2410X系統中提供了五個16位定時器Timer0、Timer1、Timer2、Timer3、Timer4。現利用定時器Timer0計數,計數完畢后產生中斷,向CPU請求的中斷服務是使系統中的二極管Led4點亮一段時間再熄滅。

        依據上述要求,按照S3C2410X系統中斷編程架構圖編寫了系統初始化程序(startup.s)、應用主程序(main.c)、IRQ中斷解析程序(INT.S)、定時器中斷服務程序(INT_Timer0_shell.s)、點亮二極管Led4程序(Timer0_LISR.c)。這五個程序的流程圖如圖3所示:

        圖3 實例程序流程圖

        值得注意的是在IRQ中斷解析程序INT.s中要定義IRQ32個中斷源向量表。同時將定時器中斷服務程序INT_Timer0_shell.s的入口地址加到向量表中。依據這個IRQ中斷向量表,IRQ解析程序可以找到定時器0的中斷服務程序的物理地址。代碼如下所示:

        INT_IRQ_Vectors ;// IRQ32個中斷源向量表

        DCD 0 ;// Vector 00

        DCD 0 ;// Vector 01

        DCD 0 ;// Vector 02

        ……

        DCD INT_Timer0_Shell ;// Timer0是10號中斷,INT_Timer0_Shell為定時器0

        的中斷服務程序入口地址

        ………

        DCD 0 ;// Vector 31

        從此例中可以看出,這種中斷編程機制不但可以滿足外設所需要的服務,而且結構流程非常的清晰簡便。

        4 結束語

        本文作者創新點:介紹的中斷編程機制是嵌入式編程中實用的方法,其原理是通用的。當然,在實際開發中,需要根據系統處理器ARM內核的中斷特征、處理器自身的中斷控制器特點和實際要求具體細化流程圖中的各個步驟和改寫參考代碼。

        參考文獻:

        [1] 杜春雷 . ARM體系結構與編程[M].清華大學出版社 ,2003
        [2] 龐繼勇,唐婷 .ARM處理器中斷處理的編程實現[J] .電子產品世界 ,2005,2
        [3] 旋極科技 .嵌入式實驗教程[M] .深圳旋極歷通科技有限公司 ,2005
        [4] 王波 .ARM的三種中斷調試方法的探討. 微計算機信息,2006年第1-2期,P130-131、P269
        [5] 季振華 . 基于ARM7TDMI內核的S3C44B0異常處理分析 .微計算機信息,2006年第2-2期,P137-139



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 奉节县| 广饶县| 九龙城区| 阿鲁科尔沁旗| 遂平县| 永和县| 平武县| 陵川县| 霍山县| 玛沁县| 太原市| 凌云县| 平乐县| 丘北县| 富宁县| 巫山县| 湖南省| 巧家县| 吐鲁番市| 板桥市| 宁夏| 吉首市| 仙游县| 额济纳旗| 高碑店市| 丹凤县| 会同县| 广宗县| 昌宁县| 乌拉特后旗| 阳高县| 庆云县| 吴旗县| 韶山市| 宜君县| 专栏| 秦皇岛市| 松阳县| 陆川县| 榆林市| 麦盖提县|