計(jì)算機(jī)與外部設(shè)備的連接,基本上使用了兩類接口:串行接口與并行接口。并行接口是指數(shù)據(jù)的各個位同時進(jìn)行傳送,其特點(diǎn)是傳輸速度塊,但當(dāng)傳輸距離遠(yuǎn)、位數(shù)又多時,通信線路變復(fù)雜且成本提高。串行通信是指數(shù)據(jù)一位位地順序傳送,其特點(diǎn)是適合于遠(yuǎn)距離通信,通信線路簡單,只要一對傳輸線就可以實(shí)現(xiàn)雙向通信,從而大大降低了成本。
串行通信又分為異步與同步兩類。UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)正是設(shè)備間進(jìn)行異步通信的關(guān)鍵模塊。它的重要作用如下所示:
處理數(shù)據(jù)總路線和串行口之間的串/并、并/串轉(zhuǎn)換;
通信雙方只要采用相同的幀格式和波特率,就能在未共享時鐘信號的情況下,僅用兩根信號線(Rx 和Tx)就可以完成通信過程;
采用異步方式,數(shù)據(jù)收發(fā)完畢后,可通過中斷或置位標(biāo)志位的方式通知微控制器進(jìn)行處理,大大提高微控制器的工作效率。
若加入一個合適的電平轉(zhuǎn)換器,如SP3232E、SP3485,UART 還能用于RS-232、RS-485 通信,或與計(jì)算機(jī)的端口連接。UART 應(yīng)用非常廣泛,手機(jī)、工業(yè)控制、PC 等應(yīng)用中都要用到UART。
1. 發(fā)送/接收邏輯
發(fā)送邏輯對從發(fā)送FIFO 讀取的數(shù)據(jù)執(zhí)行“并→串”轉(zhuǎn)換。控制邏輯輸出起始位在先的串行位流,并且根據(jù)控制寄存器中已編程的配置,會面緊跟著數(shù)據(jù)位(注意:最低位 LSB 先輸出)、奇偶校驗(yàn)位和停止位。
在檢測到一個有效的起始脈沖后,接收邏輯對接收到的位流執(zhí)行“串→并”轉(zhuǎn)換。此外還會對溢出錯誤、奇偶校驗(yàn)錯誤、幀錯誤和線中止(line-break)錯誤進(jìn)行檢測,并將檢測到的狀態(tài)附加到被寫入接收FIFO 的數(shù)據(jù)中。
2. 波特率的產(chǎn)生
波特率除數(shù)(baud-rate divisor)是一個22 位數(shù),它由16 位整數(shù)和6 位小數(shù)組成。波特率發(fā)生器使用這兩個值組成的數(shù)字來決定位周期。通過帶有小數(shù)波特率的除法器,在足夠高的系統(tǒng)時鐘速率下,UART 可以產(chǎn)生所有標(biāo)準(zhǔn)的波特率,而誤差很小。
3. 數(shù)據(jù)收發(fā)
發(fā)送時,數(shù)據(jù)被寫入發(fā)送FIFO。如果UART 被使能,則會按照預(yù)先設(shè)置好的參數(shù)(波特率、數(shù)據(jù)位、停止位、校驗(yàn)位等)開始發(fā)送數(shù)據(jù),一直到發(fā)送FIFO 中沒有數(shù)據(jù)。一旦向發(fā)送FIFO 寫數(shù)據(jù)(如果FIFO 未空),UART 的忙標(biāo)志位BUSY 就有效,并且在發(fā)送數(shù)據(jù)期間一直保持有效。BUSY 位僅在發(fā)送FIFO 為空,且已從移位寄存器發(fā)送最后一個字符,包括停止位時才變無效。即 UART 不再使能,它也可以指示忙狀態(tài)。BUSY 位的相關(guān)庫函數(shù)是UARTBusy( )