S3C2440的UART詳解
在介紹2440的UART控制器之前,我們首先來(lái)了解一下UART的原理
本文引用地址:http://dyxdggzs.com/article/201611/321675.htmUART:Universal Asynchronous Receiver/Transmitter(通用異步收發(fā)送器),用來(lái)傳輸串行數據,發(fā)送數據時(shí),CPU將并行數據寫(xiě)入UART,UART按照一定格式在TxD線(xiàn)上串行發(fā)出;接收數據時(shí),UART檢測到RxD線(xiàn)上的信號,將串行收集放到緩沖區中,CPU即可讀取UART獲得的這些數據。
UART最精簡(jiǎn)的連線(xiàn)形式只有3根線(xiàn),TXD用于發(fā)送,RXD用于接收,GND用于提供參考電平。UART之間以幀作為數據傳輸單位,幀由具有完整意義的若干位組成,它包含開(kāi)始位、數據位、校驗位和停止位。發(fā)送數據之前,互相通信的UART之間要約定好數據傳輸速率(波特率的倒數)、數據的傳輸格式(多少個(gè)數據位、是否使用校驗位、奇校驗還是偶校驗、多少個(gè)停止位)。
2、S3C2440 UART的特性
S3C2440的通用異步收發(fā)器(UART)配有3個(gè)獨立異步串行I/O(SIO)端口,每個(gè)都可以通過(guò)產(chǎn)生中斷或DMA請求來(lái)進(jìn)行CPU和UART之間的數據傳輸。如圖1所示:每個(gè)UART包含一個(gè)波特率發(fā)生器、發(fā)送器、接收器和一個(gè)控制單元,
圖1 2440UART方框圖(帶FIFO)
波特率發(fā)生器可以由PCLK、FCLK/n或UEXTCLK(外部輸入時(shí)鐘)時(shí)鐘驅動(dòng)。UART通過(guò)使用系統時(shí)鐘可以支持最高115.2Kbps的比特率。如果是使用外部器件提供UEXTCLK的UART,則UART可以運行在更高的速度。發(fā)送器和接收器各包含一個(gè)64字節的FIFO和數據移位器。要發(fā)送數據時(shí),先將數據寫(xiě)入到FIFO接著(zhù)在發(fā)送前復制到發(fā)送移位器中,隨后將數據從發(fā)送數據引腳(TXDn)移出;接收數據時(shí),從接收數據引腳(RXDn)移入收到的數據,接著(zhù)從移位器復制到FIFO。
3、S3C2440 UART的使用
對于S3C2440,使用UART之前,首選需要對2440的UART模塊進(jìn)行初始化,需要設置波特率、傳輸格式(多少個(gè)數據位、是否使用校驗位、奇校驗或偶校驗、多少個(gè)停止位、是否使用流量控制)、選擇所涉及的管腳為UART功能、選擇UART通道的工作模式為中斷模式或DMA模式。設置好之后,往相關(guān)寄存器寫(xiě)入數據即可發(fā)送,讀取相關(guān)寄存器即可接收到數據,還可以通過(guò)查詢(xún)狀態(tài)寄存器或設置中斷來(lái)獲知數據是否發(fā)送完畢、是否接收到數據。
我用的開(kāi)發(fā)板是天嵌的TQ2440,該開(kāi)發(fā)板用SP3232EEN擴展了一個(gè)RS232串口,電路連接如圖2 所示:
圖2 RS232原理圖
波特率發(fā)生器
每個(gè)UART的波特率發(fā)生器為發(fā)送器和接收器提供串行時(shí)鐘,波特率發(fā)生器的時(shí)鐘源可以選擇S3C2440A的內部時(shí)鐘系統或者UEXTCLK。波特率時(shí)鐘是通過(guò)16和由UART波特率分頻寄存器(UBRDIVn)指定的16位分頻系數來(lái)分頻源時(shí)鐘(PCLK,FCLK/n或者UEXTCLK)產(chǎn)生的,UBRDIVn由下列表達式確定:
UBRDIVn=(int)(UART時(shí)鐘/(波特率*16))-1
UART時(shí)鐘:PCLK,FCLK/n或者UEXTCLK,例如,如果波特率為115200bps并且UART時(shí)鐘為40MHz,則UBRDIVn為:
UBRDIVn=(int)(40000000/(115200*16))-1=(int)(21.7)-1(取最接近的整數)=22-1=21
介紹發(fā)送和接收操作之前,先介紹幾個(gè)重要的寄存器
UBRDIVn寄存器:設置波特率,S3C2440 UART的時(shí)鐘源有兩種選擇:PCLK、UEXTCLK、FCLK/n,其中n的值通過(guò)UCON0-UCON2聯(lián)合設置
ULCONn寄存器:設置傳輸格式
UCONn寄存器:它用于選擇UART時(shí)鐘源、設置UART中斷方式
UFCONn寄存器、UFSTATn寄存器,UFCONn寄存器用于設置是否使用FIFO,設置各FIFO的觸發(fā)闕值,即發(fā)送FIFO中有多少個(gè)數據時(shí)產(chǎn)生中斷、接收FIFO中有多少個(gè)數據時(shí)產(chǎn)生中斷。并可以通過(guò)設置UFCONn寄存器來(lái)復位各個(gè)FIFO。讀取UFSTATn寄存器可以知道各個(gè)FIFO是否已經(jīng)滿(mǎn),其中有多少個(gè)數據。
UMCONn寄存器、UMSTATn寄存器,這兩類(lèi)寄存器用于流量控制,具體看數據手冊
UTRSTATn寄存器,它用來(lái)表明數據是否已經(jīng)發(fā)送完畢、是否已經(jīng)接收到數據
UERSTATn寄存器,用來(lái)表示各種錯誤是否發(fā)生
UTXHn寄存器,CPU將數據寫(xiě)入這個(gè)寄存器,UART即會(huì )將它保存到緩沖區中,并自動(dòng)發(fā)送出去
URXHn寄存器,當UART接收到數據時(shí),CPU讀取這個(gè)寄存器,即可獲得數據。
下面通過(guò)實(shí)際的代碼來(lái)理解2440的UART
首選是UART的初始化,TQ2440將UART0引了一個(gè)接口出來(lái),就介紹UART0吧
2440的UART引腳是掛接在GPH上的,所以使用UART之前需要先對GPH的引腳功能進(jìn)行配置。
評論