ARM筆記: UART學(xué)習(xí)筆記
一. UART原理
UART,Universal Asynchronous Receive Transmitter ,它用來(lái)傳輸串行數(shù)據(jù):發(fā)送數(shù)據(jù)時(shí),CPU將并行數(shù)據(jù)寫(xiě)入U(xiǎn)ART,UART按照一定的格式在一根電線(xiàn)上串行發(fā)出;接收數(shù)據(jù)時(shí),UART檢測(cè)另一根電線(xiàn)上的信號(hào),將串行收集放在緩沖區(qū)中,CPU即可讀取UART獲得這些數(shù)據(jù)。UART之間以全雙工方式傳輸數(shù)據(jù),最精簡(jiǎn)的連線(xiàn)方式只有3根線(xiàn),TxD用于發(fā)送數(shù)據(jù),RxD用于接收數(shù)據(jù),Gnd用于提供雙方參考電平。
UART使用標(biāo)準(zhǔn)的TTL/CMOS邏輯電平來(lái)表示數(shù)據(jù),為了增強(qiáng)數(shù)據(jù)的抗干擾能力,提高數(shù)據(jù)傳輸長(zhǎng)度,通常將TTL/CMOS邏輯電平轉(zhuǎn)換為RS-232邏輯電平,3~12V表示0, -3~-12V表示1。
TxD,RxD數(shù)據(jù)線(xiàn)以“位”為最小單位傳輸數(shù)據(jù),幀(frame)由具有完整意義的,不可分割的若干位組成,它包含開(kāi)始位,數(shù)據(jù)位,校驗(yàn)位,停止位。發(fā)送數(shù)據(jù)前,UART之間需要約定好數(shù)據(jù)的傳輸速率(波特率=1/每位所占時(shí)間),數(shù)據(jù)的傳輸格式(即有多少個(gè)數(shù)據(jù)位,是否使用校驗(yàn)位,是奇校驗(yàn)還是偶校驗(yàn),有多少個(gè)停止位)。
數(shù)據(jù)傳輸流程:
(1) 平時(shí)數(shù)據(jù)線(xiàn)牌空閑狀態(tài)(1狀態(tài))。
(2) 當(dāng)要發(fā)送數(shù)據(jù)時(shí),UART改變TxD數(shù)據(jù)線(xiàn)的狀態(tài)(1->0),并維持1位的時(shí)間,接收方在檢測(cè)到這一開(kāi)始位的時(shí)候,再等待1.5位時(shí)間就開(kāi)始一位一位地檢測(cè)數(shù)據(jù)線(xiàn)的狀態(tài)以得到數(shù)據(jù)。
(3) UART一幀中可以有5,6,7或者8位的數(shù)據(jù),發(fā)送方一位一位地改變數(shù)據(jù)線(xiàn)的狀態(tài),將它們發(fā)送出去,首先發(fā)送最低位。
(4) 如果使用校驗(yàn)功能,UART在發(fā)送完數(shù)據(jù)位后,還要發(fā)送1個(gè)校驗(yàn)位,有兩種校驗(yàn)方法:奇校驗(yàn),偶校驗(yàn)(數(shù)據(jù)線(xiàn)連同校驗(yàn)位中“1”的個(gè)數(shù)等于奇數(shù)還是偶數(shù))。
(5) 最后發(fā)送停止位,數(shù)據(jù)線(xiàn)恢復(fù)到空閑狀態(tài)(1狀態(tài)),停止位的長(zhǎng)度有3種:1位,1.5位,2.位。
二. S3C2440 UART的特性
S3C2440中的UART功能有3個(gè)通道,每個(gè)通道都可以工作于中斷模式或者DMA模式,即是UART可以發(fā)出中斷或者DMA請(qǐng)求以便在UART,CPU間傳輸數(shù)據(jù)。UART由波特率發(fā)生器,發(fā)送器,接收器和控制邏輯組成。
使用系統(tǒng)時(shí)鐘時(shí),S3C2440的UART波特率可以達(dá)到115.2Kbit/s。如果使用UEXTCLK引腳提供的外部時(shí)鐘,則可以達(dá)到更高的波特率,波特率可以通過(guò)編程進(jìn)行控制。S3C2440的UART的FIFO深度為64,發(fā)送數(shù)據(jù)時(shí),CPU先將數(shù)據(jù)寫(xiě)入到發(fā)送FIFO中,然后 UART會(huì)自動(dòng)將FIFO中的數(shù)據(jù)復(fù)制到“發(fā)送移位器(Transmit Shifter)”中,發(fā)送移位器將數(shù)據(jù)按照一定的格式插入相應(yīng)開(kāi)始位,校驗(yàn)位,停止位等,一位一位地發(fā)送到TxDn數(shù)據(jù)線(xiàn)上。接收時(shí),接收移位器將RxDn數(shù)據(jù)線(xiàn)上的數(shù)據(jù)一位一位接收進(jìn)來(lái),然后復(fù)制到接收FIFO中,CPU即可從中讀取數(shù)據(jù)。
S3C2440的UART的每個(gè)通道支持的停止位有1位,2位,數(shù)據(jù)位有5,6,7或者8位,支持校驗(yàn)功能,另外還有紅外發(fā)送/接收功能。
三. S3C2440 UART的使用
在使用UART前,需要設(shè)置波特率,傳輸格式,設(shè)置管腳為UART功能,選擇UART通道的工作模式為中斷模式或者DMA模式,設(shè)置好之后,往某個(gè)寄存器中寫(xiě)入數(shù)據(jù)即可發(fā)送,讀取某寄存器即可得到接收的數(shù)據(jù),可以通過(guò)查詢(xún)狀態(tài)寄存器或者設(shè)置中斷來(lái)獲知數(shù)據(jù)是否已經(jīng)發(fā)送完畢,是否已經(jīng)接收到數(shù)據(jù)。
1. 配置相應(yīng)I/O口的寄存器,將所涉及的UART通道管腳設(shè)置為UART功能。
比如UART通道0中,GPH2,GPH3分別用作TXD0,RXD0,要使用UART通道0時(shí),先設(shè)置GPHCON寄存器將GPH2,GPH3引腳功能設(shè)置為T(mén)XD0,RXD0。
2. UBRDIVn寄存器,用于設(shè)置波特率。
3. ULCONn寄存器,設(shè)置傳輸格式。
4. UCONn寄存器,用于選擇UART的時(shí)鐘源,設(shè)置UART中斷方式等等。
5. UFCONn寄存器,UFSTATn寄存器。UFCONn寄存器,用于設(shè)置是否使用FIFO,設(shè)置各FIFO的觸發(fā)閾值,可以通過(guò)調(diào)協(xié)UFCONn寄存器來(lái)復(fù)位各個(gè)FIFO。讀取UFSTAT n寄存器可以知道各個(gè)FIFO是否已滿(mǎn),其中有多少數(shù)據(jù)。如果不使用FIFO時(shí),可以認(rèn)為FIFO的深度為1,如果使用FIFO時(shí),S3C2440的FIFO深度為64。
6. UMCONn寄存器,UMSTATn寄存器,用于流量控制。
7. UTRSTATn寄存器用來(lái)表明數(shù)據(jù)是否已經(jīng)發(fā)送完畢,是否已經(jīng)接收到數(shù)據(jù)。
以上各個(gè)寄存的配置方法可以參考數(shù)據(jù)手冊(cè)。
8. USERSTATn寄存器,用于表示各種錯(cuò)誤的發(fā)生。
9. UTXHn寄存器,CPU將數(shù)據(jù)寫(xiě)入到這個(gè)寄存器,UART即會(huì)將它保存到緩沖區(qū)中,并自動(dòng)發(fā)送出去。
10. URXHn寄存器,當(dāng)UART接收到數(shù)據(jù)時(shí),CPU讀取這個(gè)寄存器,即可獲得數(shù)據(jù)。