原文地址:http://xilinx.eetrend.com/article/5087
任何一个嵌入式系统级的设计都离不开中断,对于拥有双cotex-A9的Zynq来说也一样。Zynq的中断设计由ARM与GIC pl390中断控制器组成,
用于接收IOP(I/O peripherals)与PL的信号。如下图所示,CPU中的中断分为PPIs(private peripheral interrupts),
SGIs(software generated interrupts)与SPIs(shared peripheral interrupts)其中,通过写GIC(generic interrupt controller)的寄存器来产生SGIs。
从Xilinx给出的ug585手册中可以清晰的看出GIC与PPIs,SCIs,SPIs的关系。GIC可以管理从PS与PL部分产生的中断,并且对其使能,
优先级等作出设置,与普通ARM相同,所有的中断都会赋予一个中断ID,用作CPU的相应。
中断设置很简单,跟其他的单片机程序一样,主要有以下几部分
1,首先进行GPIO初始化,这个就不需要多说了。
2,其次进行中断的设置,如中断控制,全局中断允许等等,主要用了以下函数
XScuGic_LookupConfig //中断设置查找
XScuGic_CfgInitialize //GIC初始化
XScuGic_SetPriorityTriggerType //设置中断优先级及中断触发方式,笔者在这里有些疑问,手册上面说中断触发方式不可以更改这里为何有这个函数呢,还需要研究一下
XScuGic_Connect //设置中断服务程序入口地址
XScuGic_Enable //GIC允许
XGpio_InterruptGlobalEnable //GPIO全局中断允许
XGpio_InterruptEnable //相应GPIO中断允许
Xil_ExceptionInit// 异常处理函数
Xil_ExceptionRegisterHandler
Xil_ExceptionEnable
3,最后编写中断服务程序,在中断服务程序中需要先禁止中断使能,完成服务程序后再打开。
总结来看,由于SDK提供的库文件使得Zynq中断使用很方便简单,并且中断源很多,加上PS部分与PL部分的配合,使用非常灵活。