1、所有编程为边沿触发的中断源(包括源0中的FIQ)可通过写AIC_ISCR与AIC_ICCR寄存器来
设置与清零。
2、当读AIC_IVR( 中断向量寄存器) 时,AIC 自动清除当前中断。只有当该操作影响当前中断时,AIC才会检测该中断源。自动清除降低中断服务程序入口代码读AIC_IVR 的请求操作。
3、当读AIC_FVR 时执行自动清除中断源0。
4、高级中断控制器(AIC) 用户接口的基地址 AIC映射到地址0xFFFF F000上。共有4-K字节的地址空间。
5、一个8级优先级控制器驱动处理器nIRQ线,由出现在中断源1到31的中断条件决定(除编程为快速强制的)。
每个中断源通过对相应的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写入后可以重新加载原来的中断服务。