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

6678中,EDMA从L2搬移到DDR,在EDMA前,是否需要对L2进行 cache一致性操作?

1.cache设置如下:

CACHE_setL1PSize(CACHE_L1_32KCACHE);
CACHE_setL1DSize(CACHE_L1_32KCACHE);
CACHE_setL2Size(CACHE_0KCACHE);

2.v_fft_out变量放在L2中,需要将v_fft_out开始的一段数据搬移到DDR。

是否需要对v_fft_out进行cache一致性操作?

3.

static inline void WritebackCache(void * blockPtr, Uint32 byteCnt)
{
if(byteCnt>0xFFFF*4)
byteCnt= 0xFFFF*4;
if((Uint32)blockPtr>=0x0C000000&&(Uint32)blockPtr<0x0D000000) //SL2
{
CACHE_wbL1d((void *)blockPtr, byteCnt, CACHE_WAIT);
}
else if((Uint32)blockPtr>=0x10000000) //DDR or other cores
{
CACHE_wbL2((void *)blockPtr, byteCnt, CACHE_WAIT);
}
_mfence();
_mfence();
}

代码中的最大长度为0xFFFF*4,而L1D为32k=0x8000B,上面的代码中超过了L1D的长度?

Shine:

需要cache一致性操作。外部memory地址与cache是有映射对应关系,超过cache大小,会进行cache替换,将之前的数据回写后再重新映射读入cache,软件回写只需向cache寄存器写入基地址及长度0xFFFF*4即可。注意地址和长度要cache line对齐。

user1212849:

回复 Shine:

如果只使能L1D cache,则L2   MSM  DDR的数据是否都会经过L1D cache?

user1212849:

回复 user1212849:

关于变量长度超过cache的长度的问题 ,你的解释我没有看懂,能再解释一下么

Shine:

回复 user1212849:

是的。

赞(0)
未经允许不得转载:TI中文支持网 » 6678中,EDMA从L2搬移到DDR,在EDMA前,是否需要对L2进行 cache一致性操作?
分享到: 更多 (0)