HI3531由DMA 发起PCIe 事务 分类: HI3531 浅谈PCI-E windows驱动程序WDM 2014-05-23 11:48 930人阅读 评论(0) 收藏
2014-05-23 11:48
531 查看
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);//启动写操作
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);//启动写操作
相关文章推荐
- 如何在WDM中使用xp系统的DMA用来处理数据 分类: windows驱动程序WDM 浅谈PCI 2013-07-26 14:57 497人阅读 评论(0) 收藏
- PCI-E配置MSI中断流程解析 分类: windows驱动程序WDM 浅谈PCI-E 2015-01-04 17:30 483人阅读 评论(0) 收藏
- 过滤驱动加密文件(代码) 分类: windows驱动程序WDM 2013-09-25 14:40 611人阅读 评论(0) 收藏
- 在windows XP系统下编译和使用ffmpeg 分类: windows驱动程序WDM VC++ 2013-08-12 11:12 833人阅读 评论(0) 收藏
- xp+WinDBG+VMware调试内核 分类: windows驱动程序WDM 2013-09-25 14:43 431人阅读 评论(0) 收藏
- SDVO-DVI-I2C-register 分类: windows驱动程序WDM 2013-08-01 11:10 607人阅读 评论(0) 收藏
- Windows NT 驱动程序开发人员提示 -- 应注意避免的事项 分类: windows驱动程序WDM 2013-09-25 14:38 490人阅读 评论(0) 收藏
- 实战DeviceIoControl 之三:制作磁盘镜像文件 分类: windows驱动程序WDM 2013-09-25 14:47 397人阅读 评论(0) 收藏
- hi3531的pcie atu资源重映射 分类: HI3531 浅谈PCI-E 2014-05-21 09:17 695人阅读 评论(0) 收藏
- 实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数 分类: windows驱动程序WDM 2013-09-25 14:46 401人阅读 评论(0) 收藏
- MFC下用sdl 显示bmp、rgb、yuv 分类: windows驱动程序WDM VC++ ffmpeg-SDL-VLC-Live555 DirectX 2013-08-16 18:11 1114人阅读 评论(0) 收藏
- DriverStudio 和 WDF驱动 通过GUID获取设备句柄的差别 分类: windows驱动程序WDM 2013-10-30 08:56 812人阅读 评论(0) 收藏
- RTP 协议 分类: arm-linux-Ubuntu windows驱动程序WDM 2013-08-16 10:53 442人阅读 评论(0) 收藏
- 文件监控(教学版) 分类: windows驱动程序WDM 2013-09-25 14:41 666人阅读 评论(0) 收藏
- 对内核的直接挂钩 分类: windows驱动程序WDM 2013-09-25 14:50 377人阅读 评论(0) 收藏
- 理解和使用NT驱动程序的执行上下文 分类: windows驱动程序WDM 2013-09-25 14:39 517人阅读 评论(0) 收藏
- 在驱动和应用程序间共享内存 分类: windows驱动程序WDM 2013-09-25 14:37 650人阅读 评论(0) 收藏
- CM_RESOURCE_LIST structure 分类: windows驱动程序WDM 2013-07-25 15:49 543人阅读 评论(0) 收藏
- 实战DeviceIoControl 之一:通过API访问设备驱动程序 分类: windows驱动程序WDM 2013-09-25 14:45 381人阅读 评论(0) 收藏
- 实战DeviceIoControl 之六:访问物理端口 分类: windows驱动程序WDM 2013-09-25 14:49 332人阅读 评论(0) 收藏