UART(Universal Asynchronous Receiver and Transmiter)通用異步接收/發送裝置。UART提供了RS—232C數據接口。
UART是什么?UART是一種通用串行數據總線,用于異步通信,該總線雙向通信,可以實現全雙工傳輸和接受。在嵌入式設計中,UART用來與PC進行通信,包括與監控調試器和其他部件,比如EEPROM。
UART的工作原理和功能。他將由計算機內部傳送過來的并行數據轉化為輸出的串行數據流,將計算機外部來的串行數據轉換為字節,供計算機內部使用并行數據的器件使用。在輸出的串行數據流中加入奇偶校驗為。在輸出數據流中加入啟停標志,并從接受數據流中刪除啟停標志。處理有鍵盤或鼠標發出的中斷信號(鍵盤和鼠標也是串行設備)??梢蕴幚碛嬎銠C與外部串行設備的同步管理問題。
在使用UART之前,我們需要設置波特率,傳輸格式(數據位個數,是否校驗位,奇還是偶校驗位,停止位個數,是否流量控制)。對于具體的CPU來說,例如(2410/2440)還要選擇所涉及的管腳為UART功能,選擇UART通道的工作模式為中斷模式還是DMA模式,設置好后,往某個寄存器寫入數據即可發送,讀取某個寄存器即可接收到數據。可以通過輪詢的方式來獲知數據的收發情況。
初步了解了UART的功能和基本工作原理之后,開始今天的整理。相信在整理的過程中,自己又會有與眾不同的收獲。
對于UART的設置,這個需要根據電路圖,設置GPHCON的對應管腳(S3C2410有3個uart接口,具體接哪個接口,需要結合電路圖),我的是要求在uart0上的。
ULCONn寄存器,他包括三種寄存器UART0,UART1,UART2,通過這個寄存器可以設置FIFO的相關屬性??梢栽O置傳輸數據的位數,停止位的位數,校驗模式,紅外模式。
UCONn寄存器,同樣包括三個,UCON0,UCON1,UCON2。他可以用來設置接收數據和發送數據的模式,接收錯誤狀態使能,接受超時使能,接收中斷方式,發送中斷方式,時鐘選擇。
UFCONn寄存器,同樣有三個UFCON[0:2],共有八位,可以設置FIFO使能,設置FIFO的觸發閥值。
UMCONn寄存器,同樣也有三個,由八位組成,它主要用于流量控制。
UTRSTATn寄存器,他由三位構成,這個寄存器主要用來表明數據是否已經發送完畢,是否已經接收到數據。
UERSTATn寄存器,用來表示各種錯誤是否發生。
UFSTATn寄存器,由16位組成,主要用來設置FIFO什么時候發送和接收數據。
UTXHn寄存器,CPU寫寄存器。
URXHn寄存器,CPU讀寄存器。
UBRDIVn寄存器,主要用來設置波特率,這個波特率的值的確定需要根據時鐘源和公式。計算公式如下:UARDIVNn=(int)(UART時鐘)/(設置的波特率*16)。
下面來說說實驗程序,本次實驗的程序是使用板子接收PC機上發送過來的數據,按原樣進行顯示。
匯編在此就不寫了,直接寫C程序,因為匯編部分還有不懂得,還得繼續啃。
在ADS1.2里,建立一個頭文件,在C程序中調用一下即可。
在reg2410.h中:
#define rGPHCON (*(volatile unsigned*)0x56000070)
#define rUBRDIV0 (*(volatile unsigned*)0x56000028)
#define rULCON0 (*(volatile unsigned *)0x50000000)
#define rUCON0 (*(volatile unsigned *)0x56000004)
#define rUTRSTAT0 (*(volatile unsigned *)0x50000010)
#define rUTXH0 (*(volatile unsigned *)0x50000020)
#define rURXH0 (*(volatile unsigned *)0x50000024)
在reg2410.h這個文件里,設置了控制UART的相關寄存器的地址,這些地址都是固定的,在文檔查找即可,他們分別是什么寄存器以及各自的功能上面有描述,就不再贅述。
Reg2410.c文件如下:
#include“reg2410.h” //上面所建立的頭文件
#define TXD0READY (1<<2) //(1<<2)=4
#define RXD0READY (1)
#define PCLK 50700000
#defineUART_CLK PCLK //設置UART的時鐘為pclk
#define UART_BPS 115200 //設置串口的波特率為115200
#defineUART_BRD (int)(UART_PCLK/(UART_BPS)*16)-1//設置UART的波特率
Void SendByte(char dat) //發送的字節
{
While(!(UTRSTAT0&TXD0READY));//緩存寄存器中和發送移位寄存器中沒有有效值,會被自動置壹,UTRSTAT為0100與TXD0READY(0100)相與,[3]位為1,也就是數據傳完了,然后非一下為假,則不執行分號,意思為等待,直接進行下一句;如果UTRSTAT0&TXD0READY的結果為0,則說明數據還沒有完全從緩存寄存器傳輸到uart讀寫狀態寄存器中,則等待。
UTXH0=dat;
}
char RecByte(void)
{
While(!(UTRSTAT0&RXD0READY));// RXD0READY接受到數據,只要接受緩存寄存器保留通過RXDn端口接受的有效值,其值自動為1,URSTAT0&RXD0READY與的結果為1,非后的結果為假,則不執行分號;若沒有接收到數據,則(!(UTRSTAT0&RXD0READY))為真,執行分號,一直等待接收到為止。
Return URXH0;
}
Intmain()
{
rGPHCON=(rGPHCON&~(0xf<<4)|(0xa<<4));//設置GPFCON的2,3引腳,因為UART0的輸入輸出引腳是通過他們完成的
rUBRDIV0=UART_BRD;//設置UART的波特率
rULCON0=3;//表明數據傳輸時的位數,是否有校驗位,有幾個停止位,是否運用FIFO
rUCON0 =(1<<2)|1;//設置數據發送和接受的查詢方式,為循環查詢
for(;;)//輪詢接受數據和發送數據
{
SendByte(RecByte());
}
}
上一篇:STM32之SPI通信
下一篇:模擬SPI實現和調試流程
推薦閱讀
史海拾趣
東晨(DC)公司深知市場需求的重要性,因此制定了精準的市場策略。公司通過深入研究消費者需求,不斷推出符合市場趨勢的新產品。同時,東晨(DC)公司還注重與渠道商的合作,通過建立穩定的銷售渠道,將產品快速推向市場。此外,公司還積極參與各種展會和論壇,展示最新技術和產品,贏得了客戶和業界的廣泛贊譽。
安碁科技在發展過程中,積極尋求與高校、研究機構的合作,以推動技術創新和人才培養。例如,2009年,公司與逢甲大學進行產學合作,共同研發超小型石英振動子。這種合作模式不僅為公司帶來了先進的技術和研發資源,也促進了產學研之間的緊密合作和共同發展。此外,安碁科技還不斷拓展業務領域,從石英振蕩器逐步擴展到汽車電子、工業控制、消費電子等多個領域,實現了業務的多元化發展。
在2003年,全鵬公司成為巴西Coletek集團的一員,開始了其在南美洲市場的征程。起初,全鵬在巴西設立了提供系統組裝所需機殼、鍵盤、鼠標、喇叭等配件的組裝工廠,以滿足當地市場的初步需求。隨著業務的不斷擴大,全鵬在2004年與當地市政府合作,規劃并建設了一座總廠房面積達8000平方公尺的新工廠,配置了六條組裝生產線和兩條印刷生產線,以及一個發貨倉庫。這座新工廠迅速成為全鵬在巴西市場的發貨中心,推動了全鵬在當地的業務增長。
Easy Braid公司,從一家名不見經傳的小型電子制造商起家,其發展的故事始于一次技術創新。在公司成立初期,面對市場上繁多的線纜管理方案,Easy Braid的創始人意識到傳統方法的局限性,于是帶領團隊研發了一種新型的線纜編織技術——Easy Braid技術。這種技術不僅提高了線纜的耐用性和美觀度,還大大簡化了安裝過程。隨著這一技術的推出,Easy Braid開始逐漸在電子行業中嶄露頭角。
h.w.所負責的手機可以直接摔到地上,但是chris所負責的投影機單價昂貴,必須活用落下測試的方法,避免在測試過程中損壞整臺機器可能付出的高額成本,投影機造價高,在進行落下測試前,結構工程師會先進行評估,將昂貴、不影響測試準確性的零組件先 ...… 查看全部問答∨ |
|
高分求 在Windows CE下模擬觸摸筆在觸摸屏固定位置點擊功能 問題: 我在Windows CE下開發,屏幕為觸摸屏,在程序中,我需要使用代碼來模擬指針在觸摸屏上按下此功能, 我以前的做法是先將指針移動到某位置,然后再模擬指針按下消息,代碼如下 //利用鼠標模擬消息 ...… 查看全部問答∨ |
|
大家新年快樂。 我的平臺是PXA270+wince5.0 目前我們使用Maxim的一個芯片,DS2760/2762來做電池的檢測。在判斷充電器的狀態(是否插入)的時候,是用芯片內部電流的方向來判斷的。現在的問題是,在的電池接近充飽的時候,充電器的狀態顯示會一直 ...… 查看全部問答∨ |
|
#include<iom16.h>#define uchar unsigned char #define uint unsigned int#define rs1 PORTB|=1#define rs0 PORTB&=~1#define rw1 PORTB|=2#define rw0 PORTB&=~2#define en1 PORTB|=4#define en0 PORTB&=~4 //============== ...… 查看全部問答∨ |
|
如今,動力半導體市場的網絡渠道變得越來越重要。在網絡上,工程師們擔負著及時發布應用設計和快速使用技術性說明書的壓力。而今天,恩智浦半導體(納斯達克:NXP)宣布,恩智浦半導體對其官方網站(www.nxp,com )進行了一次大規模的重新設計和調 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 直播已結束【ADI 低噪聲 Buck 穩壓器如何減小電源噪聲】
- Vicor 更好的供電方式,更高的性能、功能性及可靠性
- 免費申請 | Nordic Semiconductor nPM1300-EK PMIC 評估套件
- 看是德科技汽車電子精彩專題,為你的出行安全打call, 下載贏好禮!
- 芯幣競拍:感恩教師節專場
- 【社區大講堂】ARM+DSP雙核處理器應用程序開發
- 【爆款推薦】4路輸出、超簡約電源開發板,只需1塊錢!
- 一道題,測試你是不是MSP430的真愛粉兒~
- 閱讀Microchip多種連接接口SAM單片機精彩專題,參與活動贏好禮
- MPS 隔離式穩壓 DC/DC 模塊——MIE系列首發,邀你一探究竟!