你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

解析中断——Adam Taylor玩转MicroZed系列38

发布者:jackzhang 时间:2014-09-27 19:46:43



作者:Adam Taylor

既然“Adafruit NeoPixel ”这个例子已经完成了(可以查看我以前发布的8篇博客)我们将要探索一下关于操作系统的知识,但是首先有一个小的插曲,在上周我收到了一个有兴趣的问题, 这个问题是关于第24篇博客的--“讨论Zynq SoC的PS/PL(处理器系统/可编程逻辑)直接的通信接口“。这个特别的问题是关于从PL部分给PS部分的ARM Cortex-A9 MPCore CPU触发一个中断事件。

下面我们给出了位于Zynq SoC PS部分的ARM通用中断控制器的系统级框图,引用了Zynq-7000全可编程SoC技术指导手册(UG585)

从上面这个框图我们可以看出CPU0与CPU1共享了16个从PL到PS之间的中断,每个CPU内核分别占有5个来自PL的私有中断。这些中断源会 为每个CPU内核驱动一个快速中断和一个周期性的中断。在下面这个例子里,我会展示怎么使用私有中断。然而中断的的一般概念都是相同的,没有考虑到具体的 使用情况。在这个例子里,我将使用PL上的一个扩展的复用I/O(EMIO GPIO),回过头来连接到处理器的中断引脚上。一个简单的软件程序就能够说明来自PL的中断是怎么工作的。

注意:PL/PS接口之间的中断信号是高电平有效,不是低电平有效。

第一步:使能PL/PS之间的中断和使能你期望使用的具体的中断。

第二步:使能EMIO GPIO ,位宽设置为1。

中断和GPIO引脚都会出现在Zynq PS的框图中,这些信号会被进行内部连接,这样我们能够通过软件控制来驱动这些中断,当然在这个例子里,这些中断是由位于Zynq PL部分的EMIO引起的。

已经进行到了这一步,下一步是重新生成所有的输出文件和实现设计,以便我们能够把换个设计导出到SDK中。相应地,我们就能够编写一些代码来测试这个应用。

我们的测设应用实现的是当我们按下MicroZed 开发板上的一个按钮开关时会触发一个中断。

在SDK环境下,我们需要进行下面这些步骤:
1. 声明如下头文件:Platform.h, xparameters.h, Xscugic.h, Xil_Exceptions.h 和 xgpio.h,这些头文件 将提供一些函数和宏,帮助我们完成这个例子 。
2. 定义通用中断控制器和GPIO设备的ID,定义FPGA的中断号,定义EMIO和按钮开关的引脚号。
3. 声明和定义一些必需的函数:
 中断控制器设置函数
 PGA中断处理函数,这个函数会打印出一条信息
 GPIO中断处理程序,这个程序会在有按钮开关按下的情况下驱动EMIO GPIO来触发FPGA中断事件

附加的代码(查看下面的附件,在这篇博客的结尾)非常详细地展示了我是怎样实现这样一个简单的例子。然而,我认为我应该从更多的细节来解释我建立这个中断的方式和方法。

当我们要在Zynq中使用中断,我们需要从以下几个方面着手:
1. 初始化中断控制器。
2. 连接异常设备ID到相关的中断处理程序,以使中断事件发生时它能够被正确的响应。
3. 连接FPGA中断到通用的中断控制器,这需要我们预定义中断ID号,调用的处理程序(他被用来识别中断源),和中断发生时运行的中断服务程序。
4. 在中断控制器中使能要用到的中断。
5. 使能处理器上的所有中断。

不论我们使用一个中断或者更多的中断,上面的流程是必需的,上面的第3条和第4条要为每个中断重新定义。

当我在MicroZed运行这些代码并按下按钮时,我看到了下面这些响应信息:说明它起作用了。

附件代码:Adam Taylors MicroZed Chronicles code part 38

原文链接:
http://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chro...

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了