物联网之ARM体系结构及接口技术三(异常处理)
异常处理
异常种类
• 中断 IRQ FIQ 外部硬件触发
• 软中断 Soft interrupt 系统调用
• 复位 Reset 如手机死机了,按power键
• 未定义指令 Undefined instruction
• 数据异常 Data abort 数据越界
中断异常
ARM 有两级外部中断 FIQ,IRQ.
可是大多数的基于ARM 的系统有 >2个的中断源!
因此需要一个中断控制器
Note: 通常中断处理程序总是应该包含清除中断源的代码。
异常处理 过程
异常 向量表
异常与工作模式关系:
复位, 软中断 --> SVC
Prefetch(预取), Data Abort --> Abort
user system 模式不是异常触发切换的, 是程序员修改CPSR,实现切换的
异常是随机的
软中断程序
.section .text
.global _start
_start:
b reset
ldr pc,_undefined_instruction @突破32M范围的限制
ldr pc,_software_interrupt
ldr pc,_prefetch_abort
ldr pc,_data_abort
ldr pc,_not_used
ldr pc,_irq
ldr pc,_fiq
_undefined_instruction: .word _undefined_instruction
_software_interrupt: .word
softirq_handler
_prefetch_abort: .word _prefetch_abort
_data_abort: .word _data_abort
_not_used: .word _not_used
_irq: .word _irq
_fiq: .word _fiq
softirq_handler:
stmfd sp!, {r0-r12, lr}
ldr r0,[lr,#-4]
bic r0,r0,#0XFF000000
bl swi_do
ldmfd sp!, {r0-r12, pc}^
eset:
mov r0,#0x10
swi 0x01
mov r0,#0x20
swi 0x02
b reset
swi_do:
cmp r0,#0x01
beq num1_do
cmp r0,#0x02
beq num2_do
b swi_do_end
num1_do:
mov r4,#1
num2_do:
mov r4,#1
swi_do_end:
mov pc,lr
.align 4
.data
.word 20*4
stack_top:
.end