TI中文支持网
TI专业的中文技术问题搜集分享网站

请教edma3传输数据到EMIFA上的问题

各位专家,你们好

我使用的芯片是c6747,现在想实现从内部buffer传输数据到EMIFA上,想通过DMA的方式进行。EMIFA上面挂载的是sram,8bit,可读写,起始地址为0x6200 0000;请问应该怎么配置EDMA?

我看了数据手册,EMIFA只是个DMA slave,那像我这种情况,EDMA没有专门的内部ram对应的通道来发起EDMA,我应该怎么配置呢?

我尝试了GPIO触发中断trigger EDMA,src配置为内部ram,dest配置为EMIFA地址,但是触发后DMA传输不成功,不知道什么原因,烦请解答!

Jacob1:

你看你是块操作还是单独数操作,配置都是不一样的。而且这种DAM最好能有事件触发方式来进行DMA操作。

你尝试的GPIO触发中断应该是可以的,不成功,肯定是你看看你的相关sram配置、EMIFA的配置是否是正确的。还有DMA配置,不仅仅是地址的配置的,还有其他寄存器的配置的,这些都是需要看datasheet的。

rose zhong:

我想使用块操作。

下面是我的EDMA配置:

void gpio3_tx_edma(unsigned char *psrc,unsigned char *pdest,u32 len)

{

//clear previous bit CSL_EDMA3_CHA_UART0_RX to enable edma channel CSL_EDMA3_CHA_UART0_RX

edma3ccRegs->SECR                      = (u32)0x1 << CSL_EDMA3_CHA_GPIO3_INT;        

               edma3ccRegs->ECR                      |= (u32)0x1 << CSL_EDMA3_CHA_GPIO3_INT;         //clear event CSL_EDMA3_CHA_UART0_RX

edma3ccRegs->ICR                       = 0xffffffff;                                  //clear event CSL_EDMA3_CHA_UART0_RX

//clear previous events in channel CSL_EDMA3_CHA_UART0_RX

               edma3ccRegs->EMCR                      = (u32)0x1 << CSL_EDMA3_CHA_GPIO3_INT;                        

*(volatile unsigned int *)0x01c08128  |= 0xffff;

// PaRAM parameter                                                                                                                            

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].OPT     = 0x0| (1<<20) |(EMIFA_TX_TCC<<12);                                        

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].SRC     = (u32)psrc;//(Uint32)uart0Regs->RBR;                                          

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].A_B_CNT = 0x10001;                                                                            

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].DST     = (u32)pdest;                                                                          

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].CCNT    = len;                                                                                

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].LINK_BCNTRLD = 0x1ffff;        

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].SRC_DST_BIDX = 0x10001;                                                                        

edma3ccRegs->PARAMSET[CSL_EDMA3_CHA_GPIO3_INT].SRC_DST_CIDX = 0x10001;                                                                        

//*(volatile unsigned int *)0x01c08240  &= 0xfffffffc;

edma3ccRegs->DRA[1].DRAE              |= (u32)0x1 << EMIFA_TX_TCC;

edma3ccRegs->IESR                     |= (u32)0x1 << EMIFA_TX_TCC;                   //设置IER的第TCCbit为1,使能传输完毕中断

edma3ccRegs->EESR                      = (u32)0x1 << CSL_EDMA3_CHA_GPIO3_INT;

edma3ccRegs->ESR                       = (u32)0x1 << CSL_EDMA3_CHA_GPIO3_INT;        //手动触发DMA

}

我是这样调用的:

unsinged char src[20];

初始化src数组

gpio3_tx_edma(src,(char *)sram_start_add,len);

执行的结果是:

只搬运了第一个byte,然后没有其他的动作了,我看了EDMA3TC0里面的ERRSTAT寄存器,MMRAERR被置位了,但是我找不到原因。

烦请帮忙解答!多谢!

赞(0)
未经允许不得转载:TI中文支持网 » 请教edma3传输数据到EMIFA上的问题
分享到: 更多 (0)