ARM中断处理及状态机嵌套实现

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.当新的中断被接受则用新的优先级更新当前中断优先级寄存器
 
EIC_ICR 中断控制寄存器
31-2保留
1. FIQ_EN:RW是FIQ允许的标志位置1开启置0关闭
0.IRQ_EN:RW是IRQ允许的标志位置1开启置0关闭

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

EIC_CIPR当前中断优先级寄存器
31-4保留
3-0 CIP[3:0]:rw是当前中断的优先级,在IRQ总线上会自动探测进入的中断请求优先级
    和当前的优先级的高低。
   
EIC_IVR 中断矢量寄存器
IVR[31-16]:IRQ用户写入的在程序初始化时,是中断服务的高16位地址
IVR[15-0]:I在中断请求接受后,从EIC_SIRn[31-16]的自定义服务程序地址拷贝过来

EIC_FIR
3-2FIP[3:2] 是FIQ的中断频道
1-0FIE[1:0] 是FIQ的中断允许标志位

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


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

EIC_SIRn源中断寄存器
SIV[31-16]是自定义服务地址偏移
15-4保留
3-0优先级 

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

发布了53 篇原创文章 · 获赞 1 · 访问量 20万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章