当前位置:首页 > 单片机 > 单片机
[导读] 转载自 http://blog.csdn.net/qqliyunpeng/article/details/48791715一、简介:异常: 是一种突发情况。异常发生后,处理器要进行相应的处理(异常处理),切换到对应的异常工作模式。二、四大步三小步

转载自 http://blog.csdn.net/qqliyunpeng/article/details/48791715


一、简介:

异常:

是一种突发情况。异常发生后,处理器要进行相应的处理(异常处理),切换到对应的异常工作模式。

二、四大步三小步:(异常处理的硬件完成的事项)

(1)拷贝 CPSR 到 SPSR_

(2)设置适当的 CPSR 位:

①改变处理器状态进入 ARM 状态

②改变处理器模式进入相应的异常模式

③设置中断禁止位禁止相应中断 (如果需要)

(3)保存返回地址到 LR_

(4)设置 PC 为相应的异常向量

三、异常处理的返回: --通过异常返回指令1. 要做的:
  • 从 SPSR_恢复CPSR

  • 从LR_恢复PC

2. 返回的具体实现指令:

①第一种方式:指令带 “S” 后缀 + PC做为目的寄存器

movs pc,lr

②第二种方式:如果 lr之前被压栈的话使用LDM +“ ^”

ldmfd sp!,{ pc }^

注意:有些异常处理返回值需要修正lr寄存器

所有从异常返回的情况:

a、从SWI和Undef 异常返回:

movs pc,lr

b、从FIQ, IRQ和 预取异常(Prefect Abort)返回:

SUBS pc,lr,#4 == @ pc = lr -4 和cpsr = spsr 两句

c、从数据异常(Data Abort)返回:

SUBS pc,lr,#8

d、如果LR之前被压栈的话:

MOVS pc,lr

四、异常源处理优先级表:1. 表:

Reset 最高

Data Abort //数据存取异常

FIQ

IRQ

Prefetch Abort

SWI

Undefined instruction

2. 向量表指令:

①异常向量表:放的是不同异常源的处理地址。

②异常向量表指令:

LDR PC, [PC, #+0xFF0] 可寻址±4k

MOV PC, #0x30000000 立即数

B IRQ_handler 可寻址±32M

五、中断控制器:1. 为什么会有中断控制器?:

ARM内核(小核)只有两个中断源,用中断控制器来扩展中断源

2. 中断控制器要实现的功能 / 中断控制器的作用:
  1. 择优----(优先级)

  2. 跳转到对应的中断处理函数

  3. 选择处理该中断源的cpu


六、FIQ 比 IRQ快的原因:
  1. fiq 比 irq 的优先级高

  2. FIQ 向量位于向量表的最末端,异常处理不需要跳转

  3. FIQ 比 IRQ 多5个私有的寄存器(r8-r12),在中断操作时,压栈出栈操作的少。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭