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.

[参考译文] CCS/TMS320F28377S:DSP 至 FPGA 使用 DMA 发送数据

Guru**** 2484615 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/701843/ccs-tms320f28377s-dsp-to-fpga-send-data-using-dma

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

 你(们)好

    问题:如果我使用 EMIF、那么 DMA 传输速度的上限是多少?

    在数据表中:吞吐量:四个周期/字(无仲裁)。 这里的4个周期是否意味着系统的周期? 我进行了测试、波形如下:

    DSP_addr:EM1A

   DSP_ce1:EM1CS2

   DSP_DQ:EM1D

   DSP_100M:EM1CLK、100M、200m 时钟获得的结果。

   DSP_Wr:EM1WE

  从上图可以看出、每7个时钟(EM1CLK)就会有一个数据、这里的速度可以提高吗?

   部分代码如下所示:

   :1 μ H

空 EMIF1设置(空)

            //配置为在全速率上运行 EMIF1 (EMIF1CLK = CPU1SYSCLK)

            EALLOW;

            ClkCfgRegs.PERCLKDIVSEL.bit.EMIF1CLKDIV = 0x1;

            EDIS;

 

            EALLOW;

 

            //禁用访问保护(CPU_Fetch、CPU_WR/DMA_WR)

            EMIF1ConfigRegs.EMIF1ACCPRT0.ALL = 0x0;

            if (emif1ConfigRegs.EMIF1ACCPRT0.ALL!= 0x0)

            {

             ErrCount++;

            }

 

            //提交与保护相关的配置。 直到该位保持置位

            //无法更改 EMIF1ACCPROT0寄存器的内容。

            EMIF1ConfigRegs.EMIF1COMMIT.ALL = 0x1;

            if (emif1ConfigRegs.EMIF1COMMIT.ALL!= 0x1)

            {

            ErrCount++;

            }

 

            //锁定配置,以便不再更改 EMIF1COMMIT 寄存器。

            EMIF1ConfigRegs.EMIF1LOCK.ALL = 0x1;

            if (emif1ConfigRegs.EMIF1LOCK.ALL!= 1)

            {

             ErrCount++;

            }

 

            EDIS;

 

            //为 EMIF1配置 GPIO 引脚

            setup_emif1_pinmux_async_32位(0);

            Emif1Regs.ASYNC_CS2_CR.ALL = (EMIF_ASYNC_ASIZE 32       |// 32位存储器接口

                                                                                                EMIF_ASYNC_TA_1              |// 2个 EMIF 时钟的周转时间

                                                                                                EMIF_ASYNC_RHOLD_1      |//读取1个 EMIF 时钟的保持时间

                                                                                                EMIF_ASYNC_RSTROBE_1 |//读取4个 EMIF 时钟的选通时间

                                                                                                EMIF_ASYNC_RSETUP_1    |//读取1个 EMIF 时钟的建立时间

                                                                                                EMIF_ASYNC_whold_1      |// 1个 EMIF 时钟的写入保持时间

                                                                                                EMIF_ASYNC_WSTROBE_1             |// 1个 EMIF 时钟的写入选通时间

                                                                                                EMIF_ASYNC_WSETUP_1    |// 1个 EMIF 时钟的写入设置时间

                                                                                                EMIF_ASYNC_EW_DISABLE             |//扩展等待禁用。

                                                                                                EMIF_ASYNC_SS_DISABLE  //选通模式禁用。

                                                                                                );

 }

步骤2:

void dma_init()

            易失性 uint16 transfer_cfg;

            DMAInitialize();

       DMACH5AddrConfig32位(CFG_DATA_ADDR、temp_Buf_DMA);

      DMACH5BurstConfig (突发、2、1);

      transfer_cfg=sizeof (MCCfg);

      DMACH5TransferConfig (transfer_cfg、1、0);

      DMACH5ModeConfig (DMA_SPIATX、PERINT_ENABLE、OneShot_disable、CONT_disable

                        、SYNC_DISABLE、SYNC_SRC、OVRFLOW_DISABLE、32位、CHINT_END、CHINT_ENABLE);

非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    xiaoq、

    EMIF 应用报告 可能对您有所帮助。

    它包括如何最大化 EMIF 吞吐量的指导、并在附录中包含测量基准。  C2000Ware 中还有一个 DMA 传输示例(EMIF_dc_DMA)。

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tommy、

      在 EMIF 应用报告 中、'图5。 DMA:异步写入'、我们 可以从该图中看到、吞吐量(Mb/s) 上限接近 115MB/S

      我的 DSP 类型 TMS320F28377DPTPS。现在  DMA 的速度为50MB/s

       我有一个问题、所有类型的28377都可以达到 115MB/S?

        调试时、发现"绕过周期"过大、占用10个系统时钟、代码如下

       EMIF_DC_regs[emifModule]->ASYNC_CS2_CR.bit.TA   = 0;

       如何减少这种情况?

    感谢您的宝贵时间

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tommy、

    在 EMIF 应用报告中、'图5。 DMA:异步写入'、我们可以从该图中看到、吞吐量(Mb/s)上限接近115MB/S

    我的 DSP 类型 TMS320F28377DPTPS。现在 DMA 的速度为50MB/s

    我有一个问题、所有类型的28377都可以达到115MB/S?

    调试时、发现"绕过周期"过大、占用10个系统时钟、代码如下

    EMIF_DC_regs[emifModule]->ASYNC_CS2_CR.bit.TA = 0;

    如何减少这种情况?

    感谢您的宝贵时间
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    xiaoq、

    在使用相同的配置设置时、任何 F2837x 器件都应能够达到相同的基准。 您使用的设置是否与基准测试中列出的设置相同? 您的器件似乎配置为使用100MHz 的 EMIF 时钟、而基准测试以200MHz 的频率与 EMIF 一起运行。

    只需将 TA 配置为0即可最大限度地缩短周转周期。 仅在更改存储器访问模式(读取和写入)时插入周转周期。 如果混合写入和读取、则性能将更接近交错式写入和读取图。

    最后、传输块大小确实会影响性能。 较大的块传输可以利用流水线来最大限度地降低内部 EMIF 总线延迟的影响。

    Tommy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tommy、

      "看起来您的器件配置为使用100MHz 的 EMIF 时钟"、我修改了程序、代码如下、EMIF 为200MHz。

    EALLOW;
    ClkCfgRegs.PERCLKDIVSEL.bit.EMIF1CLKDIV = 0x0;
    EDIS;

       只需将 TA 配置为0即可最大限度地减少周转周期。代码如下、将 TA 配置为0。

    Emif1Regs.ASYNC_CS2_CR.ALL =(EMIF_ASYNC_ASIZE 32 |// 32位存储器接口

    EMIF_ASYNC_TA_1 |//  
    EMIF_ASYNC_RHOLD_1 |//
    EMIF_ASYNC_RSTROBE_4 |//  
    EMIF_ASYNC_RSETUP_1 |//  
    EMIF_ASYNC_whold_1 |//
    EMIF_ASYNC_WSTROBE_1 |//  
    EMIF_ASYNC_WSETUP_1 |//  
    EMIF_ASYNC_EW_DISABLE |//
    EMIF_ASYNC_SS_DISABLE //  
    );

    如下图,所示

    CE 信号占用7个时钟周期、高电平占用4个时钟周期、高电平为 TA。如何进一步缩短 TA 的时间?

    非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    xiaoq、

    您的突发大小是多少? 您可以尝试设置 DMA OneShot 模式。

    如果可能、您也可以尝试从\C2000Ware_XXXX\device_support\f2837xd\examples\CPU1\EMIF_dc_dma\cpu01\中进行设置

    Tommy