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

AM335x EDMA配制示例

在哪里可以找一个有关EDMA配制的DEMO示例(用DMA将数据搬到DDR中),谢谢。

Steven Liu1:

可以参考Starterware的例程中,有个UART_EDMA。

afsa af a:

回复 Steven Liu1:

谢谢你的回复。

我用的是uartEcho_edma示例,但是整个工程跑不下来。就会在主函数    UartEDMARxConfTransfer(EDMA3_UART_RX_CHA_NUM, EDMA3_UART_RX_CHA_NUM, rxBuffer, sizeof(rxBuffer)); 下面的while处死掉了,希望能够给予指导,谢谢。

 

nt main(void)
{/* Configure and enable the MMU. */MMUConfigAndEnable();/* Enable all levels of Cache. */CacheEnable(CACHE_ALL);/* Configuring the system clocks for EDMA. */EDMAModuleClkConfig();/* Configuring the system clocks for UART0 instance. */UART0ModuleClkConfig();/* Performing Pin Multiplexing for UART0 instance. */UARTPinMuxSetup(0);/* Enabling IRQ in CPSR of ARM processor. */IntMasterIRQEnable();/* Initializing the ARM Interrupt Controller. */IntAINTCInit();/* Initializing the EDMA. */EDMA3Initialize();/* Initializing the UART0 instance for use. */UARTInitialize();/*** Configuring the EDMA.*//* Request DMA Channel and TCC for UART Transmit*/EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA,EDMA3_UART_TX_CHA_NUM, EDMA3_UART_TX_CHA_NUM,EVT_QUEUE_NUM);/* Registering Callback Function for TX*/cb_Fxn[EDMA3_UART_TX_CHA_NUM] = &callback;/* Request DMA Channel and TCC for UART Receive */EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA,EDMA3_UART_RX_CHA_NUM, EDMA3_UART_RX_CHA_NUM,EVT_QUEUE_NUM);/* Registering Callback Function for RX*/cb_Fxn[EDMA3_UART_RX_CHA_NUM] = &callback;/******************** Transmission of a string **************************//* Configuring EDMA PaRAM sets to transmit 'welcome' message. */UartEDMATxConfTransfer(EDMA3_UART_TX_CHA_NUM,EDMA3_UART_TX_CHA_NUM,welcome,sizeof(welcome) - 1);/* Wait for return from callback */while(0 == clBackFlag);clBackFlag = 0;/******************** Transmission of a string **************************//* Configuring EDMA PaRAM sets to transmit 'intent' message. */UartEDMATxConfTransfer(EDMA3_UART_TX_CHA_NUM,EDMA3_UART_TX_CHA_NUM,intent,sizeof(intent) - 1);/* Wait for return from callback */while(0 == clBackFlag);clBackFlag = 0;/******************** Transmission of a string **************************//* Configuring EDMA PaRAM sets to transmit 'enter' message. */UartEDMATxConfTransfer(EDMA3_UART_TX_CHA_NUM,EDMA3_UART_TX_CHA_NUM,enter,sizeof(enter) - 1);/* Wait for return from callback */while(0 == clBackFlag);clBackFlag = 0;/********************* Receiving Data from User *************************//* Configuring the PaRAM set for reception. */UartEDMARxConfTransfer(EDMA3_UART_RX_CHA_NUM,EDMA3_UART_RX_CHA_NUM,rxBuffer,sizeof(rxBuffer));/* Wait for return from callback */ while(0 == clBackFlag); clBackFlag = 0;/******************* Echoing received bytes *****************************//* Configuring the PaRAM set to transmit the bytes that were received. */UartEDMATxConfTransfer(EDMA3_UART_TX_CHA_NUM,EDMA3_UART_TX_CHA_NUM,rxBuffer,sizeof(rxBuffer));/* Wait for return from callback */while(0 == clBackFlag);clBackFlag = 0;/******************* Freeing of allocated channels **********************//* Free EDMA3 Channels for TX and RX */EDMA3FreeChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA,EDMA3_UART_TX_CHA_NUM, EDMA3_TRIG_MODE_EVENT,EDMA3_UART_TX_CHA_NUM, EVT_QUEUE_NUM);EDMA3FreeChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA,EDMA3_UART_RX_CHA_NUM, EDMA3_TRIG_MODE_EVENT,EDMA3_UART_RX_CHA_NUM, EVT_QUEUE_NUM);/* Support for Automation Testing. */PRINT_RESULT_PASS();while(1);
}

afsa af a:

回复 Steven Liu1:

谢谢你的回复。用DMA将数据从DDR拷到DDR的这种方式与uart_edma示例在DMA配制上的区别有哪些,谢谢。

afsa af a:

回复 Steven Liu1:

谢谢你的回复。我对这个示例我点疑问:就是从串口收数据时,怎么没有通过DMA将数据搬到指定rxBuffer数组里面去,因为通过调试我发现rxBuffer数组里面全是0。

/* Configuring the PaRAM set for reception. */UartEDMARxConfTransfer(EDMA3_UART_RX_CHA_NUM,EDMA3_UART_RX_CHA_NUM,rxBuffer,sizeof(rxBuffer));/* Wait for return from callback */while(0 == clBackFlag);

Steven Liu1:

回复 afsa af a:

差别主要是在写parameter表的时候,你要拷贝的源地址和目的地址的差异。用EDMA之前,建议先好好看看TRM手册上面的EDMA章节,说的还是挺详细的。

afsa af a:

回复 Steven Liu1:

谢谢你的指导。我拿到的这个Demo示例中怎么从串口通过DMA搬数据,怎么目的数组rxBuffer没有数据,希望能够给予指导下。

/********************* Receiving Data from User *************************//* Configuring the PaRAM set for reception. */UartEDMARxConfTransfer(EDMA3_UART_RX_CHA_NUM,EDMA3_UART_RX_CHA_NUM,rxBuffer,sizeof(rxBuffer));/* Wait for return from callback */while(0 == clBackFlag);

afsa af a:

回复 Steven Liu1:

是的,谢谢你的指导,程序中确实开了Cache,关闭就看到数据了。

afsa af a:

回复 Steven Liu1:

你好,将UART_EDMA示例修改为从DDR到DDR的,我只修改目的地址,但是EVENT Num如何进行修改,谢谢。

key dongle:

回复 Steven Liu1:

Steven Liu, 您好,请问一下,修改uart edma,怎样可以实现串口的不定长DMA接收数据?

AM335x的串口接收超时中断Rx timeout interrupt 不能单独使能啊。

谢谢了!

赞(0)
未经允许不得转载:TI中文支持网 » AM335x EDMA配制示例
分享到: 更多 (0)