串口接收用中断方式实现,收满一定数目之后通过udp协议无线发走,但是在测试中遇到问题,当串口发送端给3200发送串口数据的时候,每隔10ms发送一包,实际测试速度达到50kb/s(波特率2Mbps),但是查看接收到的数据会有丢包,为了排除是UDP协议的问题,我关闭串口功能,让3200自己产生递增数然后udp发走,实测无丢包,且速度在200kb/s以上,附上串口函数与发送函数,请教各位老师分析一下原因,谢谢!
void uart0_handle() { int lRetVal = MAP_UARTIntStatus(UARTA0_BASE, true); if(lRetVal & UART_INT_RT) //串口空闲中断 { while(UARTCharsAvail(UARTA0_BASE)) { tempdata1[cnt1++] = MAP_UARTCharGet(UARTA0_BASE); } MAP_UARTIntClear(UARTA0_BASE, UART_INT_RT); } if(lRetVal & UART_INT_RX) //串口接收中断 { while(UARTCharsAvail(UARTA0_BASE)) { tempdata1[cnt1++] = MAP_UARTCharGet(UARTA0_BASE); } MAP_UARTIntClear(UARTA0_BASE, UART_INT_RX); } MAP_UARTIntClear(UARTA0_BASE,UART_INT_RT|UART_INT_RX); //清中断 }
while(1){ if(cnt1 == PACKAGE) { for(t=0;t<cnt1;t++) MAP_UARTCharPut(UARTA0_BASE,tempdata1[t]); // iStatus1 = sl_SendTo(iSockID, tempdata1, PACKAGE, 0,(SlSockAddr_t *)&sAddr, iAddrSize); cnt1 = 0; } }