LPC1788串口问题
用1788串口0打印如下for(qwe=0;qwe<255;qwe++)
{
UART_SendByte((UART_ID_Type)0,'q');
}
结果串口终端只显示16个,发现这个问题是测试其DMA接收问题,发32个数组其也只能发送16个字节。
查询了1788数据手册发现如图其FIFO只有16字节,这么坑爹啊!! 楼主不知道有个东西叫缓冲队列吗? 请楼主移步看一下:http://www.amobbs.com/thread-4788975-1-1.html
我使用的没有问题,如下:
void UART3_SendByte(uint8_t c)
{
while(0==(LPC_UART3->LSR&(0x01<<6))); //µÈ´ý´®¿Ú¿ÕÏÐ
LPC_UART3->THR=c; //½«·¢ËÍ×Ö·ûдÈë·¢Ëͱ£³Ö¼Ä´æÆ÷
} 发送完再接着发。
你以为FIFO是无限制的吗? 我还发1024字节呢。
tiger5 发表于 2014-12-15 14:33
我还发1024字节呢。
用Printf是没有任何问题的 tiger5 发表于 2014-12-15 14:33
我还发1024字节呢。
我懂了,其实库函数下面还有个UART_Send((UART_ID_Type)0,DMADest_Buffer,32,BLOCKING);
每send一个Byte就FIFO清空一下, suebillt 发表于 2014-12-15 17:04
我懂了,其实库函数下面还有个UART_Send((UART_ID_Type)0,DMADest_Buffer,32,BLOCKING);
每send一个Byte ...
FIFO触发中断字节可选择,你看一下数据手册。一般一次发不完,接着把字节放FIFO,再触发中断发送。
PRINTF是查询发送,等等寄存器发送完成,接着发。
页:
[1]