0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DMA控制器介绍及示例演示详解

OpenFPGA 来源:OpenFPGA 作者:碎碎思 2022-05-17 09:47 次阅读

ZYNQ从放弃到入门(九)-PS和PL交互-DMA

我们上一节谈到使用 DMA(直接内存访问)的好处已经变得显而易见。到了这一步,我们留下了人类长期以来一直在思考的问题:DMA到底是什么?

DMA介绍

在最基本的层面上,一旦处理器设置了传输,DMA 将数据传入或传出内存而无需CPU干预。DMA 可以显着提高系统性能,具体取决于所采用的方法。在我们更详细地了解 Zynq DMA 之前,我想先解释一些 DMA 控制器的通用原理。通常 DMA 控制器以以下三种模式之一运行:

  • Burst Mode突发模式 - 在一次连续操作中传输整个数据块。在许多应用中,突发模式传输时拒绝总线访问处理器。这种模式好与坏还是取决于系统。
  • Cycle Stealing – 为了克服上诉的不足,DMA支持Cycle Stealing将单个 DMA 字节或字传输与处理器访问系统总线交错运行。
  • 透明模式——最有效的模式。仅当处理器执行不需要访问系统总线的任务时才传输数据。

DMA 控制器的一项非常有用的功能是支持分散/收集(scatter/gather)操作的能力。此功能允许将多个数据源传输到单个目标地址或允许单个源地址提供多个输出目标(也称为“缓冲区”)。Zynq SoC 的基于 ARM 的处理系统 (PS) 有一个 DMA 控制器 (DMAC),它连接到 Zynq 的 AXI4 互连并使用 AXI 总线执行传输。DMAC 在系统存储器和 Zynq 的可编程逻辑 (PL) 之间采用 64 位 AXI 传输。如下所示,Zynq DMAC 有 8 个通道,允许 DMAC 同时执行 8 个 DMA 线程,并通过 AXI 互连实现流控制。

d4b74410-d579-11ec-bce3-dac502259ad0.png

虽然 Zynq DMAC 允许在系统存储器和 PL(包括 PL 中的 Zynq 外设)之间进行双向传输,但它不支持 Zynq PS 中的外设的 DMA,因为这些外设没有流控制信号来支持 DMA 操作。然而,Zynq SoC 中的一些 IO 外设具有自己的 DMA 控制器,以支持进出 IOP 和系统内存的高数据速率传输。这些外围设备是:

  • GigE Controller 千兆以太网控制器
  • SDIO Controller SDIO 控制器
  • USB Controller USB控制器
  • Device Configuration Controller 设备配置控制器

如果设备使用 ARM TrustZone,Zynq SoC 还支持安全寄存器访问。Xilinx 同时也提供了一个简单的驱动程序文件 (xdmaps.h),我们可以在独立 BSP 中使用它来配置和启动 DMA 传输。在下一节中,我们将了解如何使用此文件创建简单的 DMA 传输。

示例演示

本节创建一个非常简单的示例来演示如何设置和使用 DMA。

为了演示这示例,将使用一个 DMA 控制器通道将一个内存位置传输到另一个内存位置。

首先需要在BSP中包含一部分Vivado中生成的头文件。这些头文件提供了我们可以用来驱动 DMA 的宏和函数。对于这个例子,我们需要包括:

#include"xscugic.h"
#include"xdmaps.h"
#include"xil_exception.h"

Xscugic.h 和 xil_exceptions.h 允许使用中断控制器,而 xdmaps.h 允许配置并使用DMA。

使用 xparamters.h 提供的参数,我们可以定义 DMA 和中断控制器的设备标识、将使用的中断以及我们将传输的数据长度:

#defineDMA_DEVICE_IDXPAR_XDMAPS_1_DEVICE_ID
#defineINTC_DEVICE_IDXPAR_SCUGIC_SINGLE_DEVICE_ID
#defineDMA_FAULT_INTRXPAR_XDMAPS_0_FAULT_INTR
#defineDMA_DONE_INTR_0XPAR_XDMAPS_0_DONE_INTR_0
#defineDMA_LENGTH1024

开发的下一阶段是编写三个函数来配置DMA,配置中断控制器,并在DMA传输完成时充当中断服务程序。

在 DMA 配置函数中,我们首先使用 xdmaps.h 提供的命令结构创建一个 DMA 命令。DMA 命令由通道控制、块描述符、用户定义的程序、指向生成的程序的指针和传输结果组成。由于这是一个简单的示例,我们不需要所有这些组件,但是我们将配置 DMA 控制器,如下所示:

DmaCmd.ChanCtrl.SrcBurstSize=4;
DmaCmd.ChanCtrl.SrcBurstLen=4;
DmaCmd.ChanCtrl.SrcInc=1;
DmaCmd.ChanCtrl.DstBurstSize=4;
DmaCmd.ChanCtrl.DstBurstLen=4;
DmaCmd.ChanCtrl.DstInc=1;
DmaCmd.BD.SrcAddr=(u32)Src;
DmaCmd.BD.DstAddr=(u32)Dst;
DmaCmd.BD.Length=DMA_LENGTH*sizeof(int);

下一步设置运行中断函数以将 DMA 中断连接到中断控制器之前初始化和配置 DMA 控制器:

DmaCfg=XDmaPs_LookupConfig(DeviceId);
XDmaPs_CfgInitialize(DmaInst,DmaCfg,DmaCfg->BaseAddress);
SetupInterrupt(&GicInstance,DmaInst);

在此之后,在我们连接完成处理程序并开始传输之前,源内存位置被设置并清除目标位置,为了跟踪进度,我们还调用了 DMA 进度函数:

DmaCfg=XDmaPs_LookupConfig(DeviceId);
XDmaPs_CfgInitialize(DmaInst,DmaCfg,DmaCfg->BaseAddress);
SetupInterrupt(&GicInstance,DmaInst);
XDmaPs_Print_DmaProg(&DmaCmd);

当附加的源代码文件在ZYNQ上运行时,以下结果显示串口输出上。

d4e8b0cc-d579-11ec-bce3-dac502259ad0.png

源码:

https://gitee.com/openfpga/zynq-chronicles/blob/master/part_29.c

原文标题:ZYNQ从放弃到入门(九)-DMA

文章出处:【微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16487

    浏览量

    179796
  • dma
    dma
    +关注

    关注

    3

    文章

    566

    浏览量

    101100
  • Zynq
    +关注

    关注

    10

    文章

    610

    浏览量

    47362

原文标题:ZYNQ从放弃到入门(九)-DMA

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DMA控制器介绍

    本帖最后由 yyeee312 于 2015-11-12 15:17 编辑 DMA控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储与每个具有
    发表于 11-04 22:50

    基于DMA控制器的UART串行通信设计

    针对大数据量的串口间通信,在常规的UART串行数据通信的基础上,结合Cortex-M3微控制器DMA控制器的作用,实现DMA控制的UART
    发表于 04-20 10:54 46次下载
    基于<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的UART串行通信设计

    DMA控制器功能及特点

    DMA 控制器在外设与主存之间直接传送数据期间,完全代替 CPU 进行工作。
    发表于 09-19 16:11 6次下载
    <b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>功能及特点

    基于AMBA总线的DMA控制器IP核设计

    制造厂商都有自己的解决方案。本文通过介绍一种基于ARM总线之一的AHB总线的DMA控制器的IP核设计,简述了IP核设计的流程和需要重点注意的地方。
    发表于 12-06 13:41 3788次阅读
    基于AMBA总线的<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>IP核设计

    基于PCI Core的链式DMA控制器设计

    介绍一种基于PCI总线的高效链式DMA控制器的设计与实现,用于高速宽带的计算机外设接口。利用Altera公司的PCI核——PCI_MT32搭建基于此控制器的数据采集平台,并成功应用在D
    发表于 12-06 13:56 3192次阅读
    基于PCI Core的链式<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>设计

    NiosⅡ系统中DMA控制器的原理及应用

    DMA控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储与每个具有DMA能力的外设连接起来的控制器
    发表于 12-07 08:51 2578次阅读
    NiosⅡ系统中<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的原理及应用

    Crossbar的多通道DMA控制器设计

    为了具体介绍本多通道 DMA 控制器的设计方案,下面首先对基于 Crossbar 的多通道 DMA 控制器的工作原理进行详细分析,接着具体说
    发表于 12-07 09:37 5101次阅读
    Crossbar的多通道<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>设计

    dma控制器芯片8257资料介绍

    DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA
    发表于 12-07 10:23 1.7w次阅读
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>芯片8257资料<b class='flag-5'>介绍</b>

    dma控制器由什么组成

    DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA
    发表于 12-07 16:08 5614次阅读
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>由什么组成

    dma控制器的组成

    一个DMA控制器,实际上是采用DMA方式的外围设备与系统总线之间的接口电路,这个接口电路是在中断接口的基础上再加DMA机构组成。习惯上将DMA
    的头像 发表于 04-01 16:08 1.1w次阅读

    dma控制器是什么_dma控制器工作方式

    DMA(Direct Memory Access)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储与每个具有DMA能力的外设连接起来的
    发表于 11-15 10:25 1.3w次阅读

    ZNEO CPU 上的 DMA 控制器特性分析

    本应用笔记介绍了 ZNEO CPU 中的 DMA 控制器及其突出的特性,例如 DMA 和 CPU 带宽共享控制以及四个独立的
    的头像 发表于 06-21 17:28 1770次阅读
    ZNEO CPU 上的 <b class='flag-5'>DMA</b> <b class='flag-5'>控制器</b>特性分析

    DMA控制器原理详解

    目录工作原理DMA硬件架构DMA出现的目的工作原理DMA全拼Direct Memory Access(直接内存存取),在传统的CPU存取数据时会先将数据放到缓存寄存中然后在写入到指定
    发表于 12-08 16:51 6次下载
    <b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>原理<b class='flag-5'>详解</b>

    AN4104_STM32F0xx的DMA控制器的使用

    AN4104_STM32F0xx的DMA控制器的使用
    发表于 11-21 08:11 2次下载
    AN4104_STM32F0xx的<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的使用

    请问DMA控制器可以减轻CPU负担吗?

    直接存储访问 ( DMA )控制器,可以在内存和/或外设之间传输数据,而不需要 CPU 参与每次传输。合理利用 DMA 控制器,可以减轻C
    的头像 发表于 03-28 09:41 817次阅读
    请问<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>可以减轻CPU负担吗?