www.taoydy.com |
|||
|
|||
圖5-2 資料傳送方式
|
|||
1、單工方式 資料始終是從A設備發向B設備。 2、 半雙工方式 資料能從A設備傳送到B設備,也能從B設備傳送到A設備。在任何時候資料都不能同時在兩個方向上傳送,即每次只能有一個設備發送,另一個設備接收。但是通訊雙方依照一定的通訊協議來輪流地進行發送和接收。 3、 全雙工方式 允許通信雙方同時進行發送和接收。這時,A設備在發送的同時也可以接收,B設備亦同。全雙工方式相當於把兩個方向相反的單工方式組合在一起,因此它需要兩條數據傳輸線。在計算機串行通訊中主要使用半雙工和全雙工方式。 三、信號傳輸方式 1、基帶傳輸方式 在傳輸線路上直接傳輸不加調製的二進制信號,如圖所示。它要求傳送線的頻帶較寬,傳輸的數字信號是矩形波。 基帶傳輸方式僅適宜於近距離和速度較低的通信。 2、頻帶傳輸方式 傳輸經過調製的模擬信號 在長距離通信時,發送方要用調製器把數字信號轉換成模擬信號,接收方則用解調器將接收到的模擬信號再轉換成數字信號,這就是信號的調製解調。 實現調製和解調任務的裝置稱爲調制解調器(MODEM)。採用頻帶傳輸時,通信雙方各接一個調制解調器,將數字信號寄載在模擬信號(載波)上加以傳輸。因此,這種傳輸方式也稱爲載波傳輸方式。這時的通信線路可以是電話交換網,也可以是專用線。 常用的調製方式有三種: 調幅、調頻和調相,分別如下圖所示。 |
四、串行接口標準 串行接口標準:指的是計算機或終端(資料終端設備DTE)的串行接口電路與調制解調器MODEM等(數據通信設備DCE)之間的連接標準。 RS-232C標準 RS-232C是一種標準接口,D型插座,採用25芯引腳或9芯引腳的連接器,如圖5-5所示。 |
圖5-5 |
微型計算機之間的串行通信就是按照RS-232C標準設計的接口電路實現的。如果使用一根電話線進行通信,那幺計算機和MODEM之間的聯機就是根據RS-232C標準連接的。其連接及通信原理如圖5-6所示 |
圖5-6 |
RS232信號定義 除了RS-232C標準以外,還有一些其它的通用的異步串行接口標準,如: RS-423A標準 |
圖5-7
|
RS-422A標準 RS-422A總線採用平衡輸出的發送器,差分輸入的接收器。如圖5-8所示。 |
圖5-8
|
RS-422A的輸出信號線間的電壓爲±2v,接收器的識別電壓爲±0.2v。共模範圍±25v。在高速傳送信號時,應該考慮到通信線路的阻抗匹配,一般在接收端加終端電阻以吸收掉反射波。電阻網絡也應該是平衡的,如圖5-9所示。 |
圖5-9 爲RS-422A平衡輸出差分輸示意圖
|
RS-485標準 RS-485適用於收發雙方共享一對線進行通信,也適用於多個點之間共享一對線路進行總線方式聯網,但通信只能是半雙工的,線路如圖5-10所示。 |
圖5-10
|
典型的RS232到RS422/485轉換芯片有:MAX481/483/485/487/488/489/490/491, SN75175/176/184等等,它們均只需單一+5v電源供電即可工作(芯片內部採用電荷泵方式升壓)。具體使用方法可查閱有關技術手冊。 五、S3C2410內置的UART控制器 S3C2410內部具有3個獨立的UART控制器,每個控制器都可以工作在Interrupt(中斷)模式或DMA(直接內存訪問)模式,也就是說 UART控制器可以CPU與UART控制器傳送資料的時候產生中斷或DMA請求。並且每個UART均具有16字節的FIFO(先入先出寄存器),支持的最高波特率可達到230.4Kbps 圖5-11是S3C2410內部UART控制器的結構圖 |
圖5-11 |
UART的操作 UART的操作分爲以下幾個部分,分別是:資料發送、資料接收、產生中斷、產生波特率、Loopback模式、紅外模式以及自動流控模式。 資料發送 發送的資料幀格式是可以編程設置的。它包含了起始位、5~8個資料位、可選的奇偶校驗位以及1~2位停止位。這些都是通過UART的控制寄存器 ULCONn 來設置的。 資料接收 同發送一樣,接收的資料幀格式也是可以進行編程設置的。此外,還具備了檢測溢出出錯、奇偶校驗出錯、幀出錯等出錯檢測,並且每種錯誤都可以置相應的錯誤標誌。 |
S3C2410的UART0和UART1都可以通過各自的nRTS和nCTS信號來實現自動流控。
在自動流控(AFC)模式下nRTS取決於接收端的狀態,而nCTS控制了發送斷的操作。具體地說:只有當nCTS有效時(表明接收方的FIFO已經準備就緒來接收資料了),UART纔會將FIFO中的資料發送出去。在UART接收資料之前,只要當接收FIFO有至少2-byte空餘的時候,nRTS就會被置爲有效。圖5-12是UART 自動流控模式的連接方式
中斷/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
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發送和接收資料寄存器 UBRDIVn :(UART Baud Rate Divisor Register)見圖5-21 |
圖5-21
|
關於UART波特率的計算方法,在前面的內容中已經有詳細的闡述,此處不做多餘說明。
小結:讀寫狀態寄存器UTRSTAT 以及錯誤狀態寄存UERSTAT,可以反映芯片目前的讀寫狀態以及錯誤類型。FIFO 狀態寄存器UFSTAT 和MODEM 狀態寄存器UMSTAT,通過前者可以讀出目前FIFO 是否滿以及其中的字節數;通過後者可以讀出目前MODEM 的CTS狀態。 |