[ZYNQ]开发之DMA的理解及应用

在上一篇文章中简要介绍了AXI DMA的特性,本文将就这一重要的功能模块做详细的介绍,主要分为以下几个部分:

一、关于DMA的介绍

二、利用一个SG DMA的环通测试实验进一步了解DMA的应用

三、通过上板验证BD链表的创建

四、关于中断的一些内容补充

上一篇文章的链接如下:

基于 AN108 模块的ADC 采集以太网传输_Laid-back guy的博客-CSDN博客

一、DMA介绍

通过学习ZYNQ开发可以得知PL 和 PS 的高效交互是 ZYNQ开发的重中之重,通常情况下我们需要将PL 端的大量数据实时送到 PS 端处理,或者将 PS 端处理结果实时送到 PL 端处理。在PS和PL之间的主要连接是通过一组9个AXI接口,每个接口有多个通道组成,其接口及相关描述如下:

其中AXI GP(General Purpose AXI)接口为通用接口,适用于PL和PS之间的中低速通信。通常情况下, ARM 可以利用M_AXI_GP 主机接口主动访问 PL 逻辑,ARM通过将PL映射到某个地址的方式来读写PL寄存器。

HP 口是 High-Performance Ports 的缩写,四个高性能 AXI 接口,带有FIFO缓冲来提供“批量”读写操作,并支持PL和PS中的存储器单元的高速率通信。

这两个端口在ZYNQ中的设置方式如下:

然而,通常情况下我们不会直连具有AXI4接口的IP核与AXI_HP接口来实现PL与PS端之间的数据交互,示例如下(图片摘自领航者ZYNQ之嵌入式SDK开发指南——第十七章):

显然,外设数据读入内存或者将内存传送到外设,一般都要通过 CPU 控制完成,如采用查询或中断方式。然而,对于高速、批量传输数据的情景下,虽然中断的方式可以提高CPU的利用率,但是PL端反复的发起中断再经CPU处理显然会十分影响CPU的效率与数据传输速度。此时,采用DMA的方式可以解决上述难点。

CPU 只需要提供地址和长度给 DMA,DMA 即可接管总线,访问内存,等 DMA 完成工作后,告知 CPU,交出总线控制权。即DMA的工作主要由下面三点构成

  1. 处理器(CPU)发出一条DMA命令,配置DMA传输的地址、长度、中断等,启动DMA传输
  2. CPU处理其他操作,DMA控制器将数据从外设/存储器传输到存储器
  3. 数据传输完成,DMA发出中断通知CPU关闭DMA传输。

AXI DMA IP在AXI4内存映射与AXI4-Stream接口之间提供了高宽带直接存储访问。核心的功能如下图所示:

AXI DMA用到了三种总线:

  1. AXI4-Lite 用于对寄存器进行配置
  2. AXI4 Memory Map 用于与内存交互,又分为AXI4 Memory Map Read(M_AXI_MM2S)和AXI4 Memory Map Write(M_AXI_S2MM)两个接口,前者对内存读,后者对内存写。
  3. AXI4 Stream接口用于对外设的读写,其中AXI4 Stream Master(MM2S,Memory Map to Stream)用于对外设写,AXI4-Stream Slave(S2MM,Stream to Memory Map)用于对外设读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值