UART串口
通用異步接收器和發(fā)送器(Universal Asynchronous Receiver and Transmitter) 簡稱UART。通常是嵌入式設(shè)備中默認(rèn)都會配置的通信接口。這是因?yàn)椋芏嗲度胧皆O(shè)備沒有顯示屏,無法獲得嵌入式設(shè)備實(shí)時數(shù)據(jù)信息,通過UART串口和超級終端相連,打印嵌入式設(shè)備輸出信息。并且在對嵌入式系統(tǒng)進(jìn)行跟蹤和調(diào)試時,UART串口了是必要的通信手段。比如:網(wǎng)絡(luò)路由器,交換機(jī)等都要通過串口來進(jìn)行配置。UART串口還是許多硬件數(shù)據(jù)輸出的主要接口,如GPS接收器就是通過UART串口輸出GPS接收數(shù)據(jù)的。
UART功能
計(jì)算機(jī)內(nèi)部采用并行數(shù)據(jù),不能直接把數(shù)據(jù)發(fā)到Modem,必須經(jīng)過UART整理才能進(jìn)行異步傳輸,其過程為:CPU先把準(zhǔn)備寫入串行設(shè)備的數(shù)據(jù)放到UART的寄存器(臨時內(nèi)存塊)中,再通過FIFO(First Input First Output,先入先出隊(duì)列)傳送到串行設(shè)備,若是沒有FIFO,信息將變得雜亂無章,不可能傳送到Modem。
它是用于控制計(jì)算機(jī)與串行設(shè)備的芯片。有一點(diǎn)要注意的是,它提供了RS-232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備通信了。作為接口的一部分,UART還提供以下功能:將由計(jì)算機(jī)內(nèi)部傳送過來的并行數(shù)據(jù)轉(zhuǎn)換為輸出的串行數(shù)據(jù)流。將計(jì)算機(jī)外部來的串行數(shù)據(jù)轉(zhuǎn)換為字節(jié),供計(jì)算機(jī)內(nèi)部并行數(shù)據(jù)的器件使用。在輸出的串行數(shù)據(jù)流中加入奇偶校驗(yàn)位,并對從外部接收的數(shù)據(jù)流進(jìn)行奇偶校驗(yàn)。在輸出數(shù)據(jù)流中加入啟停標(biāo)記,并從接收數(shù)據(jù)流中刪除啟停標(biāo)記。處理由鍵盤或鼠標(biāo)發(fā)出的中斷信號(鍵盤和鼠標(biāo)也是串行設(shè)備)。可以處理計(jì)算機(jī)與外部串行設(shè)備的同步管理問題。有一些比較高檔的UART還提供輸入輸出數(shù)據(jù)的緩沖區(qū),比較新的UART是16550,它可以在計(jì)算機(jī)需要處理數(shù)據(jù)前在其緩沖區(qū)內(nèi)存儲16字節(jié)數(shù)據(jù),而通常的UART是8250。如果您購買一個內(nèi)置的調(diào)制解調(diào)器,此調(diào)制解調(diào)器內(nèi)部通常就會有16550 UART。
UART基本結(jié)構(gòu)

⑴輸出緩沖寄存器,它接收CPU從數(shù)據(jù)總線上送來的并行數(shù)據(jù),并加以保存。
⑵ 輸出移位寄存器,它接收從輸出緩沖器送來的并行數(shù)據(jù),以發(fā)送時鐘的速率把數(shù)據(jù)逐位移出,即將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)輸出。
⑶ 輸入移位寄存器,它以接收時鐘的速率把出現(xiàn)在串行數(shù)據(jù)輸入線上的數(shù)據(jù)逐位移入,當(dāng)數(shù)據(jù)裝滿后,并行送往輸入緩沖寄存器,即將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)。
⑷ 輸入緩沖寄存器,它從輸入移位寄存器中接收并行數(shù)據(jù),然后由CPU取走。
⑸控制寄存器,它接收CPU送來的控制字,由控制字的內(nèi)容,決定通信時的傳輸方式以及數(shù)據(jù)格式等。例如采用異步方式還是同步方式,數(shù)據(jù)字符的位數(shù),有無奇偶校驗(yàn),是奇校驗(yàn)還是偶校驗(yàn),停止位的位數(shù)等參數(shù)。
⑹狀態(tài)寄存器。狀態(tài)寄存器中存放著接口的各種狀態(tài)信息,例如輸出緩沖區(qū)是否空,輸入字符是否準(zhǔn)備好等。在通信過程中,當(dāng)符合某種狀態(tài)時,接口中的狀態(tài)檢測邏輯將狀態(tài)寄存器的相應(yīng)位置“1”,以便讓CPU查詢。
異步通信和同步通信
圖2-56同步信號與異步信號
同步通信技術(shù)
在發(fā)送數(shù)據(jù)信號的時候,會同時送出一根同步時鐘信號, 用來同步發(fā)送方和接收方的數(shù)據(jù)采樣頻率。如圖2-56所示,同步通信時,信號線1是一根同步時鐘信號線,以固定的頻率進(jìn)行電平的切換,其頻率周期為t,在每個電平的上升沿之后進(jìn)行對同步送出的數(shù)據(jù)信號線2進(jìn)行采樣(高電平代表1,低電平代表0),根據(jù)采樣數(shù)據(jù)電平高低取得輸出數(shù)據(jù)信息。如果雙方?jīng)]有同步時鐘的話,那么接收方就不知道采樣周期,也就不能正常的取得數(shù)據(jù)信息。
異步通信技術(shù)
在異步通信技術(shù)中,數(shù)據(jù)發(fā)送方和數(shù)據(jù)接收方?jīng)]有同步時鐘,只有數(shù)據(jù)信號線,只不過發(fā)送端和接收端會按照協(xié)商好的協(xié)議(固定頻率)來進(jìn)行數(shù)據(jù)采樣。數(shù)據(jù)發(fā)送方以每秒鐘57600bits的速度發(fā)送數(shù)據(jù),接收方也以57600bits的速度去接收數(shù)據(jù),這樣就可以保證數(shù)據(jù)的有效和正確。通常異步通信中使用波特率(Baud-Rate)來規(guī)定雙方傳輸速度,其單位為bps(bits per second每秒傳輸位數(shù))。
數(shù)據(jù)的串行和并行通信方式
串行通信好比是一列縱隊(duì),每個數(shù)據(jù)元素依次縱向排列。如圖2-57所示,傳輸時一個比特一個比特的串行傳輸,每個時鐘周期傳輸一個比特,這種傳輸方式相對比較簡單,速度較慢,但是使用總線數(shù)較少,通常一根接收線,一根發(fā)送線即可實(shí)現(xiàn)串行通信。它的缺點(diǎn)是要增加額外的數(shù)據(jù)來控制一個數(shù)據(jù)幀的開始和結(jié)束。
并行通信好比一排橫隊(duì),齊頭并進(jìn)同時傳輸。這種通信方式每個時鐘周期傳輸?shù)臄?shù)據(jù)量和其總線寬度成正比,但是實(shí)現(xiàn)較為復(fù)雜。UART通信采用的是串行方式進(jìn)行通信的。
圖2-57串行數(shù)據(jù)通信與并行數(shù)據(jù)通信
數(shù)據(jù)通信傳輸模式
在數(shù)據(jù)通信過程中,發(fā)送方和接收方為了實(shí)現(xiàn)數(shù)據(jù)的正確發(fā)送和接收,通常會有一個狀態(tài)寄存器來描述當(dāng)前數(shù)據(jù)接收和發(fā)送狀態(tài),當(dāng)發(fā)送方有數(shù)據(jù)發(fā)送時,會查看發(fā)送狀態(tài)寄存器,看是否允許發(fā)送數(shù)據(jù)(如果上一次數(shù)據(jù)還沒有發(fā)送完畢,不允許繼續(xù)數(shù)據(jù)發(fā)送),在發(fā)送允許情況下再送出新數(shù)據(jù)。同樣,接收端通過查看接收狀態(tài)寄存器,確定是否有新數(shù)據(jù)到達(dá),如果有數(shù)據(jù)到達(dá),將去接收數(shù)據(jù)緩沖區(qū)讀取數(shù)據(jù)。
(1)輪詢模式
通過程序執(zhí)行流,不停的檢測狀態(tài)寄存器的結(jié)果,如果當(dāng)前可發(fā)送或接收,則發(fā)送或接收數(shù)據(jù)。其過程可以用下面?zhèn)未a來表示。
; 輪詢方式實(shí)現(xiàn)數(shù)據(jù)發(fā)送偽代碼
Send(){
While(1){
if(發(fā)送狀態(tài) == 可發(fā)送)
執(zhí)行數(shù)據(jù)發(fā)送操作;
}
}
; 輪詢方式實(shí)現(xiàn)數(shù)據(jù)接收偽代碼
Receive(){
While(1){
if(接收狀態(tài) == 有數(shù)據(jù)到達(dá))
執(zhí)行數(shù)據(jù)接收操作;
}
}
由程序可知,這種方式實(shí)現(xiàn)簡單,但在進(jìn)行數(shù)據(jù)接收和發(fā)送時都要進(jìn)入循環(huán)檢查狀態(tài)寄存器的值,當(dāng)沒有數(shù)據(jù)到達(dá)或數(shù)據(jù)不可發(fā)送時,CPU會一直空轉(zhuǎn),其它程序又得不到CPU的執(zhí)行權(quán),很影響系統(tǒng)的效率。
(2)中斷模式
中斷方式是指,當(dāng)數(shù)據(jù)到達(dá)或數(shù)據(jù)可發(fā)送時,產(chǎn)生中斷,通知CPU去發(fā)送或接收數(shù)據(jù),這種方式將通信硬件和CPU獨(dú)立出來,通信硬件只有在發(fā)送或接收條件準(zhǔn)備好之后中,才通知CPU去處理數(shù)據(jù),在通信條件沒有準(zhǔn)備好的時候,CPU去處理其它程序,顯然這種方式更合理,這種方式要求通信硬件要求比較高,需要支持產(chǎn)生中斷信號。
(3)DMA模式
通常實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)移或拷貝時,CPU將從源地址處復(fù)制數(shù)據(jù)到寄存器,然后將寄存器數(shù)據(jù)再寫入目的地址處,該復(fù)制過程需要CPU來執(zhí)行。S3C2440支持DMA傳輸模式,DMA傳輸是指在CPU不干涉的情況下,DMA硬件自動實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)移和復(fù)制,在DMA傳輸過程中,CPU幾乎不用干涉,這樣可以讓CPU安心的去做自己的事情。雖然如此,但是DMA在傳輸數(shù)據(jù)過程中要占用總線,在大批數(shù)據(jù)傳輸時,系統(tǒng)總線會被DMA通道占用,也會影響系統(tǒng)的效率。S3C2440 UART控制器支持DMA方式傳輸串口通信數(shù)據(jù)。
S3C2440 UART控制器
S3C2440 UART控制器,提供了三個獨(dú)立的異步串行I/O端口,每個端口都可以在中斷模式或DMA模式下工作,換而言之,UART可以生成中斷或DMA請求用于CPU和UART之間的數(shù)據(jù)傳輸。UART串口掛接在APB總線上,APB總線最高可以達(dá)到50MHz工作頻率,在使用APB時鐘頻率時可以達(dá)到最高115.2Kbps波特率的通信速度。如果UART串口接收外部設(shè)備提供UEXTCLK(外部時鐘),UART可以在更高的速度下工作。每個UART串口在接收裝置和發(fā)送裝置里分別包含一個64Byte的FIFO緩沖區(qū),用于緩存發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。
由于UART是串行異步通信方式,因此在UART通信過程中每次只能傳輸1位(bit),若干位組成一個數(shù)據(jù)幀(frame),幀是UART通信中最基本單元,它主要包含:開始位,數(shù)據(jù)位,校驗(yàn)位(如果開啟了數(shù)據(jù)校驗(yàn),要包含校驗(yàn)位),和停止位,幀結(jié)構(gòu)如圖2-58所示。
圖2-58 UART數(shù)據(jù)幀結(jié)構(gòu)
UART在通信之前要在發(fā)送端和接收端約定好幀結(jié)構(gòu),也就是約定好傳輸數(shù)據(jù)幀格式。
開始位:必須包含在數(shù)據(jù)幀中,表示一個幀的開始。
數(shù)據(jù)位:可選5,6,7,8位,該位長度可由編程人員指定。
校驗(yàn)位:如果在開啟了數(shù)據(jù)校驗(yàn)時,該位必須指定。
停止位:可選1,2位,該位長度可由編程人員指定。
通信雙方約定好幀格式后,指定同一波特率,以保證雙方數(shù)據(jù)傳輸?shù)耐健?/p>
S3C2440 UART串口工作原理
每個UART包含一個波特率產(chǎn)生器,發(fā)送器,接收器和一個控制單元,如下圖所示:
圖2-59 UART硬件結(jié)構(gòu)
UART是以異步方式實(shí)現(xiàn)通信的,其采樣速度由波特率決定,波特率產(chǎn)生器的工作頻率可以由PCLK(外圍設(shè)備頻率),F(xiàn)CLK/n(CPU工作頻率的分頻),UEXTCLK(外部輸入時鐘)三個時鐘作為輸入頻率,波特率設(shè)置寄存器是可編程的,用戶可以設(shè)置其波特率決定發(fā)送和接收的頻率。發(fā)送器和接收器包含了64Byte的FIFO和數(shù)據(jù)移位器。UART通信是面向字節(jié)流的,待發(fā)送數(shù)據(jù)寫到FIFO之后,被拷貝到數(shù)據(jù)移位器(1字節(jié)大小)里,數(shù)據(jù)通過發(fā)送數(shù)據(jù)管腳TXDn發(fā)出。同樣道理,接收數(shù)據(jù)通過RXDn管腳來接收數(shù)據(jù)(1字節(jié)大小)到接收移位器,然后將其拷貝到FIFO接收緩沖區(qū)里。
評論