Thread 中讨论的其他器件:controlSUITE
您好!
我有一个客户使用 DMA 来减少 CPU 上的内存传输开销。 现在、128字节(32x32位)的数据正在从 GS 存储器传输到 EMIF1。
使用 CPU 完成此过程大约需要8us。 在16位 DMA 模式下、相同的传输需要32.8us、在32位 DMA 模式下、传输持续 27.4us。 由于使用32位模式将传输减少一半、这表明实际的 DMA 传输需要~5us。
时序由 IPC 计数器完成、从触发 DMA 之前的右侧开始、并在触发 DMA 完成中断后结束。
以下是用于配置 DMA CH1的值:
DMARegs.CH1.burse_size.all = 31U;//在突发中将32个16位字(X-1) x 首选。 DmaRegs.CH1.SRC_BURST_STEP = 1U;//在每个字 x 首选之间递增源地址。 DmaRegs.CH1.dst_burst_step = 1U;//在每个字 x 首选之间递增 dest addr。 //设置传输寄存器: dmaRegs.ch1.transfer_size = 7U; //每次传输4次突发(X-1)、DMA 中断将在传输完成后发生。 DMARegs.CH1.SRC_TRANSFER_STEP = 1U; //发生换行时忽略 transfer_step。 DmaRegs.CH1.dst_transfer_step = 1U; //发生换行时忽略 transfer_step。 DmaClaSrcSelRegs.DMACHSRCSEL.bit.CH1 = 0U;//源选择 DmaRegs.CH1.MODE.bit.PERINTSEL = 1U; //应硬编码到通道,现在选择源 DmaRegs.ch1.mode.bit.PERINTE = 1U; //外设中断使能 DmaRegs.CH1.MODE.bit.OneShot = 1U; // OneShot 使能 DmaRegs.ch1.mode.bit.continuous = 1U; //连续使能 DmaRegs.ch1.mode.bit.OVRINTE = 0U; //启用/禁用溢出中断 DmaRegs.ch1.mode.bit.DATASIZE = 1U; // 16位/32位数据大小传输 DMaRegs.ch1.mode.bit.CHINTMODE = 1U; //在传输 DmaRegs.ch1.mode.bit.CHINTE = 1U 时向 CPU 生成中断; //通道中断到 CPU 使能 //清除任何伪标志:中断标志和同步错误标志 DmaRegs.ch1.control.bit.PERINTCLR = 1U; DmaRegs.ch1.control.bit.ERRCLR = 1U;
感谢您提供有关缩短此传输时间的任何意见!
Munan