arm中断保护和恢复_嵌入式ARM系统异常和中断处理知识总结
關(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è)部分:
點(diǎn)擊這里1小時(shí)徹底掌握中斷 創(chuàng)客學(xué)院帶你搞定異常和中斷處理
1. Exception handling
2. Interrupts
3. Interrupt handling schemes
今天我們主要介紹第一部分
Exception Handling
1.ARM Processor Exceptions And Modes
任何一種中斷模式都可以通過手動(dòng)的修改cpsr的值來進(jìn)入。但是User和System模式是僅有的2個(gè)不能由相應(yīng)中斷進(jìn)入的模式,換句話說,我們必須要通過手動(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ù)出來
例2:
handler
SUB r14, r14, #4 ;r14 -= 4
...
<code>
...
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ù)出來。
總結(jié)
以上是生活随笔為你收集整理的arm中断保护和恢复_嵌入式ARM系统异常和中断处理知识总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海康9800平台linux的sdk,流媒
- 下一篇: matlab 电力系统动态仿真,基于Ma