AT91的中断处理机制

 1、所有编程为沿发的中断源(包括源0中的FIQ)可通过写AIC_ISCRAIC_ICCR存器来

置与清零。

2AIC_IVR( 中断向量存器) 时,AIC 自动除当中断有当操作影响中断时,AIC才会检测中断源。自动低中断服务程序入口代码AIC_IVR 请求操作

3、当读AIC_FVR 时执行自动清除中断源0

4、高级中断控制器(AIC) 用户接口的基地址 AIC映射到地址0xFFFF F000上。共有4-K字节的地址空间。

5、一个8级优先级控制器驱动处理器nIRQ线,由出现在中断源131的中断条件决定(除编程为快速强制的)。

每个中断源通过对相应的AIC_SMR(源模式寄存器)PRIOR域写定义其优先级。等级7优先级最高,等级0优先级最低。

一旦AIC_SMR(源向量寄存器)中的SRCTYPE域定义的中断条件出现,nIRQ线出现。

由于nIRQ出现可能有其它中断源的中断条件出现,优先级控制器决定读AIC_IVR时的当前中断。

中断向量寄存器(AIC_IVR)包含了用户编程的当前中断相关的源向量寄存器(AIC_SMR)。读中断向量寄存器时,源向量寄存器使用中断号码作为索引。当没有当前中断,中断向量寄存器读取存储于AIC_SPU中的值SIQV

SIQV: 伪中断向量寄存器。

用户可在该寄存器中存储伪中断处理程序的地址。当出现未中断时,写入该寄存器的值为AIC_IVR 的返回值,类似的发生伪快速中断时,写入该寄存器的值为AIC_IVR 的返回值。

6、若几个优先级相等的挂起中断源在读AIC_IVR后使能,中断源序号最低的中断先行服务。

只有当一个更高优先级的中断源中断条件出现时,nIRQ线出现。若在中断执行时出现中断条件(或挂起),它将延迟到检测到AIC结束当前服务。(前面的这两话的意思是如果现在有一个优先级比较高的中断正在处理时,出现一个优先级比较低的中断请求,则此时nIRQ线保持不出现nIRQ线在进入中断处理程序之后会被释放的,即在中断处理执行过程中nIRQ是不出现的也即是CPU不理睬该低优先级的中断请求,等检测到优先级比较高的中断已经处理完毕再去相应低优先级的中断请求)

AIC_EOICR写入将退出中断处理,我们也可以根据从AIC_EOICR的读出的值判断一个中断处理是否已经结束。

7、当处理一个优先级比较低的中断服务期间出现一个中断优先级更高的中断,nIRQ线重新出现。若中断在内核级使能,打断当前中断执行,新的中断服务应读取AIC_IVR,但AIC_IVR( 中断向量存器) 时,AIC 自动除当中断,所以在读取AIC_IVR之前,必须把当前中断序号以及其优先级推入内置硬件堆栈,这样才可以保证在高优先级中断服务结束并对AIC_EOICR写入后可以重新加载原来的中断服务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值