新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM內核的中斷技術

        ARM內核的中斷技術

        作者: 時間:2012-09-26 來源:網絡 收藏

        3 中斷處理程序的編寫
        (1)軟件中斷處理程序的編寫
        軟件中斷指令的格式如圖1所示。低24位立即數為軟件中斷號。在中斷處理程序中,必須首先得到軟件中斷號,然后根據中斷號執行不同代碼。以下的中斷處理程序,在軟件中斷號為1時,將端口A的0號引腳置“1”。

        STMFD sp!,{r0-r12,lr} //保存各工作寄存器
        LDR r0,{lr,#-4} //得到該軟件中斷指令
        BIC r0,r0,#0xff000000 //從中取出中斷號
        ADR r2,SWIJumpTable //r2指向代碼入口表
        LDR pc,[r2,r0,LSL #2] //把r0中的值乘4后加到r2。將//程序計數器指向中斷號對應的代碼入口地址
        SWIJumpTable //代碼入口表
        DCD SWInum0
        DCD SWInum1
        ……
        SWInum0 //中斷號為0時的處理代碼(略)
        SWInum1 //中斷號為1時的處理代碼
        MOV r0,#0x80000000 //r0指向端口A
        STRB r0,#0x01 //A口0腳置“1”
        B EndofSWI //跳轉
        EndofSWI
        LDMFD sp! {r0-r12,pc} //恢復各寄存器,返回原程序
        (2)常規中斷處理程序的編寫
        為快速執行,常規中斷處理程序一般用匯編指令編寫。在編寫可重入常規中斷處理程序(運行時仍可響應常規中斷)時,必須先把鏈接寄存器和程序用到的工作寄存器入棧,然后才能開放中斷;各寄存器出棧前,必須先關閉中斷。這樣可防止因寄存器崩潰而無法返回的情況發生。下文介紹了一個與中控制器相配置的可重入的常規中斷處理程序。當若干中斷源同時有效時,中斷控制器(基址為IntBase)把16個中斷源中優先級最高的一個存入中斷寄存器(偏移地址為IntLevel)中,并發出硬件中斷信號。
        SUB lr,lr,#4 //得至并保存返回地址
        STMFD sp!,{lr}
        MRS r14,SPSR //把SPSR和sl2入棧
        STMFD sp!,{r12,r14}
        MOV r12,#IntBase
        LDR r12,[r12,#IntLevel] //將最高優先級號存入r12
        MRS r14,CPSR. //開中斷
        BIC r14,r14,#0x80
        MSR CPSR_c,r14
        LDR PC,[PC,r12,LSL #2] //將pc指向該優先級號對應的處理代碼入口
        NOP //補位
        DCD Priority0Handler //代碼入口表
        DCD Priority 1 Handler
        DCD Priority 2 Handler
        ……
        Priority0Handler //0優先級中斷處理代碼
        STMFD sp!,{r0-r11} //保存工作寄存器
        ……(略) //具體代碼
        LDMFD sp!,{r0-r11} //恢復工作寄存器
        MRS r12,CPSR //關中斷
        ORR r12,r12,#0x80
        MSR CPSR_c,r12
        LDMFD sp!,{r12,r14} //恢復r12
        MSR SPSR_csxf,r14 //恢復備用程序狀態寄存器(SPSR)
        LDMFD sp!,{pc}^ //返回原程序
        Priority 1 Handler //優先級中斷處理代碼(略)
        (3)快中斷處理程序的編寫
        為保證高速處理,快中斷處理程序必須要用匯編語言編寫,而且必須是非重入的。一般快中斷處理程序主要是些數據存取指令,就不具體介紹了。
        結束語
        是處理器和系統芯片開發的重要技術。快速、高效的中斷處理程序是實時多任務系統設計成功的關鍵。


        上一頁 1 2 下一頁

        關鍵詞: ARM內核 中斷技術

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宝山区| 新余市| 安远县| 六盘水市| 英超| 康定县| 白水县| 太康县| 襄垣县| 台州市| 颍上县| 渝中区| 安龙县| 沙田区| 和田县| 阿勒泰市| 独山县| 石棉县| 五莲县| 吉安县| 太仓市| 阳原县| 沙雅县| 中山市| 闸北区| 资源县| 扎兰屯市| 和政县| 茂名市| 石河子市| 修文县| 武川县| 恩平市| 贡嘎县| 焉耆| 弋阳县| 扶绥县| 云浮市| 新田县| 临洮县| 望谟县|