新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM中的異常和中斷

        ARM中的異常和中斷

        作者: 時間:2016-11-09 來源:網絡 收藏
        ARM處理器中主要有7個異常(2個中斷異常):


        1、復位異常;在以ARM為核的單片機中,常把下列事件作為引起復位的原因。

        • 上電復位:在上電后,復位使內部達到預定的狀態,特別是程序跳到初始入口;

        •復位引腳上的復位脈沖:這是由外部其他控制信號引起的;

        • 對系統電源檢測發現過壓或欠壓;

        • 時鐘異常復位。

        ARM處理器復位后,處理器硬件將進行以下操作:

        • 強制進入管理模式;

        • 強制進入ARM狀態;

        • 跳轉到絕對地址PC=0x00000000處執行;

        • 禁止IRQ中斷和FIQ中斷。

        復位后,程序狀態寄存器如下:

        本文引用地址:http://www.104case.com/article/201611/317585.htm
        ......
        I
        F
        T
        M4
        M3
        M2
        M1
        M0
        1
        1
        0
        1
        0
        0
        1
        1

        上電復位后,進入管理模式,執行操作系統程序,一般用做對系統初始化,例如開中斷等;然后切換到用戶模式,開始執行正常的用戶程序。

        切換到用戶模式可使用下列程序:

        MRS R0,CPSR ;讀狀態寄存器
        BIC R0,R0,#03;把末兩位清0
        MSR CPRS_c,R0;把修改后的值加載給狀態寄存器,切換結束
        ......;用戶程序

        2、未定義指令異常;由于ARM使用32位代碼,包含的信息量很大,可達2的31方(4G)。ARM指令集不能用盡所有代碼。當ARM處理器遇到無法譯碼的指令時就會發

        生未定義指令異常。進入中斷處理程序。

        ARM的未定義指令異常有以下兩種情況:

        (1)遇到一條無法執行的指令,此指令沒有定義;

        (2)執行一條對協處理器的操作指令,在正常情況下,協處理器應該應答,但協處理器沒有應答。

        未定義異常中斷時,狀態寄存器中的F位不變。使用下列指令退出異常中斷,返回原程序 。

        • 把下一條指令的地址拷貝給LR;

        • 把程序狀態寄存器CPSR拷貝給SPSR_und;

        • 強制進入未定義模式;

        • 強制進入到ARM模式;

        • 跳轉到絕對地址PC=0x00000004處執行;

        • 禁止IRQ中斷。

        進入中斷后,程序狀態寄存器如下:

        ......
        I
        F
        T
        M4
        M3
        M2
        M1
        M0
        1
        x
        0
        1
        1
        0
        1
        1

        MOVS PC,R14.

        3、軟件中斷異常;是由指令SWI引起的。程序在執行這一指令后,進入異常中斷。處理器響應中斷,硬件執行如下的操作。

        • 把下一條指令的地址拷貝給LR;

        • 把程序狀態寄存器CPSR拷貝給SPSR_svc;

        • 強制進入管理模式;

        • 強制進入到ARM狀態;

        • 跳轉到絕對地址PC=0x00000008處執行;

        • 禁止IRQ中斷。

        進入中斷后的程序狀態寄存器如下:

        ......
        I
        F
        T
        M4
        M3
        M2
        M1
        M0
        1
        x
        0
        1
        0
        0
        1
        1

        軟件中斷處理程序完成后,使用下列指令返回到原中斷處:MOVS PC,R14.

        4、預取指中止異常;由程序存儲器引起的中止異常叫做預取指中止異常;由數據存儲器引起的中止異常叫做數據中止異常。由于ARM的指令是3級流水線結構,讀

        指令周期是提前進行的,因此把讀取指令的過程一般稱預取指。如果在取得指令的同時程序存儲器發出中止信號,則ARM處理器把這一條指令標記位無效,然后等待執

        行。有兩種可能如下:

        • 當執行這條指令前程序發生跳轉,則這條無效指令不引起異常中斷;

        • 當執行到這條指令時,處理器會發生預取指中止異常,引起中斷。

        當記進入預取指異常中斷時,處理器硬件響應中斷,執行以下的操作:

        • 把中斷時PC的地址拷貝給LR;

        • 把程序狀態寄存器CPSR拷貝給SPSR_abt;

        • 強制進入中止異常模式;

        • 強制進入到ARM狀態;

        • 跳轉到絕對地址PC=0x0000000C處執行;

        • 禁止IRQ中斷。

        進入中斷后,程序狀態寄存器如下:

        ......
        I
        F
        T
        M4
        M3
        M2
        M1
        M0
        1
        x
        0
        1
        0
        1
        1
        1

        預取指中止異常中斷返回時,應該執行下列指令:SUBS PC,R14,#4.

        5、數據中止異常;ARM處理器訪問數據存儲器時,在讀取數據的同時數據存儲器發出了中止信號,引起數據中止異常。

        數據中止異常中斷服務程序返回時,使用下列指令:

        SUBS PC,R14,#8

        上述指令是返回到中斷時所執行的指令,目的是再一次從數據存儲器中讀取數據。如果不再一次讀取數據,則執行下一條指令,此時使用下列指令返回:

        SUBS PC,R14,#4

        • 把中斷時的PC的地址拷貝給LR;

        • 把程序狀態寄存器CPSR拷貝給SPSR_abt;

        • 強制進入中止異常模式;

        •強制進入到ARM狀態;

        • 跳轉到絕對地址PC=0x00000010處執行;

        • 禁止IRQ中斷。

        進入中斷后,程序狀態寄存器如下:

        ......
        I
        F
        T
        M4
        M3
        M2
        M1
        M0
        1
        x
        0
        1
        0
        1
        1
        1

        6、中斷請求(IRQ)異常;例如:定時器中斷、串行口通訊中斷、外部信號中斷和A/D處理中斷等。IRQ中斷是可屏蔽的。在狀態寄存器中的I位就是IRQ的屏蔽位

        。當I=1時。則屏蔽IRQ中斷,當I=0時,則允許中斷。處理器復位后置I為1,關閉中斷。

        當發生IRQ中斷時,處理器硬件響應中斷,執行下列操作:

        • 把中斷時的PC的地址值拷貝給LR;

        • 把程序狀態寄存器CPSR拷貝給SPSR_irq;

        • 強制進入IRQ異常模式;

        •強制進入到ARM狀態;

        • 跳轉到絕對地址PC=0x00000018處執行;

        • 禁止IRQ中斷。

        進入中斷后,程序狀態寄存器如下:

        ......
        I
        F
        T
        M4
        M3
        M2
        M1
        M0
        1
        x
        0
        1
        0
        0
        1
        0

        完成中斷處理后,程序執行下列返回原中斷處:SUBS PC.R14,#4.

        7、快速中斷(FIQ)請求異常;FIQ快速中斷是可屏蔽的。在狀態寄存器中的F位就是FIQ的屏蔽位。當F=1時。則屏蔽FIQ中斷,當F=0時,則允許中斷。處理器復

        位后置F為1,關閉中斷。

        當發生IRQ中斷時,處理器硬件響應中斷,執行下列操作:

        • 把中斷時的PC的地址值拷貝給LR;

        • 把程序狀態寄存器CPSR拷貝給SPSR_fiq;

        • 強制進入FIQ異常模式;

        •強制進入到ARM狀態;

        • 跳轉到絕對地址PC=0x0000001C處執行;

        • 禁止FIQ中斷。

        進入中斷后,程序狀態寄存器如下:

        ......
        I
        F
        T
        M4
        M3
        M2
        M1
        M0
        1
        x
        0
        1
        0
        0
        0
        1

        完成中斷處理后,程序執行下列返回原中斷處:SUBS PC.R14,#4




        關鍵詞: ARM異常中

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 沅陵县| 包头市| 嘉义县| 开平市| 都江堰市| 桑植县| 凤阳县| 南漳县| 玉龙| 东阳市| 石棉县| 建德市| 汉寿县| 巍山| 顺义区| 东山县| 邵阳市| 米脂县| 城固县| 日喀则市| 洛南县| 清苑县| 天气| 聂拉木县| 兴业县| 北海市| 常州市| 平罗县| 连城县| 万荣县| 永川市| 南陵县| 萨嘎县| 肥东县| 忻州市| 安远县| 耒阳市| 华蓥市| 伽师县| 桃园县| 榆树市|