ARM7中断处理过程、状态、嵌套

ARM7中断处理过程、状态、嵌套

1.ARM7提供两种级别的中断, FIQ(Fast Interrupt Request快中断) 一般中断低速反应中断IRQ。

所有的中断请求一旦产生则中断反应会经过三个步骤
a.输入阶段这个逻辑可以根据中断源被实现,需要0-2个时钟周期
b.EIC自身处理 2个时钟周期
c.ARM7的逻辑处理
2.EIC (Enhanced Interrupt Controller)增强型中断控制器EIC硬件处理多路中断,中断优先运算和矢能。
a.32路可屏蔽的中断,映射到ARM 的CPU中断请求
总线;
b.每路16级可编程优先级映射IRQ;
c.硬件支持最大16个中断嵌套;
d.2路可屏蔽的中断通过FIQ中断请求总线;
e.在0x18处的寄存器装载的是最高优先及中断用户自定义的
中断处理地址;
f.16个XTI块外部中断.

3.中断处理过程
1.检查相关中断的请求屏蔽位;
2.比较所有中断请求的优先级,IRQ当前中断是否优先级高于当前存储的中断;
3.自动装载EIC_SIRn[31:16]位用户自定义地址进入EIC_IVR[15:0]中;
4.手动装载用户中断处理高16位地址进入EIC_IVR[31:16];
5.当新产生一个中断则保存先前的中断优先级进入优先栈中;
6.当新的中断被接受则用新的优先级更新当前中断优先级寄存器.

FSM: 有限状态机制
FSM分为两种状态READY和WAIT,这两种状态根据ARM7TDMI的nIRQ总线探测出来,如果全局中断允许位IRQ_EN标志被清除,nIRQ无条件的的检测为高.在reset的时候FSM=READY也就是nIRQ=HIGH,当优先解码确定了一个新的中断,FSM=WAIT,并且nIRQ=LOW。如果要转到就绪状态必须强制EIC_IVR寄存器内容即处理中断服务或者rest EIC单元。读EIC_IVR寄存器改变状态机状态同时释放EICnIRQ总线。
STACK:堆栈
ARM支持15个事件嵌套,嵌套的事件信息均在需要的时候被压入弹出堆栈。事件的信息包括 中断频道EIC_CICR interrupt
 channel,中断优先级EIC_CIPR interrupt priority.当FSM=WAIT即状态机在等待状态也就是解码出一个最高优先中断源时,直接来读取EIC_IVR寄存器会产生内部标志,需要EIC_CICR入栈,当做完入栈工作后才在第二时钟周期读取EIC_IVR进行中断服务,读完后内部标志清除即需要把当前
的EIC_CICR EIC_CIPR给出栈。 然后更新当前中断源和当前中断优先寄存器。当FSM=READY的时候EIC_IVR的访问时候是不产生内部标志来进行嵌套的。在嵌套时当前中断服务完成后必须清除相应标志位(具体看EIC_IEP0介绍)然后处理上一个被压栈的中断。

EIC_ICR 中断控制寄存器
[31:2]保留;
[1:1]: FIQ_EN(R/W):是FIQ允许的标志位置1开启置0关闭
[0:0]: IRQ_EN(R/W): 是IRQ允许的标志位置1开启置0关闭

EIC_CICR 中断频道控制寄存器
[31:5]保留;
[4:0]CIC(R):是当前中断的序号,是第几号中断由中断请求发生时硬件写入;

EIC_CIPR当前中断优先级寄存器

[31:4]保留;

[3:0] CIP(R/W):是当前中断的优先级,在IRQ总线上会自动探测进入的中断请求优先级和当前的优先级的高低。
EIC_IVR 中断矢量寄存器
[31:16]IVR:IRQ用户写入的在程序初始化时,是中断服务的高16位地址;

[15:0]IVR:I在中断请求接受后,从EIC_SIRn[31:16]的自定义服务程序地址拷贝过来

EIC_FIR

[3:2]FIP: 是FIQ的中断频道;

[1:0]FIE: 是FIQ的中断允许标志位.

EIC_SIRn源中断寄存器
[31:16]SIV: 是自定义服务地址偏移

[15:4]保留;

[3:0]优先级.

EIC_IER0中断启动寄存器32位对应配置32路中断的运行位;

EIC_IEP0中断启动寄存器32位对应配置32路中断的中断挂靠位根据IER0中设置同步。
note:只读/写零的寄存器,在退出中断服务后ISR,软件要清除相应的挂靠位,才能保证下次不继续进入这个中断,这个清除操作带来一个中断结束中断,并且保证有已经嵌套的中断正常弹出,顺利执行新的中断。这个中断位要注意不能随便清除如果清除了不是期望的中断位的话,导致嵌套堆栈永不恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值