TI中文支持网
TI专业的中文技术问题搜集分享网站

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

 

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

Chris Meng:

你好,

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

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

yang meng:

回复 Chris Meng:

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

我的问题是:

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

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

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

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

赞(0)
未经允许不得转载:TI中文支持网 » 咨询一下关于DSP(dm642)的DAT_copy在开cache情况下copy数据出错的问题
分享到: 更多 (0)