目前可以实现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完成的。
|