什么是UART中的FIFO ?
FIFO是先進先出緩沖區的意思,即串口接收到的數據可以先進入FIFO,不必馬上進入中斷服務程序接收,這樣可節省CPU時間。對于發送數據也一樣,可以把要發送的數據一起寫入FIFO,串口控制器可按寫入順序依次發送出去。
?
?
fifo只是一個緩沖器而已如果你的cpu沒什么別的工作或完全處理的過來uart數據的話,可以用nonfifo模式如果你的cpu有一些耗時的工作要處理,也許uart數據來了很多才開始處理,這樣就需要fifo做緩沖了。
串口設置的觸發等級,就是預先設定的一個值。每當傳輸了這個值的數據量就觸發一次中斷。比如設置了8字節,那么每傳8字節數據就會觸發一次中斷了。
?
?
看來許多人還沒有真正理解FIFO的作用和優點,仍然停留在每收發一個字符就要中斷處理一次的老思路上。UART收發FIFO主要是為了解決收發中斷過于頻繁而導致的CPU效率不高的問題。
?
?
?
FIFO的必要性。在進行UART通信時,中斷方式比輪詢方式要簡便且效率高。但是,如果沒有收發FIFO,則每傳輸一個數據(5~8位)都要中斷處理一次,效率仍然不高。如果有了收發FIFO,則可以在連續收發若干個數據(可多至14個)后才產生一次中斷,然后一起處理。這就大大提高了收發效率。
?
?
?
接收超時問題。如果沒有接收超時功能,則在對方已經發送完畢而接收FIFO未填滿時并不會觸發中斷(FIFO滿才會觸發中斷),結果造成最后接收的有效數據得不到處理的問題。有了接收超時功能后,如果接收FIFO未填滿而對方發送已經停,則在不超過3個數據的接收時間內就會觸發超時中斷,因此數據會照常得到處理。
?
?
?
總之,FIFO的設計是優秀而合理的,它已經幫你想到了收發過程中存在的任何問題,只要初始化配置UART后,就可以放心收發了,FIFO和中斷例程會自動搞定一切!
?
?
?
完全不必要擔心FIFO大大減少了中斷產生的次數而“可能”造成數據丟失的問題!
?
?
?
發送時,只要發送FIFO不滿,數據只管往里連續放,放完后就直接退出發送子程序。隨后,FIFO真正發送完成后會自動產生中斷,通知主程序說:我已經完成真正的發送。
?
?
?
接收時,如果對方是連續不間斷發送,則填滿FIFO后會以中斷的方式通知主程序說:現在有一批數據來了,請處理。
?
?
?
如果對方是間斷性發送,也不要緊,當間隔時間過長時(2~3個字符傳輸時間),也會產生中斷,這次是超時中斷,通知主程序說:對方可能已經發送完畢,但FIFO未滿,也請處理。
點擊打開鏈接
總結
以上是生活随笔為你收集整理的什么是UART中的FIFO ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 施工人员临时出入证管理制度
- 下一篇: 系统安全方案