HI3531由DMA 发起PCIe 事务

简介: <p>Hi3531 PCIe 控制器内含DMA 控制器,DMA 控制器包含有两个DMA 通道(一个<br> DMA 读通道和一个DMA 写通道)。PCIe 控制器内包含的DMA 控制器用于大数据量<br> 的存储器读写事务,以提高数据传输的速率。<br> DMA 控制器可以实现如下的存储器读写事务:<br> DMA 控制寄存器<br> 软件可通过DMA 控制寄存器来配置DMA 传

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);//启动写操作

 

 

相关文章
|
存储 数据中心
什么是T3机房?T1/T2/T3/T4机房等级对比详解
我们在购买IDC服务时都会选择T3机房或者T4机房,那么什么是T3机房?T3机房和T4机房有什么区别?服务器百科网来说说T1/T2/T3/T4机房等级对比详解: IDC机房等级划分 IDC机房的等级划分是根据《数据中心电信基础设施标准》而定的,它是美国国家标准学会(ANSI)颁布的,它将IDC数据中心(大型的设备和管理都比较完善的机房可以称为数据中心)基础设施的可用性定义了四种不同等级,即Tier 1、Tier 2、Tier 3和Tier 4四个等级。
18482 0
|
3月前
|
缓存 异构计算 Docker
构建高性能LLM推理服务的完整方案:单GPU处理172个查询/秒、10万并发仅需15美元/小时
本文将通过系统性实验不同的优化技术来构建自定义LLaMA模型服务,目标是高效处理约102,000个并行查询请求,并通过对比分析确定最优解决方案。
190 0
构建高性能LLM推理服务的完整方案:单GPU处理172个查询/秒、10万并发仅需15美元/小时
|
7月前
|
测试技术 持续交付 开发工具
《鸿蒙开发深度揭秘:应用版本管理与回滚策略》
在鸿蒙开发中,版本管理与回滚是保障应用稳定迭代和用户体验的关键环节。通过语义化版本控制(如“主版本号.次版本号.修订号”)、Git版本控制系统及CI/CD流程,开发者可高效管理代码变更、实现并行开发并确保版本清晰可追溯。当新版本出现问题时,回滚机制通过技术手段(如`git revert`或`git reset`)快速恢复至稳定状态。此外,完善的测试体系与灰度发布策略能降低回滚风险,而持续优化的版本管理方案则应对技术演进与生态变化带来的挑战。掌握这些核心技能,开发者可在鸿蒙生态中实现技术与商业双赢。
325 5
|
11月前
|
人工智能 安全 5G
|
存储 网络协议 Linux
高效调试与分析:利用ftrace进行Linux内核追踪(下)
高效调试与分析:利用ftrace进行Linux内核追踪
|
应用服务中间件
idea 调试报错 Illegal access: this web application instance has been stopped already.
idea 调试报错 Illegal access: this web application instance has been stopped already.
387 0
|
JSON Linux API
嵌入式设备的 Json 库基本使用
嵌入式设备的 Json 库基本使用
487 0
|
Linux C语言 SoC
Linux驱动的软件架构(二):设备驱动的分层思想
Linux驱动的软件架构(二):设备驱动的分层思想
460 0
|
Linux C语言
Linux驱动 | 在驱动中创建sysfs接口
Linux驱动 | 在驱动中创建sysfs接口
|
存储 缓存 NoSQL
【Redis7】Redis7概述、安装和卸载
本文重点介绍Redis7的概述和安装与卸载。
861 0

热门文章

最新文章