異步串口通信
概述 S3C2410的UART提供3個獨立的異步串行通信端口,每個端口可以基于中斷或者DMA進行操作。換句話說,UART控制器可以在CPU和UART之間產(chǎn)生一個中斷或者DMA請求來傳輸數(shù)據(jù)。UART在系統(tǒng)時鐘下運行可支持高達230.4K的波特率,如果使用外部設(shè)備提供的UEXTCLK,UART的速度還可以更高。每個UART通道各含有兩個16位的接收和發(fā)送FIFO。 S3C2410的UART包括可編程的波特率,紅外 接收/發(fā)送,一個或兩個停止位插入,5-8位數(shù)據(jù)寬度和奇偶校驗。 每個UART包括一個波特率發(fā)生器、一個發(fā)送器、一個接收器和一個控制單元,如圖11-1所示。波特率發(fā)生器的輸入可以是PCLK或者UEXTCLK。發(fā)送器和接收器包含16位的FIFO和移位寄存器,數(shù)據(jù)被送入FIFO,然后被復(fù)制到發(fā)送移位寄存器準(zhǔn)備發(fā)送,然后數(shù)據(jù)按位從發(fā)送數(shù)據(jù)引腳TxDn輸出。同時,接收數(shù)據(jù)從接收數(shù)據(jù)引腳RxDn按位移入接收移位寄存器,并復(fù)制到FIFO。
特性 - RxD0, TxD0, RxD1, TxD1, RxD2, 和TxD2基于中斷或者DMA操作
- UART Ch 0, 1, 和 2 具有 IrDA 1.0 & 16 字節(jié) FIFO
- UART Ch 0 和 1 具有 nRTS0, nCTS0, nRTS1, 和 nCTS1
- 支持發(fā)生/接收握手
圖11-1 UART方框圖 串口操作 下述部分描述了UART的一些操作,包括數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率發(fā)生、loop-back模式、紅外模式和自動流控制。
數(shù)據(jù)發(fā)送 發(fā)送數(shù)據(jù)的幀結(jié)構(gòu)是可編程的,它由1個起始位、5-8個數(shù)據(jù)位、1個可選的奇偶位和1-2個停止位組成,這些可以在線控制寄存器ULCONn中設(shè)定。接收器可以產(chǎn)生一個斷點條件——使串行輸出保持1幀發(fā)送時間的邏輯0狀態(tài)。當(dāng)前發(fā)送字被完全發(fā)送出去后,這個斷點信號隨后發(fā)送。斷點信號發(fā)送之后,繼續(xù)發(fā)送數(shù)據(jù)到Tx FIFO(如果沒有FIFO則發(fā)送到Tx保持寄存器)。
數(shù)據(jù)接收 與數(shù)據(jù)發(fā)送一樣,接收數(shù)據(jù)的幀格式也是可編程的。它由1個起始位、5-8個數(shù)據(jù)位、1個可選的奇偶位和1-2個停止位組成,這些可以在線控制寄存器ULCONn中設(shè)定。接收器可以探測到溢出錯誤和幀錯誤。 - 溢出錯誤:在舊數(shù)據(jù)被讀出來之前新的數(shù)據(jù)覆蓋了舊的數(shù)據(jù)
- 幀錯誤: 接收數(shù)據(jù)沒有有效的停止位
當(dāng)在3個字時間(與字長度位的設(shè)置有關(guān))內(nèi)沒有接收到任何數(shù)據(jù)并且Rx FIFO非空時,將會產(chǎn)生一個接收超時條件。
自動流控制(AFC) UART0和UART1通過nRTS and nCTS信號支持自動流控制,例如連接到外部UART時。如果用戶希望將UART連接到一個MODEM,可以在UMCONn寄存器中禁止自動流控位,并且通過軟件控制nRTS信號。 在AFC時, nRTS 由接收器的狀態(tài)決定,而nCTS信號控制發(fā)送器的操作。只有當(dāng)nCTS信號有效的時候(在AFC時,nCTS意味著其它UART的FIFO準(zhǔn)備接收數(shù)據(jù))UART發(fā)送器才會發(fā)送FIFO中的數(shù)據(jù)。在UART接收數(shù)據(jù)之前,當(dāng)它的接收FIFO多于2字節(jié)的剩余空間時nRTS必須有效,當(dāng)它的接收FIFO少于1字節(jié)的剩余空間時nRTS必須無效(nRTS意味著它自己的接收FIFO開始準(zhǔn)備接收數(shù)據(jù))。 圖11-2 UART AFC接口 注:UART2不支持AFC功能,因為S3C2410沒有nRTS2 和 nCTS2。 無AFC的例子 通過FIFO操作Rx - 選擇接收模式(中斷還是DMA模式)。
- 檢查UFSTATn寄存器中Rx FIFO的值。如果值小于15,用戶必須將UMCONn[0]置1(nRTS生效),如果大于等于15,用戶必須將UMCONn[0]清0(nRTS無效)。
- 重復(fù)第2步。
通過FIFO操作Tx - 選擇發(fā)送模式(中斷還是DMA模式)。
- 檢查UMCONn[0]的值,如果為1,寫數(shù)據(jù)到Tx FIFO
RS-232C接口 如果希望將UART連接到MODEM,nRTS, nCTS, nDSR, nDTR, DCD 和nRI信號是必須的。這種情況下用戶可以通過GPIO控制這些信號因為AFC不支持RS-232C接口。
中斷/DMA請求的產(chǎn)生 每個UART有5個狀態(tài)(Tx/Rx/Error)信號:溢出錯誤、幀錯誤、接收緩沖滿、發(fā)送緩沖空和發(fā)送移位寄存器空。這些狀態(tài)體現(xiàn)在UART狀態(tài)寄存器中的相關(guān)位(UTRSTATn/UERSTATn)。 溢出錯誤和幀錯誤與接收錯誤狀態(tài)相關(guān),每個錯誤可以產(chǎn)生一個接收錯誤狀態(tài)中斷請求,如果控制寄存器UCONn中的receive-error-status-interrupt-enable位被置1的話。如果探測到一個receive-error-status-interrupt-enable位,通過讀UERSTSTn的值可以識別這一中斷請求。 控制寄存器UCONn的接收器模式為1(中斷或者循環(huán)檢測模式):當(dāng)接收器在FIFO模式下將一個數(shù)據(jù)從接收移位寄存器寫入FIFO時,如果接收到的數(shù)據(jù)到達了Rx FIFO的觸發(fā)條件,Rx中斷就產(chǎn)生了。在無FIFO模式下,每次接收器將數(shù)據(jù)從移位寄存器寫入接收保持寄存器都將產(chǎn)生一個RX中斷請求。 如果控制寄存器的接收和發(fā)送模式選擇為DMAn請求模式,在上面的情況下則是DMAn請求發(fā)生而不是RX/Tx中斷請求產(chǎn)生。 UART錯誤狀態(tài)FIFO UART除了Rx FIFO外還有錯誤狀態(tài)FIFO。錯誤狀態(tài)FIFO指示接收到的哪個數(shù)據(jù)有錯誤。只有當(dāng)有錯誤的數(shù)據(jù)準(zhǔn)備讀出的時候才會產(chǎn)生錯誤中斷。要清除錯誤狀態(tài)FIFO,URXHn和UERSTATn必須被讀出。 例如:假設(shè)UART Rx FIFO順序接收到ABCD4個字符,在接收B的時候發(fā)生了幀錯誤。事實上UART接收錯誤并未產(chǎn)生任務(wù)錯誤中斷,因為錯誤的數(shù)據(jù)B還沒有被讀出,只有當(dāng)讀B字符的時候才會發(fā)生錯誤中斷。圖11-3描述了這一例子。
波特率發(fā)生器 每個UART的波特率發(fā)生器提供串行時鐘給接收器和發(fā)送器。波特率發(fā)生器的時鐘源可以選擇呢不系統(tǒng)時鐘或者UEXTCLK。換句話說,通過設(shè)置UCONn的時鐘選擇被除數(shù)是可選的。波特率時鐘通過對時鐘源(PCLK OR UEXTCLK)進行16分頻,然后進行一個16位的除數(shù)分頻得到,這個分頻數(shù)由波特率除數(shù)寄存器UBRDIVn指定。UBRDIVn可由下式得出: UBRDIVn = (int)(PCLK/(bps * 16) ) -1 此除數(shù)應(yīng)該在1-(2的16方-1)之間。 為了UART的精確性,S3C2410還支持UEXTCLK作為被除數(shù)。 如果使用UEXTCLK(由外部UART設(shè)備或者系統(tǒng)提供),串行時鐘能夠精確地和UEXTCLK同步,因此用戶可以得到更精確的UART操作,UBRDIVn由下式?jīng)Q定: UBRDIVn = (int)(UEXTCLK / (bps x 16) ) –1 此除數(shù)應(yīng)該在1-(2的16方-1)之間,且UEXTCLK要比PCLK低。 例如,如果波特率為115200bps,而PCLK或者UEXTCLK為40MHz,則UBRDIVn為: UBRDIVn = (int)(40000000/(115200 x 16)) -1 = (int)(21.7) -1 = 21 -1 = 20
波特率錯誤容差 UART的幀錯誤應(yīng)該少于1.87%(3/160)。 UART Frame error should be less than 1.87%(3/160). tUPCLK = (UBRDIVn + 1) x 16 x 1Frame / PCLK tUPCLK : Real UART Clock tUEXACT = 1Frame / baud-rate tUEXACT : Ideal UART Clock UART error = (tUPCLK – tUEXACT) / tUEXACT x 100% 注意:1、1幀=起始位+數(shù)據(jù)位+奇偶位+停止位 2、在特定條件下,波特率上限可達921.6K,例如當(dāng)PCLK為60MHZ時,可以使用921.6K的波特率而誤差為1.69%
loop-back模式 為了識別通訊連接中的故障,UART提供了一種叫l(wèi)oop-back模式的測試模式。這種模式結(jié)構(gòu)上使能了UART的TXD和RXD連接,因此發(fā)送數(shù)據(jù)被接收器通過RXD接收。這一特性允許處理器檢查每個SIO通道的內(nèi)部發(fā)送到接收的數(shù)據(jù)路徑。可以通過設(shè)置UART控制寄存器UCONn中的loopback位選擇這一模式。
紅外(IR)模式 UART支持紅外 (IR)接收和發(fā)送,可以通過設(shè)置UART線控制寄存器ULCONn的Infra-red-mode位來進入這一模式。圖11-4闡述了如何實現(xiàn)IR模式。 在IR發(fā)送模式下,發(fā)送脈沖的比例是3/16——正常的發(fā)送比率(當(dāng)發(fā)送數(shù)據(jù)位為0的時候);在IR接收模式下,接收器必須檢測3/16的脈沖來識別0值(見圖11-6和11-7所示的幀時序)。
UART SFR UART線控制寄存器ULCONn 有3個UART線控制寄存器:ULCON0, ULCON1, and ULCON2
UART控制寄存器UCONn 有3個UART控制寄存器:UCON0, UCON1, and UCON2 注意:DMA接收有FIFO模式下,當(dāng)UART沒有達到FIFO觸發(fā)條件而且3個字時間沒有接收到數(shù)據(jù)時,Rx中斷會產(chǎn)生,用戶應(yīng)該檢查FIFO的狀態(tài)并讀出其它數(shù)據(jù)。
UART FIFO控制寄存器UFCONn
波特率除數(shù)寄存器UBRDIVn 有3個波特率除數(shù)寄存器:UBRDIV0,UBRDIV1,UBRDIV2,存儲于里面的值用于設(shè)置串口波特率: UBRDIVn = (int)(PCLK / (bps x 16) ) –1 或 UBRDIVn = (int)(UEXTCLK / (bps x 16) ) –1 此除數(shù)應(yīng)該在1-(2的16方-1)之間,且UEXTCLK要比PCLK低。 例如,如果波特率為115200bps,而PCLK或者UEXTCLK為40MHz,則UBRDIVn為: UBRDIVn = (int)(40000000/(115200 x 16)) -1 = (int)(21.7) -1 = 21 -1 = 20 
完整的Word格式文檔51黑下載地址(內(nèi)含清晰圖片):
S3C2410中文手冊第11章-UART.doc
(2.33 MB, 下載次數(shù): 12)
2018-6-12 09:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|