嵌入式ARM系統(tǒng)異常和中斷處理知識(shí)總結(jié)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
關(guān)于異常處理,分為三部分:1. ARM異常和模式:core處理異常時(shí)的操作,幾種模式介紹。2. Vector table:3. 異常優(yōu)先級(jí)4. lr偏移:幾種異常如何返回
異常和中斷處理簡(jiǎn)介
在嵌入式系統(tǒng)中異常處理是核心之一。高效的處理能夠極大的提升系統(tǒng)的性能。
ARM處理器一共有7種可以暫停指令的執(zhí)行序列的異常。
主要分為三個(gè)部分:
1. Exception handling
2. Interrupts
3. Interrupt handling schemes
今天我們主要介紹第一部分
Exception Handling
1.ARM Processor Exceptions And Modes
任何一種中斷模式都可以通過(guò)手動(dòng)的修改cpsr的值來(lái)進(jìn)入。但是User和System模式是僅有的2個(gè)不能由相應(yīng)中斷進(jìn)入的模式,換句話(huà)說(shuō),我們必須要通過(guò)手動(dòng)修改cpsr才能進(jìn)入。
當(dāng)一個(gè)異常產(chǎn)生的時(shí)候,core會(huì)自動(dòng)進(jìn)行如下4步:
1. saves the cpsr to the spsr of the exception mode
2. saves the pc to the lr of the exception mode
3. sets the cpsr to the exception mode
4. sets the pc to the address of the exception handler
需要注意的是,當(dāng)異常產(chǎn)生的時(shí)候,ARM處理器總是會(huì)切換到ARM狀態(tài)。
2.Vector Table
handler定位在相應(yīng)內(nèi)存位置中,如下圖的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
因?yàn)镾UB后的S和pc作為目標(biāo)寄存器,cpsr的值會(huì)自動(dòng)從spsr中恢復(fù)出來(lái)
例2:
handler
SUB r14, r14, #4 ;r14 -= 4
...
...
MOVS pc, r14
r14 = r14 -4, pc = r14 , cpsr =spsr(因?yàn)镾)
例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}^則依次反向取出。^ 這個(gè)符號(hào),則強(qiáng)制cpsr從spsr中恢復(fù)出來(lái)。