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.

请问EDMA可以支持L2和映射后的地址空间之间进行数据传输么?



各位专家,

                 我使用的是6678,由于编程需要,我把全部4M的共享内存映射到了虚拟内存地址0x50000000,各个核之间对其进行数据处理,一切工作正常。但是我发现

无法通过EDMA对L2空间和映射后的虚拟地址(0x50000000)之间进行数据传输。简单的说,就是我希望通过EDMA对L2和共享内存的数据进行搬移,但是似乎

EDMA不能识别经过映射后的共享内存的虚拟地址。EDMA的设置应该是正确的,L2和L2之间的搬移都是正确的,我看了下网上有人说还需要再通过SES将共享内存

映射到虚拟内存地址0x50000000,但是我试了一下还是不行。我有点怀疑是不是EDMA不能支持经过映射后的虚拟内存地址?

  • 支持。需要在使用EDMA之前配置好SES,可能你的SES配置有问题,关于SES配置可以参考STK中memory_test例程。

    STK:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

  • 您好,memory_test例程我已经看了,该例程只是设置了CorePac的MPAX没有设置SES的MPAX。

    请问根据我对共享内存的映射,我该怎么配置SES才能使用EDMA了?非常感谢!

  • 可以调用keystone_common.c中的KeyStone_SES_MPAX_setup进行配置,EDMA的PrivID与启动该EDMA的master一致,如果是core2启动EDMA则对应core2的privID。关于PrivID的对应关系参考对应器件的data manual,如C6678 则在手册C6678 data manual SPRS691D table7-52.

  • 您好,我对SES的MPAX的寄存器也进行了如下设置:

          CSL_MSMC_SESMPAXL mpaxl;
           CSL_MSMC_SMSMPAXH mpaxh;

           mpaxl.ux    = 1;
           mpaxl.uw    = 1;
           mpaxl.ur    = 1;
           mpaxl.sx    = 1;
           mpaxl.sw    = 1;
           mpaxl.sr    = 1;
           mpaxl.raddr = 0x50000000>>12;
           mpaxh.segSz = 0x15;
           mpaxh.baddr = 0C000000>>12;

           CSL_MSMC_setSMSMPAXH (privid, index, &mpaxh);
           CSL_MSMC_setSESMPAXL (privid, index, &mpaxl);

          按照的的理解,这样就可以把0C000000映射到两人0x50000000,当使用EDMA时,EDMA进可以通过0x50000000进行数据拷贝了,但是仍然没有成功,Andy大神可否给个SES的配置方式啊?非常感谢!

  • 我告诉你的keystone_common.c中的KeyStone_SES_MPAX_setup函数就可以直接用来配置,其使用你可以参考memory_test_main.c中对KeyStone_XMC_MPAX_setup的调用的!

    MPAXH.BADDR是逻辑地址,应该填0x50000000>>12; MPAXL.RADDR对应的物理地址,应该填写0x00c000000>>8。

    你这里为何要把SL2全部重新映射成SL3?这样映射之后SL2的就相当于DDR,访问效率会降低。