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

TMS320C6678: 使用C64+库解决缓存一致性问题。

Part Number:TMS320C6678

使用 C64 库 的API

Cache_setMar();

使缓存在共享内存0x0c00 0000 开始,长度为0x0040 0000 的区域数据读取不通过缓存,直接读写物理地址。(尝试这样做没有成功,目前没有分配L2缓存,只分配了L1)

这样的操作可行吗?
不可行的话,怎么使某一片内存不通过缓存直接读写物理地址呢?

Nancy Wang:

请问是想修改MAR12的长度吗?应该是不行的,范围已经固定了。

,

Renran:

不是想改变长度。想对MAR12内存段寄进行读写的时候,不通过缓存,直接读写物理地址,从而避免缓存一致性的问题。

,

Renran:

正常情况下向共享内存写数据应该在写之后加入缓存回读,读之前缓存失效。通过Cache_setMar() MAR12 第0bit写0之后,按照我的理解,应该不需要再进行回读和失效的操作才对,但是数据还是写到了L1D缓存上。

,

Renran:

上午测试了一下,想向0x01848030 写0,结果是 ;地址上的数据是1,这个地址不能直接写吗?文档中有 “  The MAR registers are onlywriteable by Supervisor code.  ” ,这是什么意思呢?

,

Nancy Wang:

通过CACHE_enableCaching配置看看。

ti-processor-sdk-rtos-c667x-evm-06.03.00.106-Windows\pdk_c667x_2_0_16\packages\ti\csl\csl_cacheAux

,

Renran:

是不是要用CACHE_disableCaching()这个api呢? 我昨天尝试了disble没有成功;enable不是打开缓存吗?

,

Nancy Wang:

Renran 说:不通过缓存,直接读写物理地址,

您目前是遇到了缓存一致性问题吗?在没有执行Cache_setMar时就出现了这种现象?

我的理解是不将这段地址配置为cache就不需要执行回读失效的操作。

Renran 说:是不是要用CACHE_disableCaching()这个api呢? 我昨天尝试了disble没有成功;

执行完pc位没有置零吗?

,

Renran:

是的,目前遇到的问题是缓存一致性的问题。现在的解决办法是缓存回写和失效;是的,MAR12 的PC位清不掉。还有一种方案是清除MAR寄存器的PC位,使某个内存段不Caching,共享内存对应MAR12,但是MAR12 PC位清不掉,不管是用API还是直接写地址。

,

Renran:

我在文档中看到了     ,这是MAR12 PC位清不掉的原因吗?

,

Nancy Wang:

Renran 说:我在文档中看到了     ,这是MAR12 PC位清不掉的原因吗?

可以修改的,corepac user guide上有标注。

,

Renran:

您好,感谢您的回复,我刚刚去尝试了一下,12到15在EVM板上PC位确实清除不掉。我现在使用XMC模块处理的这个问题。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: 使用C64+库解决缓存一致性问题。
分享到: 更多 (0)