根據(jù)883的規(guī)格書的介紹,F(xiàn)IFO接收緩沖只有2個字節(jié)的存儲空間,因此,如果接受時的接收中斷執(zhí)行時間過長,而上位機的數(shù)據(jù)發(fā)送一次超過2個字節(jié),超過FIFO的存儲空間,就會造成單片機的FIFO溢出。如果沒有對RCREG進行定期在主程序中讀取,則錯誤標志無法清零,單片機的串口通信就會鎖死,出現(xiàn)無法正常通信的情況。
下圖是883在上位機一次連續(xù)發(fā)送4個字節(jié),在中斷中讀取RCREG,由于中斷執(zhí)行一次時間超過了發(fā)送3個字節(jié)的總時間,F(xiàn)IFO的接收緩沖器不能實時被RCREG轉(zhuǎn)取走,造成FIFO溢出。單片機進入接收中斷,取走第一次接收到的0x55,但是取走后中斷要執(zhí)行其他程序,不能馬上退出中斷再進入接收中斷,因此后面的3個字節(jié)需要存儲在FIFO中,造成FIFO的溢出。
C1:上位機發(fā)送0x55 4個字節(jié)的數(shù)據(jù),接單片機RX引腳
C2:單片機執(zhí)行中斷程序,相應接收后的執(zhí)行返回接收到得上位機數(shù)據(jù),由于中斷有一個長時間的延時,使單片機在退出第一個接收字節(jié)的中斷時,已經(jīng)錯過了上位機發(fā)送的后3個字節(jié)。但是當時仍有2個字節(jié)存儲在FIFO接收緩沖器中,由于還有3個字節(jié)要存儲,而FIFO只有2個,造成第二個字節(jié)丟失,單片機OERR置位。接收中斷響應了后2個存儲成功的數(shù)據(jù),執(zhí)行完成后推出接收中斷響應,F(xiàn)ERR不會自動清零,單片機以后將無法執(zhí)行接收中斷,好比單片機已經(jīng)進入通信鎖死狀態(tài)。
C3:單片機執(zhí)行進入中斷和退出中斷的標志位,為了來查看中斷的運行與單片機通信時序的關(guān)系。
|