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.

对各种DMA的理解困惑

多核DSP有几种DMA,如EDMA3、IDMA、PKTDMA,看了EDMA3、PKTDMA,但还是感觉困惑,主要是这几种DMA的功能有什么不同,分别面向什么应用场合?

还有,如果是核间数据传输,是PKTDMA快还是EDMA3快?各自特点是什么?

 

  • EDMA3: 通过配置PaRam的方式进行数据搬移,同时指定发送和接收地址,可以比较灵活的按照程序需求的方式进行数据搬移,例如每隔xx Bytes 搬移一次,比较灵活,并且可以在不同memory 或外设之间搬移, 例如 L2<->L2, L2<->SL2, L2<->DDR3, SL2 <->DDR3, L2/SL2/DDR3<->peripheral registers

    IDMA: 仅用于corePac内部的数据搬移,也就是L2<->L2, L2 <-> L1(当L1 被配置成RAM的时候)

    PktDMA: 通过配置描述的方式进行数据搬移,但是每个描述符搬移的数据必须是连续的空间,数据不能离散,如果数据离散,需要采用多个host 类型的描述符,每个描述符指向对应的数据空间,同时并不能指定接收的memory地址,接收地址由Rx flow中RxFDQ的描述符来决定。

    PktDMA和EDMA的搬移速度没有太大差别,都是运行在1/3 DSP的主频,位宽为128bit 或 256bit,具体选用哪种,客户可以根据系统需求资源分配自行决定。

  • EDMA3传输数据有源地址和目的地址,如果是多核之间通信,如core0发到core1,那目的地址怎么表示?此外,当数据传输完后,只有core0端有一个完成中断,而core1有没有机制知道数据传输完成?

  • 如果要使用EDMA完成一个core LL2到另一个core的LL2memory数据传输,则首先需要想办法让触发EDMA的core获得对端core的LL2地址,可以通过共享memory的方式让对端core获取本core的LL2 buffer地址。EDMA完成中断是不区分core的,对于C6678来说,EDMA中断事件会路由到INTC控制器,这个中断可以通过配置进一步路由到每个core的内部中断矢量表,请参考相应芯片的手册了解中断事件的路由。

  • 您好,我最近在学习UPP,利用DMA方式将FPGA传来的数据保存到DSP,我想了解一下一次DMA最多能传输多大的数据,我开了两个2M字节的BUFFER,然后将UPP设置成全收模式,仿真时能看到BUFFER里各自能接受到2M字节的数,我想搞清楚 这些接到的数都存到哪去了,我感觉不能接受到这么多数吧,DSP内存不是才256k字节么,虽然接了DDR,但是能一次接收到这么多数据么?希望大神您能给我指点指点迷津哦

  • EDMA能接收的数据长度为A-cnt*B-cnt*C-cnt,每个cnt的长度是16bit位宽,2M没有问题。你开的buffer应该是放在DDR或者SL2,每个core LL2只有最多1M

  • 你好:

    我最近也在做EDMA,需要core间数据的搬移,弄了很久还是弄不出来。

    请问你core间数据DMA成功了么?

    我可以问你几个问题么?

  • 你好:

    我最近也在做EDMA,需要core间数据的搬移,弄了很久还是弄不出来。

    请问你core间数据DMA成功了么?

    我可以问你几个问题么?

  • 您好,

    McASP 想通过 DMA 输出 多路 AXR,如何配置?

    例程里只用一路AXR。