各位专家好!
附件中是我在6678自带的EDMA例子的基础上修改得到的程序,只采用了在global region下的pingpong传输,但是程序运行以后显示srcBuff的数据是对的,而dstBuff中的数据全部为初始化时候的0值,也就是说srcBuff中的数据并没有传输到dstBuff中去,恳请各位专家帮我分析一下这个程序,看看问题出在什么地方,不胜感激!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位专家好!
附件中是我在6678自带的EDMA例子的基础上修改得到的程序,只采用了在global region下的pingpong传输,但是程序运行以后显示srcBuff的数据是对的,而dstBuff中的数据全部为初始化时候的0值,也就是说srcBuff中的数据并没有传输到dstBuff中去,恳请各位专家帮我分析一下这个程序,看看问题出在什么地方,不胜感激!
很有可能是cache一致性产生的,有2个办法。第一,查看下你的MAR位的设置,关闭对应外部存储器的cache使能;第二:在传输前使用BCACHE_wb()和BCACHE_inv(),使用软件维持cache一致性,带参数的自己去查查。希望能帮到你。
andy lee,你好。
上午跑了一下你的程序,确实没有搬运成功。
稍微调试了下,发现你的PaRam的源地址和目的地址有些问题,我这里看到的两个地址全是0;移位操作的结果不是想象中的结果,你的channelNum是8位的,但是要移位24位,我也不知道会发生什么问题。(下午我的CCS无法加载你的程序了,没法调试)。
建议你从头到尾仔细屡一下整个过程。
我也是新手,个人意见,仅供参考。
我修改了一下ccs目录下的edma例程,只修改了edma_ping_pong_xfer_gbl_region(instNum, channelNum)里面的内容,这个函数是可以成功的,不知道对你是否有帮助,传上来可以参考一下吧。
printf ("**************************************************\n");
printf ("******************* EDMA Testing *****************\n");
printf ("**************************************************\n");
/* EDMA Instance 0: Supports only 16 DMA Channels. */
for (channelNum = 0; channelNum < 16; channelNum++)
{
if (edma_ping_pong_xfer_gbl_region(instNum, channelNum) < 0) //只修改了这个函数内容,
{
printf ("Error: Testing EDMA(%d) Ping-Pong Test (Global) Region for Channel %d FAILED\n", instNum, channelNum);
return;
}
printf ("Debug: Testing EDMA(%d) Ping-Pong Test (Global) Region for Channel %d Passed\n", instNum, channelNum);
}