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

edma3请教

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之后,需要怎么配置

赞(0)
未经允许不得转载:TI中文支持网 » edma3请教
分享到: 更多 (0)