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.

C6748/OMAPL138 DSP core的并发DMA处理问题

datasheet中EDMA3的diagram显示C6748有两个独立的CC,0和1,二者物理上应该是相互独立的,按理应该可以实现并行操作,为何实际上不行呢?

即CC0的某DMA和CC1的某DMA同时发生时,实际上只能同时执行一个。这是何故?
  • 如果方便,请提供一下波形图帮助理解是如何互相打断的。

  • 囧,附件传图片一次只能传一张……

    本附件的图片显示的是SPI DMA和EMIFA DMA传输不重叠时的“正常”运行结果。

    黄色是EMIFA的CS信号,低有效,总共读20*16bit数据——这里还有个问题就是途中的“another question”处,为何此处CS要退出有效状态再进入呢?此时刻刚好在传完16*16bit数据之后。

    浅蓝色是SPI的CLK信号,直接反映了SPI传输,总共4*16bit数据。

    正常情况二者不相重叠时,SPI数据传输间隔固定有规律。

  • 这是不正常情况的波形。

    此时EMIFA DMA其实时刻始于SPI第一个16bit后期,然后SPI DMA被其打断,直至CS变高即EMIFA DMA结束后,SPI后3个16bit数据才开始传输。

    也就是说,如果同时有两个DMA发生,即使二者对应的channel controler是独立的,在某一绝对时刻也只能有一个DMA数据被传送,right?

    但是datasheet中貌似又号称可以simultaneously transfer,到底怎么回事呢?

  • Jingang Yang 说:
    为何此处CS要退出有效状态再进入呢?此时刻刚好在传完16*16bit数据之后。

    这个是因为EMIFA的FIFO深度是32字节。

  • Tony Tang 说:

    为何此处CS要退出有效状态再进入呢?此时刻刚好在传完16*16bit数据之后。

    这个是因为EMIFA的FIFO深度是32字节。

    [/quote]

    那多DMA并发传输的问题呢?

  • Jingang Yang 说:
    那多DMA并发传输的问题呢

    从理论上想不出所以然,会不会是DMA配置不对,实际上没有配置到两个DMA上呢?

  • Tony Tang 说:

    那多DMA并发传输的问题呢

    从理论上想不出所以然,会不会是DMA配置不对,实际上没有配置到两个DMA上呢?

    [/quote]

    这个应该不会,配置完之后通过CCS-->View-->Registers查看EDMACC0DSP和EDMACC1DSP可以查看两组DMA对应的PaRAM config是预期的。

    另外,示波器上看到SPI DMA的数据是在传输的,FPGA通过Quartus的SignalTap也可以抓到EMIFA DMA在读取20*16bit数据。

    不过对于TC的配置基本上之用芯片复位后的默认配置。按理说默认CC0对应TC0,CC1对应TC1直接就是分开的。

    或者可不可以请Tony你弄个小程序测试一下两种DMA同时工作的小程序试一下?看看结果如何?

  • CC1只有一个TC0啊。

  • Tony Tang 说:

    CC1只有一个TC0啊。

    不是这样的啦,呵呵。CCS中查看的registers中的命名跟datasheet并非一一对应的。你可以打开registers界面看看。

    EDMACC0DSP对应的是上图中的0_CC0,EDMATC0DSP对应上图0_CC0的TC0,EDMATC1DSP对应上图0_CC0的TC1,

    而EDMACC1DSP对应的是上图中的1_CC0,EDMATC2DSP对应上图1_CC0的TC0。

    整理如下:

    CCS/registers                  datasheet                              CSL库

    EDMACC0DSP          EDMA3_0_CC0         CSL_EDMA30CC_0_REGS

    EDMACC1DSP          EDMA3_1_CC0         CSL_EDMA31CC_0_REGS

    EDMATC0DSP          EDMA3_0的TC0        CSL_EDMA30TC_0_REGS

    EDMATC1DSP          EDMA3_0的TC1        CSL_EDMA30TC_1_REGS

    EDMATC2DSP          EDMA3_1的TC0        CSL_EDMA31TC_0_REGS

    也就是说我现在用的SPI DMA隶属于EDMACC0DSP/EDMA3_0_CC0,EMIFA/FPGA DMA隶属于EDMACC1DSP/EDMA3_1_CC0,即上图中的上下两个独立的CC。

x 出现错误。请重试或与管理员联系。
x 出现错误。请重试或与管理员联系。
x 出现错误。请重试或与管理员联系。