This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

共享ram后发先置

Other Parts Discussed in Thread: AM1808, SYSBIOS

 

 

 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%正确

 

 

 

 

 

  • 这个很奇怪啊,使用cache了吗?

  • 应该是没有做数据Cache一致性维护的问题,请确认:

     ARM和DSP的data Cache是否使能了?以及相应的内存区域是否使能Cachable, ARM由MMU表控制,DSP由MAR寄存器控制。

    #1. 做为验证,先把Cache关掉试试。

    #2. 如果关掉后就可以了,那么在代码里加上Cache一致性维护的控制代码。

  •  补充一下, 我们用的是双端口ram,  0x8000 0000开始的, 应该没有缓存吧

    arm的MMU应该是管理ddr2的吧

     

     

  • #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;
             }
        }

  • Tony Tang 你好,arm在sysbios下如何指定对应的内存或数组可以cache?比如只想share ram或者一个比较大的数组可以cache.现在是cfg使能了cache和mmu,发现所有内存都可以chace,维护一致性工作比较繁琐.
  • 对于Cache的配置,ARM是由MMU table配置的,DSP端是由MARn寄存器配置的。