基于微控制器的軟件UART設計
作者:佚名 文章來源:不詳 點擊數: 更新時間:2011/6/14
核心提示:
通用異步收發器(UART)是一種串行接口,許多微處理器和微控制器中都包含這種外設接口。異步串行接口提供了一種簡單的途徑,使兩個器件無需共享同一個時鐘信號就能進行通信。如果再加入一個合適的電平轉換器,串口還能用在RS-232和RS-485網絡中通信,或者與計算機的COM端口連接。串口只需兩根信號線(Rx和Tx)即可實現,而且只要兩端器件都采用同樣的位格式和波特率,那么它們無需其它任何對方的信息就可以成功傳輸數據。 軟件UART的意義
如今,可提供功能完善的硬件串口的微控制器比比皆是,那么我們為什么還要費力地用微控制器的端口管腳來實現軟件UART呢?主要有以下幾個原因:
首先,盡管確實有許多微控制器都包含了硬件UART,但仍有許多沒有包含這種接口。在系統設計中,選擇微控制器時,可能很難找到一款各方面都很理想的產品。例如,電壓范圍合適的微控制器可能內部存儲器不夠大,而存儲器大小足夠的可能又沒有足夠的端口管腳,無法滿足設計需求。因此,通過軟件方式實現某些系統需要的外設接口,從而彌補一款微控制器性能上的缺陷,就能增加可供設計選擇的微控制器的數量和種類,從而增大設計的靈活性。
第二,即便一款微控制器包含了一個功能完善的硬件UART,由于某種原因,這對即將進行的設計來說可能仍然不夠。例如,可能是微控制器需要與之通信的外設所用的協議與串口協議稍有不同,也可能是硬件UART所提供的位數、奇偶校驗功能或輸入和輸出緩存無法完全滿足應用的要求。這時,通過構建一個軟件UART接口,我們在定義UART的功能和串口協議的細節上就更靈活。
第三,一款微控制器的硬件UART也許能夠很好地滿足應用的需求,但只是數量不夠。例如,微控制器包含兩個UART,而設計中的應用卻需要三個。此時,我們不必僅僅為了增加串口的數量就另外增加一塊新的芯片,而只需增加一個與該微控制器上現有的UART具備同樣功能和特性的軟件UART。
需要注意的問題
此外,還有一個很重要的問題是,軟件UART會從主應用中占用多大帶寬?因為采用硬件UART(或其它硬件串行通信接口)的一個主要原因首先就是將微控制器解放出來,使其無需費時去處理串口協議底層的細節。像位采樣(bit-sampling)、時隙計算以及輸入輸出移位這類繁瑣的操作都在硬件中完成,然后UART通過中斷或其它標志位的方式告訴主微控制器,它已經收到了一個字符或者已經發送完一個字符。接著,微控制器就可以快速地從UART緩存中上載數據或者向緩存中下載數據,然后返回繼續執行其核心任務。
如果實現一個軟件UART時,在UART檢查端口管腳的串行活動時,需要占用大量時間,讓應用程序停滯,這會使得軟件UART沒有意義。好在情況并非如此,我們來看看標準的10位異步串行協議(包含一個起始位,一個停止位和8個數據位)收發一個字符時的情況。