一、UART原理說明
通用異步收發(fā)器簡稱UART(Universal Asynchronous Receiver/Transmitter),它用來傳輸串行數(shù)據(jù):發(fā)送數(shù)據(jù)時,CPU將并行數(shù)據(jù)寫入UART,UART按照一定的格式在一根電線上串行發(fā)出;接收數(shù)據(jù)時,UART檢測另一根電線上的信號,將串行數(shù)據(jù)收集放在緩沖區(qū)中,CPU就可以讀取UART獲得這些數(shù)據(jù)。串口之間以全雙工方式傳輸數(shù)據(jù),最精簡的連線只有三根線:TxD用于發(fā)送數(shù)據(jù),RxD用于接收數(shù)據(jù),Gnd用于給雙方提供參考電平,連線如下圖:
UART使用標準的TTL/CMOS邏輯電平(0-5V、0-3.3V、0-2.5V、0-1.8V)來表示數(shù)據(jù),高電平表示1,低電平表示0。為了增強數(shù)據(jù)的抗干擾能力、提高傳輸長度,通常將TTL/CMOS邏輯電平轉(zhuǎn)換為RS232邏輯電平,3-12V表示0,-3--12V表示1。
TxD、RxD數(shù)據(jù)線以‘位’為最小單位傳輸數(shù)據(jù)。幀由具體完整意義的、不可分割的若干位組成,它包含開始位、數(shù)據(jù)位、校驗位、停止位。發(fā)送數(shù)據(jù)之前UART之間要約定好數(shù)據(jù)的傳輸速率(每位所占用的時間,其倒數(shù)稱為波特率)、數(shù)據(jù)的傳輸格式(有多少數(shù)據(jù)位、是否使用校驗位、是奇校驗還是偶校驗,有多少個停止位)。
數(shù)據(jù)傳輸如下圖:
(1)、平時數(shù)據(jù)線處于“空閑”狀態(tài)(1狀態(tài))
(2)、當(dāng)要發(fā)送數(shù)據(jù)時,UART改變TxD數(shù)據(jù)線的狀態(tài)(變?yōu)?狀態(tài))并維持1位的時間,這樣接收方檢測到開始位后,再等待1.5位的時間就開始一位一位地檢測數(shù)據(jù)線的狀態(tài)得到所傳輸?shù)臄?shù)據(jù)。
(3)、UART一幀中可以有5、6、7、8位數(shù)據(jù),發(fā)送方一位一位地改變數(shù)據(jù)線的狀態(tài)將它們發(fā)送出去,首先發(fā)送最低位。
(4)、如果使用校驗功能,UART在發(fā)送完數(shù)據(jù)后,還要發(fā)送1個校驗位。有兩種校驗法:奇校驗、偶校驗(數(shù)據(jù)位連同校驗位中,“1”的數(shù)目是奇數(shù)還是偶數(shù))。
(5)、最后,發(fā)送停止位,數(shù)據(jù)線恢復(fù)到“空閑”狀態(tài)。停止位的長度有3種:1位、1.5位、2位。
二、S3C2440 UART的特性
s3c2440中UART,有三個獨立的通道,每個通道都可以工作于中斷模式或DMA模式,即UART可以發(fā)出中斷或DMA請求以便在UART、CPU間傳輸數(shù)據(jù)。UART由波特率發(fā)生器、發(fā)送器、接收器和控制邏輯組成。
使用系統(tǒng)時鐘時,s3c2440可以達到115.2Kbit/s;s3c2440UART的FIFO深度為64字節(jié)。發(fā)送數(shù)據(jù)時,CPU先將數(shù)據(jù)寫入發(fā)送FIFO中,然后UART會自動將FIFO中的數(shù)據(jù)復(fù)制到“發(fā)送移位器”中,發(fā)送移位器將數(shù)據(jù)一位一位地發(fā)送到TxD數(shù)據(jù)線上(根據(jù)設(shè)定的格式,插入開始位、校驗位、停止位)。接收數(shù)據(jù)時,“接收移位器”將RxD數(shù)據(jù)線上的數(shù)據(jù)一位一位接收進來,然后復(fù)制到接收FIFO,CPU即可從中讀取數(shù)據(jù)。
UART結(jié)構(gòu)圖
三、s3c2440UART的使用
在使用UART之前需要設(shè)置波特率、傳輸格式(有多少個數(shù)據(jù)位、是否使用校驗位、是奇校驗還是偶校驗、有多少個停止位、是否使用流量控制);對于s3c2440還要設(shè)置相應(yīng)的管腳位UART功能、選擇UART通道工作模式為中斷模式還是DMA模式,設(shè)置好后,往某個寄存器寫入數(shù)據(jù)即可發(fā)送,讀取某個寄存器即可得到接收到的數(shù)據(jù)。可以查詢狀態(tài)寄存器或設(shè)置中斷來獲知數(shù)據(jù)是否已經(jīng)發(fā)送完畢、是否已經(jīng)接收完畢。
具體操作方法:
1、將所涉及的UART通道管腳設(shè)為UART功能
比如UART0,GPH2、GPH3分別用作TxD0、RxD0,要使用串口通道0時,先設(shè)置GPHCON寄存器將GPH2、GPH3引腳功能設(shè)置為TxD0、RxD0。
2、UBRDIVn寄存器:設(shè)置波特率
s3c2440UART的時鐘源有三種選擇:FLCK/n(n值通過UCON0-UCON2聯(lián)合設(shè)置)、UEXTCLK、PCLK。
根據(jù)給定的波特率、所選擇的的時鐘源的頻率。可以通過以下公式計算UBRDIVn寄存器(n為0-2)的值,
給出了計算公式、例子及誤差計算
3、ULCONn寄存器:設(shè)置傳輸格式
4、UCONn寄存器:串口控制寄存器
UCONn寄存器用來選擇UART時鐘源、設(shè)置UART中斷方式等。
n的值有UCON0、UCON1、UCON2這3個寄存器的[15:12]一起來確定。
5、UFCONn寄存器、UFSTATn寄存器
UFCONn寄存器用于設(shè)置是否使用FIFO,設(shè)置各FIFO的觸發(fā)閾值,即發(fā)送FIFO中有多少個數(shù)據(jù)時產(chǎn)生中斷、接收FIFO中有多少個數(shù)據(jù)時產(chǎn)生中斷。并可以通過設(shè)置這個寄存器來復(fù)位各個FIFO。
讀取USTATn寄存器可以知道各個FIFO是否已滿、其中有多少個數(shù)據(jù)。
不適用FIFO時可以認為FIFO深度為1,使用FIFO時s3c2440FIFO深度64。
6、UMOCONn寄存器、UMSTATn寄存器
這兩類寄存器用于流量控制。
7、UTRSTATn寄存器
這個寄存器用來表示數(shù)據(jù)是否已經(jīng)發(fā)送完畢、是否接收完畢。
8、UERSTATn寄存器
用來表示各種錯誤是否發(fā)生。
9、UTXHn寄存器
CPU將數(shù)據(jù)寫入這個寄存器,UART就會將它保存到緩沖區(qū)中,并自動發(fā)送出去
10、URXHn寄存器
當(dāng)UART接收到數(shù)據(jù),CPU讀取這個寄存器,就可以獲取數(shù)據(jù)。
四、UART使用程序
serial.h
void uart0_init(void);
void putc(unsigned char c);
unsigned char getc(void);
int isDigit(unsigned char c);
int isLetter(unsigned char c);
serial.c
#include "s3c24xx.h"
#include "serial.h"
#define TXD0READY (1<<2)
#define RXD0READY (1)
#define PCLK 50000000 // init.c中的clock_init函數(shù)設(shè)置PCLK為50MHz
#define UART_CLK PCLK // UART0的時鐘源設(shè)為PCLK
#define UART_BAUD_RATE 115200 // 波特率
#define UART_BRD ((UART_CLK / (UART_BAUD_RATE * 16)) - 1)
/*
* 初始化UART0
* 115200,8N1,無流控
*/
void uart0_init(void)
{
GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0
GPHUP = 0x0c; // GPH2,GPH3內(nèi)部上拉
ULCON0 = 0x03; // 8N1(8個數(shù)據(jù)位,無較驗,1個停止位)
UCON0 = 0x05; // 查詢方式,UART時鐘源為PCLK
UFCON0 = 0x00; // 不使用FIFO
UMCON0 = 0x00; // 不使用流控
UBRDIV0 = UART_BRD; // 波特率為115200
}
/*
* 發(fā)送一個字符
*/
void putc(unsigned char c)
{
/* 等待,直到發(fā)送緩沖區(qū)中的數(shù)據(jù)已經(jīng)全部發(fā)送出去 */
while (!(UTRSTAT0 & TXD0READY));
/* 向UTXH0寄存器中寫入數(shù)據(jù),UART即自動將它發(fā)送出去 */
UTXH0 = c;
}
/*
* 接收字符
*/
unsigned char getc(void)
{
/* 等待,直到接收緩沖區(qū)中的有數(shù)據(jù) */
while (!(UTRSTAT0 & RXD0READY));
/* 直接讀取URXH0寄存器,即可獲得接收到的數(shù)據(jù) */
return URXH0;
}
/*
* 判斷一個字符是否數(shù)字
*/
int isDigit(unsigned char c)
{
if (c >= '0' && c <= '9')
return 1;
else
return 0;
}
/*
* 判斷一個字符是否英文字母
*/
int isLetter(unsigned char c)
{
if (c >= 'a' && c <= 'z')
return 1;
else if (c >= 'A' && c <= 'Z')
return 1;
else
return 0;
}
上一篇:s3c2440的uart知識點
下一篇:最后一頁
推薦閱讀
史海拾趣
自推出第一代產(chǎn)品以來,EnOcean憑借其卓越的性能和獨特的優(yōu)勢,在歐洲市場上取得了良好的銷售業(yè)績。隨后,隨著公司不斷推出新產(chǎn)品和技術(shù),其產(chǎn)品的應(yīng)用領(lǐng)域也逐漸擴大至全球范圍。如今,EnOcean的無線模塊已被全球100多家制造商選中,用于實現(xiàn)他們的建筑和工業(yè)系統(tǒng)理念。無線組件已經(jīng)在超過20萬棟建筑中使用,為節(jié)能建筑和創(chuàng)新產(chǎn)業(yè)提供了重要支持。
APC的產(chǎn)品和服務(wù)在全球范圍內(nèi)贏得了廣泛認可。其InfraStruXure產(chǎn)品線因其集成式的電力、制冷、機架、管理和服務(wù)實現(xiàn)了一種開放、具有適應(yīng)性且集成化的解決方案,贏得了近20個獎項。此外,APC還因其卓越的產(chǎn)品和業(yè)務(wù)表現(xiàn),在多個年份贏得了全球100多個獎項。這些獎項不僅證明了APC在電子行業(yè)中的領(lǐng)先地位,也反映了其對于創(chuàng)新和質(zhì)量的不懈追求。
Elite Enterprises (H K) Co Ltd成立于2002年,當(dāng)時正值LED技術(shù)快速發(fā)展的時期。公司創(chuàng)始人憑借對LED市場的敏銳洞察,決定專注于LED產(chǎn)品的研發(fā)和生產(chǎn)。初期,公司面臨資金、技術(shù)和市場等多重挑戰(zhàn),但通過不懈努力和持續(xù)創(chuàng)新,逐步在LED照明市場嶄露頭角。
隨著技術(shù)的不斷進步和市場的擴大,BULGIN公司在20世紀60年代成為了當(dāng)時世界上最大的、產(chǎn)品線最為齊全的電子零件制造商之一。公司保持著快速的創(chuàng)新與發(fā)展,BULGIN品牌開始覆蓋多國市場,為全球各地的客戶提供優(yōu)質(zhì)的產(chǎn)品和服務(wù)。
在1939年至1945年的二戰(zhàn)期間,BULGIN的產(chǎn)能被英國政府全面征用。為了滿足戰(zhàn)時需求,BULGIN公司開發(fā)出能夠適應(yīng)全世界各地區(qū)苛刻使用環(huán)境的產(chǎn)品。在這段時間里,公司為英國政府制造了超過1千萬只零部件,并在密封技術(shù)領(lǐng)域積累了寶貴的經(jīng)驗,這些經(jīng)驗一直延續(xù)至今。
作為公認的環(huán)境密封連接器及元器件領(lǐng)先制造商,BULGIN公司一直專注于提升在環(huán)境密封、電源及防控產(chǎn)品領(lǐng)域的市場地位。公司憑借在極具挑戰(zhàn)性的環(huán)境中提供可靠、堅固的電源、信號和數(shù)據(jù)連接的能力,贏得了客戶的廣泛贊譽。其中,備受歡迎的Buccaneer圓形連接器系列在業(yè)界享有出色的聲譽,成為公司的一大亮點。
這五個故事展示了BULGIN公司在電子行業(yè)中的發(fā)展歷程和關(guān)鍵里程碑。從創(chuàng)立初期到成為全球領(lǐng)先的電子零件制造商,再到戰(zhàn)略性合并和業(yè)務(wù)擴展,BULGIN始終保持著創(chuàng)新精神和對優(yōu)質(zhì)產(chǎn)品的追求。如今,作為環(huán)境密封連接器及元器件的領(lǐng)先制造商,BULGIN將繼續(xù)為客戶提供卓越的產(chǎn)品和服務(wù),推動電子行業(yè)的持續(xù)發(fā)展。
設(shè)置緩沖區(qū)對齊掩碼 執(zhí)行DMA傳輸?shù)脑O(shè)備直接使用內(nèi)存中的數(shù)據(jù)緩沖區(qū)工作。HAL要求DMA傳輸中使用的緩沖區(qū)必須按某個特定界限對齊,而且設(shè)備也可能有更嚴格的對齊需求。設(shè)備對象中的AlignmentRequirement域表達了這個約束,它是一個位掩碼,等于要求 ...… 查看全部問答∨ |
|
有這么一句話~~編譯環(huán)境設(shè)置為Pocket PC 2002--Win32 (WINCE X86) Debug,最后再將Download目錄設(shè)置成\\1Windowsl“開始”菜單。 請問 1。Pocket PC 2002該如何定制~或者到哪下載! 2。將Download目錄設(shè)置成\\1Windowsl“開始”菜單。是什么意 ...… 查看全部問答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 03:32 編輯 現(xiàn)學(xué)校智能小車比賽,本想自己親手焊個車體架出來,但考慮工作量過大,希望能在網(wǎng)上買個車體,但買來的車體絕不要什么都焊好了 ...… 查看全部問答∨ |
|
關(guān)于linux中makefile的詳解(轉(zhuǎn)百度空間) linux下makefile詳解一(轉(zhuǎn)csdn) 概述—— 什么是makefile?或許很多Winodws的程序員都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程序員,makefile還是要懂。這就好像現(xiàn)在有這么多的HT ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 座椅、天窗、電動尾門應(yīng)用 國產(chǎn)車規(guī)級高壓霍爾效應(yīng)傳感器推薦
- 突發(fā)!又一車企車機“崩了”
- 寧德時代為陳立泉院士頒發(fā)“卓越貢獻獎”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會重點
- 2025年1-4月ADAS供應(yīng)商裝機量排行榜:頭部集中與國產(chǎn)突圍并存
- 國內(nèi)飛行汽車無線通信測試成功,通信安全新突破
- SPAD席卷車載激光雷達市場
- 大聯(lián)大品佳集團推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬級像素大燈方案
- 哈曼推出采用三星Neo QLED技術(shù)的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術(shù) 提升車輛安全性和用戶體驗
- 羅姆有獎直播|從0到1,帶你了解電機及其驅(qū)動 開始報名啦~
- 省錢、省心的購買租賃方案,讓您不再為預(yù)算煩惱!
- Discover mmWave 走進 TI 毫米波雷達世界 快速獲得設(shè)計技能
- 嵌入式Rust修煉營:動手寫串口燒錄工具和MCU例程,Rust達人Hunter直播帶你入門Rust
- EEWorld 芯積分兌換年度回饋來襲~多種賺積分捷徑曝光+禮品兌換劇透
- 有獎直播:艾邁斯歐司朗智慧農(nóng)業(yè)與植物照明
- ADI有獎下載活動之7 可編程邏輯控制器(PLCs)解決方案
- 開發(fā)板芯幣競拍,每日一款!今日競拍開發(fā)板:大黃蜂開發(fā)板
- ADI有獎下載活動之13升級版ADI電機控制解決方案—伺服控制
- 機器人“醫(yī)生”做手術(shù) 順利切除肺部腫瘤
- 安徽加快煤礦井下機器人應(yīng)用 提升智能制造水平
- 最佳VGA圖像質(zhì)量 OmniVision OV0VA10 系統(tǒng)芯片問市
- 三星電子打造高速IoT生態(tài),帶來智能生活方式
- MEMS產(chǎn)業(yè)成寡頭現(xiàn)象 國內(nèi)MEMS發(fā)展任重道遠
- 工業(yè)機器人常見4大控制方式
- 基于STM32在噴繪機噴頭控制系統(tǒng)的設(shè)計與實現(xiàn)
- 傳感器智能采集傳輸控制系統(tǒng)的研究與設(shè)計
- 動則上億美元的ASML光刻機強在哪兒
- 關(guān)于STM32單片機GPIO口上拉與下拉輸入