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:
是的。