ZYNQ中断使用入门基础教程

任何一个嵌入式系统级的设计都离不开中断,对于拥有双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的相应。
对于spis来说,其中断源也可以从任意子系统ps中的iop或者pl部分的信号产生。下图为中断控制器的框图,更能够体现出ppis,spis,sgis的关系,中断响应后会从与之对应的cpu接口进行处理。
下面就分别来说说这三种中断,对于sgis来说,每一个cpu核可以通过sgis来响应自己的,其他的或者两个cpu核的中断,通过写icdsgir控制器来控制sgis,icdicfr0是控制sgis优先级及触发条件的寄存器,这是一个只读寄存器,由此我们可以看出sgis的触发条件是上升沿,不可以进行更改。
对于ppis来说,每一个cpu都连接到5个ppi,同样的,icdicfr1为ppis的优先级及触发条件控制寄存器,是只读的,因而ppis的触发条件也不可更改。需要注意到的是,pl部分的快速响应中断fiq(fast interrupt)信号与普通中断irq(interrupt)需要被送往中断控制器中,所以即便icdicfr1规定irq与fiq的响应等级为low level,但是他们的在ps与pl接口的响应等级仍是high。
最后是spis,有多达60种中断类型可以由任一cpu或者pl部分产生,为了响应这么多的中断,我们必须对gic进行编写,但是zynq启动的过程中并没有对gic进行编写,因此我们需要在sdk中对其进行编辑。同样的,这些中断的触发条件也已经被规定了,不能够进行更改。spi的中断太多了,不一一列举,大家可以去ug585中查看这些中断。但是让笔者比较疑惑的是,既然中断的触发类型不能够被更改,为什么sdk的库中会有更改中断触发形式的函数呢。gic是zynq中断的大脑,这些中断远不能达到gic pl39所能控制的极限。
我们以一个简单地中断响应程序来作为例子,了解如何使用zynq的中断,同样的使用xps+sdk来进行设计。
首先我们使用bsb新建工程;
同样的选择zc702,删除所有的外设;
添加两个个gpio外设的ip核,一个外设作为led显示,另一个外设作为中端io,这里记得在中端io的设置中勾选interruput使能,不需要对gpio做其他设置;
下一步要将gpio外设加入中断中,可以看到irq_f2p没有任何连接;
我们将中断io加入irq,单击l to h : no connection,添加中断源;
xps部分就设计完毕了,生成比特流之后导入sdk中,进行软件设计。sdk为我们提供了使用中断的库文件 xscugic.h(system control unit generic interrupt controller),没有查到scu的缩写,姑且认为是系统控制单元的缩写,比较好理解。
中断设置很简单,跟其他的单片机程序一样,主要有以下几部分
首先进行gpio初始化,这个就不需要多说了。
其次进行中断的设置,如中断控制,全局中断允许等等,主要用了以下函数
xscugic_lookupconfig 中断设置查找
xscugic_cfginitialize gic初始化
xscugic_setprioritytriggertype 设置中断优先级及中断触发方式,笔者在这里
有些疑问,手册上面说中断触发方式不可以更改这里为何有这个函数呢,还需要研究一下
xscugic_connect 设置中断服务程序入口地址
xscugic_enable gic允许
xgpio_interruptglobalenable gpio全局中断允许
xgpio_interruptenable 相应gpio中断允许
xil_exceptioninit 异常处理函数
xil_exceptionregisterhandler
xil_exceptionenable
最后编写中断服务程序,在中断服务程序中需要先禁止中断使能,完成服务程序后再打开。
总结来看,由于sdk提供的库文件使得zynq中断使用很方便简单,并且中断源很多,加上ps部分与pl部分的配合,使用非常灵活。

华为p10、p10plus售价高也是有道理的!手机单反双合体,每一拍都是大片!
eSIM加持Apple Watch Series 6火力全开
OPPO Reno5系列三款机型入网,全系支持65W快充
荧光棒原理是什么
深度解读企业级SSD的可靠性意义
ZYNQ中断使用入门基础教程
安捷伦推出ADS DDR4一致性测试平台
激光扫描用于数字工厂建设三维扫描技术
步步落后终致落败,OPPO需要更激进的变革
京东方柔性OLED超清护眼屏幕独供OPPO K11系列
荧光氧气传感器 (O2传感器)LOX-02/LOX-01的性能说明
人类认知如何帮助我们制造更好的AI系统?
利用西门子PLC器件实现过流保护的软硬件设计
mp3维修资料
电工的安全常识
ElasticSearch的必备知识:从入门、索引管理到映射详解
贴片机X-Y伺服定位系统分辨率
DSP技术可使SPM性能更趋于完善
中国制造业该如何走向高质量发展
变频器控制电机漏电解决方案