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

CC3200 用UART DMA接收串口数据时,每次读到的最后一个字节都为0

问题:我用串口调试助手往CC3200发送一组十六进制数,如“12 CA 35 FD 56 AC B4 67 89 BF DE EA AD”,但收到的buf为“12 CA 35 FD 56 AC B4 67 89 BF DE EA 0”,也就是最后一个字节丢了。发送其他长度的数据也同样会丢失最后一字节。

代码:

/*********************UartDMAInit***********************/
void UartDMAInit(void)
{//// Configure the UART Tx and Rx FIFO level to 1/8 i.e 2 characters//UARTFIFOLevelSet(UARTA1_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8);//// Register interrupt handler for UART//osi_InterruptRegister(INT_UARTA1, UartDMAHandler, INT_PRIORITY_LVL_1);//// Enable DMA done interrupts for uart//MAP_UARTIntEnable(UARTA1_BASE, UART_INT_DMARX | UART_INT_DMATX);//UART_INT_RX//// Initialising the Terminal.//MAP_UARTConfigSetExpClk(UARTA1_BASE, MAP_PRCMPeripheralClockGet(PRCM_UARTA1), \UART_BAUD_RATE, (UART_CONFIG_WLEN_8 |  \UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
}
/*********************UartDMAReceive***********************/
int UartDMAReceive(const char* Rxbuf)
{int uint = 0;do{UartDMAReceiveUnit(Rxbuf+uint*RECEIVE_LENGTH, RECEIVE_LENGTH, uint);  //RECEIVE_LENGTH = 1if(!user.RxDone){break;}}while(++uint*RECEIVE_LENGTH <= 1024);return (1+uint)*RECEIVE_LENGTH;
}
/*********************UartDMAReceiveUnit***********************/
static void UartDMAReceiveUnit(const char* Rx_buf, int len, int cnt)
{//// Setup DMA transfer for UART A1//UDMASetupTransfer(UDMA_CH10_UARTA1_RX,UDMA_MODE_BASIC,len,UDMA_SIZE_8,UDMA_ARB_1,(void *)(UARTA1_BASE+UART_O_DR),UDMA_SRC_INC_NONE,(void *)Rx_buf,UDMA_DST_INC_8);//// Enable Rx DMA request from UART//MAP_UARTDMAEnable(UARTA1_BASE,UART_DMA_RX);
#if CLOSSE_POWER_SLEEPWAITTING_UART_RX;
#elseif(cnt==0){WAITTING_UART_RX_DATA;}else{WAITTING_UART_RX;}
#endifMAP_UARTDMADisable(UARTA1_BASE,UART_DMA_RX);MAP_UARTIntClear(UARTA1_BASE,UART_DMA_RX); 
}

Viki Shi:

建议参考下官方代码: processors.wiki.ti.com/…/CC3200_UART_DMA_Application

赞(0)
未经允许不得转载:TI中文支持网 » CC3200 用UART DMA接收串口数据时,每次读到的最后一个字节都为0
分享到: 更多 (0)