你(们)好
目前、我遇到了 DMA 访问问题、
存储器访问期间始终会有200ns 的暂停时间、
我的程序从 EMIF CS2读取数据、并将数据写入内部 GS0。
下面显示的波形是信号 CS2。
那么、芯片设计是否能够在运行期间消除暂停?


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 访问问题、
存储器访问期间始终会有200ns 的暂停时间、
我的程序从 EMIF CS2读取数据、并将数据写入内部 GS0。
下面显示的波形是信号 CS2。
那么、芯片设计是否能够在运行期间消除暂停?


我要分享的更多信息:
我的任务是使用 DMA CH1继续从外部 EMIF CS2读取512 16位数据、并将512 16位数据写入内部配置的 GS0 RAM。
在代码中、禁用所有 INT、停止所有未使用的 DMA 通道。 GS0仅配置为 DMA 写入数据、外部 EMIF CS2仅配置 DMA 读取。 CPU 仅使用内部 RAM 和 ROM 进行操作。
详细的 DMA 配置 如下所示。
/ /
ramgs0:>RAMGS0,type=NOINIT
ramgdma:> EMIF1_CS2n,type=NOINIT
/ /
/ /
#pragma DATA_SECTION (sData、"ramgs0");//将 TX 数据映射到存储器
#pragma DATA_SECTION (RDATA、"ramgdma");//将 RX 数据映射到存储器
uint16_t sData[512];//发送数据缓冲区
uint16_t RDATA[512];//接收数据缓冲器
#define BURST 32 //将8写入寄存器以获得8的突发大小
#define 传输16 //[(MEM_buffer_size/(burst)]
/ /
dma_initController();
DEVICE_DELAY_US (50000);
const void * destAddr;
const void *srcAddr;
srcAddr =(const void *) RDATA;
destAddr =(const void *) sData;
//
//配置 DMA CH6
//
dma_configAddresses (dma_ch1_base、destAddr、srcAddr);
dma_configBurst (dma_ch1_base、burst、1、1);
dma_configTransfer (dma_ch1_base、transfer、1、1);
DMA_CONFIGMode (DMA_CH1_BASE、DMA_TRIGGER_SOFTWARE、DMA_CFG_OneShot_ENABLE);//DMA_CFG_OneShot_enable//DMA_CFG_OneShot_disable
DMA_setEmulationMode (dma_emulation_free_run);//dma_emulation_stop//dma_emulation_free_run
// dma_configWrap (dma_ch1_base、10、1、10、1);
DMA_setPriorityMode (0);
DMA_stopChannel (DMA_CH2_base);
DMA_stopChannel (DMA_CH3_base);
DMA_stopChannel (DMA_CH4_base);
DMA_stopChannel (DMA_CH5_base);
DMA_stopChannel (DMA_CH6_BASE);
// dma_setInterruptMode (dma_ch1_base、dma_int_at_end);
DMA_enableTrigger (DMA_CH1_base);
示波器显示所有512数据都应传输完成、但在访问期间、每个数据都有大约200ns 的多次暂停。
我意识到数据表中 DMA 状态图中有类型或停止点、但我已经尝试设置处理器的多个寄存器。 不奏效
具有3个暂停的图片是从 CS2读取数据并写入 GS0
6个暂停的画面是从 GS0读取数据并写入 CS2。
感谢您的任何支持。
我刚刚从数据表中看到这个说明"即使未使用 SDRAM 接口、EMIF 也会刷新 SDRAM。 如果用户正在使用
只有 ASRAM 接口、然后 SDRAM 刷新将影响 ASRAM 性能。 为避免这种情况、
用户必须在 SDRAM_CR 寄存器(EMif1Regs.SDRAM_CR.bit.PD=1)中设置 PD=1。 该位可以
只有在没有挂起的 EMIF 访问时才会被更新。"