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.

咨询一下关于DSP(dm642)的DAT_copy在开cache情况下copy数据出错的问题



想咨询一下关于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的数据不对,

 

请问是什么原因,得怎么修改程序,保证数据正确;

  • 你好,

    你的那个buffer在l2,那个在DDR? DDR上的buffer的cache需要一致性维护么?

    建议你网上搜索一下《TI C64x+ DSP CACHE 一致性分析与维护》文档,对cache的一致性维护有进一步了解。

  • 这位TI员工,你好像没看懂问题;

    我的问题是:

    数据从SDRAM->L2,在L2进行处理,处理完后,从L2->SDRAM;

    在关闭cache情况下,处理完后,数据从L2->SDRAM过程都是正确的;

    在打开cache情况下,处理完后,数据从L2->SDRAM过程不全是正确的,末尾有一段数据不正确,是没有从L2 copy到SDRAM中;

    是什么原因产生的?怎么解决?