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

共享ram后发先置

 

 

 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寄存器配置的。

赞(0)
未经允许不得转载:TI中文支持网 » 共享ram后发先置
分享到: 更多 (0)