对例程有疑问,谢谢解答

以下摘自手册

当单片机收到串口接收数据超时的中断后,可以先从 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 );

}


这个只是接收函数,没有禁用fifo接收。fifo接收是在串口初始化那边设置的。


UINT8 CH432Seril1Rcv( UINT8 *buf )    /* 禁用FIFO,CH432串口1接收多字节子程序*/

明明是使用FIFO,为什么写个禁用FIFO


注释上的一些小问题。


只有登录才能回复,可以选择微信账号登录