欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 嵌入式s3c2410A UART部分中文解釋 [打印本頁]

作者: whm001    時間: 2018-6-12 09:18
標題: 嵌入式s3c2410A UART部分中文解釋
異步串口通信

概述

S3C2410的UART提供3個獨立的異步串行通信端口,每個端口可以基于中斷或者DMA進行操作。換句話說,UART控制器可以在CPU和UART之間產生一個中斷或者DMA請求來傳輸數據。UART在系統時鐘下運行可支持高達230.4K的波特率,如果使用外部設備提供的UEXTCLK,UART的速度還可以更高。每個UART通道各含有兩個16位的接收和發送FIFO。
S3C2410的UART包括可編程的波特率,紅外 接收/發送,一個或兩個停止位插入,5-8位數據寬度和奇偶校驗。
每個UART包括一個波特率發生器、一個發送器、一個接收器和一個控制單元,如圖11-1所示。波特率發生器的輸入可以是PCLK或者UEXTCLK。發送器和接收器包含16位的FIFO和移位寄存器,數據被送入FIFO,然后被復制到發送移位寄存器準備發送,然后數據按位從發送數據引腳TxDn輸出。同時,接收數據從接收數據引腳RxDn按位移入接收移位寄存器,并復制到FIFO。

特性

圖11-1              UART方框圖

串口操作

下述部分描述了UART的一些操作,包括數據發送、數據接收、中斷產生、波特率發生、loop-back模式、紅外模式和自動流控制。

數據發送
發送數據的幀結構是可編程的,它由1個起始位、5-8個數據位、1個可選的奇偶位和1-2個停止位組成,這些可以在線控制寄存器ULCONn中設定。接收器可以產生一個斷點條件——使串行輸出保持1幀發送時間的邏輯0狀態。當前發送字被完全發送出去后,這個斷點信號隨后發送。斷點信號發送之后,繼續發送數據到Tx FIFO(如果沒有FIFO則發送到Tx保持寄存器)。

數據接收
與數據發送一樣,接收數據的幀格式也是可編程的。它由1個起始位、5-8個數據位、1個可選的奇偶位和1-2個停止位組成,這些可以在線控制寄存器ULCONn中設定。接收器可以探測到溢出錯誤和幀錯誤。
當在3個字時間(與字長度位的設置有關)內沒有接收到任何數據并且Rx FIFO非空時,將會產生一個接收超時條件。
自動流控制(AFC)
UART0和UART1通過nRTS and nCTS信號支持自動流控制,例如連接到外部UART時。如果用戶希望將UART連接到一個MODEM,可以在UMCONn寄存器中禁止自動流控位,并且通過軟件控制nRTS信號。
在AFC時, nRTS 由接收器的狀態決定,而nCTS信號控制發送器的操作。只有當nCTS信號有效的時候(在AFC時,nCTS意味著其它UART的FIFO準備接收數據)UART發送器才會發送FIFO中的數據。在UART接收數據之前,當它的接收FIFO多于2字節的剩余空間時nRTS必須有效,當它的接收FIFO少于1字節的剩余空間時nRTS必須無效(nRTS意味著它自己的接收FIFO開始準備接收數據)。
圖11-2              UART AFC接口
注:UART2不支持AFC功能,因為S3C2410沒有nRTS2 和 nCTS2。

AFC的例子

通過FIFO操作Rx

通過FIFO操作Tx

RS-232C接口
如果希望將UART連接到MODEM,nRTS, nCTS, nDSR, nDTR, DCD 和nRI信號是必須的。這種情況下用戶可以通過GPIO控制這些信號因為AFC不支持RS-232C接口。

中斷/DMA請求的產生
每個UART有5個狀態(Tx/Rx/Error)信號:溢出錯誤、幀錯誤、接收緩沖滿、發送緩沖空和發送移位寄存器空。這些狀態體現在UART狀態寄存器中的相關位(UTRSTATn/UERSTATn)。
溢出錯誤和幀錯誤與接收錯誤狀態相關,每個錯誤可以產生一個接收錯誤狀態中斷請求,如果控制寄存器UCONn中的receive-error-status-interrupt-enable位被置1的話。如果探測到一個receive-error-status-interrupt-enable位,通過讀UERSTSTn的值可以識別這一中斷請求。
控制寄存器UCONn的接收器模式為1(中斷或者循環檢測模式):當接收器在FIFO模式下將一個數據從接收移位寄存器寫入FIFO時,如果接收到的數據到達了Rx FIFO的觸發條件,Rx中斷就產生了。在無FIFO模式下,每次接收器將數據從移位寄存器寫入接收保持寄存器都將產生一個RX中斷請求。
如果控制寄存器的接收和發送模式選擇為DMAn請求模式,在上面的情況下則是DMAn請求發生而不是RX/Tx中斷請求產生。
UART錯誤狀態FIFO
UART除了Rx FIFO外還有錯誤狀態FIFO。錯誤狀態FIFO指示接收到的哪個數據有錯誤。只有當有錯誤的數據準備讀出的時候才會產生錯誤中斷。要清除錯誤狀態FIFO,URXHn和UERSTATn必須被讀出。
例如:假設UART Rx FIFO順序接收到ABCD4個字符,在接收B的時候發生了幀錯誤。事實上UART接收錯誤并未產生任務錯誤中斷,因為錯誤的數據B還沒有被讀出,只有當讀B字符的時候才會發生錯誤中斷。圖11-3描述了這一例子。

波特率發生器
每個UART的波特率發生器提供串行時鐘給接收器和發送器。波特率發生器的時鐘源可以選擇呢不系統時鐘或者UEXTCLK。換句話說,通過設置UCONn的時鐘選擇被除數是可選的。波特率時鐘通過對時鐘源(PCLK OR UEXTCLK)進行16分頻,然后進行一個16位的除數分頻得到,這個分頻數由波特率除數寄存器UBRDIVn指定。UBRDIVn可由下式得出:
UBRDIVn = (int)(PCLK/(bps * 16) ) -1
此除數應該在1-(2的16方-1)之間。
為了UART的精確性,S3C2410還支持UEXTCLK作為被除數。
如果使用UEXTCLK(由外部UART設備或者系統提供),串行時鐘能夠精確地和UEXTCLK同步,因此用戶可以得到更精確的UART操作,UBRDIVn由下式決定:                            UBRDIVn = (int)(UEXTCLK / (bps x 16) ) –1
此除數應該在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的幀錯誤應該少于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幀=起始位+數據位+奇偶位+停止位
                    2、在特定條件下,波特率上限可達921.6K,例如當PCLK為60MHZ時,可以使用921.6K的波特率而誤差為1.69%

loop-back模式
為了識別通訊連接中的故障,UART提供了一種叫loop-back模式的測試模式。這種模式結構上使能了UART的TXD和RXD連接,因此發送數據被接收器通過RXD接收。這一特性允許處理器檢查每個SIO通道的內部發送到接收的數據路徑。可以通過設置UART控制寄存器UCONn中的loopback位選擇這一模式。

紅外(IR)模式
UART支持紅外 (IR)接收和發送,可以通過設置UART線控制寄存器ULCONn的Infra-red-mode位來進入這一模式。圖11-4闡述了如何實現IR模式。
在IR發送模式下,發送脈沖的比例是3/16——正常的發送比率(當發送數據位為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模式下,當UART沒有達到FIFO觸發條件而且3個字時間沒有接收到數據時,Rx中斷會產生,用戶應該檢查FIFO的狀態并讀出其它數據。

UART FIFO控制寄存器UFCONn







波特率除數寄存器UBRDIVn
有3個波特率除數寄存器:UBRDIV0,UBRDIV1,UBRDIV2,存儲于里面的值用于設置串口波特率:
UBRDIVn = (int)(PCLK / (bps x 16) ) –1                                                      
或              UBRDIVn = (int)(UEXTCLK / (bps x 16) ) –1
此除數應該在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黑下載地址(內含清晰圖片):
S3C2410中文手冊第11章-UART.doc (2.33 MB, 下載次數: 12)







歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1