UART1串口只能接收16个字节的数据,超过16个字节的数据全部丢失

2019-03-25 20:27发布

void uart1IsrInit(void)
{
    INT16U usFdiv;
   
    U1LCR  = 0x87;                                                      // 允许设置波特率,8位数据,2位停止位
    usFdiv = (FPCLK / 16) / UART_BPS;                                   // 设置波特率                    
    U1DLM  = usFdiv / 256;
    U1DLL  = usFdiv % 256;
    U1LCR  = 0x07;                                                      // 锁定波特率                    
//    U1FCR  = 0x87;                                                      // 使能FIFO,设置8个字节触发点   
    U1FCR  = 0x07;                                                      // 使能FIFO,设置1个字节触发点   
    U1IER  = 0x01;                                                      // 使能接收中断                  
}
上面是我的初始化程序,波特率为38400。先是使用8个字节的触发点,发现接收到16个字节后,U1LSR.0位被清除;然后改为一个字节触发一次,依然是到16个字节后,U1LSR.0位被清除。请各位帮我找找问题所在,谢谢了!以下为我的中断程序。
void uart1Isr (void)
{
      
    while ((U1IIR & 0x01) == 0)           //  判断是否有中断挂起           
{                                       
        switch (U1IIR & 0x0e)           //  判断中断标志                 
  {                                          
        
            case 0x04:                                                  //  接收数据中断
    uc_RcvBuf[uc_RcvNum++] = U1RBR;
    if((U1LSR & 0x01) == 0)
    {
     uc_RcvNewFlag = 1;
     uc_RcvNum = 0;
    }
                break;
            
            case 0x0C:                                                  //  字符超时中断
                while((U1LSR & 0x01) == 0x01)       //  判断数据是否接收完毕         
    {                          
                    uc_RcvBuf[uc_RcvNum++] = U1RBR;
                }
    uc_RcvNum = 0;
    uc_RcvNewFlag = 1;
    break;
               
            default:
                break;
        }
    }
}

数据是不定长的。谢谢各位了!

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。