1. 程式人生 > >ARM中的異常和中斷

ARM中的異常和中斷

        上電覆位後,進入管理模式,執行作業系統程式,一般用做對系統初始化,例如開中斷等;然後切換到使用者模式,開始執行正常的使用者程式。

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

        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