ARM处理器异常与中断处理 学习总结

今天学习《ARM System Developer's Guide: Designing and Optimizing System Software》第9章 异常与中断处理,总结一下:

1. 异常处理

Q1. 异常和中断嘛关系啊?

       中断时异常的一种,中断两种:IRQ, FIQ。异常好多种呢?reset,data abort, FIQ,IRQ,prefetch abort, SWI, undefined 。ARM标准向量表中列出了以下异常:   

exception      mode     offset of vector table
  reset           SVC               +0x00
 undefined    UND               +0x04
  SWI             SVC               +0x08
prefetch abort     ABT          +0x0c
data abort           ABT         +0x10
undefined             -             +0x14
IRQ/FIQ             IRQ/FIQ     +0x18/0x1c


通常说的异常主要来自cpu内部,abort,reset等; 中断主要来自外设

Q2. 怎么进入异常?

       两种:改cpsr 和 发生相应异常。其中USER mode 和 system mode只能通过该cpsr进入相应mode。上面的表都没有这两种mode。


reset handler:主要配置cpsr寄存器(关中断),因为这时候interrupt handler还没有初始化好;设置SVC mode.

reset:
	/*
	 * set the cpu to SVC32 mode
	 */
	mrs	r0, cpsr
	bic	r0, r0, #0x3f
	orr	r0, r0, #0xd3
	msr	cpsr, r0

Q3.异常优先级

    除了简单的reset,data abort, FIQ,IRQ,prefetch abort, SWI, undefined 依次优先级下降外。

   data abort 发生在MMU或UMC指示访问了无效的存储器地址,或当前代码没有访问权限。data abort的handler里没有禁用FIQ,在data abort的异常处理程序中,可以发生FIQ,当FIQ完成后,控制权交给data abort handler.

   FIQ 中断处理时,禁 FIQ和IRQ,所以所有的外部中断都进不来。

   IRQ : 只有当没有FIQ 和data abort 的时候,IRQ才能进来,然后关IRQ中断

    prefech abort: 在流水线中,如果某指令的“执行”阶段没有更高优先级的异常出现,保持FIQ不变(注意是不变),禁止IRQ。如果FIQ enable,并且发生了FIQ,可以了在处prefech abort handler的时候得到响应。

2. 中断

1))分配中断: 系统design哪些硬件可产生哪种中断,可以通过硬件或软件实现。

2)  IRQ与FIQ异常 会使处理器硬件经过以下一个标准流程(假设中断未被屏蔽)

     a. 处理器切换到一个特定的mode,表明产生了中断;

     b. 前一个mode的cpsr保存到新mode的spsr

     c. pc被保存到新的中断mode的lr

     d. 关中断 - 更改cpsr中的IRQ 或者FIQ和IRQ都禁止。中断请求是允许还是禁止,只有在MSR指令已经完成了流水线的“执行”阶段后才确定,理解这一点很重要!在MSR指令完成前,中断仍可能发生或者被屏蔽。

     e. 处理器跳转到响应向量表的入口


IRQ mode堆栈必须在中断使能前设置好-通常是系统初始化代码中(reset),思考为什么FIQ不用呢?

r13是堆栈寄存器,要在系统初始化的时候,设置好各个异常的堆栈。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值