新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種基于ARM處理器的異常處理設計與實現

        一種基于ARM處理器的異常處理設計與實現

        作者: 時間:2016-09-12 來源:網絡 收藏

        時鐘常用于向操作系統通過調度單位,因此中斷狀態會持續直至完成調度處理,處理完成后由時鐘源進行中斷清除,以開始下一周期計時。根據應用需求,時鐘中斷應設置為電平觸發方式,通過APR和ATR寄存器,設置該時鐘為高電平觸發模式。通過ITR寄存器,設置該時鐘為中斷方式。

        本文引用地址:http://www.104case.com/article/201609/304718.htm

        LPC3250處理器可配置多路時鐘源,以μs級時鐘(Millisecond Timer)為例,根據應用需求,在中斷控制器中對該中斷源進行以下主要設置:

        Write(VIC_APR,0x3FF0EFF8);//通過APR寄存器MSTIMER_INT位置1,設置Millisecond Timer中斷為高電位有效

        write(VIC_ATR,0xFEFFFFFF);//通過ATR寄存器MSTIMER_INT位置0,設置Millisecond Timer為電平觸發

        write(VIC_ITR,0x08000000);//通過ITR寄存器MSTIMER_INT位置1,設置Millisecond Timer為中斷方式

        中斷控制器中設置完成后,當發生時鐘中斷時,PC指向入口0x1C處,由于FIQ的向量入口為處理器7種的尾地址,因此無需通過跳轉指令進行處理例程的跳轉。在該入口處對中斷進行以下主要處理:

        sub lr,lr,#4計算返回地址

        stmfd sp!,{ri-rm,lr}保存使用到的寄存器

        mov lr,pc

        ldr pc,=IntHandler

        Ldmfd sp!,{ri-rm,pc}中斷返回,表示將SPSR的值賦給CPSR

        其中IntHandler為中斷處理接口,主要完成為操作系統提供基本的調度周期以及時鐘中斷源中斷狀態的清除。

        完成時鐘中斷源的清除,需設置定時器中ISR(Millisecond Timer Interrupt Status register)寄存器,具體設置如下:

        write(MSTIMER_ISR,0x1);//通過時鐘中ISR寄存器MATCH0_INT位置1,清除時鐘中斷源

        5 功能及性能測試

        在完成設計、編碼及交叉編譯后,對該異常機制在LPC3250目標機上的運行的情況進行功能和性能測試。

        5.1 功能測試

        采用FIQ模式進行定時器中斷處理,操作系統可正確獲取調度周期,表明該中斷處理功能正確。

        5.2 性能測試

        由于采用FIQ中斷模式進行時鐘中斷處理,在異常入口處無需額外的跳轉操作,直接進行時鐘中斷處理。且設計中FIQ只用于時鐘中斷,因此無需從中斷控制器獲取中斷號的獲取,減少了中斷處理指令,進而降低了處理時間。LPC3250平臺處理器主頻為266MHz,處理器時鐘周期為1/266μs,以1/1 000 s為單位向操作系統提供調度周期為例,總線周期誤差累計實驗數據如圖4所示。

        一種基于ARM處理器的異常處理設計與實現

        實驗中,隨著采樣調度周期數的不斷增加,IRQ模式下時鐘計時與理論值的處理器時鐘周期偏差數較FIQ模式明顯偏多,FIQ模式計時比IRQ模式更接近實際計時。結果表明,通過FIQ模式進行的時鐘中斷較IRQ方式更精確。

        6 結束語

        本文提出一種高效的異常處理方案,并以時鐘為例進行了驗證。通過實現驗證,采用上述FIQ中斷模式所設計的時鐘中斷控制程序,較IRQ模式的時鐘中斷方式更為高效,能為系統提供更為精確的調度周期,實驗效果與預期相符。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绩溪县| 安庆市| 石渠县| 河津市| 漾濞| 绍兴市| 遵化市| 新泰市| 安龙县| 且末县| 南皮县| 沙河市| 姚安县| 澄迈县| 潼南县| 亚东县| 诸暨市| 焉耆| 达日县| 黄冈市| 龙井市| 卓尼县| 通许县| 罗城| 宣城市| 阜新市| 内乡县| 灵武市| 正定县| 北海市| 峨眉山市| 深泽县| 杭锦后旗| 榆树市| 金门县| 泗阳县| 溧水县| 海淀区| 隆尧县| 桐梓县| 漯河市|