第45章UART接口功能及應用_第1頁
第45章UART接口功能及應用_第2頁
第45章UART接口功能及應用_第3頁
第45章UART接口功能及應用_第4頁
第45章UART接口功能及應用_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

S3C44B0的UART接口功能及應用開發(fā)UART概述UART(UniversalAsynchronousReceiver/Transmitter)通用異步收發(fā)器提供兩個獨立的UART;皆可工作于中斷和DMA模式,即UART可以通過產生中斷或DMA請求來完成CPU和UART間的數據傳輸;最高波特率達115.2Kbps;每一個UART單元包含一個16字節(jié)的FIFO,用于數據的接收和發(fā)送,其次還包含一個波特率發(fā)生器,接收器,發(fā)送器和控制單元。提供兩個串口DB9。其中UART1為主串口,可與PC或MODOM進行串行通迅。采用MAX3243E作為電平轉換器UART0只采用二根接線RXD和TXD,因此只能進行簡單的數據傳輸及接收功能。UART0采用MAX3221E作為電平轉換器。UART概述工作過程串口在電氣連接上有3wire和9wireUART程序設計串口初始化數據發(fā)送和接收數據UART的操作數據發(fā)送數據接收自動流控制AFC(AutoFlowControl)非自動流控制波特率的產生回環(huán)(Loop-back)模式數據發(fā)送與接收工作過程數據幀格式:可編程,它包含1個開始位,5到8個數據位,一個可選奇偶位和1到2個的停止位,具體由行控制寄存器(ULCONn)來定義。接收狀態(tài):溢出錯誤表明新的數據在舊數據沒有被讀取的情況下,覆蓋了舊的數據。奇偶錯誤表明接收器發(fā)現一個不希望出現的奇偶錯誤。幀錯誤表明接收到的數據沒有一個有效的停止位。斷點條件表明接收器收到的輸入保持了大于傳輸一幀數據時間的邏輯0狀態(tài)。UART的行控制寄存器UART行控制寄存器ULCON0 地址:0x01D00000 R/W 初始值0x00UART0的行控制寄存器ULCON1 地址:0x01D04000 R/W 初始值0x00UART1的行控制寄存器位位名稱描述[7]保留[6]Infra-RedMode該位確定是否使用紅外模式0=普通操作模式

1=紅外發(fā)送/接收模式[5:3]ParityMode該位確定奇偶如何產生和校驗0xx=無

100=奇校驗101=偶校驗

110=強制為1111=強制為0[2]Stopbit該位確定停止位的個數0=每幀一位停止位

1=每幀兩位停止位[1:0]Wordlength該位確定數據位的個數00=5位

01=6位

10=7位

11=8位自動流控制AFCnRTS:發(fā)送請求信號nCTS:清除發(fā)送信號nCTS信號有效表示對方UART的接收FIFO已準備好,nRTS信號有效表示自己的接收器FIFO已經準備好;CTS信號控制發(fā)送器的操作,接收器的狀態(tài)影響RTS信號非自動流控制主要用于與modem連接時使用UART控制寄存器UCON0 UART0控制寄存器

地址:0x01D00004 R/W 始值0x00UCON1 UART1控制寄存器地址:0x01D04004 R/W 初始值0x00位位名稱描述[9]Txinterrupttype發(fā)送中斷請求類型0=脈沖

1=電平[8]Rxinterrupttype接收中斷請求類型0=脈沖

1=電平[7]Rxtimeoutenable允許/不允許Rx超時中斷0=不允許

1=允許[6]interruptenable允許/不允許產生UART錯誤中斷0=不允許

1=允許[5]Loop-backMode該位為1使UART進入回環(huán)模式(loopback)模式0=普通運行

1=回環(huán)模式(loopback)[4]SendBreakSignal該位為1使UART發(fā)送一個暫停條件,該位在發(fā)送一個暫停信號后自動清除0=正常傳送

1=發(fā)送暫停條件[3:2]TransmitMode這兩位確定哪個模式可以寫TX數據到UART發(fā)送保持寄存器00=禁止(Disable)01=中斷請求或

polling模式10=BDMA0請求(僅用于UART0)11=BDMA1請求(僅用于UART1)[1:0]ReceiveMode這兩位確定哪個模式可以從UART接收緩沖寄存器讀數據00=禁止(Disable)

01=中斷請求或

polling模式10=BDMA0請求(僅用于UART0)11=BDMA1請求(僅用于UART1)波特率的產生UART傳輸的時鐘:由內部系統(tǒng)時鐘經16位分頻器分頻后產生。UART波特率分頻寄存器

UBRDIV0UART波特率分頻寄存器UBRDIV0UART0波特率分頻寄存器地址:0x01D00028 R/W

UBRDIV1UART1波特率分頻寄存器

地址:0x01D04028 R/W

波特率的產生UBRDIVn=(round_off)(MCLK/(bps×16))–1例如:如果波特率為115200bps,而MCLK為40MHz,則:UBRDIVn=(int)(40000000/(115200*16)+0.5)-1=(int)(21.7+0.5)-1=22-1=21round_off四舍五入UARTFIFO控制寄存器UFCON0 UART0FIFO控制寄存器地址:0x01D00008 R/W 初始值0x00UFCON1 UART1FIFO控制寄存器地址:0x01D04008 R/W 初始值0x00位位名稱描述[7:6]TxFIFOTriggerLevel這兩位確定發(fā)送FIFO的觸發(fā)條件00=空

01=4-byte10=8-byte 11=12-byte[5:4]RxFIFOTriggerLevel這兩位確定接收FIFO的觸發(fā)條件00=4-byte 01=8-byte10=12-byte 11=16-byte[3]保留[2]TxFIFOResetTXFIFO復位位,該位在FIFO復位后自動清除0=正常

1=TxFIFO復位[1]RxFIFOResetRxFIFO復位位該位在FIFO復位后自動清除0=正常

1=RxFIFO復位[0]FIFOEnable0=FIFO禁止

1=FIFO模式初始化voidUart_Init(int

mclk,intbaud){

inti;

mclk=MCLK;rUFCON0=0x0; //禁止FIFO

rUMCON0=0x0;

//禁止AFC

rULCON0=0x3; //普通模式,無奇偶校驗,1個停止位,8位數據位

rUCON0=0x245;//rx為邊沿觸發(fā)、tx為電平觸發(fā)、

//禁止超時中斷、產生接受錯誤中斷、

//普通傳送、發(fā)送與接受為輪循模式

rUBRDIV0=((int)(mclk/16./baud+0.5)-1);

for(i=0;i<100;i++);//延時作用}UART發(fā)送保持寄存器UTXH0/1 UTXH0 UART0發(fā)送緩沖寄存器

地址:0x01D00020(小端模式) 0x01D00023(大端模式)UTXH1 UART1發(fā)送緩沖寄存器地址:0x01D04020(小端模式) 0x01D04023(大端模式)

UART接收保持寄存器UART接收緩沖寄存器和FIFO寄存器URXH0 UART0接收緩沖寄存器地址:0x01D00024(小端模式) 0x01D00027(大端模式)URXH1 UART1接收緩沖寄存器地址:0x01D04024(小端模式) 0x01D04027(大端模式)UARTTx/Rx狀態(tài)寄存器UTRSTAT0

UART0TX/RX狀態(tài)寄存器地址:0x01D00010

R

初始值0x6 UTRSTAT1

UART1TX/RX狀態(tài)寄存器

地址:0x01D04010

R

初始值0x6 位位名稱描述[2]TransmitshifterEmpty該位在發(fā)送移位寄存器沒有有效的數據或發(fā)送移位寄存器為空時為10=發(fā)送移位寄存器不空

1=發(fā)送移位寄存器空[1]TransmitbufferEmpty該位在發(fā)送緩沖寄存器沒有包含有效的數據為1。如果UART使用FIFO,用戶應當檢查UFSTAT寄存器的TxFIFO計數位和TxFIFO滿標志位代替檢查該位。

0=不空

1=空[0]Receivebufferdataready無論何時接收緩沖寄存器包含有效數據,該位為1,如果UART使用FIFO,用戶應當檢查UFSTAT寄存器的RxFIFO計數位代替檢查該位。0=空

1=接收緩沖寄存器中有接收數據發(fā)送字符voidUart_SendByte(intdata){

if(data=='\n') {

while(!(rUTRSTAT0&0x2));//一直等到THR為空

Delay(10);//因為超級終端的響應慢

WrUTXH0('\r'); }

while(!(rUTRSTAT0&0x2));//一直等到THR為空

Delay(10);

WrUTXH0(data);//將數據寫入發(fā)送保存寄存器中}

#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x1d00020)=(unsignedchar)(ch)發(fā)送字符串voidUart_SendString(char*pt){while(*pt)

Uart_SendByte(*pt++);}

接收字符charUart_Getch(void){

while(!(rUTRSTAT0&0x1));//Receivedataread returnRdURXH0();

//返回接收保持寄存器的內容}#defineRdURXH0() (*(volatileunsignedchar*)0x1d00024)voidMain(void){ charinput_char; /*userinputchar*/

inti;charpt_str[10]={0,0,0,0,0,0,0,0,0,0};

sys_Init(); Uart_Init(0,115200);for(i=0;i<10;i++){

pt_str[i]=Uart_Getch();//接收到一個字符

Uart_SendByte(pt_str[i]);//發(fā)送剛才收到的字符

}

Uart_SendString(*pt_str);//發(fā)送整串字符}超級終端的配置打開超級終端:開始/程序/附件/通信/超級終端配置:

115200波特率,8位數據位,無奇偶檢驗,1位停止位,無硬件流控制。

格式化輸出函數Uart_Printf(“pleaseinput:\n“);voidUart_Printf(char*fmt,...){

va_list

ap;charstring[256];

va_start(ap,fmt);

vsprintf(string,fmt,ap);

Uart_SendString(string);

va_end(ap);}函數申明:

int

vsprintf(char*buf,constchar

*format,

va_list

arglist);

函數用途:

該函數作用同sprintf函數,向變量輸出格式化字符串。區(qū)別是參數表由一個va_list類型的指針代替

頭文件:

stdio.h

stdarg.h

輸入參數:

format:參數格式說明,具體參見printf函數

arglist:參數列表指針,類型va_list是一個void類型的指針(見stdarg.h),即等價于:

int

vsprintf(char

*buf,

const

char

*format,

void

*arglist)

輸出參數:

buf:要寫入的緩沖區(qū)

實時時鐘RTC功能:日歷/時鐘及數據存儲功能定時功能特點:

RTC可在斷電后繼續(xù)使用

8位BCD數據,秒\分\時\日\月\年

硬件支持閏年產生器操作:讀/寫RTC模塊中的寄存器,讀取并設置產生滴答時鐘中斷。

RTC功能框圖

時鐘源由外部32.768KHz晶振提供操作:

1.讀取并設置當前的時間,讀/寫RTC模塊中的寄存器,

2.產生滴答時鐘中斷。寄存器寄存器名稱功能RTCCONRTC控制寄存器用于控制BCD寄存器的讀/寫使能

BCDSECBCD秒寄存器用于存放秒的BCD值BCDMINBCD分鐘寄存器用于存放月的BCD值BCDHOURBCD小時寄存器用于存放小時的BCD值BCDDAYBCD日寄存器用于存放日的BCD值BCDDATEBCD星期寄存器用于存放星期的BCD值BCDMONBCD月寄存器用于存放月的BCD值BCDYEARBCD年寄存器用于存放年的BCD值TICNTTICKTIME計數寄存器用于確定是否允許時間滴答中斷和時間中斷的計數值。RTC控制寄存器RTCCON地址:0x01D70040(小端) R/W(字節(jié))初始值:0x0位位名稱描述[3]CLKRSTRTC時鐘計數復位:0=不復位

1=復位[2]CNTSELBCD計數器選擇:0=組合的BCD計數器

1=保留(分離的BCD計數器)[1]CLKSELBCD計數器時鐘選擇0=XTAL1/215dividedclock1=保留(XTALclockonlyfortest)[0]RTCENRTC讀寫允許:

0=禁止

1=允許如果RTC讀寫允許,STOP電流將大大增大,為了減少STOP電流,當不存取RTC時,設置該位為0,雖然為0,但RTC時鐘仍運行。1.讀取并設置當前的時間讀取當前時間訪問RTC模塊的寄存器,首先要設RTCCON的bit0為1。CPU通過讀取RTC模塊中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON和BCDYEAR的值,得到當前的相應時間值。但是,在RTC模塊中,由于多個寄存器在讀,可能會產生1s的偏差。例如:當用戶從BCDYEAR到BCDMIN讀寄存器時,結果假定是1959年12月31日23時59分,當用戶讀BCDSEC寄存器并且結果是從1到59,這沒問題,但如果結果是0秒,則年月日時分秒可能變?yōu)?960年1月1日0時0秒,因為存在1秒偏差。所以這時,若BCDSEC是0,用戶應該從BCDYEAR向BCDSEC重新讀取數據。voidRead_Rtc(void){

Uart_Printf(“youcanreadRTCValue");

rRTCCON=0x01;//R/Wenable,1/32768,Normal(merge),Noresetwhile(1){

if(rBCDYEAR==0x99) year=0x1999; else year=0x2000+rBCDYEAR; month=rBCDMON; day=rBCDDAY; weekday=rBCDDATE; hour=rBCDHOUR; min=rBCDMIN; sec=rBCDSEC;

if(sec!=0) break;}

rRTCCON=0x0;//R/Wdisable(forpowerconsumption)}rtc.h文件#defineTESTYEAR (0x02)#defineTESTMONTH (0x12)#defineTESTDAY (0x31)#defineTESTDATE(0x03)#defineTESTHOUR (0x23)#defineTESTMIN (0x59)#defineTESTSEC (0x59)#include"rtc.h“voidRtc_Init(void){

rRTCCON=0x01; //R/Wenable,1/32768,Normal(merge),Noreset

rBCDYEAR=TESTYEAR;

rBCDMON=TESTMONTH;

rBCDDAY=TESTDAY; //SUN:1MON:2TUE:3WED:4THU:5FRI:6SAT:7

rBCDDATE=TESTDATE;

rBCDHOUR=TESTHOUR;

rBCDMIN=TESTMIN;

rBCDSEC=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論