關于異常處理,分為三部分:
1. ARM異常和模式:core處理異常時的操作,幾種模式介紹。2. Vector table:3. 異常優(yōu)先級4. lr偏移:幾種異常如何返回
異常和中斷處理簡介
在嵌入式系統(tǒng)中異常處理是核心之一。高效的處理能夠極大的提升系統(tǒng)的性能。ARM處理器一共有7種可以暫停指令的執(zhí)行序列的異常。主要分為三個部分:
1. Exception handling2. Interrupts3. Interrupt handling schemes今天我們主要介紹第一部分
Exception Handling
1.ARM Processor Exceptions And Modes
任何一種中斷模式都可以通過手動的修改cpsr的值來進入。但是User和System模式是僅有的2個不能由相應中斷進入的模式,換句話說,我們必須要通過手動修改cpsr才能進入。
當一個異常產(chǎn)生的時候,core會自動進行如下4步:1. saves the cpsr to the spsr of the exception mode2. saves the pc to the lr of the exception mode3. sets the cpsr to the exception mode4. sets the pc to the address of the exception handler
需要注意的是,當異常產(chǎn)生的時候,ARM處理器總是會切換到ARM狀態(tài)。
2.Vector Table
handler定位在相應內存位置中,如下圖的IRQ,FIQ
0x00000018: 0xe59ffa38 IRQ ; ldr pc, [pc, #irq]0x0000001c: 0xe59ffa38 FIQ ; ldr pc, [pc, #fiq]
3.Exception Priorities
4.Link Register Offset
如下三種從IRQ和FIQ異常處理返回的例子
例1:
handler
...
SUBS pc, r14, #4 ;pc = r14 -4
因為SUB后的S和pc作為目標寄存器,cpsr的值會自動從spsr中恢復出來
例2:
handler
SUB r14, r14, #4 ;r14 -= 4
...
...
MOVS pc, r14
r14 = r14 -4, pc = r14 , cpsr =spsr(因為S)
例3:
handler
SUB r14, r14, #4 ; r14 = r14 - 4
STMFD r13!, {r0-r3, r14} ;store context
...
LDMFD r13!, {r0-r3, r14}^ ;return
STMFD,LDMFD 分別提供了pop/push的功能。STMFD sp!, {r0-r3, r14}就是依次將r14, r3, r2, r1放入棧中。LDMFD r13!, {r0-r3, r14}^則依次反向取出。^這個符號,則強制cpsr從spsr中恢復出來。
-
ARM
+關注
關注
134文章
9097瀏覽量
367607 -
嵌入式系統(tǒng)
+關注
關注
41文章
3593瀏覽量
129482 -
中斷處理
+關注
關注
0文章
94瀏覽量
10976
原文標題:嵌入式ARM系統(tǒng)異常和中斷處理知識總結
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論