自動流控模式S3C2410的UART0和UART1都可以通過各自的nRTS和nCTS信號來實現自動流控。
在 自動流控(AFC)模式下nRTS取決於接收端的狀態,而nCTS控制了發送斷的操作。具體地説:只有當nCTS有效時(表明接收方的FIFO已經準備就 緒來接收資料了),UART才會將FIFO中的資料發送出去。在UART接收資料之前,只要當接收FIFO有至少2-byte空餘的時候,nRTS就會被 置為有效。圖5-12是UART 自動流控模式的連接方式  


 

圖5-12

  中斷/DMA請求產生
S3C2410的每個UART都有7種狀態,分別是:溢出覆蓋(Overrun)錯誤、奇偶校驗錯誤、幀出錯、斷線錯誤、接收就緒、發送緩衝空閒、發送移位器空閒。它們在UART狀態寄存器 UTRSTATn / UERSTATn 中有相應的標誌位。

波特率發生器
每個UART控制器都有各自的波特率發生器來產生髮送和接收資料所用的序列時鐘,波特率發生器的時鐘源可以CPU內部的系統時鐘,也可以從CPU的 UCLK 管腳由外部取得時鐘信號,並且可以通過 UCONn 選擇各自的時鐘源。
波特率產生的具體計算方法如下:
當選擇CPU內部時鐘時:
UBRDIVn=(int)(PCLK/(bps*16))-1,bps為所需要的波特率值,PCLK為CPU內部外設總線(APB)的工作時鐘。
當需要得到更精確的波特率時,可以選擇由 UCLK 引入的外部時鐘來生成。
UBRDIVn=(int)(UCLK/(bps*16))-1
LoopBack操作模式
S3C2410 CPU的UART提供了一種測試模式,也就是這裏所説的LoopBack模式。在設計系統的具體應用時,為了判斷通訊故障是由於外部的數據鏈路上的問題, 還是CPU內驅動程序或CPU本身的問題,這就需要採用LoopBack模式來進行測試。在LoopBack模式中,資料發送端TXD在UART內部就從 邏輯上與接收端RXD連在一起,並可以來驗證資料的收發是否正常。
UART控制寄存器
下面將針對UART的各個控制寄存器逐一進行講解,以期對UART的操作和設置能有更進一步的瞭解。

ULCONn (UART Line Control Register)見圖5-13

 


 

圖5-13

 

Word Length :資料位長度
Number of Stop Bit :停止位數
Parity Mode :奇偶校驗位類型
Infra-Red Mode :UART/紅外模式選擇(當以UART模式工作時,需設為“0”)

UCONn (UART Control Register)見圖5-14
Receive Mode :選擇接收模式。如果是採用DMA模式的話,還需要指定説使用的DMA信道。
Transmit Mode :同上。
Send Break Signal :選擇是否在傳1幀資料中途發送Break信號。
Loopback Mode :選擇是否將UART置於Loopback測試模式。
Rx Error Status Interrupt Enable :選擇是否使能當發生接收異常時,是否產生接收錯誤中斷。
Rx Time Out Enable :是否使能接收超時中斷。
Rx Interrupt Type :選擇接收中斷類型。
選擇0:Pulse(脈衝式/邊沿式中斷。非FIFO模式時,一旦接收緩衝區中有資料,即產生一箇中斷;為FIFO模式時,一旦當FIFO中的資料達到一定的觸發水平後,即產生一箇中斷)


 

選擇1:Level(電平模式中斷。非FIFO模式時,只要接收緩衝區中有資料,即產生中斷;為FIFO模式時,只要FIFO中的資料達到觸發水平後,即產生中斷)

Tx Interrupt Type :類同於Rx Interrupt Type

Clock Selection :選擇UART波特率發生器的時鐘源。


圖5-14

UFCONn (UART FIFO Conrtol Register)見圖5-15

FIFO Enable :FIFO使能選擇。

Rx FIFO Reset :選擇當復位接收FIFO時是否自動清除FIFO中的內容。

Tx FIFO Reset :選擇當復位發送FIFO時是否自動清除FIFO中的內容。

Rx FIFO Trigger Level :選擇接收FIFO的觸發水平。

Tx FIFO Trigger Level :選擇發送FIFO的觸發水平。


圖5-15

UMCONn (UART Modem Control Register)見圖5-16

Request to Send :如果在AFC模式下,該位將由UART控制器自動設置;否則的話就必須由用户的軟件來控制。

Auto Flow Control :選擇是否使能自動流控(AFC)。


圖5-16

UTRSTATn (UART TX/RX Status Register)見圖5-17

Receive buffer data ready :當接收緩衝寄存器從UART接收端口接收到有效資料時將自動置“1”。反之為“0”則表示緩衝器中沒有資料。

Transmit buffer empty :當發送緩衝寄存器中為空,自動置“1”;反之表明緩衝器中正有資料等待發送。

Transmitter empty :當發送緩衝器中已經沒有有效資料時,自動置“1”;反之表明尚有資料未發送。


圖5-17

UERSTATn (UART Error Status Register)見圖5-18

Overrun Error :為“1”,表明發生Overrun錯誤。

Frame Error :為“1”。表明發生Frame(幀)錯誤。


圖5-18

UFSTATn :(UART FIFO Status Register)見圖5-19

Rx FIFO Count :接收FIFO中當前存放的字節數。

 Tx FIFO Count :發送FIFO中當前存放的字節數。

 Rx FIFO Full :為“1“表明接收FIFO已滿。

 Tx FIFO Full :為“1“表明發送FIFO已滿。


圖5-19

UMSTATn :(UART FIFO Status Register)見圖5-20

Clear to Send :為“0”表示CTS無效;為“1”表示CTS有效。

Delta CTS :指示自從上次CPU訪問該位後,nCTS的狀態有無發生改變。

為“0”則説明不曾改變;反之表明nCTS信號已經變化了。


圖5-20

UTXHn 和 URXHn 分別是UART發送和接收資料寄存器
這兩個寄存器存放着發送和接收的資料,當然只有一個字節8位資料。需要注意的是在發生溢出錯誤的時候,接收的資料必須要被讀出來,否則會引發下次溢出錯誤

UBRDIVn :(UART Baud Rate Divisor Register)見圖5-21


圖5-21

關於UART波特率的計算方法,在前面的內容中已經有詳細的闡述,此處不做多餘説明。

小結:讀寫狀態寄存器UTRSTAT 以及錯誤狀態寄存UERSTAT,可以反映芯片目前的讀寫狀態以及錯誤類型。FIFO 狀態寄存器UFSTAT 和MODEM 狀態寄存器UMSTAT,通過前者可以讀出目前FIFO 是否滿以及其中的字節數;通過後者可以讀出目前MODEM 的CTS狀態。