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