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

学习官方uart dma例程的一点疑问

在学习uart dma的时候,想让它一直收发,可是如果不把UDMASetupTransfer放在while(1)里面,就会一直回显停不下来,为什么每次运行都要UDMASetupTransfer才能正常呢?  可以只配置一次,来实现一直收发么?

主函数

while(1){
	bRxDone = false;//// Setup DMA transfer for UART A0//UDMASetupTransfer(UDMA_CH8_UARTA0_RX,UDMA_MODE_BASIC,8,UDMA_SIZE_8,UDMA_ARB_2,(void *)(UARTA0_BASE+UART_O_DR),UDMA_SRC_INC_NONE,(void *)ucTextBuff,UDMA_DST_INC_8);//// Enable Rx DMA request from UART//MAP_UARTDMAEnable(UARTA0_BASE,UART_DMA_RX);//// Wait for RX to complete//while(!bRxDone){}//// Setup DMA transfer for UART A0//UDMASetupTransfer(UDMA_CH9_UARTA0_TX,UDMA_MODE_BASIC,8,UDMA_SIZE_8,UDMA_ARB_2,(void *)ucTextBuff,UDMA_SRC_INC_8,(void *)(UARTA0_BASE+UART_O_DR),UDMA_DST_INC_NONE);//// Enable TX DMA request//MAP_UARTDMAEnable(UARTA0_BASE,UART_DMA_TX);
}

中断函数:

static void UARTIntHandler()
{//// Check if RX//if(!bRxDone){
	//
	// Disable UART RX DMA
	//MAP_UARTDMADisable(UARTA0_BASE,UART_DMA_RX);

	//
	// Siganl RX done
	//bRxDone = true;}else{
	//
	// Disable UART TX DMA
	//MAP_UARTDMADisable(UARTA0_BASE,UART_DMA_TX);}//// Clear the UART Interrupt//MAP_UARTIntClear(UARTA0_BASE,UART_INT_DMATX|UART_INT_DMARX);
}

还有一个问题就是中断函数里面的else为什么没有触发过? 不是在数据传输完毕之后触发么?

感谢解答!

Terry Han:

建议参考uart_dma的例程测试,同时关于uDMA的一些简单解释

DMA传输模式

基本模式用于外设和存储器之间DMA传输;自动模式用于存储器和存储器之间软件DMA传输;

乒乓模式用于外设和存储器之间的连续DMA传输,乒乓模式需要主和备用两个通道控制,

系统使用主和备用两个通道控制交替进行DMA传输;

分集模式包括存储和外设分集模式,分集模式将两个及两个以上数据块利用DMA传输到一个数据块或外设

//*****************************************************************************

#define UDMA_MODE_STOP          0x00000000

#define UDMA_MODE_BASIC         0x00000001

#define UDMA_MODE_AUTO          0x00000002

#define UDMA_MODE_PINGPONG      0x00000003

#define UDMA_MODE_MEM_SCATTER_GATHER                                          \

                                0x00000004

#define UDMA_MODE_PER_SCATTER_GATHER                                          \

                                0x00000006

#define UDMA_MODE_ALT_SELECT    0x00000001

苜蓿草:

回复 Terry Han:

这个就是基于uart dma的例程 几乎没有变动,只是加了一个while(1)

赞(0)
未经允许不得转载:TI中文支持网 » 学习官方uart dma例程的一点疑问
分享到: 更多 (0)