作者:Steve Leibson, 赛灵思战略营销与业务规划总监
前期博客中介绍了 Direct Memory Access,本博客将主要介绍利用简单示例演示如何设置和使用DMA。要演示这个示例,我使用一个DMA控制器通道将一个内存位置转移到另一个存储器位置。
与我们在本博客系列中的方法一样:加上所生成的头文件作为BSP的一部分。这些头文件提供了宏和函数,我们可以用来驱动DMA 。我们将在这个示例中加入:
Xscugic.h和xil_exceptions.h允许使用中断控制器,同时 xdmaps.h可配置和使用DMA 。
使用xparamters.h提供的参数,可定义DMA和中断控制器的设备标识、将要使用的中断、以及将要传输的数据长度:
开发部分的下一个步骤是写入三个函数配置DMA ,配置中断控制器,并在完成DMA传输后中断服务程序。
在DMA配置函数内,我们利用xdmaps.h提供的指令结构,创建DMA命令。DMA指令包括通道控制、块描述符、用户定义的程序、生成程序的指针和传输结果。由于这个示例很简单,不需要使用所有组件,但我们需要按照如下指令配置DMA控制器:
接下来的步骤是初始化和配置DMA控制器,然后运行中断设置函数连接DMA中断与中断控制器:
完成上述操作后,在连接已实现的处理器并开始传输前,源存储器位置加入数据,目标位置清空数据,以跟踪向DMA进程函数调用的进程:
当附加源代码文件在MicroZed上运行后,在RS232监视器输出1中显示以下结果以报告运行状态。
学习DMA控制和基本示例后,我将在下一篇博客中会讲解如何查看MicroZed加载卡,以及如何使用模块系统当中的MicroZed。
原文链接:
http://forums.xilinx.com/t5/Xcell-Daily-Blog/Zynq-DMA-Part-Two-Adam-Tayl...
© Copyright 2014 Xilinx Inc.
如需转载,请注明出处