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

2019-03-26 16:02发布

目前可以实现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完成的。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。