硬件平台OMAPL138
我在测试一个简单的功能,使用EDMA3通过总线EMIFA 读取FPGA的值。同时使用CPU直接通过EMIFA读取FPGA做对比。
EDMA3设置为A模式,ACOUNT:320*2, BCOUNT:1, CCOUNT:1
EMIFA使能16bit读取
测试现象是:CPU读值正常,EDMA3读值会出现相邻的两个值相等。
举例:
CPU取值为 1 2 3 4 5 6 7 9 10
EMDA取值为 1 1 2 2 3 3 4 4 5 5
如果相同的EDMA3设置,把源地址改成一个内存地址,取值就正常。
推测EDMA3读值的源地址的增加与EMIFA不匹配导致异常。
我反复研究用户手册,也没有看到EMIFA在使能EDMA3时,需要额外设置什么。请大神指点一下:
附:
short chkadtemp[320];
EDMA3读FPGA程序
void chkad(void)
{
short loop, i, *ptr;
memset(chkadtemp, 0 ,sizeof(chkadtemp));
eDMAParamSet.srcAddr = EMIF_YC_ADDR;
eDMAParamSet.destAddr = chkadtemp;
AD_ReadWithEDMA();
printf("\r\n start*************\r\n");
for(loop=0;loop<4;loop++)
{
for(i=0; i<80; i++)
{
printf("%d ,",chkadtemp[i+loop*80]);
}
printf("----\n\n");
}
printf("\r\n end*************\r\n");
}
CPU读FPGA程序
void chkemifa(void)
{
short loop, i, *ptr;
memset(chkadtemp, 0 ,sizeof(chkadtemp));
for(loop=0; loop<320; loop++)
{
chkadtemp[loop] = EMIF_RD(EMIF_YC_ADDR, loop);
}
printf("\r\n start*************\r\n");
for(loop=0;loop<4;loop++)
{
for(i=0; i<80; i++)
{
printf("%d ,",chkadtemp[i+loop*80]);
}
printf("----\n\n");
}
printf("\r\n end*************\r\n");
}