arm處理器異常處理-swi

來源:互聯網
上載者:User

本文轉載自:http://blog.csdn.net/lizhiguo0532/article/details/5922639

非常感謝原作者,受益匪淺!

ARM處理器共有7中運行模式:
                                      使用者模式(usr)                     --  正常程式執行模式

            |--             |--     快速中斷模式(fiq)                 --  用於高速資料轉送和通道處理

    特     |        異    |        外部中斷模式(irq)                 --  用於通常的中斷處理
    權  --|        常  --|        管理員模式(svc)                   --  供作業系統使用的一種保護模式
    模     |        模    |        資料訪問中止模式(abt)          --  用於虛擬儲存及儲存保護
    式     |        式    |--     未定義指令中止模式(und)       --  用於支援通過軟體模擬硬體的副處理器
            |--                     系統模式(sys)                       --  用於運行特權級的作業系統任務
            
特權模式:fiq、irq、svc、abt、und、sys -- 程式可以訪問所有的系統資源,也可以任意切換處理器模式
異常模式:fiq、irq、svc、abt、und

ARM異常中斷種類及優先順序:
            優先順序                 異常中斷名稱
                高                   複位(reset)
                ||                    資料訪問中止(data abort)
                ||                    快速插斷要求(FIQ)
                ||                    外部插斷要求(IRQ)                    
               /||/                  指令預取中止(prefetch abort)
                //                    非強制中斷(SWI)
                低                   未定義指令(undefined instruction)

異常向量表:
            地址                           異常中斷名稱                                         優先順序
                .                                    .    
                .                                    .
                .                                    .
            0x1c                            FIQ                                                         3
            0x18                            IRQ                                                        4
            0x14                            Reserved                                               X
            0x10                            Data Abort                                             2
            0x0c                            Prefetch Abort                                        4
            0x08                            SWI                                                        5
            0x04                            Undefined Instruction                            6
            0x00                            Reset                                                     1
        Vector Table可以位於0x0或者0xFFFF0000處(ARM720T、ARM9、ARM10..)
        優先順序為3的FIQ為什麼放在地址0x1c處呢?當初這麼設計應該是為了更加快速地響應FIQ中斷,也就是說不在0x1c地
        址放跳轉指令,而是直接存放最關鍵的FIQ處理代碼在0x1c開始一段地址地區內。
        
異常進入及返回:
        當異常產生時:
                1. 拷貝當前模式的CPSR值到相應異常模式的SPSR_<mode>,如:CPSR(usr) --> SPSR_svc(svc)。
                2. 設定適當的CPSR位:
                     改變處理器狀態進入ARM狀態
                     改變處理器模式進入相應的異常模式
                     如果需要可以設定中斷禁止位禁止相應中斷
                3. 儲存返回地址(pc-4)到LR_<mode>。
                4. 設定pc為相應的異常向量。
        異常返回時,需要:
                1. 從SPSR_<mode>恢複CPSR。
                2. 從LR_<mode>恢複pc
                (只能在ARM狀態下實現該返回操作)
        異常返回的指令分析:
                * 使用一資料處理指令實現,該指令帶“S”尾碼,同時pc作為目的寄存器
                * 在特權模式下不僅僅要更新pc,而且還要拷貝SPSR到CPSR
                1. 從SWI和Undef異常返回:
                     movs  pc

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.