Hi3531 PCIe 控制器内含DMA 控制器,DMA 控制器包含有两个DMA 通道(一个

DMA 读通道和一个DMA 写通道)。PCIe 控制器内包含的DMA 控制器用于大数据量

的存储器读写事务,以提高数据传输的速率。

DMA 控制器可以实现如下的存储器读写事务:

DMA 控制寄存器

软件可通过DMA 控制寄存器来配置DMA 传输,也可以通过DMA 控制寄存器启动和

停止DMA 传输。DMA 控制寄存器位于PCIe 控制器的配置寄存器空间内,DMA 控制

寄存器的定义请参考本章的PCIe 寄存器描述。

注意中提到的部分DMA 控制寄存器包含:

 DMA_CH_CTRL 寄存器;

DMA_TRANS_SIZE 寄存器;

DMA_SAR_LOW 和DMA_SAR_HIGH 寄存器;

DMA_DAR_LOW 和DMA_DAR_HIGH 寄存器;

DMA_LINK_PT_LOW 和DMA_LINK_PT_HIGH 寄存器。

1. 软件设置DMA_CH_INDEX[ch_dir]=1,表明后续操作目标寄存器为读通道控制寄存

器。

2. 软件设置DMA_TRANS_SIZE=0x400,表明传输长度为1024Byte。

DMA 读/写通道使能

DMA 通道在系统复位后默认是没有使能的,要使用PCIe 的DMA 通道,需使能DMA

的读写通道。

通过设置DMA_RD_ENGINE_EN[dma_rd_engine_en]为1,使能DMA 读通道。

通过设置DMA_WR_ENGINE_EN[dma_wr_engine_en]为1,使能DMA 写通道。

DMA 源地址和目标地址

DMA 写:源地址(SAR)为本地内存空间,目标地址(DAR)为对端设备内存空间。

DMA 读:源地址(SAR)为对端设备内存空间,目标地址(DAR)为本地内存空间。

配置DMA 读或写通道的DMA_SAR_LOW 和DMA_SAR_HIGH 寄存器可以指定DMA

传输的源地址,配置DMA 读或写通道的DMA_DAR_LOW 和DMA_DAR_HIGH 寄存

器可以指定DMA 传输的目的地址。DMA 源地址和目的地址寄存器请参看PCIe DMA

控制寄存器定义。

DMA 传输过程中,源地址和目的地址寄存器随着传输过程而递增。可以通过读取源地

址和目的地址寄存器的值来确定DMA 当前传输所获取数据的源地址和当前所写数据

的目标地址。

DMA 源地址和DMA 目的地址都是双字节对齐的,因此最低两比特都必须设置为0。

在传输过程中此最低两比特也一直为0。

DMA 传输长度

DMA 读或写操作的传输长度由DMA 读或写通道的DMA_TRANS_SIZE 寄存器来指

定。该寄存器的值表示DMA 请求传输的数据的字节数。在DMA 传输过程,此寄存器

的值会随着传输过程递减,可以通过读取此寄存器确定当前还有多少字节未传输。传

输成功结束后此寄存器值应该为0。

DMA 传输长度取值范围为:最小为1 个字节,最大为4G 字节。

启动DMA 传输

在配置好DMA 读通道的控制寄存器之后,通过向

DMA_RD_DOORBELL[rd_doorbell_num]写入0 来启动DMA 读传输。

在配置好DMA 写通道的控制寄存器之后,通过向

DMA_WR_DOORBELL[wr_doorbell_num]写入0 来启动DMA 写传输。

停止DMA 传输

在DMA 传输过程中如果需要停止DMA 传输,可以通过如下寄存器控制来手动停止

DMA 读或者DMA 写传输:

 通过向DMA_RD_DOORBELL[dma_rd_stop]写入1 来停止DMA 读传输。

通过向DMA_RD_DOORBELL[dma_wr_stop]写入1 来停止DMA 读传输。

如果DMA 传输过程中没有发生错误,DMA 传输将在所有的数据传输完成后自动停

止。

HI_MPI_SYS_SetReg(0x20800A6C,0x00000000);//bit31 0 WRITE  DMA_CH_INDEX

    HI_MPI_SYS_SetReg(0x20800A78,0x00000010);//DMA_TRANS_SIZE 10

HI_MPI_SYS_SetReg(0x2080097c,0x00000001);//使能写操作

HI_MPI_SYS_SetReg(0x20800A7c,0xc0000000);// 源地址—低位

    HI_MPI_SYS_SetReg(0x20800A80,0x00000000);// 源地址—高位

HI_MPI_SYS_SetReg(0x20800A84,0x0544f000);// 目标地址—低位 PC机申请的物理地址

    HI_MPI_SYS_SetReg(0x20800A88,0x00000000);// 目标地址—高位

HI_MPI_SYS_SetReg(0x20800980,0x00000000);//启动写操作

HI3531由DMA 发起PCIe 事务的更多相关文章

  1. PCIe事务层包TLP Header详解

    1.事务层包的一般格式: 包的header为3DW(double word)或者4DW(一个DW代表4字节),数据负载为1~1024DW(即4~4096byte,最大4M),TLP Digest可选, ...

  2. PCIe事务层の详解(一)

    PCIe总线的通信机制:当一个设备要想另一个设备进行读取通信时,请求方requester需要向另一个设备发送请求request,靶向方作为事件完成方completer,以complete Packet ...

  3. hi3531的pcie控制器使能

    1. 关闭PCIe 控制器: 通过向系统控制寄存器PERIPHCTRL30[pcie0_app_ltssm_enabl]写入0 关闭PCIe0 控制 器. 通过向系统控制寄存器PERIPHCTRL77 ...

  4. FPGA与PCI-E

    从并行到串行: PCI Express(又称PCIe)是一种高性能.高带宽串行通讯互连标准,取代了基于总线的通信架构,如:PCI.PCI Extended (PCI-X) 以及加速图形端口(AGP). ...

  5. 转载 大话pcie

    原文https://blog.csdn.net/abcamus/article/details/76167747 一.PCIe DMA机制 PCIe控制器也提供DMA(Direct Memory ac ...

  6. 图解PCIE原理(从软件角度)

    1  PCIE基本概念 1.1   PCIE拓扑架构图 1.2 PCIE Switch内部结构图 1.3  PCIE协议结构图 2 PCIE枚举原理 2.1 Type0&Type1配置头空间 ...

  7. Xilinx DMA的几种方式与架构

    DMA是direct memory access,在FPGA系统中,常用的几种DMA需求: 1. 在PL内部无PS(CPU这里统一称为PS)持续干预搬移数据,常见的接口形态为AXIS与AXI,AXI与 ...

  8. [WCF编程]12.事务:事务传播

    一.事务传播概述 WCF可以跨越服务边界传递事务.这可以让服务参与到客户端事务里,客户端还可以在同一个事务里调用多个服务.客户端本身不一定是WCF服务.客户端事务是否传播到服务端可以通过绑定和操作契约 ...

  9. (6)redis 事务

    redis对事务的支持目前还比较简单.redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令. 由于redis是单线程来处理所有client的请求的所 ...

随机推荐

  1. JAVA配置&注解方式搭建简单的SpringMVC前后台交互系统

    前面两篇文章介绍了 基于XML方式搭建SpringMVC前后台交互系统的方法,博文链接如下: http://www.cnblogs.com/hunterCecil/p/8252060.html htt ...

  2. Intellij IDEA 15 如何同时打开多个项目

    标题:Intellij IDEA 15 如何同时打开多个项目 作者原创技术文章,转载请注明出处 我们在编程时常常需要打开多个项目,例如操作复制黏贴或者参考其他项目等等,但是编译器Intellij ID ...

  3. ABP官方文档翻译 8.1 通知系统

    通知系统 介绍 发送模型 通知类型 通知数据 通知严重性 关于通知持久化 订阅通知 发布通知 用户通知管理 实时通知 客户端 通知存储 通知定义 介绍 在系统中通知用来基于特定的事件告知用户.ABP提 ...

  4. ABP官方文档翻译 5.1 Web API控制器

    ASP.NET Web API控制器 介绍 AbpApiController基类 本地化 其他 过滤器 审计日志 授权 反伪造过滤器 工作单元 结果包装和异常处理 结果缓存 校验 模型绑定器 介绍 A ...

  5. UOJ#77. A+B Problem [可持久化线段树优化建边 最小割]

    UOJ#77. A+B Problem 题意:自己看 接触过线段树优化建图后思路不难想,细节要处理好 乱建图无果后想到最小割 白色和黑色只能选一个,割掉一个就行了 之前选白色必须额外割掉一个p[i], ...

  6. BZOJ 3624: [Apio2008]免费道路 [生成树 并查集]

    题意: 一张图0,1两种边,构造一个恰有k条0边的生成树 优先选择1边构造生成树,看看0边是否小于k 然后保留这些0边,补齐k条,再加1边一定能构成生成树 类似kruskal的证明 #include ...

  7. Ansible playbook循环实践总结<一>

    1.标准Loops 标准loops可以直接减少task的次数,如下: [root@zero01 playbook]# vi loops.yaml --- - hosts: all gather_fac ...

  8. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...

  9. Activiti 中的ACT_RU_TASK表中的EXECUTION_ID和PROC_INST_ID区别

    当你的流程图为单向的时候则EXECUTION_ID和PROC_INST_ID是一样的 这种的流程图的话是一样的 这种的话就到支流是不一样的由于在节点处进行了分支,导致这个有三个方案.导致里面的分支分离 ...

  10. 【阿里聚安全·安全周刊】科学家警告外星恶意代码|新方法任意解锁iPhone

    本周的七个关键词: 外星恶意代码 丨 任意解锁iPhone 丨  安卓9.0 丨 黑客攻击医疗设备 丨 仙女座僵尸网络 丨  苹果联合创始人被骗比特币 丨JavaScript -1-   [恶意代码] ...