您好,
我使用EVM6678L(PG1.0)+AMC转PCIe板卡+PC(xp)来实现主机与DSP间的通信,主要参考了mcsdk_2_00_07_19\tools\boot_loader\examples\pcie里的pciedemo.c的代码,并借助DirverStudio工具生成了xp的驱动文件。
在具体通信过程中,发现HAL_writeDMA和HAL_readDMA两个函数中存在数据读取不完整的情况(比如我每次写10帧数据到DDR3中,将DMA_TRANSFER_SIZE设置为一帧,调用10次HAL_writeDMA,然后再从DDR3中读取出来,但发现每帧后面的数据都是0,即EDMA没写完全,且每帧缺失的数据量都是一样的)。我以为DMA_TRANSFER_SIZE过大造成的,但将DMA_TRANSFER_SIZE降低为0x50000,上述情况依旧。
这个问题也是随机的,有的时候我重新加载一次驱动,也可能解决问题,但出错的情况较多。
然后我用Windriver工具生成驱动,在应用程序中改写pciedemo.c,发现也有类似的情况,即DMA_TRANSFER_SIZE到达一定数量会出错。
lucky2:
您好。请问你参考Windriver生成的驱动,改写pciedemo.c后,能正常通信吗?能否留个联系qq或邮箱,交流请教下。谢谢
yong xu1:
回复 lucky2:
参考我另外的帖子:PCIe启动过程中C6678程序加载
fei lau:
您好
请教一下,您实现的DMA通信是使用的PC侧的DMA还是使用的DSP侧的EDMA模块?如果使用DSP的EDMA是不是需要将DSP设置为RC?谢谢!
yong xu1:
回复 fei lau:
使用Outbound方式,即DSP端的EDMA模块! DSP作为EP,主机作为RC!参考pciedemo.c