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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

S3C44B0的UART接口功能及應(yīng)用開(kāi)發(fā)UART概述UART(UniversalAsynchronousReceiver/Transmitter)通用異步收發(fā)器提供兩個(gè)獨(dú)立的UART;皆可工作于中斷和DMA模式,即UART可以通過(guò)產(chǎn)生中斷或DMA請(qǐng)求來(lái)完成CPU和UART間的數(shù)據(jù)傳輸;最高波特率達(dá)115.2Kbps;每一個(gè)UART單元包含一個(gè)16字節(jié)的FIFO,用于數(shù)據(jù)的接收和發(fā)送,其次還包含一個(gè)波特率發(fā)生器,接收器,發(fā)送器和控制單元。提供兩個(gè)串口DB9。其中UART1為主串口,可與PC或MODOM進(jìn)行串行通迅。采用MAX3243E作為電平轉(zhuǎn)換器UART0只采用二根接線RXD和TXD,因此只能進(jìn)行簡(jiǎn)單的數(shù)據(jù)傳輸及接收功能。UART0采用MAX3221E作為電平轉(zhuǎn)換器。UART概述工作過(guò)程串口在電氣連接上有3wire和9wireUART程序設(shè)計(jì)串口初始化數(shù)據(jù)發(fā)送和接收數(shù)據(jù)UART的操作數(shù)據(jù)發(fā)送數(shù)據(jù)接收自動(dòng)流控制AFC(AutoFlowControl)非自動(dòng)流控制波特率的產(chǎn)生回環(huán)(Loop-back)模式數(shù)據(jù)發(fā)送與接收工作過(guò)程數(shù)據(jù)幀格式:可編程,它包含1個(gè)開(kāi)始位,5到8個(gè)數(shù)據(jù)位,一個(gè)可選奇偶位和1到2個(gè)的停止位,具體由行控制寄存器(ULCONn)來(lái)定義。接收狀態(tài):溢出錯(cuò)誤表明新的數(shù)據(jù)在舊數(shù)據(jù)沒(méi)有被讀取的情況下,覆蓋了舊的數(shù)據(jù)。奇偶錯(cuò)誤表明接收器發(fā)現(xiàn)一個(gè)不希望出現(xiàn)的奇偶錯(cuò)誤。幀錯(cuò)誤表明接收到的數(shù)據(jù)沒(méi)有一個(gè)有效的停止位。斷點(diǎn)條件表明接收器收到的輸入保持了大于傳輸一幀數(shù)據(jù)時(shí)間的邏輯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該位確定奇偶如何產(chǎn)生和校驗(yàn)0xx=無(wú)

100=奇校驗(yàn)101=偶校驗(yàn)

110=強(qiáng)制為1111=強(qiáng)制為0[2]Stopbit該位確定停止位的個(gè)數(shù)0=每幀一位停止位

1=每幀兩位停止位[1:0]Wordlength該位確定數(shù)據(jù)位的個(gè)數(shù)00=5位

01=6位

10=7位

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

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

1=電平[8]Rxinterrupttype接收中斷請(qǐng)求類型0=脈沖

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

1=允許[6]interruptenable允許/不允許產(chǎn)生UART錯(cuò)誤中斷0=不允許

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

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

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

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

01=中斷請(qǐng)求或

polling模式10=BDMA0請(qǐng)求(僅用于UART0)11=BDMA1請(qǐng)求(僅用于UART1)波特率的產(chǎn)生UART傳輸?shù)臅r(shí)鐘:由內(nèi)部系統(tǒng)時(shí)鐘經(jīng)16位分頻器分頻后產(chǎn)生。UART波特率分頻寄存器

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

UBRDIV1UART1波特率分頻寄存器

地址:0x01D04028 R/W

波特率的產(chǎn)生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四舍五入U(xiǎn)ARTFIFO控制寄存器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復(fù)位位,該位在FIFO復(fù)位后自動(dòng)清除0=正常

1=TxFIFO復(fù)位[1]RxFIFOResetRxFIFO復(fù)位位該位在FIFO復(fù)位后自動(dòng)清除0=正常

1=RxFIFO復(fù)位[0]FIFOEnable0=FIFO禁止

1=FIFO模式初始化voidUart_Init(int

mclk,intbaud){

inti;

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

rUMCON0=0x0;

//禁止AFC

rULCON0=0x3; //普通模式,無(wú)奇偶校驗(yàn),1個(gè)停止位,8位數(shù)據(jù)位

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

//禁止超時(shí)中斷、產(chǎn)生接受錯(cuò)誤中斷、

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

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

for(i=0;i<100;i++);//延時(shí)作用}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ā)送移位寄存器沒(méi)有有效的數(shù)據(jù)或發(fā)送移位寄存器為空時(shí)為10=發(fā)送移位寄存器不空

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

0=不空

1=空[0]Receivebufferdataready無(wú)論何時(shí)接收緩沖寄存器包含有效數(shù)據(jù),該位為1,如果UART使用FIFO,用戶應(yīng)當(dāng)檢查UFSTAT寄存器的RxFIFO計(jì)數(shù)位代替檢查該位。0=空

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

if(data=='\n') {

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

Delay(10);//因?yàn)槌?jí)終端的響應(yīng)慢

WrUTXH0('\r'); }

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

Delay(10);

WrUTXH0(data);//將數(shù)據(jù)寫入發(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();

//返回接收保持寄存器的內(nèi)容}#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();//接收到一個(gè)字符

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

}

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

115200波特率,8位數(shù)據(jù)位,無(wú)奇偶檢驗(yàn),1位停止位,無(wú)硬件流控制。

格式化輸出函數(shù)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);}函數(shù)申明:

int

vsprintf(char*buf,constchar

*format,

va_list

arglist);

函數(shù)用途:

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

頭文件:

stdio.h

stdarg.h

輸入?yún)?shù):

format:參數(shù)格式說(shuō)明,具體參見(jiàn)printf函數(shù)

arglist:參數(shù)列表指針,類型va_list是一個(gè)void類型的指針(見(jiàn)stdarg.h),即等價(jià)于:

int

vsprintf(char

*buf,

const

char

*format,

void

*arglist)

輸出參數(shù):

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

實(shí)時(shí)時(shí)鐘RTC功能:日歷/時(shí)鐘及數(shù)據(jù)存儲(chǔ)功能定時(shí)功能特點(diǎn):

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

8位BCD數(shù)據(jù),秒\分\時(shí)\日\(chéng)月\年

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

RTC功能框圖

時(shí)鐘源由外部32.768KHz晶振提供操作:

1.讀取并設(shè)置當(dāng)前的時(shí)間,讀/寫RTC模塊中的寄存器,

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

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

1=復(fù)位[2]CNTSELBCD計(jì)數(shù)器選擇:0=組合的BCD計(jì)數(shù)器

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

0=禁止

1=允許如果RTC讀寫允許,STOP電流將大大增大,為了減少STOP電流,當(dāng)不存取RTC時(shí),設(shè)置該位為0,雖然為0,但RTC時(shí)鐘仍運(yùn)行。1.讀取并設(shè)置當(dāng)前的時(shí)間讀取當(dāng)前時(shí)間訪問(wèn)RTC模塊的寄存器,首先要設(shè)RTCCON的bit0為1。CPU通過(guò)讀取RTC模塊中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON和BCDYEAR的值,得到當(dāng)前的相應(yīng)時(shí)間值。但是,在RTC模塊中,由于多個(gè)寄存器在讀,可能會(huì)產(chǎn)生1s的偏差。例如:當(dāng)用戶從BCDYEAR到BCDMIN讀寄存器時(shí),結(jié)果假定是1959年12月31日23時(shí)59分,當(dāng)用戶讀BCDSEC寄存器并且結(jié)果是從1到59,這沒(méi)問(wèn)題,但如果結(jié)果是0秒,則年月日時(shí)分秒可能變?yōu)?960年1月1日0時(shí)0秒,因?yàn)榇嬖?秒偏差。所以這時(shí),若BCDSEC是0,用戶應(yīng)該從BCDYEAR向BCDSEC重新讀取數(shù)據(jù)。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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論