首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于C6678与PC(X86)之间的PCIe Link通信,采用EDMA方式的问题。。。

关于C6678与PC(X86)之间的PCIe Link通信,采用EDMA方式的问题。。。

目前可以实现PC与DSP(C6678)之间的数据通信,但是通信的速率达不到项目的要求,因此考虑采用DMA方式进行数据传输,在实现过程中出现了一些问题,希望得到各位大牛的指导。
1,PC作为RC端,DSP作为EP端,此时如何去调用C6678内部的EDMA模块去完成数据搬移呢?如何将PC的地址设置为EDMA能够识别的地址?
       使用BAR1映射到EDMA config memory,使用PC配置好EDMA相关寄存器,可以完成一次EDMA操作,假设需要将PC上的数据搬移到DSP外挂的DDR3上,参考mcsdk下linux pciedemo.c文件的配置:
    /* Calculate the DSP PCI address for the PC address */   
tmp = PCIE_DATA + (srcAddr & ~PCIE_1MB_BITMASK);
发现此时搬移的数据只是tmp地址本身存在的杂乱数据到DDR3:0x8000 0000,而PC上的数据并没有传输到C6678的tmp地址上。
想了解一下这个tmp地址的计算中srcAddr地址是指PC端开辟的虚拟地址所指向的物理地址吗?

2,如果只是想实现PC对DSP写数据,以及PC从DSP读数据,那么应该并不需要涉及到outbound address translation吧?PC为RC模式。因为已经调试好的对单个地址的读写都是使用inbound address translation完成的。
返回列表