新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM 中斷處理過程

        ARM 中斷處理過程

        作者: 時間:2016-11-09 來源:網絡 收藏
        1.寄存器R16用作CPSR(Current Program Status Register,當前程序狀態寄存器),CPSR可在任何運行模式下被訪問,它包括條件標志位、中斷禁止位、當前處理器模式標志位,以及其他一些相關的控制和狀態位。
        每一種運行模式下又都有一個專用的物理狀態寄存器,稱為SPSR(Saved Program Status Register,備份的程序狀態寄存器),當異常發生時,SPSR用于保存CPSR的當前值,從異常退出時則可由SPSR來恢復CPSR。
        由于用戶模式和系統模式不屬于異常模式,他們沒有SPSR,當在這兩種模式下訪問SPSR,結果是未知的
        當中斷產生的時候,把CPSR保存在SPSR是自動完成的。

        對異常的響應

        當一個異常出現以后,ARM微處理器會執行以下幾步操作:(自動處理的)
        1、將下一條指令的地址存入相應連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執行。若異常是從ARM狀態進入,LR寄存器中保存的是下一條指令的地址(當前PC+4或PC+8,與異常的類型有關);若異常是從Thumb狀態進入,則在LR寄存器中保存當前PC的偏移量,這樣,異常處理程序就不需要確定異常是從何種狀態進入的。例如:在軟件中斷異常SWI,指令MOV PC,R14_svc總是返回到下一條指令,不管SWI是在ARM狀態執行,還是在Thumb狀態執行。
        2、將CPSR復制到相應的SPSR中。
        3、根據異常類型,強制設置CPSR的運行模式位。
        4、強制PC從相關的異常向量地址取下一條指令執行,從而跳轉到相應的異常處理程序處。
        還可以設置中斷禁止位,以禁止中斷發生。
        如果異常發生時,處理器處于Thumb狀態,則當異常向量地址加載入PC時,處理器自動切換到ARM狀態

        從異常返回(手動處理的)

        異常處理完畢之后,ARM微處理器會執行以下幾步操作從異常返回:
        1、將連接寄存器LR的值減去相應的偏移量后送到PC中。
        2、將SPSR復制回CPSR中。
        3、若在進入異常處理時設置了中斷禁止位,要在此清除。
        可以認為應用程序總是從復位異常處理程序開始執行的,因此復位異常處理程序不需要返回。



        幾種CPU工作模式


        用戶模式(User,usr)正常程序執行的模式
        快速中斷模式(FIQ,fiq)用于高速數據傳輸和通道處理
        外部中斷模式(IRQ,irq)用戶通常的中斷使用
        特權模式(Supervisor,sve)供操作系統使用的一種保護模式
        數據訪問中止模式(Abort,abt)用于虛擬存儲及存儲保護
        未定義指令中止模式(Undefin- ed,und)用于支持通過軟件仿真硬件的協處理器
        系統模式(System,sys)用于運行特權級的操作系統任務


        除用戶模式外都是特權模式(任意地進行處理器模式的切換)。。
        除用戶模式和系統模式外都是異常模式。

        對不同的中斷模式都有獨立的堆棧和獨立的堆棧指針(SP)和(LR)


        從SWI和Undef異常返回時使用
        movs pc,LR

        從FIQ,IRQ和預取終止返回時使用
        SUBS PC, LR, #4

        從數據異常返回時使用
        SUBS PC, LR, #8

        在使用上述指令異常返回時,如果LR之前被壓棧的話使用LDM
        LDMFD SP! {PC}^


        關鍵詞: ARM中斷處

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 小金县| 开化县| 铜山县| 南溪县| 繁峙县| 彭州市| 漳浦县| 鄂托克前旗| 陇南市| 阿勒泰市| 琼结县| 卢氏县| 安宁市| 保山市| 会宁县| 德清县| 来凤县| 开阳县| 平果县| 蕲春县| 白山市| 航空| 巫山县| 池州市| 阜宁县| 连山| 宁波市| 孝义市| 龙陵县| 宁晋县| 安陆市| 娱乐| 崇义县| 富顺县| 岫岩| 即墨市| 越西县| 江门市| 潮州市| 林芝县| 贺兰县|