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介绍)
然后处理上一个被压栈的中止。