最近在调6678的CSL中edma的测试例程(D:\ccs5\pdk_C6678_1_0_0_9_beta2\packages\ti\csl\example\edma),发现这个程序无法触发edma数据搬运。检查后发现这个程序确实有问题,如下:
/* Trigger channel */
CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);
regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
regionIntr.intr = 0;
regionIntr.intrh = 0;
/* Poll on IPR bit 0 */
do {
CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,®ionIntr);
} while (!(regionIntr.intr & 0x1));
do-while循环里应该加上
do {
/* Trigger channel */
CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);
CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,®ionIntr);
} while (!(regionIntr.intr & 0x1));
因为他是A-SYNC方式的数据搬运,所以要触发256(ACNT=256,BCNT=CCNT=1,TCINTEN=1)次才能产生中断,即跳出该循环,但是改了之后还是不行,根本没法触发edma数据搬运,请问这是为什么,急切需要高手解决,谢谢!
我单步跟踪的,感觉寄存器没有错误啊,EMR寄存器也没有错误!
Mark:
回复 Andy Yin1:
是我疏忽看错了,谢谢你的提醒!