138的arm和dsp有段共享的128k空间
现在arm段写入 2个数, 比如
a = 1
b = 2
dsp去读
在dsp代码有查询b, 若b==2, 则读a
现在的问题是有时候, dsp读到b=2, 然后去读a的时候, 数据是上次a的数值, 需要加50ms左右延时才正确
当a内容越多的时候约明显, 当a是4字节是几乎不需要颜色, 8字节时50ms, 更多字节时延时要更长,才能保证100%正确
noaming:
这个很奇怪啊,使用cache了吗?
Tony Tang:
应该是没有做数据Cache一致性维护的问题,请确认:
ARM和DSP的data Cache是否使能了?以及相应的内存区域是否使能Cachable, ARM由MMU表控制,DSP由MAR寄存器控制。
#1. 做为验证,先把Cache关掉试试。
#2. 如果关掉后就可以了,那么在代码里加上Cache一致性维护的控制代码。
liangzhu ma:
回复 Tony Tang:
补充一下, 我们用的是双端口ram, 0x8000 0000开始的, 应该没有缓存吧
arm的MMU应该是管理ddr2的吧
Tony Tang:
回复 liangzhu ma:
#1. 0x80000000开始是ShareRam。在系统架构上与外部内存没有区别,都是接在系统总线SCR上。
#2. Cache是CPU的,与memory本身无关。
#3. MMU可以管理CPU自身内存之外的内存空间。
#4. DSP的MAR可以管理L2之外的系统中的所有内存空间。
可以参考Starterware的MMU/Cache例程的MMU配置代码:
AM1808_StarterWare_1_00_02_02\examples\evmAM1808\cache_mmu\uartEdma_Cache.c
……
for(index = 0; index < (4*1024); index++) { if((index >= 0xC00 && index < 0xE00)|| (index == 0x800)) { pageTable[index] = (index << 20) | 0x00000C1E; } else { pageTable[index] = (index << 20) | 0x00000C12; } }
user4699890:
回复 Tony Tang:
Tony Tang 你好,arm在sysbios下如何指定对应的内存或数组可以cache?比如只想share ram或者一个比较大的数组可以cache.现在是cfg使能了cache和mmu,发现所有内存都可以chace,维护一致性工作比较繁琐.
Tony Tang:
回复 user4699890:
对于Cache的配置,ARM是由MMU table配置的,DSP端是由MARn寄存器配置的。