版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年聚甲醛、聚甲醛合金及改性材料項(xiàng)目建議書(shū)
- 第1課 鴉片戰(zhàn)爭(zhēng)(原卷版)
- 2025酒水代理商合同范文
- 2025年岳陽(yáng)貨運(yùn)從業(yè)資格考試題目
- 2025年遼寧貨運(yùn)從業(yè)資格證模擬考試試題答案
- 第6單元 中華民族的抗日戰(zhàn)爭(zhēng)(B卷·能力提升練)(解析版)
- 歷史材料解析題(解題指導(dǎo)+專項(xiàng)練習(xí))(原卷版)
- 2025煤炭供銷簽合同注意事項(xiàng)
- 2024年度擔(dān)保合同6篇
- 2025年硫精砂項(xiàng)目發(fā)展計(jì)劃
- 獲獎(jiǎng)一等獎(jiǎng)QC課題PPT課件
- 企業(yè)中高層人員安全管理培訓(xùn)--責(zé)任、案例、管理重點(diǎn)
- 人教版小學(xué)三年級(jí)數(shù)學(xué)上冊(cè)判斷題(共3頁(yè))
- 國(guó)際項(xiàng)目管理手冊(cè)The Project Manager’s Manual
- 小學(xué)五年級(jí)思政課教案三篇
- 高強(qiáng)螺栓施工記錄
- 一億以內(nèi)的質(zhì)數(shù)表(一)
- 華為內(nèi)部虛擬股管理暫行條例
- 大劇院建設(shè)項(xiàng)目設(shè)計(jì)投資造價(jià)估算
- (完整版)倒插、翻口、評(píng)點(diǎn)文件
- 病理生理學(xué)缺氧
評(píng)論
0/150
提交評(píng)論