想咨询一下关于DSP(dm642)方面的问题,
在打开cache情况下,想使用DAT_copy实现ping-pang buffer来进行图像处理,
Cache打开程序:
CACHE_clean(CACHE_L2ALL,0,0);
CACHE_setL2Mode(CACHE_128KCACHE);
CACHE_enableCaching(CACHE_EMIFA_CE00);
CACHE_enableCaching(CACHE_EMIFA_CE01);
ping-pang buffer实现过程:
Uint32 ulTmp1;
Uint16 i;
Uint16 m,n;
Uint16 usDataLen;
Uint16 usNum;
//Uint16 usId;
usDataLen = 11520;
usNum = 36;
/*传送临时缓冲区*/
DAT_copy((void *)(pucInputData),
(void *)(guacL2DataBufPing),
usDataLen);
for(i = 0; i < usNum; i++)
{
ulTmp1 = (Uint32)usDataLen * i;
if (0 == (i & 0x01))
{
//DAT_wait(DAT_XFRID_WAITALL);
/*传送临时缓冲区*/
DAT_copy((void *)(pucInputData + ((i + 1) * usDataLen)),
(void *)(guacL2DataBufPang),
usDataLen);
for(m = 0; m < 16; m++)//行数
{
#pragma MUST_ITERATE(90, 90, 8);
for(n = 0; n < PIXELS_NUM; n++) //像素数/每行
{
guacL2DataBufPing[m * PIXELS_NUM + n] = guacL2DataBufPing[m * PIXELS_NUM + n] < gucTwoValuThrld ? 0x00:0xFF;
}
}
//memcpy((void*)(pucInputData + ulTmp1),(void*)guacL2DataBufPing,usDataLen);
CACHE_wbInvL2((void*)guacL2DataBufPing, usDataLen, CACHE_WAIT);
DAT_copy((void *)(guacL2DataBufPing),
(void *)(pucInputData + ulTmp1),
usDataLen);
}
else
{
//DAT_wait(DAT_XFRID_WAITALL);
/*传送临时缓冲区*/
DAT_copy((void *)(pucInputData + ((i + 1) * usDataLen)),
(void *)(guacL2DataBufPing),
usDataLen);
for(m = 0; m < 16; m++)//行数
{
#pragma MUST_ITERATE(90, 90, 8);
for(n = 0; n < PIXELS_NUM; n++) //像素数/每行
{
guacL2DataBufPang[m * PIXELS_NUM + n] = guacL2DataBufPang[m * PIXELS_NUM + n] < gucTwoValuThrld ? 0x00:0xFF;
}
}
//memcpy((void*)(pucInputData + ulTmp1),(void*)guacL2DataBufPang,usDataLen);
CACHE_wbInvL2((void*)guacL2DataBufPang, usDataLen, CACHE_WAIT);
DAT_copy((void *)(guacL2DataBufPang),
(void *)(pucInputData + ulTmp1),
usDataLen);
}
}
出现的问题是,末尾出现一段数据从L2->SDRAM过程,数据不正确,L2数据是正确的,DAT_copy后,SDRAM的数据不对,
请问是什么原因,得怎么修改程序,保证数据正确;