版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
主要內(nèi)容1324S3C2410簡介I/O口時鐘與定時器中斷5UART6DMA第8章UART8.1UART工作原理1、UART(UniversalAsynchronousReceiverandTransmitter)通用異步收發(fā)器,是廣泛使用的串行數(shù)據(jù)傳輸方式。2、串行數(shù)據(jù)傳輸接口標(biāo)準(zhǔn)RS232C是通用的串行數(shù)據(jù)傳輸接口標(biāo)準(zhǔn),常用DB9引腳,DB9引腳定義如下:3、串口之間的連接遠(yuǎn)距離:串口->調(diào)制解調(diào)器后連接需要連接串口的各個引腳,串口完全連接近距離:串口之間直接連接常用簡單連接(三線連接),只連接發(fā)送數(shù)據(jù)線,接收數(shù)據(jù)線,地線波特率9600,傳輸距離不超過15米簡單連接完全連接4、UART字符傳輸格式
UART以字符為單位進行數(shù)據(jù)傳輸,每個字符的傳輸格式如下,一幀數(shù)據(jù):
空閑位:高電平起始位:低電平數(shù)據(jù)位:5-8位校驗位:可選停止位:1或2位8.2S3C2410A的UART一、S3C2410UART端口簡介1、S3C2410提供3個獨立的異步串行端口UARTUART0,UART1,UART22、每個UART都可以運行于中斷模式或DMA模式,發(fā)出中斷請求和DMA請求實現(xiàn)在UART,CPU間的數(shù)據(jù)傳遞3、每個UART由波特率發(fā)生器、發(fā)送器、接收器以及控制單元組成。
UART數(shù)據(jù)傳輸過程:s2410UART的每個通道都有16字節(jié)的發(fā)送FIFO和16字節(jié)的接收FIFO。發(fā)送數(shù)據(jù)時,CPU先將數(shù)據(jù)寫入發(fā)送FIFO中,然后UART會自動將FIFO中的數(shù)據(jù)復(fù)制到“發(fā)送移位器”中,發(fā)送移位器將數(shù)據(jù)一位一位地發(fā)送到TXDn上。接收數(shù)據(jù)時,“接收移位器”將RXDn上的數(shù)據(jù)一位一位接收過來,然后復(fù)制到接收FIFO中,CPU即可從中讀取數(shù)據(jù)。
二、UART相關(guān)操作和模式包括數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率產(chǎn)生、回送模式、紅外模式和自動流控制1、數(shù)據(jù)發(fā)送數(shù)據(jù)的格式設(shè)置由ULCONn寄存器指定2、數(shù)據(jù)接收數(shù)據(jù)的格式設(shè)置由ULCONn寄存器指定3、自動流控制(AutoFlowControlAFC)兩個數(shù)據(jù)流控制信號nRTS(請求發(fā)送信號),nCTS(允許發(fā)送)自動流控制就是由nRTS和nCTS控制數(shù)據(jù)的發(fā)送注意:如UART與調(diào)制解調(diào)器相連,則必須禁止AFC
4、波特率發(fā)生器功能:為每個Uart的發(fā)送器和接收器提供時鐘波特率發(fā)生器操作:波特率時鐘=PCLK(UEXTCLK)/(16*16位因子)16位因子由波特率寄存器指定,UBRDIVnUBRDIVn=(int)(PCLK/(bps*16))-1UBRDIVn=(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)通信連接中的孤立錯誤。RXD與TXD直接相連發(fā)送的數(shù)據(jù)直接通過RXD接受,從而測試整個系統(tǒng)通過UCONn寄存器設(shè)置6、紅外模式s2410的UART支持紅外的發(fā)送和接受,通過ULCONn寄存器設(shè)置三、UART使用流程1、選擇涉及引腳位UART功能,GPH2~GPH7對應(yīng)三個UART的RXD,TXD引腳2、設(shè)置波特率,傳輸格式(多少個數(shù)據(jù)位,校驗位,和停止位等)3、選擇UART通道的工作模式位查詢,中斷或DMA模式4、發(fā)送寫入發(fā)送寄存器接受讀接收寄存器的值6、查詢狀態(tài)寄存器或設(shè)置中斷來了解數(shù)據(jù)是否發(fā)送完畢或是否接受完畢實例1:使用2410的UART0實現(xiàn)數(shù)據(jù)的發(fā)送和接受,從UART0接受到PC機發(fā)送的數(shù)據(jù)后,通過UART0發(fā)送到PC機,在終端上進行顯示。波特率115200,1位停止位,無奇偶校驗,8位數(shù)據(jù)位,使用查詢方式。四、與UART相關(guān)的寄存器UART行控制寄存器(ULCONn)UART控制寄存器(UCONn)UARTFIFO控制寄存器(UFCONn)UARTModem控制寄存器(UMCONn)UARTTX/RX狀態(tài)寄存器(UTRSTATn)UART發(fā)送緩沖寄存器(UTXHn)UART接收緩沖寄存器(URXHn)UART波特率因子寄存器(UBRDIVn)
四、與UART相關(guān)的寄存器1、UBRDIVn(UARTbandratedivisor)功能:設(shè)置波特率發(fā)生器n=0,1,2地址:UBRDIV0:0x50000028UBRDIV1:0x50004028UBRDIV2:0x50008028UBRDIVn=(int)(PCLK/(bps*16))-1UBRDIVn=(int)(UEXTCLK/(bps*16))-1#definerULCON0(*(volatileunsigned*)0x50000000)//UART0行控制寄存器#definerUCON0(*(volatileunsigned*)0x50000004)//UART0控制寄存器#definerUFCON0(*(volatileunsigned*)0x50000008)//UART0FIFO控制寄存器#definerUMCON0(*(volatileunsigned*)0x5000000c)//UART0Modem控制寄存器#definerUTRSTAT0(*(volatileunsigned*)0x50000010)//UART0Tx/Rx狀態(tài)寄存器#definerUERSTAT0(*(volatileunsigned*)0x50000014)//UART0Rx錯誤狀態(tài)寄存器#definerUFSTAT0(*(volatileunsigned*)0x50000018)//UART0FIFO狀態(tài)寄存器#definerUMSTAT0(*(volatileunsigned*)0x5000001c)//UART0Modem狀態(tài)寄存器#definerUBRDIV0(*(volatileunsigned*)0x50000028)//UART0波特率因子寄存器……voidUart_Init(intpclk,intbaud){inti;if(pclk==0)pclk=PCLK;rUFCON0=0x0;//UART0FIFO控制寄存器,F(xiàn)IFO禁止rUFCON1=0x0;//UART1FIFO控制寄存器,F(xiàn)IFO禁止rUFCON2=0x0;//UART2FIFO控制寄存器,F(xiàn)IFO禁止rUMCON0=0x0;//UART0MODEM控制寄存器,AFC禁止rUMCON1=0x0;//UART1MODEM控制寄存器,AFC禁止//UART0rULCON0=0x3;//行控制寄存器:正常模式,無奇偶校驗,1位停止位,8位數(shù)據(jù)位。rUCON0=0x245;//控制寄存器
rUBRDIV0=((int)(pclk/16./baud+0.5)-1);//波特率因子寄存器
……}1、ULCONn(UARTlinecontrol)UART行控制寄存器功能:設(shè)置傳輸格式地址:表8.1位【6】:紅外/正常模式選擇
0--正常模式;1--紅外模式位【5:3】:奇偶校驗?zāi)J竭x擇
0xx--無奇偶校驗;100--奇校驗;101--偶校驗110--強制校驗1;111--強制校驗0位【2】:停止位選擇
0--1個停止位;1—2個停止位位【1:0】:字長00—5位;01---6位;10---7位;11—8位Uart_Init函數(shù)中:rULCON0=0x3;//行控制寄存器:正常模式,無奇偶校驗,1位停止位,8位數(shù)據(jù)位。2、UCONn(UARTcontrol)UART控制寄存器功能:用于選擇UART時鐘源,設(shè)置UART中斷方式地址:表8.2位【10】:選擇使用的時鐘
0—使用PCLK1----使用UEXTCLK位【9】:發(fā)送中斷類型0—脈沖1---電平位【8】:接受中斷類型
0—脈沖1---電平位【7】:使能/禁止RX接收超時中斷
0—禁止1----使能位【6】:使能/禁止接收錯誤中斷(如幀錯誤,溢出錯誤)0—禁止1----使能位【5】:回送模式選擇
0---正常模式1----回送模式位【4】:選擇是否在一幀數(shù)據(jù)中發(fā)送間隔信號
0----不發(fā)送1------發(fā)送位【3:2】:選擇如何將TX數(shù)據(jù)發(fā)送到緩沖寄存器中00---禁止01---中斷方式或查詢方式10---DMA0,DMA3請求11----DMA1請求位【1:0】:選擇如何將RX數(shù)據(jù)接收到緩沖寄存器中00---禁止01---中斷方式或查詢方式10---DMA0,DMA3請求11----DMA1請求
rUCON0=(0<<10)|(1<<9)|(0<<8)|(0<<7)|(1<<6)|(0<<5)|(0<<4)|(0<<3)|(1<<2)|(1);或rUCON0=0x245;3、UFCONn寄存器(UARTFIFOCONTROL)UARTFIFO控制寄存器功能:用于設(shè)置是否使用FIFO,設(shè)置FIFO的觸發(fā)閾值地址:表8.3注意:不使用FIFO時,F(xiàn)IFO深度位1寄存器各位描述見表8.3本例中,不使用FIFO
rUFCON0=0x0;//UART0FIFO控制寄存器,F(xiàn)IFO禁止rUFCON1=0x0;rUFCON2=0x0;即發(fā)送FIFO中有多少個數(shù)據(jù)時產(chǎn)生中斷,接收FIFO中有多少個數(shù)據(jù)時產(chǎn)生中斷4、UMCONn(UARTmodemcontrol)UARTMODEM控制器功能:用于設(shè)置調(diào)制解調(diào)器相連的控制信號地址:表8.4位含義:表8.4關(guān)鍵:設(shè)置使用AFC,還是調(diào)制解調(diào)器,使用調(diào)制解調(diào)器則用軟件控制RTS等信號。程序中:AFC(自動流控制)禁止rUMCON0=0x0;//UART0MODEM控制寄存器,AFC禁止rUMCON01=0x0;5、URTSTATn寄存器(UARTTX/RXstatus)發(fā)送/接收狀態(tài)寄存器功能:用來指示發(fā)送和接收的狀態(tài),見表8.5地址:URTSTAT0->0x50000010URTSTAT1->0x50004010URTSTAT2->0x50008010位【1】:發(fā)送緩沖區(qū)空位當(dāng)發(fā)送緩沖區(qū)中沒有數(shù)據(jù)時,此位由硬件自動設(shè)為11---發(fā)送緩沖器空0----不空位【0】:接收緩沖區(qū)數(shù)據(jù)就緒位當(dāng)接收到數(shù)據(jù)時,此位由硬件自動設(shè)為11----接到數(shù)據(jù)0----未接到數(shù)據(jù)說明:查詢法實現(xiàn)串口數(shù)據(jù)發(fā)送和接收,主要時查詢這些位數(shù)據(jù)是否發(fā)送完畢,是否已經(jīng)接收到數(shù)據(jù)程序中(1)發(fā)送的查詢
while(!(rUTRSTAT0&0x2));
語句解釋:判斷UTRSTAT0[1]位是否為0,為0則條件為真,執(zhí)行while語句,為1則條件為假,執(zhí)行while語句下面的語句。引申:判斷發(fā)送緩沖器是否空,“不空”相應(yīng)為0,條件為真則繼續(xù)執(zhí)行while語句等待,“空”相應(yīng)位為1,條件為假,執(zhí)行while語句下面的語句。(2)接收的查詢
while(!(rUTRSTAT0&0x1))
語句解釋:判斷UTRSTAT0[0]是否為0,為‘0’則執(zhí)行while語句,等待,為‘1’則向下執(zhí)行引申:判斷接受緩沖器是否有數(shù)據(jù),無接受的數(shù)據(jù),繼續(xù)執(zhí)行while語句,等待,有接受數(shù)據(jù),向下執(zhí)行位【1】:發(fā)送緩沖區(qū)空位1---發(fā)送緩沖器空0----不空位【0】:接收緩沖區(qū)數(shù)據(jù)就緒位
1----接到數(shù)據(jù)0----未接到數(shù)據(jù)6、UERSTATn(UART錯誤狀態(tài)寄存器)見表8.6功能:反應(yīng)UART的錯誤狀態(tài)7、UFSTATn(UARTFIFO狀態(tài)寄存器)見表8.7功能:反應(yīng)FIFO狀態(tài)8、UTXHn寄存器(UART發(fā)送緩沖寄存器),cpu將數(shù)據(jù)寫入這個寄存器中,UART即會將數(shù)據(jù)自動發(fā)送出去,見表8.8地址UTXH00x50000023UTXH10x50004023UTXH20x50008023【7..0】:存放要發(fā)送的數(shù)據(jù)(8位)9、URXHn寄存器(UART接收緩沖寄存器)UART接收到數(shù)據(jù)時,cpu讀取這個寄存器,即可獲得接受數(shù)據(jù)到的數(shù)據(jù),見表8.9URXH00x50000027URXH10x50004027URXH20x50008027【7..0】:存放接受到的數(shù)據(jù)(8位)程序中:#definerUTXH0(*(volatileunsignedchar*)0x50000023)#definerURXH0(*(volatileunsignedchar*)0x50000027)
10、UBRDIVn(UARTbandratedivisor)功能:設(shè)置波特率發(fā)生器n=0,1,2地址:UBRDIV0:0x50000028UBRDIV1:0x50004028UBRDIV2:0x50008028見表8.10UBRDIVn=(int)(PCLK/(bps*16))-1UBRDIVn=(int)(UEXTCLK/(bps*16))-1#definerULCON0(*(volatileunsigned*)0x50000000)//UART0行控制寄存器#definerUCON0(*(volatileunsigned*)0x50000004)//UART0控制寄存器#definerUFCON0(*(volatileunsigned*)0x50000008)//UART0FIFO控制寄存器#definerUMCON0(*(volatileunsigned*)0x5000000c)//UART0Modem控制寄存器#definerUTRSTAT0(*(volatileunsigned*)0x50000010)//UART0Tx/Rx狀態(tài)寄存器#definerUERSTAT0(*(volatileunsigned*)0x50000014)//UART0Rx錯誤狀態(tài)寄存器#definerUFSTAT0(*(volatileunsigned*)0x50000018)//UART0FIFO狀態(tài)寄存器#definerUMSTAT0(*(volatileunsigned*)0x5000001c)//UART0Modem狀態(tài)寄存器#definerUBRDIV0(*(volatileunsigned*)0x50000028)//UART0波特率因子寄存器……實例1:使用2410的UART0實現(xiàn)數(shù)據(jù)的發(fā)送和接受,從UART0接受到PC機發(fā)送的數(shù)據(jù)后,通過UART0發(fā)送到PC機,在終端上進行顯示。波特率115200,1位停止位,無奇偶校驗,8位數(shù)據(jù)位,使用查詢方式。程序舉例:使用2410的UART0實現(xiàn)數(shù)據(jù)的發(fā)送和接受,從UART0接受到PC機發(fā)送的數(shù)據(jù)后,通過UART0發(fā)送到PC機,在終端上進行顯示。從UART0接收數(shù)據(jù),然后分別從UART0發(fā)送出去。
波特率115200,1位停止位,無奇偶校驗,8位數(shù)據(jù)位,使用查詢方式。
1.定義與UART相關(guān)的寄存器。#definerULCON0(*(volatileunsigned*)0x50000000)//UART0行控制寄存器#definerUCON0(*(volatileunsigned*)0x50000004)//UART0控制寄存器#definerUFCON0(*(volatileunsigned*)0x50000008)//UART0FIFO控制寄存器#definerUMCON0(*(volatileunsigned*)0x5000000c)//UART0Modem控制寄存器#definerUTRSTAT0(*(volatileunsigned*)0x50000010)//UART0Tx/Rx狀態(tài)寄存器#definerUERSTAT0(*(volatileunsigned*)0x50000014)//UART0Rx錯誤狀態(tài)寄存器#definerUFSTAT0(*(volatileunsigned*)0x50000018)//UART0FIFO狀態(tài)寄存器#definerUMSTAT0(*(volatileunsigned*)0x5000001c)//UART0Modem狀態(tài)寄存器#definerUBRDIV0(*(volatileunsigned*)0x50000028)//UART0波特率因子寄存器#definerUTXH0(*(volatileunsignedchar*)0x50000020)//發(fā)送緩沖寄存器#definerURXH0(*(volatileunsignedchar*)0x50000024)//接收緩沖寄存器#defineWrUTXH0(*(volatileunsignedchar*)0x500000020)#defineRdURXH0(*(volatileunsignedchar*)0x50000024)…2.對串口進行初始化操作。參數(shù)pclk為時鐘源的時鐘頻率,band為數(shù)據(jù)傳輸?shù)牟ㄌ芈?。voidUart_Init(intpclk,intbaud){inti;if(pclk==0)pclk=PCLK;
rUFCON0=0x0;//UART0FIFO控制寄存器,F(xiàn)IFO禁止rUFCON1=0x0;//UART1FIFO控制寄存器,F(xiàn)IFO禁止rUFCON2=0x0;//UART2FIFO控制寄存器,F(xiàn)IFO禁止
rUMCON0=0x0;//UART0MODEM控制寄存器,AFC禁止rUMCON1=0x0;//UART1MODEM控制寄存器,AFC禁止//UART0
rULCON0=0x3;//行控制寄存器:正常模式,無奇偶校驗,1位停止位,8位數(shù)據(jù)位。rUCON0=0x245;//控制寄存器rUBRDIV0=((int)(pclk/16./baud+0.5)-1);//波特率因子寄存器
//UART1
rULCON1=0x3;rUCON1=0x245;//控制寄存器rUBRDIV1=((int)(pclk/16./baud+0.5)-1);//波特率因子寄存器
//UART2
rULCON2=0x3;rUCON2=0x245;//控制寄存器rUBRDIV2=((int)(pclk/16./baud+0.5)-1);//波特率因子寄存器
for(i=0;i<100;i++);}
voidUart_Select(intch){whichUart=ch;}3.選擇通道whichUart為全局變量,指示當(dāng)前選擇的UART通道,如用通道0,則whichUart=04.使用串口發(fā)送數(shù)據(jù)使用串口發(fā)送一個字節(jié)的代碼如下:voidUart_SendByte(intdata){
if(whichUart==0){if(data==‘\n’){//如果輸入數(shù)據(jù)為換行while(!(rUTRSTAT0&0x2));//判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行Delay(10);//延時,因為超級終端速度較慢
WrUTXH0=‘\r’;(發(fā)送回車符))(或者rUTXH0=‘\r’;
)}while(!(rUTRSTAT0&0x2));//等待直到發(fā)送緩沖器不空Delay(10);
WrUTXH0=data;
(發(fā)送數(shù)據(jù))(或者rUTXH0=data;
)}elsif(whichUart==1){if(data==‘\n’){//如果輸入數(shù)據(jù)為換行while(!(rUTRSTAT1&0x2));//判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行)Delay(10);//延時,因為超級終端速度較慢WrUTXH0=‘\r’;(發(fā)送回車符))(或者rUTXH1=‘\r’;)}while(!(rUTRSTAT1&0x2));//等待直到發(fā)送緩沖器不空Delay(10);WrUTXH0=data;(發(fā)送數(shù)據(jù))(或者rUTXH1=data;)}elsif(whichUart==2){if(data==‘\n’){//如果輸入數(shù)據(jù)為換行while(!(rUTRSTAT2&0x2));//判斷發(fā)送緩沖器是否為空,不空則等待,空則向下執(zhí)行)Delay(10);//延時,因為超級終端速度較慢rUTXH2=‘\r’;(發(fā)送回車符))(或者WrUTXH0=‘\r’;)}while(!(rUTRSTAT2&0x2));//等待直到發(fā)送緩沖器不空Delay(10);WrUTXH0=data;(發(fā)送數(shù)據(jù))(或者rUTXH2=data;)}5、串口發(fā)送字符串voidUart_SendString(char*pt){while(*pt)Uart_SendByte(*pt++);}6、串口屏幕打印,串口發(fā)送數(shù)據(jù)voidUart_Printf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部門個人工作計劃
- 2024年汽車電子設(shè)備銷售及維修合同3篇
- 2024年版魚塘租賃經(jīng)營協(xié)議模板
- 2024年版離婚雙方權(quán)益保障合同模板版B版
- 小學(xué)教學(xué)計劃二年級
- 居住建筑及公共建筑建設(shè)項目節(jié)能評估報告書
- 2025年中國大黃提取物行業(yè)市場調(diào)研及未來發(fā)展趨勢預(yù)測報告
- 銷售客服工作計劃
- 2022初二語文教學(xué)工作計劃
- 行政文員個人工作報告
- 生物入侵與生物安全智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 《公路工程集料試驗規(guī)程》JTG-3432-2024考核試題及答案文檔
- 常見的排序算法-冒泡排序 課件 2023-2024學(xué)年浙教版(2019)高中信息技術(shù)選修1
- (高清版)TDT 1031.6-2011 土地復(fù)墾方案編制規(guī)程 第6部分:建設(shè)項目
- 園林綠化工培訓(xùn)課件2
- 鄰里商業(yè)中心案例研究:方洲鄰里中心、新加坡
- 2024年02月上海滬劇藝術(shù)傳習(xí)所(上海滬劇院)招考聘用筆試近6年高頻考題難、易錯點薈萃答案帶詳解附后
- 婚姻家庭關(guān)系心理講座
- 三叉苦種植技術(shù)規(guī)程-征求意見稿
- 七上-動點、動角問題12道好題-解析
- 2024年九省聯(lián)考新高考 數(shù)學(xué)試卷(含答案解析)
評論
0/150
提交評論