ARM中的異常和中斷

2021-05-27 07:03:04 字數 3569 閱讀 5345

arm中的異常和中斷

arm處理器中主要有7個異常(2個中斷異常):

1、復位異常;在以arm為核的微控制器中,常把下列事件作為引起復位的原因。

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

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

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

• 時鐘異常復位。

arm處理器復位後,處理器硬體將進行以下操作:

• 強制進入管理模式;

• 強制進入arm狀態;

• 跳轉到絕對位址pc=0x00000000處執行;

• 禁止irq中斷和fiq中斷。

復位後,程式狀態暫存器如下:        

......if

tm4m3m2

m1m0 11

0100

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

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

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中斷。

進入中斷後,程式狀態暫存器如下:

......if

tm4m3m2

m1m0 1x

0110

11movs pc,r14.

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

• 把下一條指令的位址拷貝給lr;

• 把程式狀態暫存器cpsr拷貝給spsr_svc;

• 強制進入管理模式;

• 強制進入到arm狀態;

• 跳轉到絕對位址pc=0x00000008處執行;

• 禁止irq中斷。

進入中斷後的程式狀態暫存器如下:

......if

tm4m3m2

m1m0 1x

0100

11軟體中斷處理程式完成後,使用下列指令返回到原中斷處:movs pc,r14.

4、預取指中止異常;由程式儲存器引起的中止異常叫做預取指中止異常;由資料儲存器引起的中止異常叫做資料中止異常。由於arm的指令是3級流水線結構,讀

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

行。有兩種可能如下:

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

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

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

• 把中斷時pc的位址拷貝給lr;

• 把程式狀態暫存器cpsr拷貝給spsr_abt;

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

• 強制進入到arm狀態;

• 跳轉到絕對位址pc=0x0000000c處執行;

• 禁止irq中斷。

進入中斷後,程式狀態暫存器如下:

......if

tm4m3m2

m1m0 1x

0101

11預取指中止異常中斷返回時,應該執行下列指令:subs pc,r14,#4.

5、資料中止異常;arm處理器訪問資料儲存器時,在讀取資料的同時資料儲存器發出了中止訊號,引起資料中止異常。

資料中止異常中斷服務程式返回時,使用下列指令:

subs pc,r14,#8

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

subs pc,r14,#4

• 把中斷時的pc的位址拷貝給lr;

• 把程式狀態暫存器cpsr拷貝給spsr_abt;

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

• 強制進入到arm狀態;

• 跳轉到絕對位址pc=0x00000010處執行;

• 禁止irq中斷。

進入中斷後,程式狀態暫存器如下:

......if

tm4m3m2

m1m0 1x

0101

116、中斷請求(irq)異常;例如:定時器中斷、序列口通訊中斷、外部訊號中斷和a/d處理中斷等。irq中斷是可遮蔽的。在狀態暫存器中的i位就是irq的遮蔽位

。當i=1時。則遮蔽irq中斷,當i=0時,則允許中斷。處理器復位後置i為1,關閉中斷。

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

• 把中斷時的pc的位址值拷貝給lr;

• 把程式狀態暫存器cpsr拷貝給spsr_irq;

• 強制進入irq異常模式;

• 強制進入到arm狀態;

• 跳轉到絕對位址pc=0x00000018處執行;

• 禁止irq中斷。

進入中斷後,程式狀態暫存器如下:

......if

tm4m3m2

m1m0 1x

0100

10完成中斷處理後,程式執行下列返回原中斷處: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中斷。

進入中斷後,程式狀態暫存器如下:

......if

tm4m3m2

m1m0 1x

0100

01完成中斷處理後,程式執行下列返回原中斷處:subs pc.r14,#4

ARM中的異常和中斷

arm處理器中主要有7個異常 2個中斷異常 1 復位異常 在以arm為核的微控制器中,常把下列事件作為引起復位的原因。上電復位 在上電後,復位使內部達到預定的狀態,特別是程式跳到初始入口 復位引腳上的復位脈衝 這是由外部其他控制訊號引起的 對系統電源檢測發現過壓或欠壓 時鐘異常復位。arm處理器復位...

ARM異常和中斷

異常優先順序 異常處理流程 中斷處理 異常就是在程式執行過程中 user mode 出現了一些異常情況,而中斷是異常的一種情況.如圖 上圖需要特別注意的就是,如果在程式執行過程中需要進行系統呼叫 程式正常執行在user模式,而核心執行在svc模式,user模式無法直接執行svc模式的指令,因此需要通...

arm中斷保護和恢復 ARM中斷異常處理的返回

舉個小例子,下面是一段arm彙編 0x3000bl add 0x3004mov r0,0 0x3008mov r1,1 0x300cmov r2,2 area test,code,readonly entry start mov r0,1 mov r1,1 bl add mov r0,0 mov r...