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

Adam Taylor玩转MicroZed系列48:裸机AMP(非对称多进程处理模式)

发布者:jackzhang 时间:2014-10-19 13:20:04

作者:Adam Taylor

在上一篇博客中,我们已经将Zynq SoC启动并运行起来,在AMP(非对称多进程处理)模式下使用了两个ARM Cortex-A9 MPCore处理器,然而因为上一篇博客已经相当长了,我没有详细的介绍软件方面的工程细节。

其实 在两个处理器上运行的软件工程也非常的简单。这里我将为你们展示通过OCM(片上存储器件)实现Zynq SoC的两个处理器之间的通信。然而,现在的软件工程非常的简单,因此我们可以从这个基础工程开始,继续完善。

上周我们完成的例子中的软件工程主要完成以下几个任务:
• Core 0 是主设备,它可以激活Core 1。它也利用了片上的UART串口以固定的延迟向一个终端输出打印信息。这个延迟不适用定时计数器等,尽管在这里使用私有的定时计数器很容易,我将在后面的博客中介绍同时使用两个私有的定时计数器。

• 一旦Core 0 启动起来,Core 1初始化它的私有资源,输出切换信号,控制位于MicroZed I/O扩展板上的八个LED灯亮灭,这里我们需要使用Core 1私有的定时计数器和通过GIC使能中断,实现以上功能。

这些应用程序之间是没有联系的,它们并不分享资源。然而,接下来我们想让这些应用程序之间能够通信,分享资源。

运行在 Core 0上的应用程序是非常简单的。它主要实现的是激活运行在Core 1上的应用程序,然后在一个无限循环中通过UART 0输出打印出一段简单的信息。

然而,我们计划使用Core 1的中断控制器,所以第一步我们必须配置GIC(通用中断控制器),将下图所示的代码加入到Core 0的应用程序的源代码文件中:

Core 1的应用程序代码可能要更加复杂一些,因为我们要在Zynq SoC的PL(可编程逻辑)部分调用GPIO模块,用于驱动控制MicroZed I/O扩展板上的LED灯。同赛灵思其他的接口一样,standalone OS使用一句 #include “xgpio.h”代码就提供了gpio接口的驱动信息,这个文件与我们之前驱动PS部分的MIO/EMIO GPIO接口所使用的xgpio_ps.h文件有一些小的不同,在这个例程中我想为大家展示如何在Zynq SoC的PL部分使用GPIO接口。

为了确保我们能够看出LED灯的亮灭状态的切换,我们将使用Core 1私有的定时器,这与我们之前使用Core 0定时器是一样的。

在 Core 1的程序开始执行它的主程序之前,我们需要禁止片上存储(OCM)的缓存功能,初始化GPIO接口,初始化私有的定时器,和配置中断控制器,这样私有的定 时器中断才能够被用来控制LED灯亮灭状态的切换。我们将使用Zynq SoC应用程序和禁止缓存的异常机制完成这些功能。

现在我们可以开始编写相当简单的中断服务程序,当私有的定时器计时结束然后重新计时时,这些中断服务程序就能够控制LED灯的亮灭。这个处理过程会一直进 行,我选择使用十六进制的AA和55交替转变赋值给LED灯,控制LED灯的亮灭状态。这个选择将会是所有的LED灯“流动起来”,与所有LED灯的全亮 或者全灭状态是有一些区别的。

下图是程序执行的结果,通过Core 0输出到终端对话框窗口:

在接下来的几篇博客中,我们将更加详细的介绍处理器之间的通信方法,我们怎样能够使用OCM和中断实现处理器之间的通信,我们怎样做才能够在两个处理器之间分享资源,在一个系统中不同任务之间有很多需要分享的资源,他们之间要实现通信机制。

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

© Copyright 2014 Xilinx Inc.
如需转载,请注明出处

最新课程

  • 深入浅出玩儿转FPGA

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

  • 从零开始大战FPGA基础篇

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

  • Verilog基础及典型数字

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