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.

OMAP138在DDR上跑EDMA测试程序的问题

Other Parts Discussed in Thread: SYSBIOS

项目中需要向FPGA寄存器中写入N×1Byte的数据,所以想用EDMA来实现,通过看CSL库提供的历程以及手册,在手动触发情况下,发现A类传输使用TCC链接事件本身每次1Byte与AB类传输触发一次事件传输BCNT个1Byte,均可以达到想要的效果。
但是问题来了,程序跑在片上RAM中可以正常运行,但是跑在DDR上就会有丢数的情况出现,
做了个试验,在SYSBIOS的平台文件中,将L1和L2均设置成0KB,跑在DDR上的话测试就可以通过,感觉像是程序跑得慢一些就可以……
通过手册以及GEL文件的配置,PLL1的DIV1会分给DDR,分配了300M,因为手册中写到需要配到工作时钟的2X;
没找到EDMA的时钟怎么配置,难道是PLL0的DIV2吗?
这两个东西要怎么配置才可以很好的合作呢????想不太明白……

  • 前几天试了一下,发现并不是时钟的问题,我将EDMA访问的数据放到L2RAM上就可以正常传输,但是放到DDR上就会有问题,看到一个文章,http://www.deyisupport.com/question_answer/dsp_arm/omap_l1x/f/54/t/48987.aspx,里边你们TI的同事和提问者讨论到cache的一致性问题,看的不是太明白。

    我现在想问的就是,

    1.如果我的数据还是想放在DDR上,有什么办法可以让EDMA正常工作,在手动触发EDMA传输之前还需要做哪些操作?

    2.如果EDMA传输对DDR上的数据有这类问题的话,那么我攻城的代码&数据都编到DDR上的话是否还会有其他的问题呢?对于DDR的访问,读写测试都是正常的!

  • jian pan2 说:
    1.如果我的数据还是想放在DDR上,有什么办法可以让EDMA正常工作,在手动触发EDMA传输之前还需要做哪些操作?

    在触发前,做一个Cache write back操作,见下表SYSBIOS的Cache API Cache_wb()。

    jian pan2 说:
    2.如果EDMA传输对DDR上的数据有这类问题的话,那么我攻城的代码&数据都编到DDR上的话是否还会有其他的问题呢?对于DDR的访问,读写测试都是正常的!

    代码不受Cache影响。只有数据需要做一致性处理。

    #include <ti/sysbios/hal/Cache.h>
    Functions common to all ICache modules
    Void 
    Cache_disable(Bits16 type);
    Void 
    Cache_enable(Bits16 type);
    Void 
    Cache_inv(Ptr blockPtrSizeT byteCntBits16 typeBool wait);
    Void 
    Void 
    Cache_wb(Ptr blockPtrSizeT byteCntBits16 typeBool wait);
    Void 
    Void 
    Cache_wbInv(Ptr blockPtrSizeT byteCntBits16 typeBool wait);
    Void 
    Functions common to all target modules
    Typedefs
    typedef enum