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

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

[复制链接]

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;

}

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值