以下摘自手册
当单片机收到串口接收数据超时的中断后,可以先从 RBR 寄存器读取一个字节,然后查询 LSR 寄 存器的 DATARDY 位,如果 DATARDY 位有效则再读取一个字节,直到 DATARDY 位无效。
以下函数是官方例程,到底是启用FIFO还是禁用FIFO
UINT8 CH432Seril1Rcv( UINT8 *buf ) /* 禁用FIFO,CH432串口1接收多字节子程序*/
{
UINT8 RcvNum = 0;
if( !( ReadCH432Data( CH432_LSR1_PORT ) & ( BIT_LSR_BREAKINT | BIT_LSR_FRAMEERR | BIT_LSR_PARERR | BIT_LSR_OVERR ) ) ) /* b1-b4无错误 */
{
while( ( ReadCH432Data( CH432_LSR1_PORT ) & BIT_LSR_DATARDY ) == 0 ); /* 等待数据准备好 */
do
{
*buf++ = ReadCH432Data( CH432_RBR1_PORT ); /* 从接收缓冲寄存器读出数据 */
RcvNum++;
}
while( ( ReadCH432Data( CH432_LSR1_PORT ) & BIT_LSR_DATARDY ) == 0x01 );
}
else ReadCH432Data( CH432_RBR1_PORT );
return( RcvNum );
}