arm中断保护和恢复_ARM异常和中断的总结

-----------------------------------------------------------------------------------------------------------------------------------

ARM 920T     S3C2440A

-----------------------------------------------------------------------------------------------------------------------------------

异常  异常类型

7种,分别是RST,UND,SWI,PRE_ABT,DATA_ABT,IRQ,FIQ

异常模式

5种,分别是SVC,UND,ABT,IRQ,FIQ

异常触发

SWI指令,SWI 0x4

异常响应

硬件做4件事情

1 保存 PC 到 LR_exp

2 保存 CPSR 到 SPSR_exp

3 修改 CPSR 到 exp

4 修改 PC 到 exp->0x??

异常向量表

从 0 地址开始

一共8个表项,其中0x14地方保留

每个表项是 一条跳转指令

B handler  (0xEAxxxxxx)

ldr pc, =...

保存现场

压栈保存,stmfd sp!, {r0-r12, lr}

异常处理

通常用 C 语言实现,通过 r0, r1, r2, r3 传参

恢复现场

出栈保存,ldmfd sp!, {r0-r12, lr}

异常返回

要点:地址和模式的返回必须同时完成

movs pc, lr

ldmfd sp!, {r0-r12, pc}^

系统调用的实现

用汇编SWI,通过 mov r0, r1, r2

用C实现SWI, int __swi(0x4)  syscall(int,...);

--------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------

中断      中断源

使能 enable

触发方式 trigger method

中断控制器

屏蔽位 mask

悬挂位 pending

模式选择 IRQ/FIQ

ARM内核

IRQ禁止位 CPSR I-bit

中断的初始化流程

设置好 0x18 处的跳转指令 b irq_handler

设置 IRQ 模式下的栈指针 sp

设置 SVC 模式下的栈指针 sp

初始化中断源 GPIO

设置 GPF0 管脚的功能复用模式为 EINT0

设置 EINT0 功能触发方式为 Falling Edge Trigger

初始化中断控制器 Interrupt Controller

设置 INTMSK 屏蔽位 打开unmask

设置 INTMOD 模式为 触发IRQ异常

清除 INTPND, SRCPND 已有的bit

设置CPSR的I-bit ,清除禁止位

汇编语言,用 MSR 特权指令

满足中断触发条件,制造出一个下降沿

中断处理

清除 Pending Bit 悬挂位

1 先清除,再处理(为了防止丢失在处理过程中再来的同源中断)

2 先清除SRCPND,再清除INTPND(否则就会重复一次中断,来2次)

3 写1清0,写0则无效 PDN = 1<<0

中断返回 (IRQ&FIQ)

subs pc, lr, #4

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值