ch579串口收發(fā)問題

使用查詢的方式進(jìn)行串口收發(fā),對(duì)uart1寫了兩個(gè)函數(shù)分別為單字節(jié)收和單字節(jié)發(fā),代碼如下。

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;

}


此時(shí)在main函數(shù)中使用sendbyteuart1(readbyteuart1())回環(huán)會(huì)導(dǎo)致上電即開始無限發(fā)送,而從電腦發(fā)給ch579的數(shù)據(jù)雖然也能被回環(huán)回來但是會(huì)淹沒在無效數(shù)據(jù)中,判斷是RB_LSR_DATA_RDY標(biāo)志位不起作用。

當(dāng)我把接收函數(shù)的代碼改成:

char readbyteuart1(){

char t=0;

while(R8_UART1_RFC==0);

t=R8_UART1_RBR;

return t;

}

使用接收fifo的計(jì)數(shù)判斷時(shí),一切正常,可以正?;丨h(huán),不會(huì)產(chǎn)生無效數(shù)據(jù)。


請問是ch579的RB_LSR_DATA_RDY標(biāo)志位不能用嗎?還是它有一些其他的使用邏輯?

另外還發(fā)現(xiàn)在連續(xù)發(fā)送長串?dāng)?shù)據(jù)時(shí)會(huì)造成數(shù)據(jù)丟失,需要隔幾個(gè)數(shù)據(jù)加一次delay才能完整發(fā)送,是因?yàn)榘l(fā)送函數(shù)的RB_LSR_TX_ALL_EMP標(biāo)志位也無效導(dǎo)致的,還是因?yàn)檫B續(xù)發(fā)送波特率誤差累計(jì)導(dǎo)致的?


單字節(jié)首發(fā)的接口在evt里面uart1.c里面有,可以參考


例程確實(shí)是用的fifo計(jì)數(shù)來做的,但是為什么這個(gè)標(biāo)志位不行呢?


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频