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

6657 cache使用

关于cache请教如下2个问题:

   1.  在进行cache一致性操作时。

WritebackInvalidCache(void * blockPtr, Uint32 byteCnt)

一次最大只能对256k(0xFFFF*4)的空间进行写回操作,如果缓存较大为512K等,是否需要多次调用该函数,然后基地址进行累加。

   2. 对于DDR空间的数据cache一致性(在开了L1D和L2cache情况下)

是否只需要调用下面2个函数

 CACHE_wbInvL2((void *)blockPtr, byteCnt,CACHE_WAIT);

CSL_XMC_invalidatePrefetchBuffer();

不需要调用下面函数

CACHE_wbInvL1d((void *)blockPtr, byteCnt,CACHE_WAIT);

Nancy Wang:

L1P/L1D最大能配置为32k的cache size,L2最大能配置为256k。

user4827424:

回复 Nancy Wang:

您好!

1. 就是假设我的缓存空间在DDR中,起始地址baseaddr=0x80000000,,大小为1024K,是否需要如下写法:

for(i=0;i<4;i++)

{

  WritebackInvalidCache(baseaddr+1024*256*i, 1024*256);

}

即调用4次,每次累加。

2. 对于问题2,在打开了L1D和L2的cache的情况下,如果缓存空间在L2中,只需要调用函数1:

 CACHE_wbInvL1d(baseaddr, byteCnt, CACHE_WAIT); //函数1

如果缓存空间在DDR中,在例子代码中只调用了如下函数2:

CACHE_wbInvL2(baseaddr, byteCnt, CACHE_WAIT); //函数2

是否需要如下写法:先调用函数1,再调函数2。

CACHE_wbInvL1d(baseaddr, byteCnt, CACHE_WAIT);   //函数1

CACHE_wbInvL2(baseaddr, byteCnt, CACHE_WAIT);    //函数2

网上有些博客是这种说法,不知道那个正确。

Ryan BL:

回复 user4827424:

记得好像是只需要回写L2,cache手册有类似描述:会同时对L1操作。

Ryan BL:

回复 Ryan BL:

请查阅c66 cache相关章节确认。

user4827424:

回复 Ryan BL:

谢谢,因为一次最大写回操作为256k,那如果是对比较大的DMA缓存进行cache写回操作,需要调用多次函数吗?

赞(0)
未经允许不得转载:TI中文支持网 » 6657 cache使用
分享到: 更多 (0)