主题中讨论的其他器件: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);
}
非常感谢

