C:\ti\C6748_StarterWare_1_20_04_01\examples\evmC6748\uart_edma这个例程实现了什么功能,能不能说的清楚一点,谢谢
Shine:
starterware user guide里有说明。http://processors.wiki.ti.com/index.php/StarterWare_01.20.01.01_User_Guide#Example_Application_.28EDMA.29
Victorsunhao:
回复 Shine:
我需要在算法执行完之后(算法执行的时间是等间隔的)立刻将数据通过EDMA3传输到上位机,用的是UART,请问这个怎么使用EDMA,您给点建议与指导,谢谢!
Victorsunhao:
回复 Shine:
int main(void){
/* Initialize EDMA3 Controller */ EDMA3Initialize(); //
// /* Initialize UART */// UARTStdioInit();
/* Request DMA Channel and TCC for UART Transmit*/ EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX, EVT_QUEUE_NUM);
/* Registering Callback Function for TX*/ cb_Fxn[EDMA3_CHA_UART2_TX] = &callback;
/* Request DMA Channel and TCC for UART Receive */ EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, EDMA3_CHA_UART2_RX, EDMA3_CHA_UART2_RX, EVT_QUEUE_NUM);
/* Registering Callback Function for RX*/ cb_Fxn[EDMA3_CHA_UART2_RX] = &callback; //发送与接收都用同一个回调函数,这个回调函数的作用就是uartdmadisable,然后flag变为一!!!!!!
/* Used for bCnt */ buffLength = strlen((const char *) enter);
/* Transmit Data for Enter Message */ UartTransmitData(EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX, enter, buffLength);
/* Enabling UART in DMA Mode*/ UARTDMAEnable(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1 | \ UART_DMAMODE | \ UART_FIFO_MODE );
/* Wait for control to return from call-back function */ while(0 == flag); flag = 0;
/* Receive Data for Input */ UartReceiveData(EDMA3_CHA_UART2_RX, EDMA3_CHA_UART2_RX, buffer);
/* Enabling UART in DMA Mode*/ UARTDMAEnable(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1 | \ UART_DMAMODE | \ UART_FIFO_MODE );
/* Wait for return from callback */ while(0 == flag); flag = 0;
/* Transmit Data for Entered value */ UartTransmitData(EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX, buffer, RX_BUFFER_SIZE);
/* Enabling UART in DMA Mode*/ UARTDMAEnable(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1 | \ UART_DMAMODE | \ UART_FIFO_MODE );
/* Wait for return from callback */ while(0 == flag); flag = 0;
/* Free EDMA3 Channels for TX and RX */ EDMA3FreeChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, EDMA3_CHA_UART2_TX, EDMA3_TRIG_MODE_EVENT, EDMA3_CHA_UART2_TX, EVT_QUEUE_NUM);
EDMA3FreeChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, EDMA3_CHA_UART2_RX, EDMA3_TRIG_MODE_EVENT, EDMA3_CHA_UART2_RX, EVT_QUEUE_NUM);
while(1);
}
这个为Starterware中关于Uart的edma3例程,为什么在下面的地方来了这个while(0==flag)
/* Transmit Data for Enter Message */ UartTransmitData(EDMA3_CHA_UART2_TX, EDMA3_CHA_UART2_TX, enter, buffLength);
/* Enabling UART in DMA Mode*/ UARTDMAEnable(SOC_UART_2_REGS, UART_RX_TRIG_LEVEL_1 | \ UART_DMAMODE | \ UART_FIFO_MODE );
/* Wait for control to return from call-back function */ while(0 == flag); flag = 0;
注释中Wait for control to return from call-back function 是用来干什么的?
还有这个例程是不是只能接收一次,回复一次就不能再接收了??
谢谢,求助!!
Victorsunhao:
回复 Shine:
/* Initialize UART */ UARTStdioInit();
这个函数有什么作用?对UART的数据格式、波特率等等进行配置了吗????
Shine:
回复 Victorsunhao:
这个函数的定义在C6748_StarterWare_1_20_04_01\utils\uartStdio.c文件里。
Shine:
回复 Shine:
从源码看,这个函数其实就是调用UARTConsoleInit(); UARTConsoleInit();的作用是配置uart波特率,start,stop位等,在你另外一个帖子里已回复。
Victorsunhao:
回复 Shine:
UARTConsoleInit();这个函数的源文件在哪里有?我找不到,谢谢
Shine:
回复 Victorsunhao:
你的另外一个帖子里已回复。http://www.deyisupport.com/question_answer/dsp_arm/c6000_dsp/f/32/t/87147.aspx
Victorsunhao:
回复 Shine:
出发EDMA3传输有3种,(1)手动触发(2)事件触发(3)QDMA触发
对于A_sync传输,需要完成B*C次传输,如果我想用手动触发(就是执行完一个算法函数之后立刻触发EDMA3传输),每传完一个Acnt bytes之后,需要怎么配置