CH438Q接收數(shù)據(jù)出現(xiàn)問(wèn)題

使用CH438Q接收,上電前幾次數(shù)據(jù)接收沒(méi)問(wèn)題,收了幾次后,中斷一直拉低,不會(huì)拉高了,查詢了SSR寄存器是01? IIR寄存器是04,用的是CH438Q串口0,這個(gè)問(wèn)題要怎么解決?

您好,CH438中斷輸出是低電平輸出,IIR寄存器為0x04根據(jù)手冊(cè)中可知為“接收數(shù)據(jù)可用”中斷,此時(shí)處于產(chǎn)生中斷狀態(tài),所以需要根據(jù)IIR寄存器所報(bào)中斷類型,根據(jù)清中斷方法來(lái)清除所有的中斷,才能撤銷實(shí)際的INT中斷電平


清中斷方法來(lái)清除所有的中斷,才能撤銷實(shí)際的INT中斷電平,具體怎么做啊?


讀取數(shù)據(jù)后,還要進(jìn)行什么寄存器的操作嗎?


?case INT_RCV_SUCCESS:? ? // 串口接收可用數(shù)據(jù)中斷

? if((Receive_Bit==20)|| (Receive_Bit==8))

{

Receive_Bit=8;

ET0 = 1;

Time_Count=0;

RcvNum = CH438Seril8Rcv(Data_Buf);

for(i=0;i

{

Uart_Data_Buf[Uart_Data_Length+i]=Data_Buf[i];

}

Uart_Data_Length=Uart_Data_Length+RcvNum;

}

? ? ? ? ? break;



在你的串口收到數(shù)據(jù)之后,只需要你在串口中斷的程序里面去讀取IIR寄存器,之后該中斷就會(huì)被清除,然后就是正常的在對(duì)應(yīng)的中斷里面做對(duì)應(yīng)的事情,例如Fifo觸發(fā)中斷或者超時(shí)中斷就去讀取RBR寄存器接收緩沖區(qū)里面的東西。具體可以看手冊(cè)這里。M2GB13}78NSWTZV$XQK%QRL.png


中斷程序根據(jù)官方提供的例程編寫(xiě)的,有讀取了gInterruptStatus = RS485_ReadCH438Data( REG_SSR_ADDR ); SSR寄存器是01,之后

if( gInterruptStatus & 0x01? )? ? // 檢測(cè)串口0是否有中斷產(chǎn)生?

? {

InterruptStatus = RS485_ReadCH438Data( REG_IIR_ADDR ) & ( ~ CH438_IIR_FIFOS_ENABLED );? ? // 讀串口0的中斷狀態(tài)?

讀取了IIR寄存器了,這是運(yùn)行完中斷程序后,中斷引腳INT的電平應(yīng)該是恢復(fù)高電平,但是有時(shí)候運(yùn)行工作一段時(shí)間后,中斷引腳一直是低電平,這樣就進(jìn)不了中斷程序了,在主程序讀取IIR和SSR寄存器,也不會(huì)恢復(fù)成高電平,得重新斷電上電才正常,這如何解決呢?


出現(xiàn)這個(gè)情況,CH438Q串口發(fā)送數(shù)據(jù)正常,由于中斷引腳一直是低電平,沒(méi)法進(jìn)入中斷處理接收的數(shù)據(jù),所以接收不到數(shù)據(jù)。重啟后又正常了。


您好,如果CH438中斷腳為低電平的話說(shuō)明有中斷沒(méi)有處理完,都中斷寄存器看看。建議可以使用電平中斷或者定時(shí)查詢中斷狀態(tài)處理?;蛘咴诔鲋袛嗲霸俅尾樵冎袛嗵幚怼?/p>


中斷程序已經(jīng)處理完退出中斷函數(shù)了,剛發(fā)現(xiàn),就是接收數(shù)據(jù)處理的時(shí)候,發(fā)送數(shù)據(jù)就會(huì)出現(xiàn)這樣的情況


您好,假如在接收數(shù)據(jù)的時(shí)候,發(fā)送數(shù)據(jù),發(fā)送數(shù)據(jù)的時(shí)候回產(chǎn)生THR空中斷,建議接收用中斷,發(fā)送在主程序。


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

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