日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 串口基本原理

串口基本原理 時間:2017-11-06      來源:未知

有很多有過一定嵌入式開發(fā)工作經(jīng)驗的朋友在從事嵌入式開發(fā)的過程當(dāng)中,主要在嵌入式軟件,界面等方向做的研究較多,但經(jīng)常也會用串口進行調(diào)試程序,只知道串口是用來傳輸數(shù)據(jù)用的。但串口具體怎么用來傳輸數(shù)據(jù)卻不太清楚,對串口的工作原理也是一知半解。接下來分享下串口具體是怎么用來傳輸數(shù)據(jù)的。

串行通信的基本概念

在通信領(lǐng)域內(nèi),有兩種數(shù)據(jù)通信方式:并行通信和串行通信

串行通信: 

計算機與I/O設(shè)備之間數(shù)據(jù)傳輸?shù)母魑皇前错樞蛞来芜M行傳送,通常數(shù)據(jù)在一根數(shù)據(jù)線上或者一對差分線上傳輸。

并行通信:

計算機與I/O設(shè)備之間通過多條傳輸線交換數(shù)據(jù),數(shù)據(jù)的各位同時傳送。

串行速度慢,但是傳輸設(shè)備成本低,可利用現(xiàn)有的通信手段和通信設(shè)備進行遠程通信。并行通信速度快,但是傳輸設(shè)備成本高,適合近距離數(shù)據(jù)傳送。需要注意:一些差分串行通信總線(RS485,RS422,USB等)他們傳輸距離遠,且抗干擾能力強,速度也比較快。

1.1.2 數(shù)據(jù)的串行和并行通信方式

串行通信好比是一列縱隊,每個數(shù)據(jù)元素依次縱向排列。如圖2-57所示,傳輸時一個比特一個比特的串行傳輸,每個時鐘周期傳輸一個比特,這種傳輸方式相對比較簡單,速度較慢,但是使用總線數(shù)較少,通常一根接收線,一根發(fā)送線即可實現(xiàn)串行通信。它的缺點是要增加額外的數(shù)據(jù)來控制一個數(shù)據(jù)幀的開始和結(jié)束。

并行通信好比一排橫隊,齊頭并進同時傳輸。這種通信方式每個時鐘周期傳輸?shù)臄?shù)據(jù)量和其總線寬度成正比,但是實現(xiàn)較為復(fù)雜。UART通信采用的是串行方式進行通信的。

圖為串行數(shù)據(jù)通信與并行數(shù)據(jù)通信

串口的數(shù)據(jù)傳輸是以串行方式進行的。串口在數(shù)據(jù)通信中,一次只傳輸一個比特的數(shù)據(jù)。串行數(shù)據(jù)的傳輸速度用bps或波特率來描述。

注意:

碼元:在數(shù)字通信中常常用時間間隔相同的符號來表示數(shù)字。這樣的時間間隔內(nèi)的信號稱為碼元,這個間隔稱為碼元長度

比特率:是信息量傳送速率單位,即每秒傳輸二進制代碼位數(shù)。bit/s

所謂差分傳輸,就是發(fā)送端在兩條信號線上傳輸幅值相等相位相反的電信號,接收端對接受的兩條線信號作減法運算,這樣獲得幅值翻倍的信號。

串行通信涉及的常用術(shù)語

單工、半雙工和全雙工

單工(Simplex)

o 特點:僅能進行一個方向的數(shù)據(jù)傳送

半雙工(Half Duplex)

o 特點:數(shù)據(jù)可以在兩個方向上進行傳送,但是這種傳送絕不能同時進行。[雙向,但不同時]

全雙工(Full Duplex)

o 特點:能夠在兩個方向同時進行數(shù)據(jù)傳送

數(shù)據(jù)傳輸率 

每秒傳輸?shù)亩M制位數(shù),單位為bps(bit per second)也稱比特率。

 異步方式與同步方式

同步通信方式(Synchronous)所用的數(shù)據(jù)格式?jīng)]有起始位、停止位,一次傳送的字符個數(shù)可變。在傳送前,先按照一定的格式將各種信息裝配成一個包,該包包括供接收方識別用的同步字符一個或兩個,其后緊跟著要傳送的n個字符,再后就是校驗字符。

異步方式(Asynchronous):也稱“起止同步式”。

奇偶校驗位

奇偶校驗位 (Parity)是指偶數(shù)或者奇數(shù)或甚至對一個數(shù)字的性質(zhì)。多被應(yīng)用于計算機硬件的錯誤檢測中。

奇偶校驗位是一個表示給定位數(shù)的二進制數(shù)中 1 的個數(shù)是奇數(shù)還是偶數(shù)的二進制數(shù)。奇偶校驗位是簡單的錯誤檢測碼。奇偶校驗位有兩種類型:偶校驗位與奇校驗位。

1.1.1 異步通信和同步通信

圖2-56同步信號與異步信號

同步通信技術(shù)

在發(fā)送數(shù)據(jù)信號的時候,會同時送出一根同步時鐘信號,用來同步發(fā)送方和接收方的數(shù)據(jù)采樣頻率。如圖2-56所示,同步通信時,信號線1是一根同步時鐘信號線,以固定的頻率進行電平的切換,其頻率周期為t,在每個電平的上升沿之后進行對同步送出的數(shù)據(jù)信號線2進行采樣(高電平代表1,低電平代表0),根據(jù)采樣數(shù)據(jù)電平高低取得輸出數(shù)據(jù)信息。如果雙方?jīng)]有同步時鐘的話,那么接收方就不知道采樣周期,也就不能正常的取得數(shù)據(jù)信息。

圖2-56同步信號與異步信號

同步通信技術(shù)

在發(fā)送數(shù)據(jù)信號的時候,會同時送出一根同步時鐘信號,用來同步發(fā)送方和接收方的數(shù)據(jù)采樣頻率。如圖2-56所示,同步通信時,信號線1是一根同步時鐘信號線,以固定的頻率進行電平的切換,其頻率周期為t,在每個電平的上升沿之后進行對同步送出的數(shù)據(jù)信號線2進行采樣(高電平代表1,低電平代表0),根據(jù)采樣數(shù)據(jù)電平高低取得輸出數(shù)據(jù)信息。如果雙方?jīng)]有同步時鐘的話,那么接收方就不知道采樣周期,也就不能正常的取得數(shù)據(jù)信息。

異步通信技術(shù)

在異步通信技術(shù)中,數(shù)據(jù)發(fā)送方和數(shù)據(jù)接收方?jīng)]有同步時鐘,只有數(shù)據(jù)信號線,只不過發(fā)送端和接收端會按照協(xié)商好的協(xié)議(固定頻率)來進行數(shù)據(jù)采樣。數(shù)據(jù)發(fā)送方以每秒鐘57600bits的速度發(fā)送數(shù)據(jù),接收方也以57600bits的速度去接收數(shù)據(jù),這樣就可以保證數(shù)據(jù)的有效和正確。通常異步通信中使用波特率(Baud-Rate)來規(guī)定雙方傳輸速度,其單位為bps(bits per second每秒傳輸位數(shù))。

1.1.3 數(shù)據(jù)通信傳輸模式

在數(shù)據(jù)通信過程中,發(fā)送方和接收方為了實現(xiàn)數(shù)據(jù)的正確發(fā)送和接收,通常會有一個狀態(tài)寄存器來描述當(dāng)前數(shù)據(jù)接收和發(fā)送狀態(tài),當(dāng)發(fā)送方有數(shù)據(jù)發(fā)送時,會查看發(fā)送狀態(tài)寄存器,看是否允許發(fā)送數(shù)據(jù)(如果上一次數(shù)據(jù)還沒有發(fā)送完畢,不允許繼續(xù)數(shù)據(jù)發(fā)送),在發(fā)送允許情況下再送出新數(shù)據(jù)。同樣,接收端通過查看接收狀態(tài)寄存器,確定是否有新數(shù)據(jù)到達,如果有數(shù)據(jù)到達,將去接收數(shù)據(jù)緩沖區(qū)讀取數(shù)據(jù)。

(1)輪詢模式

通過程序執(zhí)行流,不停的檢測狀態(tài)寄存器的結(jié)果,如果當(dāng)前可發(fā)送或接收,則發(fā)送或接收數(shù)據(jù)。其過程可以用下面?zhèn)未a來表示。

輪詢方式實現(xiàn)數(shù)據(jù)發(fā)送偽代碼

Send()

{

While(1)

{

if(發(fā)送狀態(tài) == 可發(fā)送)      // 檢查寄存器的值

執(zhí)行數(shù)據(jù)發(fā)送操作;

}

}

輪詢方式實現(xiàn)數(shù)據(jù)接收偽代碼

Receive()

{

While(1)

{

if(接收狀態(tài) == 有數(shù)據(jù)到達)

執(zhí)行數(shù)據(jù)接收操作;

}

}

由程序可知,這種方式實現(xiàn)簡單,但在進行數(shù)據(jù)接收和發(fā)送時都要進入循環(huán)檢查狀態(tài)寄存器的值,當(dāng)沒有數(shù)據(jù)到達或數(shù)據(jù)不可發(fā)送時,CPU會一直空轉(zhuǎn),其它程序又得不到CPU的執(zhí)行權(quán),很影響系統(tǒng)的效率。

(2)中斷模式

中斷方式是指,當(dāng)數(shù)據(jù)到達或數(shù)據(jù)可發(fā)送時,產(chǎn)生中斷,通知CPU去發(fā)送或接收數(shù)據(jù),這種方式將通信硬件和CPU獨立出來,通信硬件只有在發(fā)送或接收條件準(zhǔn)備好之后中,才通知CPU去處理數(shù)據(jù),在通信條件沒有準(zhǔn)備好的時候,CPU去處理其它程序,顯然這種方式更合理,這種方式要求通信硬件要求比較高,需要支持產(chǎn)生中斷信號。

(3)DMA模式

通常實現(xiàn)數(shù)據(jù)的轉(zhuǎn)移或拷貝時,CPU將從源地址處復(fù)制數(shù)據(jù)到寄存器,然后將寄存器數(shù)據(jù)再寫入目的地址處,該復(fù)制過程需要CPU來執(zhí)行。FS4412支持DMA方式傳輸串口通信數(shù)據(jù),DMA傳輸是指在CPU不干涉的情況下,DMA硬件自動實現(xiàn)數(shù)據(jù)的轉(zhuǎn)移和復(fù)制,在DMA傳輸過程中,CPU幾乎不用干涉,這樣可以讓CPU安心的去做自己的事情。雖然如此,但是DMA在傳輸數(shù)據(jù)過程中要占用總線,在大批數(shù)據(jù)傳輸時,系統(tǒng)總線會被DMA通道占用,也會影響系統(tǒng)的效率。

1.1 UART串口

通用異步接收器和發(fā)送器(Universal Asynchronous Receiver and Transmitter) 簡稱UART。通常是嵌入式設(shè)備中默認(rèn)都會配置的通信接口。

為什么使用串口?

這是因為,很多嵌入式設(shè)備沒有顯示屏,無法獲得嵌入式設(shè)備實時數(shù)據(jù)信息,通過UART串口和超級終端相連,打印嵌入式設(shè)備輸出信息。并且在對嵌入式系統(tǒng)進行跟蹤和調(diào)試時,UART串口是必要的通信手段。

舉例:

比如:網(wǎng)絡(luò)路由器,交換機等都要通過串口來進行配置。UART串口還是許多硬件數(shù)據(jù)輸出的主要接口,如GPS接收器就是通過UART串口輸出GPS接收數(shù)據(jù)的。

fs4412的特點:

1)4組收發(fā)通道,同時支持中斷模式和DMA操作

2)通道0,1,2及帶紅外3通道都支持64字節(jié)FIFO

3)通道1和3支持高速操作模式

4)支持握手模式的發(fā)送和接收

1.1.4    UART控制器

UART控制器,提供了三個獨立的異步串行I/O端口,每個端口都可以在中斷模式或DMA模式下工作,換而言之,UART可以生成中斷或DMA請求用于CPU和UART之間的數(shù)據(jù)傳輸。UART串口掛接在APB總線上,APB總線高可以達到50MHz工作頻率,在使用APB時鐘頻率時可以達到高115.2Kbps波特率的通信速度。如果UART串口接收外部設(shè)備提供UEXTCLK(外部時鐘),UART可以在更高的速度下工作。每個UART串口在接收裝置和發(fā)送裝置里分別包含一個64Byte的FIFO緩沖區(qū),用于緩存發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。

由于UART是串行異步通信方式,因此在UART通信過程中每次只能傳輸1位(bit),若干位組成一個數(shù)據(jù)幀(frame),幀是UART通信中基本單元,它主要包含:開始位,數(shù)據(jù)位,校驗位(如果開啟了數(shù)據(jù)校驗,要包含校驗位),和停止位。

UART在通信之前要在發(fā)送端和接收端約定好幀結(jié)構(gòu),也就是約定好傳輸數(shù)據(jù)幀格式。

l 開始位:必須包含在數(shù)據(jù)幀中,表示一個幀的開始。

l 數(shù)據(jù)位:可選5,6,7,8位,該位長度可由編程人員指定。

l 校驗位:如果在開啟了數(shù)據(jù)校驗時,該位必須指定。

l 停止位:可選1,2位,該位長度可由編程人員指定。

通信雙方約定好幀格式后,指定同一波特率,以保證雙方數(shù)據(jù)傳輸?shù)耐健?/p>

1.1.5  UART串口工作原理

每個UART包含一個波特率產(chǎn)生器,發(fā)送器,接收器和一個控制單元,如下圖所示:

下面列出Exynos4412 UART相關(guān)的控制寄存器,具體位含義見Exynos4412芯片手冊

UART行控制器ULCONn

UART模式控制寄存器UCONn

UART FIFO控制寄存器UFCONn

UART MODEM控制寄存器UMCONn

發(fā)送寄存器UTXH和接收寄存器URXH

波特率分頻寄存器UBRp2和UFRACVAL2

UART硬件結(jié)構(gòu)

UART是以異步方式實現(xiàn)通信的,其采樣速度由波特率決定,波特率產(chǎn)生器的工作頻率可以由PCLK(外圍設(shè)備頻率),F(xiàn)CLK/n(CPU工作頻率的分頻),UEXTCLK(外部輸入時鐘)三個時鐘作為輸入頻率,波特率設(shè)置寄存器是可編程的,用戶可以設(shè)置其波特率決定發(fā)送和接收的頻率。發(fā)送器和接收器包含了64Byte的FIFO和數(shù)據(jù)移位器。UART通信是面向字節(jié)流的,待發(fā)送數(shù)據(jù)寫到FIFO之后,被拷貝到數(shù)據(jù)移位器(1字節(jié)大小)里,數(shù)據(jù)通過發(fā)送數(shù)據(jù)管腳TXDn發(fā)出。同樣道理,接收數(shù)據(jù)通過RXDn管腳來接收數(shù)據(jù)(1字節(jié)大小)到接收移位器,然后將其拷貝到FIFO接收緩沖區(qū)里。

(1)數(shù)據(jù)發(fā)送

發(fā)送的數(shù)據(jù)幀可編程的,它的一個幀長度是用戶指定的,它包括一個開始位,5~8個數(shù)據(jù)位,一個可選的奇偶校驗位和1~2個停止位,數(shù)據(jù)幀格式可以通過設(shè)置ULCONn寄存器來設(shè)置。發(fā)送器也可以產(chǎn)生一個終止信號,它是由一個全部為0的數(shù)據(jù)幀組成。在當(dāng)前發(fā)送數(shù)據(jù)被完全傳輸完以后,該模塊發(fā)送一個終止信號。在終止信號發(fā)送后,它可以繼續(xù)通過FIFO(FIFO)或發(fā)送保持寄存器(NON-FIFO)發(fā)送數(shù)據(jù)。

(2)數(shù)據(jù)接收

同樣接收端的數(shù)據(jù)也是可編程的,接收器可以偵測到溢出錯誤奇偶校驗錯誤,幀錯誤和終止條件,每個錯誤都可以設(shè)置一個錯誤標(biāo)志。

l 溢出錯誤是指在舊數(shù)據(jù)被讀取到之前,新數(shù)據(jù)覆蓋了舊數(shù)據(jù)

l 奇偶校驗錯誤是指接收器偵測到了接收數(shù)據(jù)校驗結(jié)果失敗,接收數(shù)據(jù)無效

l 幀錯誤是指接收到的數(shù)據(jù)沒有一個有效的停止位,無法判定數(shù)據(jù)幀結(jié)束

l 終止條件是指RxDn接收到保持邏輯0狀態(tài)持續(xù)長于一個數(shù)據(jù)幀的傳輸時間

(3)自動流控AFC(Auto Float Control)

硬件流控使用串行電纜控制線上的電壓信號來控制數(shù)據(jù)的發(fā)送和接收。

串口通訊中的硬件流控有兩種方式:DTR/DSR方式和RTS/CTS方式。

自動流控制可以看成是串口的開關(guān),uart2不帶有AFC功能

UART0和UART1支持有nRTS和nCTS的自動流控,UART2不支持流控。在AFC情況下,通信雙方nRTS和nCTS管腳分別連接對方的nCTS和nRTS管腳。通過軟件控制數(shù)據(jù)幀的發(fā)送和接收。

在開啟AFC時,發(fā)送端接收發(fā)送前要判斷nCTS信號狀態(tài),當(dāng)接收到nCTS激活信號時,發(fā)送數(shù)據(jù)幀。該nCTS管腳連接對方nRTS管腳。接收端在準(zhǔn)備接收數(shù)據(jù)幀前,其接收器FIFO有大于32個字節(jié)的空閑空間,nRTS管腳會發(fā)送激活信號,當(dāng)其接收FIFO小于32個字節(jié)的空閑空間,nRTS必須置非激活狀態(tài)。如圖2-60所示。

RTS (Require ToSend,發(fā)送請求)為輸出信號,用于指示本設(shè)備準(zhǔn)備好可接收數(shù)據(jù),低電平有效,低電平說明本設(shè)備可以接收數(shù)據(jù)。

CTS (Clear ToSend,發(fā)送允許)為輸入信號,用于判斷是否可以向?qū)Ψ桨l(fā)送數(shù)據(jù),低電平有效,低電平說明本設(shè)備可以向?qū)Ψ桨l(fā)送數(shù)據(jù)。

此處有人將CTS翻譯為發(fā)送允許。因為CTS是對方的RTS控制己方的CTS是否允許發(fā)送的功能。

圖2-60自動流控數(shù)據(jù)傳輸

(4)波特率

在UART中波特率發(fā)生器為發(fā)送器和接收器提供工作時鐘。波特率發(fā)生器的時鐘源可以選擇FS4412的內(nèi)部系統(tǒng)時鐘(PCLK,F(xiàn)CLK/n)或UEXTCLK(外部時鐘源),可以通過設(shè)置UCONn寄存器來設(shè)置波特率發(fā)生器的輸入時鐘源。通常我們選擇使用PCLK作為UART工作時鐘。

UART控制器中沒有對波特率進行設(shè)置的寄存器,而是通過設(shè)置一個除數(shù)因子,來決定其波特率。其計算公式如下:

UART除數(shù)(UBRpn) = (int)(CLK/(buad rate * 16 )) - 1

其中:UBRpn的取值范圍應(yīng)該為1~2^16-1。例如:波特率為115200bps,PCLK時鐘為其工作頻率,采用50MHz,UBRpn為:

UBRpn = (int)(50M / (115200 x 16)) - 1 = 26

在系統(tǒng)時鐘未初始化時,PCLK = 12MHz,如果波特率采用57600bps,那么UBRpn為:

UBRpn = (int)(12M / (57600 x 16)) - 1 = 12

當(dāng)使用外部時鐘源時,如果外部時鐘小于PCLK時鐘,則UEXTCLK應(yīng)該設(shè)置為0。

.比特率 

在數(shù)字信道中,比特率是數(shù)字信號的傳輸速率,它用單位時間內(nèi)傳輸?shù)亩M制代碼的有效位(bit)數(shù)來表示,其單位為每秒比特數(shù)bit/s(bps)、每秒千比特數(shù)(Kbps)或每秒兆比特數(shù)(Mbps)來表示(此處K和M分別為1000和1000000,而不是涉及計算機存儲器容量時的1024和1048576)。 

.波特率 

波特率指數(shù)據(jù)信號對載波的調(diào)制速率,它用單位時間內(nèi)載波調(diào)制狀態(tài)改變次數(shù)來表示,其單位為波特(Baud)。 波特率與比特率的關(guān)系為:比特率=波特率X單個調(diào)制狀態(tài)對應(yīng)的二進制位數(shù)。 

如何區(qū)分兩者? 

顯然,兩相調(diào)制(單個調(diào)制狀態(tài)對應(yīng)1個二進制位)的比特率等于波特率;四相調(diào)制(單個調(diào)制狀態(tài)對應(yīng)2個二進制位)的比特率為波特率的兩倍;八相調(diào)制(單個調(diào)制狀態(tài)對應(yīng)3個二進制位)的比特率為波特率的三倍;依次類推。

圖2-61 開發(fā)板串口硬件圖

UART的接口

圖2-61為Cortex-A9開發(fā)板引出UART串口接線圖,它采用DB9接口公頭(有接線柱的端口,只有接線孔的為母頭),其有9根信號線,UART通信過程中用到了信號線2 RSTXD0(數(shù)據(jù)發(fā)送管腳)它和串口線母頭TXDx信號線相接(x代表0號,1號,2號串口),信號3 RSRXD0(數(shù)據(jù)接收管腳)和串口線母頭RXDx相接(x代表0號,1號,2號串口),信號線5(接地管腳),信號線7 RSCTS0(數(shù)據(jù)發(fā)送流控制管腳)和串口線母頭nCTSx相接,信號線8 RSRTS0(數(shù)據(jù)接收流控制管腳)和串口線母頭nRTSx相接。如果UART中沒有開啟AFC流控的話,只要用到信號線2,信號線3和信號線5。

UART寄存器配置

UART0串行控制寄存器(ULCON0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

ULCON0 0x50000000 R/W 串口0串行控制寄存器 0x00

ULCON0 描述 初始值

保留 [7]   0

紅外模式 [6] 選擇串口0是否使用紅外模式:

0 = 正常通信模式

1 = 紅外通信模式 0

校驗?zāi)J?span id="t1955575tlb" class="Apple-tab-span" style="padding: 0px; margin: 0px; list-style-type: none; white-space: pre;"> [5:3] 設(shè)置串口0在數(shù)據(jù)接收和發(fā)送時采用的校驗方式:

0xx = 無校驗

100 = 奇校驗

101 = 偶校驗

110 = 強制校驗/檢測是否為1

111 = 強制校驗/檢測是否為0 000

停止位 [2] 設(shè)置串口0停止位數(shù):

0 = 每個數(shù)據(jù)幀一個停止位

1 = 每個數(shù)據(jù)幀二個停止位 0

數(shù)據(jù)位 [1:0] 設(shè)置串口0數(shù)據(jù)位數(shù):

00 = 5個數(shù)據(jù)位 01 = 6個數(shù)據(jù)位

10 = 7個數(shù)據(jù)位 11 = 8個數(shù)據(jù)位 00

通過設(shè)置ULCON0來設(shè)置UART0通信方式,ULCON0[6]選擇通信方式為一般通信模式或紅外通信模式,ULCON0[5:3]設(shè)置串口0校驗方式,ULCON0[2]設(shè)置串口0停止位數(shù),ULCON0[1:0] 設(shè)置串口0的數(shù)據(jù)位數(shù)。

我們選擇一般通信模式,無校驗位,1個停止位,8個數(shù)據(jù)位的數(shù)據(jù)通信方式。因此:

ULCON0 = 0x03;

表2-26 UART0串口控制寄存器(UCON0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

UCON0 0x50000004             R/W 串口0控制寄存器 0x00

UART0串行控制寄存器(ULCON0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

ULCON0 0x50000000 R/W 串口0串行控制寄存器 0x00

ULCON0 描述 初始值

保留 [7]   0

紅外模式 [6] 選擇串口0是否使用紅外模式:

0 = 正常通信模式

1 = 紅外通信模式 0

校驗?zāi)J?span id="t1955575tlb" class="Apple-tab-span" style="padding: 0px; margin: 0px; list-style-type: none; white-space: pre;"> [5:3] 設(shè)置串口0在數(shù)據(jù)接收和發(fā)送時采用的校驗方式:

0xx = 無校驗

100 = 奇校驗

101 = 偶校驗

110 = 強制校驗/檢測是否為1

111 = 強制校驗/檢測是否為0 000

停止位 [2] 設(shè)置串口0停止位數(shù):

0 = 每個數(shù)據(jù)幀一個停止位

1 = 每個數(shù)據(jù)幀二個停止位 0

數(shù)據(jù)位 [1:0] 設(shè)置串口0數(shù)據(jù)位數(shù):

00 = 5個數(shù)據(jù)位 01 = 6個數(shù)據(jù)位

10 = 7個數(shù)據(jù)位 11 = 8個數(shù)據(jù)位 00

通過設(shè)置ULCON0來設(shè)置UART0通信方式,ULCON0[6]選擇通信方式為一般通信模式或紅外通信模式,ULCON0[5:3]設(shè)置串口0校驗方式,ULCON0[2]設(shè)置串口0停止位數(shù),ULCON0[1:0] 設(shè)置串口0的數(shù)據(jù)位數(shù)。

我們選擇一般通信模式,無校驗位,1個停止位,8個數(shù)據(jù)位的數(shù)據(jù)通信方式。因此:

ULCON0 = 0x03;

表2-26 UART0串口控制寄存器(UCON0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

UCON0 0x50000004             R/W 串口0控制寄存器 0x00

UCON0 描述 初始值

FCLK分頻因子 [15:12] 當(dāng)UART0選擇FCLK作為時鐘源時,設(shè)置其FCLK的分頻因子

UART0 工作時鐘頻率 = FCLK/FCLK分頻因子 + 6 0000

UART時鐘源選擇 [11:10] 選擇UART0的工作時鐘PCLK,UEXTCLK,F(xiàn)CLK/n:

00,10 = PCLK

01 = UEXTCLK

11 = FCLK/n

當(dāng)選擇FCLK/n作為UART0工作時鐘時還要做其它設(shè)置,具體請讀者自行查看硬件手冊 00

發(fā)送數(shù)據(jù)中斷

產(chǎn)生類型 [9] 設(shè)置UART0中斷請求類型,在非FIFO傳輸模式下,一旦發(fā)送數(shù)據(jù)緩沖區(qū)為空,立即產(chǎn)生中斷信號,在FIFO傳輸模式下達到發(fā)送數(shù)據(jù)觸發(fā)條件時立即產(chǎn)生中斷信號:

0 = 脈沖觸發(fā)

1 = 電平觸發(fā) 0

接收數(shù)據(jù)中斷

產(chǎn)生類型 [8] 設(shè)置UART0中斷請求類型,在非FIFO傳輸模式下,一旦接收到數(shù)據(jù),立即產(chǎn)生中斷信號,在FIFO傳輸模式下達到接收數(shù)據(jù)觸發(fā)條件時立即產(chǎn)生中斷信號:

0 = 脈沖觸發(fā)

1 = 電平觸發(fā) 0

接收數(shù)據(jù)超時 [7] 設(shè)置當(dāng)接收數(shù)據(jù)時,如果數(shù)據(jù)超時,是否產(chǎn)生接收中斷:

0 = 不開啟超時中斷 1 = 開啟超時中斷

10 = 7個數(shù)據(jù)位 11 = 8個數(shù)據(jù)位 0

接收數(shù)據(jù)錯誤中斷 [6] 設(shè)置當(dāng)接收數(shù)據(jù)時,如果產(chǎn)生異常,如傳輸中止,幀錯誤,校驗錯誤時,是否產(chǎn)生接收狀態(tài)中斷信號:

0 = 不產(chǎn)生錯誤狀態(tài)中斷 1 = 產(chǎn)生錯誤狀態(tài)中斷 0

回送模式 [5] 設(shè)置該位時UART會進入回送模式,該模式僅用于測試

0 = 正常模式 1 = 回送模式 0

發(fā)送終止信號 [4] 設(shè)置該位時,UART會發(fā)送一個幀長度的終止信號,發(fā)送完畢后,該位自動恢復(fù)為0

0 = 正常傳輸 1 = 發(fā)送終止信號 0

發(fā)送模式 [3:2] 設(shè)置采用哪個方式執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖區(qū)

00 = 無效

01 = 中斷請求或查詢模式

10 = DMA0請求 00

接收模式 [1:0] 設(shè)置采用哪個方式執(zhí)行數(shù)據(jù)寫入接收緩沖區(qū)

00 = 無效

01 = 中斷請求或查詢模式

10 = DMA0請求 00

通常UART串口采用PCLK作為輸入工作時鐘,采用簡單的輪詢方式進行數(shù)據(jù)接收和發(fā)送,不開啟數(shù)據(jù)接收超時,數(shù)據(jù)產(chǎn)生錯誤時不產(chǎn)生錯誤狀態(tài)中斷,因此:

UCON0 = 0x05; 

表2-27 UART FIFO控制寄存器(UFCON0)

寄存器名        地址 是否讀寫                   描述                  復(fù)位默認(rèn)值

UFCON0 0x50000008       R/W 串口0 FIFO控制寄存器                        0x00

UFCON0 描述 初始值

發(fā)送數(shù)據(jù)

觸發(fā)級別 [7:6] 設(shè)置FIFO發(fā)送模式的觸發(fā)級別:

00 = FIFO為空觸發(fā) 01 = 16字節(jié)觸發(fā)

10 = 32字節(jié)觸發(fā) 11 = 48字節(jié)觸發(fā) 00

接收數(shù)據(jù)

觸發(fā)級別 [5:4] 設(shè)置FIFO接收模式的觸發(fā)級別:

00 = FIFO為空觸發(fā) 01 = 16字節(jié)觸發(fā)

10 = 32字節(jié)觸發(fā) 11 = 48字節(jié)觸發(fā) 00

保留 [3]   0

發(fā)送FIFO重置 [2] 在重置FIFO后自動清除發(fā)送緩沖區(qū)

0 = 正常模式 1 = 自動清除 0

接收FIFO重置 [1] 在重置FIFO后自動清除接收緩沖區(qū)

0 = 正常模式 1 = 自動清除 0

啟用FIFO [0] 0 = 不啟用FIFO 1 = 啟用FIFO 0

表2-28 UART MODEM控制寄存器(UMCON0)

寄存器名 地址 是否讀寫 描述                 復(fù)位默認(rèn)值

UMCON0 0x5000000C       R/W 串口0 MODEM控制寄存器                       0x00

UMCON0 描述 初始值

保留 [7:5] 必須全部置0 000

AFC自動流控 [4] 0 = 不開啟流控 1 = 開啟流控 0

保留 [3:1] 必須全部置0 000

請求發(fā)送 [0] 如果啟用AFC,該位無效,S3C2440會自動控   制nRTS,如果不啟用AFC,nRTS必須由軟件控制

0 = 高電平激活nRTS 1 = 低電平激活nRTS 0

表2-29 UART 發(fā)送/接收狀態(tài)寄存器(UTRSTAT0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

UTRSTAT0 0x50000010 R/W 串口0發(fā)送/接收狀態(tài)寄存器 0x06

UTRSTAT0 描述 初始值

發(fā)送器為空 [2] 當(dāng)發(fā)送緩存寄存器中沒有數(shù)據(jù)要發(fā)送且發(fā)送移位寄存器為空時,自動置1

0 = 非空

1 = 發(fā)送器為空(發(fā)送緩存和移位寄存器) 1

發(fā)送緩存寄存器為空 [1] 當(dāng)發(fā)送緩存寄存器為空時,自動置1

0 = 發(fā)送緩存寄存器非空

1 = 發(fā)送緩存寄存器為空 1

接收緩存寄存器為空 [0] 當(dāng)接收緩存寄存器有數(shù)據(jù)到達時,自動置1

0 = 接收緩存寄存器為空

1 = 緩存寄存器接收數(shù)據(jù) 0

表2-30 UART 發(fā)送緩存寄存器(UTXH0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

UTXH0 0x50000020(L)

0x50000023(B) W 串口0發(fā)送緩存寄存器 -

表2-31 UART 接收緩存寄存器(URXH0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

URXH0 0x50000024(L)

0x50000027(B) R 串口0接收緩存寄存器 -

表2-32 UART 波特率除數(shù)寄存器(UBRp0)

寄存器名 地址 是否讀寫 描述 復(fù)位默認(rèn)值

UBRp0 0x50000028       R/W 串口0波特率除數(shù)寄存器 -

UBRp0 描述 初始值

波特率除數(shù) [15:0] 設(shè)置波特率除數(shù)(大于0)使用外部輸入時鐘時可以置0 -

上述寄存器是是和UART通信相關(guān)寄存器,使用簡單的無FIFO,無自動流控AFC時,設(shè)置如下:

UFCON0 = 0x00;   // 不使用FIFO

UMCON0 = 0x00;    // 不使用流控

UBRp0 = 26;    // 波特率為115200,PCLK=50Mhz

UBRp0 = 53;    // 波特率為57600,PCLK=50Mhz

UBRp0 = 12;    // 波特率為57600,PCLK=12Mhz

UTXH0和URXH0分別是數(shù)據(jù)發(fā)送和接收寄存器,發(fā)送數(shù)據(jù)時通過輪詢方式判斷發(fā)送狀態(tài)寄存器的狀態(tài),當(dāng)可以發(fā)送數(shù)據(jù)時,執(zhí)行UTXH0寄存器寫入操作,接收數(shù)據(jù)時,以輪詢方式檢測接收狀態(tài)寄存器狀態(tài),當(dāng)有數(shù)據(jù)到達時,讀取URXH0寄存器里的數(shù)據(jù)即可取得串口數(shù)據(jù)。

可能不同的開發(fā)板,不同廠家生產(chǎn)設(shè)計的開發(fā)板有所不同,里面的寄存器的配置也會略有區(qū)別,原理是一樣的。

上一篇:Linux字符設(shè)備驅(qū)動模型之Linux內(nèi)核模塊參數(shù)

下一篇:NOR FLASH和NAND FLASH

熱點文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權(quán)所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部

主站蜘蛛池模板: 美丽的坏女人中文字幕| 现代企业管理| 消防知识问答100题| 亚洲免费资源| 38在线电影| 《生命中有你》赞美诗歌| 大学英语综合教程3| 戏王之王演员表| 男士烫发发型图片2024款| 飞鸭向前冲| 河北电视台| 散文诗二首批注| 汤浅政明| 好像也没那么热血沸腾电影免费观看| 中女| 香港卫视中文台| 一句话让男人主动联系你 | 通天长老 电影| 塔木德全文阅读免费| 日韩在线日韩| 四年级上册语文书有鬼| 山西少儿频道| 泰迪熊3| https://www.douyin.com| 杨文元| 追捕电视剧免费观看完整版| 一年又一年电视剧演员表| 中国少先队队歌歌词| 为奴12年| 谭咏麟电影| 视频欧美| 阴阳先生第一季| 电影白上之黑| 所求皆所愿| 李子京| 性欲满载| 秀人网 官网门户免费| 卢颖| 白蛇三| 哈基米| 奇米8888|