ch579串口收发问题

使用查询的方式进行串口收发,对uart1写了两个函数分别为单字节收和单字节发,代码如下。

void sendbyteuart1(char s){

while(!R8_UART1_LSR&RB_LSR_TX_ALL_EMP);

R8_UART1_THR=s;

while(!R8_UART1_LSR&RB_LSR_TX_ALL_EMP);

}


char readbyteuart1(){

char t=0;

while(!R8_UART1_LSR&RB_LSR_DATA_RDY);

t=R8_UART1_RBR;

return t;

}


此时在main函数中使用sendbyteuart1(readbyteuart1())回环会导致上电即开始无限发送,而从电脑发给ch579的数据虽然也能被回环回来但是会淹没在无效数据中,判断是RB_LSR_DATA_RDY标志位不起作用。

当我把接收函数的代码改成:

char readbyteuart1(){

char t=0;

while(R8_UART1_RFC==0);

t=R8_UART1_RBR;

return t;

}

使用接收fifo的计数判断时,一切正常,可以正常回环,不会产生无效数据。


请问是ch579的RB_LSR_DATA_RDY标志位不能用吗?还是它有一些其他的使用逻辑?

另外还发现在连续发送长串数据时会造成数据丢失,需要隔几个数据加一次delay才能完整发送,是因为发送函数的RB_LSR_TX_ALL_EMP标志位也无效导致的,还是因为连续发送波特率误差累计导致的?


单字节首发的接口在evt里面uart1.c里面有,可以参考


例程确实是用的fifo计数来做的,但是为什么这个标志位不行呢?


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