




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、主要內(nèi)容S3C2410簡介簡介 I/O口口時(shí)鐘與定時(shí)器時(shí)鐘與定時(shí)器中斷中斷UARTDMA第第8 8章章 UARTUART8.1 UART 工作原理工作原理 1、 UART(Universal Asynchronous Receiver and Transmitter) 通用異步收發(fā)器,是廣泛使用的串行數(shù)據(jù)傳輸方式。通用異步收發(fā)器,是廣泛使用的串行數(shù)據(jù)傳輸方式。2、串行數(shù)據(jù)傳輸接口、串行數(shù)據(jù)傳輸接口 標(biāo)準(zhǔn)標(biāo)準(zhǔn) RS232C是通用的串行數(shù)據(jù)傳輸接口是通用的串行數(shù)據(jù)傳輸接口 標(biāo)準(zhǔn),常用標(biāo)準(zhǔn),常用DB9引腳,引腳,DB9引腳定義如下:引腳定義如下: 3、串口之間的連接、串口之間的連接遠(yuǎn)距離:串口遠(yuǎn)距離
2、:串口-調(diào)制解調(diào)器后連接調(diào)制解調(diào)器后連接 需要連接串口的各個(gè)引腳,串口需要連接串口的各個(gè)引腳,串口 完全連接完全連接近距離:串口之間直接連接近距離:串口之間直接連接 常用簡單連接(三線連接),只連接發(fā)送數(shù)據(jù)線,常用簡單連接(三線連接),只連接發(fā)送數(shù)據(jù)線,接收數(shù)據(jù)線,地線接收數(shù)據(jù)線,地線 波特率波特率9600,傳輸距離不超過,傳輸距離不超過15米米簡單連接簡單連接 完全連接完全連接 4 4、UARTUART字符傳輸格式字符傳輸格式 UARTUART以字符為單位進(jìn)行數(shù)據(jù)傳輸,每個(gè)字符的傳輸以字符為單位進(jìn)行數(shù)據(jù)傳輸,每個(gè)字符的傳輸格式如下,一幀數(shù)據(jù)格式如下,一幀數(shù)據(jù): 空閑位:高電平空閑位:高電平起
3、始位:低電平起始位:低電平數(shù)據(jù)位:數(shù)據(jù)位:5-8位位校驗(yàn)位:可選校驗(yàn)位:可選停止位:停止位:1或或2位位 8.2 S3C2410A 8.2 S3C2410A的的UART UART 一、一、S3C2410UARTS3C2410UART端口簡介端口簡介 1 1、S3C2410提供提供3個(gè)獨(dú)立的異步串行端口個(gè)獨(dú)立的異步串行端口UART UART0,UART1,UART2 2 2、每個(gè)、每個(gè)UARTUART都可以運(yùn)行于中斷模式或都可以運(yùn)行于中斷模式或DMADMA模式,發(fā)出模式,發(fā)出中斷請(qǐng)求和中斷請(qǐng)求和DMADMA請(qǐng)求實(shí)現(xiàn)在請(qǐng)求實(shí)現(xiàn)在UART,CPUUART,CPU間的數(shù)據(jù)傳遞間的數(shù)據(jù)傳遞 3、每個(gè)、每
4、個(gè)UART由波特率發(fā)生器、發(fā)送器、接收器以及由波特率發(fā)生器、發(fā)送器、接收器以及控制單元組成。控制單元組成。 UART數(shù)據(jù)傳輸過程:數(shù)據(jù)傳輸過程: s2410 UART的每個(gè)通道都有的每個(gè)通道都有16字節(jié)的發(fā)字節(jié)的發(fā)送送FIFO和和16字節(jié)的接收字節(jié)的接收FIFO。 發(fā)送數(shù)據(jù)時(shí),發(fā)送數(shù)據(jù)時(shí),CPU先將數(shù)據(jù)寫入發(fā)送先將數(shù)據(jù)寫入發(fā)送FIFO中,然后中,然后UART會(huì)自動(dòng)將會(huì)自動(dòng)將FIFO中的數(shù)據(jù)復(fù)制到中的數(shù)據(jù)復(fù)制到“發(fā)送移位器發(fā)送移位器”中,發(fā)送移位器將數(shù)據(jù)一位一中,發(fā)送移位器將數(shù)據(jù)一位一位地發(fā)送到位地發(fā)送到TXDn上。接收數(shù)據(jù)時(shí),上。接收數(shù)據(jù)時(shí),“接收移接收移位器位器”將將RXDn上的數(shù)據(jù)一位一位
5、接收過來,上的數(shù)據(jù)一位一位接收過來,然后復(fù)制到接收然后復(fù)制到接收FIFO中,中,CPU即可從中讀取即可從中讀取數(shù)據(jù)數(shù)據(jù)。二、二、UART相關(guān)操作和模式相關(guān)操作和模式 包括數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率產(chǎn)生、回送包括數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率產(chǎn)生、回送模式、紅外模式和自動(dòng)流控制模式、紅外模式和自動(dòng)流控制1、數(shù)據(jù)發(fā)送、數(shù)據(jù)發(fā)送 數(shù)據(jù)的格式設(shè)置由數(shù)據(jù)的格式設(shè)置由ULCONn寄存器指定寄存器指定2、數(shù)據(jù)接收、數(shù)據(jù)接收 數(shù)據(jù)的格式設(shè)置由數(shù)據(jù)的格式設(shè)置由ULCONn寄存器指定寄存器指定3、自動(dòng)流控制(、自動(dòng)流控制(Auto Flow Control AFC) 兩個(gè)數(shù)據(jù)流控制信號(hào)兩個(gè)數(shù)據(jù)流控
6、制信號(hào)nRTS( 請(qǐng)求發(fā)送信號(hào)),請(qǐng)求發(fā)送信號(hào)),nCTS(允許發(fā)送)允許發(fā)送) 自動(dòng)流控制就是由自動(dòng)流控制就是由nRTS和和nCTS控制數(shù)據(jù)的發(fā)送控制數(shù)據(jù)的發(fā)送注意:如注意:如UART與調(diào)制解調(diào)器相連,則必須禁止與調(diào)制解調(diào)器相連,則必須禁止AFC 4 4、波特率發(fā)生器、波特率發(fā)生器功能:為每個(gè)功能:為每個(gè)Uart的發(fā)送器和接收器提供時(shí)鐘的發(fā)送器和接收器提供時(shí)鐘 波特率發(fā)生器操作:波特率時(shí)鐘波特率發(fā)生器操作:波特率時(shí)鐘=PCLK(UEXTCLK)/(16*16位因子位因子) 16位因子由波特率寄存器指定位因子由波特率寄存器指定,UBRDIVn UBRDIVn=(int)(PCLK/(bps*1
7、6)-1 UBRDIVn=(int)(UEXTCLK/(bps*16)-1例:波特率是例:波特率是115200,PCLK是是40MHZ,那么那么UBRDIVn的值為:的值為: UBRDIVn=(int)()(40000000/(115200*16 )-1=(int)(27.1)-1=265、回送模式(測試模式)、回送模式(測試模式) s2410的的UART提供一種測試模式,可用于發(fā)現(xiàn)通信連接提供一種測試模式,可用于發(fā)現(xiàn)通信連接中的孤立錯(cuò)誤。中的孤立錯(cuò)誤。 RXD 與與TXD直接相連直接相連 發(fā)送的數(shù)據(jù)直接通過發(fā)送的數(shù)據(jù)直接通過RXD接受,從而測試整個(gè)系統(tǒng)接受,從而測試整個(gè)系統(tǒng) 通過通過UCON
8、n寄存器設(shè)置寄存器設(shè)置6、紅外模式、紅外模式 s2410的的UART支持紅外的發(fā)送和接受,通過支持紅外的發(fā)送和接受,通過ULCONn寄存寄存器設(shè)置器設(shè)置三、三、UART使用流程使用流程 1、選擇涉及引腳位、選擇涉及引腳位UART功能,功能,GPH2GPH7對(duì)應(yīng)三個(gè)對(duì)應(yīng)三個(gè)UART的的RXD,TXD引腳引腳 2、設(shè)置波特率,傳輸格式(多少個(gè)數(shù)據(jù)位,校驗(yàn)位,和停、設(shè)置波特率,傳輸格式(多少個(gè)數(shù)據(jù)位,校驗(yàn)位,和停止位等)止位等) 3、選擇、選擇UART通道的工作模式位查詢,中斷或通道的工作模式位查詢,中斷或DMA模式模式4、發(fā)送、發(fā)送寫入發(fā)送寄存器寫入發(fā)送寄存器 接受接受讀接收寄存器的值讀接收寄存器
9、的值6、查詢狀態(tài)寄存器或設(shè)置中斷來了解數(shù)據(jù)是否發(fā)送完畢或、查詢狀態(tài)寄存器或設(shè)置中斷來了解數(shù)據(jù)是否發(fā)送完畢或是否接受完畢是否接受完畢實(shí)例實(shí)例1:使用:使用2410的的UART0實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受,從實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受,從UART0接受到接受到PC機(jī)發(fā)送的數(shù)據(jù)后,通過機(jī)發(fā)送的數(shù)據(jù)后,通過UART0發(fā)送到發(fā)送到PC機(jī),在終端上進(jìn)行顯示。波特率機(jī),在終端上進(jìn)行顯示。波特率115200,1位停止位,位停止位,無奇偶校驗(yàn),無奇偶校驗(yàn),8位數(shù)據(jù)位位數(shù)據(jù)位,使用查詢方式。使用查詢方式。四四 、與與UART相關(guān)的寄存器相關(guān)的寄存器 UART行控制寄存器(行控制寄存器(ULCONn)UART控制寄存器(控制寄
10、存器(UCONn) UART FIFO控制寄存器(控制寄存器(UFCONn) UART Modem控制寄存器(控制寄存器(UMCONn) UART TX/RX狀態(tài)寄存器(狀態(tài)寄存器(UTRSTATn)UART發(fā)送緩沖寄存器(發(fā)送緩沖寄存器(UTXHn)UART接收緩沖寄存器(接收緩沖寄存器(URXHn)UART波特率因子寄存器(波特率因子寄存器(UBRDIVn) 四、與四、與UART相關(guān)的寄存器相關(guān)的寄存器1、UBRDIVn(UART band rate divisor)功能:設(shè)置波特率發(fā)生器功能:設(shè)置波特率發(fā)生器n=0,1,2地址:地址: UBRDIV0: 0 x50000028 UBRDI
11、V1: 0 x50004028 UBRDIV2: 0 x50008028 UBRDIVn=(int)(PCLK/(bps*16)-1 UBRDIVn=(int)(UEXTCLK/(bps*16)-1#define rULCON0 (#define rULCON0 (* *(volatile unsigned (volatile unsigned * *)0 x50000000) /UART0)0 x50000000) /UART0行控制寄存器行控制寄存器#define rUCON0 (#define rUCON0 (* *(volatile unsigned (volatile unsigne
12、d * *)0 x50000004) /UART0)0 x50000004) /UART0控制寄存器控制寄存器#define rUFCON0 (#define rUFCON0 (* *(volatile unsigned (volatile unsigned * *)0 x50000008) /UART0 FIFO)0 x50000008) /UART0 FIFO控制寄存器控制寄存器#define rUMCON0 (#define rUMCON0 (* *(volatile unsigned (volatile unsigned * *)0 x5000000c) /UART0 Modem)0
13、x5000000c) /UART0 Modem控制寄存器控制寄存器#define rUTRSTAT0 (#define rUTRSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x50000010) /UART0 Tx/Rx)0 x50000010) /UART0 Tx/Rx狀態(tài)寄存器狀態(tài)寄存器#define rUERSTAT0 (#define rUERSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x50000014) /UART0 Rx)0 x50000014) /UAR
14、T0 Rx錯(cuò)誤狀態(tài)寄存器錯(cuò)誤狀態(tài)寄存器#define rUFSTAT0 (#define rUFSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x50000018) /UART0 FIFO)0 x50000018) /UART0 FIFO狀態(tài)寄存器狀態(tài)寄存器#define rUMSTAT0 (#define rUMSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x5000001c) /UART0 Modem)0 x5000001c) /UART0 Modem狀態(tài)寄存器狀態(tài)寄存
15、器#define rUBRDIV0 (#define rUBRDIV0 (* *(volatile unsigned (volatile unsigned * *)0 x50000028) /UART0)0 x50000028) /UART0波特率因子寄存器波特率因子寄存器 void Uart_Init(int pclk,int baud)void Uart_Init(int pclk,int baud) int i; int i; if(pclk = 0) if(pclk = 0) pclk = PCLK; pclk = PCLK; rUFCON0 = 0 x0; /UART0 FIFO r
16、UFCON0 = 0 x0; /UART0 FIFO控制寄存器,控制寄存器,F(xiàn)IFOFIFO禁止禁止 rUFCON1 = 0 x0; /UART1 FIFOrUFCON1 = 0 x0; /UART1 FIFO控制寄存器,控制寄存器,F(xiàn)IFOFIFO禁止禁止 rUFCON2 = 0 x0; /UART2 FIFOrUFCON2 = 0 x0; /UART2 FIFO控制寄存器,控制寄存器,F(xiàn)IFOFIFO禁止禁止 rUMCON0 = 0 x0; /UART0 MODEMrUMCON0 = 0 x0; /UART0 MODEM控制寄存器,控制寄存器,AFCAFC禁止禁止 rUMCON1 = 0
17、x0; /UART1 MODEMrUMCON1 = 0 x0; /UART1 MODEM控制寄存器,控制寄存器,AFCAFC禁止禁止 /UART0/UART0 rULCON0 = 0 x3; / rULCON0 = 0 x3; /行控制寄存器:正常模式,無奇偶校驗(yàn),行控制寄存器:正常模式,無奇偶校驗(yàn),1 1位停止位,位停止位,8 8位數(shù)據(jù)位。位數(shù)據(jù)位。 rUCON0 = 0 x245; /rUCON0 = 0 x245; /控制寄存器控制寄存器 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); /波特率因子寄存器波特率因子寄存器 1、ULCONn(UART l
18、ine control)UART行控制寄存器行控制寄存器功能:設(shè)置傳輸格式功能:設(shè)置傳輸格式地址:表地址:表8.1位【位【6】:紅外】:紅外/正常模式選擇正常模式選擇 0-正常模式正常模式;1-紅外模式紅外模式位【位【5:3】:奇偶校驗(yàn)?zāi)J竭x擇】:奇偶校驗(yàn)?zāi)J竭x擇 0 xx-無奇偶校驗(yàn)無奇偶校驗(yàn);100-奇校驗(yàn);奇校驗(yàn);101-偶校驗(yàn)偶校驗(yàn) 110-強(qiáng)制校驗(yàn)強(qiáng)制校驗(yàn)1;111-強(qiáng)制校驗(yàn)強(qiáng)制校驗(yàn)0位【位【2】:停止位選擇】:停止位選擇 0-1個(gè)停止位;個(gè)停止位;12個(gè)停止位個(gè)停止位位【位【1:0】:字長】:字長 005位;位;01-6位;位;10-7位位;118位位Uart_Init函數(shù)中:函數(shù)
19、中:rULCON0 = 0 x3; /行控制寄存器:正常模式,無奇偶校驗(yàn),行控制寄存器:正常模式,無奇偶校驗(yàn),1位停止位,位停止位,8位數(shù)據(jù)位。位數(shù)據(jù)位。2、UCONn(UART control) UART控制寄存器控制寄存器功能:用于選擇功能:用于選擇UART時(shí)鐘源,設(shè)置時(shí)鐘源,設(shè)置UART中斷方式中斷方式地址:表地址:表8.2位【位【10】:選擇使用的時(shí)鐘】:選擇使用的時(shí)鐘 0使用使用PCLK 1-使用使用UEXTCLK位【位【9】:發(fā)送中斷類型】:發(fā)送中斷類型 0脈沖脈沖 1-電平電平位【位【8】:接受中斷類型】:接受中斷類型 0脈沖脈沖 1-電平電平位【位【7】:使能】:使能/禁止禁止
20、RX接收超時(shí)中斷接收超時(shí)中斷 0禁止禁止 1-使能使能位【位【6】:使能】:使能/禁止接收錯(cuò)誤中斷(如幀錯(cuò)誤,溢出錯(cuò)誤)禁止接收錯(cuò)誤中斷(如幀錯(cuò)誤,溢出錯(cuò)誤) 0禁止禁止 1-使能使能位【位【5】:回送模式選擇】:回送模式選擇 0-正常模式正常模式 1-回送模式回送模式位【位【4】:選擇是否在一幀數(shù)據(jù)中發(fā)送間隔信號(hào)】:選擇是否在一幀數(shù)據(jù)中發(fā)送間隔信號(hào) 0-不發(fā)送不發(fā)送 1-發(fā)送發(fā)送位【位【3:2】:選擇如何將】:選擇如何將TX數(shù)據(jù)發(fā)送到緩沖寄存器中數(shù)據(jù)發(fā)送到緩沖寄存器中 00-禁止禁止 01-中斷方式或查詢方式中斷方式或查詢方式 10-DMA0,DMA3請(qǐng)求請(qǐng)求 11-DMA1請(qǐng)求請(qǐng)求位【位【
21、1:0】:選擇如何將】:選擇如何將RX數(shù)據(jù)接收到緩沖寄存器中數(shù)據(jù)接收到緩沖寄存器中 00-禁止禁止 01-中斷方式或查詢方式中斷方式或查詢方式 10-DMA0,DMA3請(qǐng)求請(qǐng)求 11-DMA1請(qǐng)求請(qǐng)求 rUCON0=(010)|(19)|(08)|(07)|(16)|(05)|(04)|(03)|(10 x50000010 URTSTAT1-0 x50004010 URTSTAT2-0 x50008010位【位【1】:發(fā)送緩沖區(qū)空位】:發(fā)送緩沖區(qū)空位 當(dāng)發(fā)送緩沖區(qū)中沒有數(shù)據(jù)時(shí),此位由當(dāng)發(fā)送緩沖區(qū)中沒有數(shù)據(jù)時(shí),此位由硬件自動(dòng)設(shè)為硬件自動(dòng)設(shè)為1 1-發(fā)送緩沖器空發(fā)送緩沖器空 0-不空不空位【位【0
22、】:接收緩沖區(qū)數(shù)據(jù)就緒位】:接收緩沖區(qū)數(shù)據(jù)就緒位 當(dāng)接收到數(shù)據(jù)時(shí),此位由當(dāng)接收到數(shù)據(jù)時(shí),此位由硬件自動(dòng)設(shè)為硬件自動(dòng)設(shè)為1 1-接到數(shù)據(jù)接到數(shù)據(jù) 0-未接到數(shù)據(jù)未接到數(shù)據(jù)說明:查詢法實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送和接收,主要時(shí)查詢這些位說明:查詢法實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送和接收,主要時(shí)查詢這些位數(shù)據(jù)是否發(fā)送完畢,是否數(shù)據(jù)是否發(fā)送完畢,是否已經(jīng)接收到數(shù)據(jù)已經(jīng)接收到數(shù)據(jù)程序中程序中(1)發(fā)送的查詢)發(fā)送的查詢 while(!(rUTRSTAT0 & 0 x2); 語句解釋:判斷語句解釋:判斷UTRSTAT01位是否為位是否為0,為,為0則條件為真,執(zhí)行則條件為真,執(zhí)行while語句,語句,為為1則條件為假,執(zhí)行則
23、條件為假,執(zhí)行while語句下面的語句。語句下面的語句。 引申:判斷發(fā)送緩沖器是否空,引申:判斷發(fā)送緩沖器是否空,“不空不空”相應(yīng)為相應(yīng)為0,條件為真則繼續(xù)執(zhí)行,條件為真則繼續(xù)執(zhí)行while語句等待,語句等待,“空空”相應(yīng)位為相應(yīng)位為1,條件為假,執(zhí)行,條件為假,執(zhí)行while語句下面的語語句下面的語句。句。(2)接收的查詢)接收的查詢 while(!(rUTRSTAT0 & 0 x1) 語句解釋:判斷語句解釋:判斷UTRSTAT00是否為是否為0,為,為0則執(zhí)行則執(zhí)行while語句,等待,為語句,等待,為1則向下執(zhí)行則向下執(zhí)行引申:判斷接受緩沖器是否有數(shù)據(jù),無接受的數(shù)據(jù),繼續(xù)執(zhí)行引申
24、:判斷接受緩沖器是否有數(shù)據(jù),無接受的數(shù)據(jù),繼續(xù)執(zhí)行while語句,等語句,等待,有接受數(shù)據(jù),向下執(zhí)行待,有接受數(shù)據(jù),向下執(zhí)行位【位【1】:發(fā)送緩沖區(qū)空位】:發(fā)送緩沖區(qū)空位 1-發(fā)送緩沖器空發(fā)送緩沖器空 0-不空不空位【位【0】:接收緩沖區(qū)數(shù)據(jù)就緒位】:接收緩沖區(qū)數(shù)據(jù)就緒位 1-接到數(shù)據(jù)接到數(shù)據(jù) 0-未接到數(shù)據(jù)未接到數(shù)據(jù)6、UERSTATn(UART錯(cuò)誤狀態(tài)寄存器)錯(cuò)誤狀態(tài)寄存器) 見表見表8.6功能:反應(yīng)功能:反應(yīng)UART的錯(cuò)誤狀態(tài)的錯(cuò)誤狀態(tài)7、UFSTATn(UART FIFO狀態(tài)寄存器)狀態(tài)寄存器) 見表見表8.7功能:反應(yīng)功能:反應(yīng)FIFO狀態(tài)狀態(tài)8、UTXHn寄存器寄存器(UART 發(fā)
25、送緩沖寄存器),發(fā)送緩沖寄存器),cpu將數(shù)據(jù)寫入這個(gè)寄存器中,將數(shù)據(jù)寫入這個(gè)寄存器中,UART即會(huì)將數(shù)據(jù)自動(dòng)發(fā)送出去,見表即會(huì)將數(shù)據(jù)自動(dòng)發(fā)送出去,見表8.8地址地址UTXH0 0 x50000023UTXH1 0 x50004023UTXH2 0 x50008023【7.0】:存放要發(fā)送的數(shù)據(jù)(】:存放要發(fā)送的數(shù)據(jù)(8位)位)9、URXHn寄存器(寄存器(UART 接收緩沖寄存器)接收緩沖寄存器) UART接收到數(shù)據(jù)時(shí),接收到數(shù)據(jù)時(shí),cpu讀取這個(gè)寄存器,即可獲得接受數(shù)據(jù)讀取這個(gè)寄存器,即可獲得接受數(shù)據(jù)到的數(shù)據(jù),見表到的數(shù)據(jù),見表8.9URXH0 0 x50000027URXH1 0 x50
26、004027URXH2 0 x50008027【7.0】:存放接受到的數(shù)據(jù)(】:存放接受到的數(shù)據(jù)(8位)位)程序中:程序中:#define rUTXH0 (*(volatile unsigned char *)0 x50000023)#define rURXH0 (*(volatile unsigned char *)0 x50000027) 10、UBRDIVn(UART band rate divisor)功能:設(shè)置波特率發(fā)生器功能:設(shè)置波特率發(fā)生器n=0,1,2地址:地址: UBRDIV0: 0 x50000028 UBRDIV1: 0 x50004028 UBRDIV2: 0 x500
27、08028 見表見表8.10 UBRDIVn=(int)(PCLK/(bps*16)-1 UBRDIVn=(int)(UEXTCLK/(bps*16)-1#define rULCON0 (#define rULCON0 (* *(volatile unsigned (volatile unsigned * *)0 x50000000) /UART0)0 x50000000) /UART0行控制寄存器行控制寄存器#define rUCON0 (#define rUCON0 (* *(volatile unsigned (volatile unsigned * *)0 x50000004) /UA
28、RT0)0 x50000004) /UART0控制寄存器控制寄存器#define rUFCON0 (#define rUFCON0 (* *(volatile unsigned (volatile unsigned * *)0 x50000008) /UART0 FIFO)0 x50000008) /UART0 FIFO控制寄存器控制寄存器#define rUMCON0 (#define rUMCON0 (* *(volatile unsigned (volatile unsigned * *)0 x5000000c) /UART0 Modem)0 x5000000c) /UART0 Mode
29、m控制寄存器控制寄存器#define rUTRSTAT0 (#define rUTRSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x50000010) /UART0 Tx/Rx)0 x50000010) /UART0 Tx/Rx狀態(tài)寄存器狀態(tài)寄存器#define rUERSTAT0 (#define rUERSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x50000014) /UART0 Rx)0 x50000014) /UART0 Rx錯(cuò)誤狀態(tài)寄存器錯(cuò)誤狀態(tài)寄存器#de
30、fine rUFSTAT0 (#define rUFSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x50000018) /UART0 FIFO)0 x50000018) /UART0 FIFO狀態(tài)寄存器狀態(tài)寄存器#define rUMSTAT0 (#define rUMSTAT0 (* *(volatile unsigned (volatile unsigned * *)0 x5000001c) /UART0 Modem)0 x5000001c) /UART0 Modem狀態(tài)寄存器狀態(tài)寄存器#define rUBRDIV0 (#de
31、fine rUBRDIV0 (* *(volatile unsigned (volatile unsigned * *)0 x50000028) /UART0)0 x50000028) /UART0波特率因子寄存器波特率因子寄存器 實(shí)例實(shí)例1:使用:使用2410的的UART0實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受,從實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受,從UART0接受到接受到PC機(jī)發(fā)送的數(shù)據(jù)后,通過機(jī)發(fā)送的數(shù)據(jù)后,通過UART0發(fā)送到發(fā)送到PC機(jī),在終端上進(jìn)行顯示。波特率機(jī),在終端上進(jìn)行顯示。波特率115200,1位停止位,位停止位,無奇偶校驗(yàn),無奇偶校驗(yàn),8位數(shù)據(jù)位位數(shù)據(jù)位,使用查詢方式。使用查詢方式。 程序程序 舉例:舉
32、例:使用使用2410的的UART0實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受,從實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受,從UART0接接受到受到PC機(jī)發(fā)送的數(shù)據(jù)后,通過機(jī)發(fā)送的數(shù)據(jù)后,通過UART0發(fā)送到發(fā)送到PC機(jī),在終端上進(jìn)機(jī),在終端上進(jìn)行顯示。從行顯示。從UART0接收數(shù)據(jù),然后分別從接收數(shù)據(jù),然后分別從UART0發(fā)送出去。發(fā)送出去。 波特率波特率115200,1位停止位,無奇偶校驗(yàn),位停止位,無奇偶校驗(yàn),8位數(shù)據(jù)位位數(shù)據(jù)位,使用查使用查詢方式。詢方式。 1 1定義與定義與UARTUART相關(guān)的寄存器。相關(guān)的寄存器。#define rULCON0 (*(volatile unsigned *)0 x50000000) /UAR
33、T0行控制寄存器行控制寄存器#define rUCON0 (*(volatile unsigned *)0 x50000004) /UART0控制寄存器控制寄存器#define rUFCON0 (*(volatile unsigned *)0 x50000008) /UART0 FIFO控制寄存器控制寄存器#define rUMCON0 (*(volatile unsigned *)0 x5000000c) /UART0 Modem控制寄存器控制寄存器#define rUTRSTAT0 (*(volatile unsigned *)0 x50000010) /UART0 Tx/Rx狀態(tài)寄存器狀
34、態(tài)寄存器#define rUERSTAT0 (*(volatile unsigned *)0 x50000014) /UART0 Rx錯(cuò)誤狀態(tài)寄存器錯(cuò)誤狀態(tài)寄存器#define rUFSTAT0 (*(volatile unsigned *)0 x50000018) /UART0 FIFO狀態(tài)寄存器狀態(tài)寄存器#define rUMSTAT0 (*(volatile unsigned *)0 x5000001c) /UART0 Modem狀態(tài)寄存器狀態(tài)寄存器#define rUBRDIV0 (*(volatile unsigned *)0 x50000028) /UART0波特率因子寄存器波特率
35、因子寄存器#define rUTXH0 (*(volatile unsigned char *)0 x50000020) /發(fā)送緩沖寄存器發(fā)送緩沖寄存器#define rURXH0 (*(volatile unsigned char *)0 x50000024) /接收緩沖寄存器接收緩沖寄存器#define WrUTXH0 (*(volatile unsigned char*) 0 x500000020)#define RdURXH0 (*(volatile unsigned char *)0 x50000024)2 2對(duì)串口進(jìn)行初始化操作。對(duì)串口進(jìn)行初始化操作。參數(shù)參數(shù)pclkpclk為時(shí)鐘
36、源的時(shí)鐘頻率,為時(shí)鐘源的時(shí)鐘頻率,bandband為數(shù)據(jù)傳輸?shù)牟ㄌ芈省閿?shù)據(jù)傳輸?shù)牟ㄌ芈省?void Uart_Init(int pclk,int baud)void Uart_Init(int pclk,int baud) int i; int i; if(pclk = 0) if(pclk = 0) pclk = PCLK; pclk = PCLK; rUFCON0 = 0 x0; /UART0 FIFOrUFCON0 = 0 x0; /UART0 FIFO控制寄存器,控制寄存器,F(xiàn)IFOFIFO禁止禁止 rUFCON1 = 0 x0; /UART1 FIFOrUFCON1 = 0 x0;
37、 /UART1 FIFO控制寄存器,控制寄存器,F(xiàn)IFOFIFO禁止禁止 rUFCON2 = 0 x0; /UART2 FIFOrUFCON2 = 0 x0; /UART2 FIFO控制寄存器,控制寄存器,F(xiàn)IFOFIFO禁止禁止 rUMCON0 = 0 x0; /UART0 MODEMrUMCON0 = 0 x0; /UART0 MODEM控制寄存器,控制寄存器,AFCAFC禁止禁止 rUMCON1 = 0 x0; /UART1 MODEMrUMCON1 = 0 x0; /UART1 MODEM控制寄存器,控制寄存器,AFCAFC禁止禁止 /UART0/UART0 rULCON0 = 0 x
38、3; /rULCON0 = 0 x3; /行控制寄存器:正常模式,無奇偶校驗(yàn),行控制寄存器:正常模式,無奇偶校驗(yàn),1 1位停止位,位停止位,8 8位數(shù)據(jù)位。位數(shù)據(jù)位。 rUCON0 = 0 x245; rUCON0 = 0 x245; /控制寄存器控制寄存器 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); /波特率因子寄存器波特率因子寄存器 /UART1 rULCON1 = 0 x3; rUCON1 = 0 x245; /控制寄存器控制寄存器 rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 ); /波特率因子寄存器波特率因子寄存
39、器 /UART2 rULCON2 = 0 x3; rUCON2 = 0 x245; /控制寄存器控制寄存器 rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 ); /波特率因子寄存器波特率因子寄存器 for(i=0;i100;i+); void Uart_Select(int ch) whichUart = ch;3 3選擇通道選擇通道 whichUart為全局變量,指示當(dāng)前選擇的為全局變量,指示當(dāng)前選擇的UART通道,如用通通道,如用通道道0,則,則whichUart=04 4使用串口發(fā)送數(shù)據(jù)使用串口發(fā)送數(shù)據(jù) 使用串口發(fā)送一個(gè)字節(jié)的代碼如下:使用串口發(fā)送一個(gè)字節(jié)的
40、代碼如下:void Uart_SendByte(int data)void Uart_SendByte(int data) if(whichUart=0)if(whichUart=0) if(data = =n) if(data = =n) /如果輸入數(shù)據(jù)為換行如果輸入數(shù)據(jù)為換行while(!(rUTRSTAT0 & 0 x2while(!(rUTRSTAT0 & 0 x2);/);/判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行 Delay(10); Delay(10); /延時(shí),因?yàn)槌?jí)終端速度較慢延時(shí),因?yàn)槌?jí)終端速度較慢
41、 WrUTXH0 =r; (發(fā)送回車符)(發(fā)送回車符)(或者)(或者rUTXH0=r; ) while(!(rUTRSTAT0 & 0 x2); while(!(rUTRSTAT0 & 0 x2); /等待直到發(fā)送緩沖器不空等待直到發(fā)送緩沖器不空 Delay(10);Delay(10); WrUTXH0=data; (發(fā)送數(shù)據(jù))(或者(發(fā)送數(shù)據(jù))(或者rUTXH0=data; ) elsif(whichUart=1) if(data=n) /如果輸入數(shù)據(jù)為換行如果輸入數(shù)據(jù)為換行 while(!(rUTRSTAT1& 0 x2);/判斷發(fā)送緩沖器是否為空,不空則等待,空則
42、向下執(zhí)行)判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行) Delay(10); /延時(shí),因?yàn)槌?jí)終端速度較慢延時(shí),因?yàn)槌?jí)終端速度較慢 WrUTXH0 =r; (發(fā)送回車符)(或者(發(fā)送回車符)(或者rUTXH1=r; ) while(!(rUTRSTAT1 & 0 x2); /等待直到發(fā)送緩沖器不空等待直到發(fā)送緩沖器不空 Delay(10); WrUTXH0=data; (發(fā)送數(shù)據(jù))(或者(發(fā)送數(shù)據(jù))(或者rUTXH1=data; ) elsif(whichUart=2) if(data=n) /如果輸入數(shù)據(jù)為換行如果輸入數(shù)據(jù)為換行 while(!(rUTRSTAT2& 0 x2);/判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行)判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行) Delay(10); /延時(shí),因?yàn)槌?jí)終端速度較慢延時(shí),因?yàn)槌?jí)終端速度較慢 rUTXH2=r;(發(fā)送回車符)(或者(發(fā)送回車符)(或者WrUTXH0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年湖南省長沙市中考?xì)v史真題(原卷版)
- 2025年安檢排爆市場調(diào)研報(bào)告
- 安全生產(chǎn)標(biāo)準(zhǔn)化自查自評(píng)報(bào)告
- 化工企業(yè)安全生產(chǎn)管理制度匯編
- 幼兒園安全月活動(dòng)方案及總結(jié)
- 電焊機(jī)安全事故案例
- 三年行動(dòng)安全生產(chǎn)方案
- 國中小學(xué)生安全教育日
- 罪犯安全生產(chǎn)課件
- 2025至2030鹽霧測試儀行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國復(fù)印機(jī)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 暑假安全家長會(huì)4
- 瑞幸大學(xué)題目及答案
- 消防監(jiān)督檢查員崗位技能考核題庫
- 2024年安徽省泗縣衛(wèi)生局公開招聘試題帶答案
- 2025年云南省中考生物試卷真題(含標(biāo)準(zhǔn)答案)
- 2025年湖北武漢市青山區(qū)區(qū)管國有企業(yè)招聘筆試參考題庫含答案解析
- 空天融合飛行器設(shè)計(jì)-洞察及研究
- 2025年重慶市中考化學(xué)試卷真題(含標(biāo)準(zhǔn)答案)
- 2024年伊春市紀(jì)委監(jiān)委所屬事業(yè)單位招聘真題
- 2025至2030中國光電共封裝(CPO)行業(yè)投融資風(fēng)險(xiǎn)及發(fā)展前景分析報(bào)告
評(píng)論
0/150
提交評(píng)論