第六章 ARM9_串口UART及編程.ppt_第1頁
第六章 ARM9_串口UART及編程.ppt_第2頁
第六章 ARM9_串口UART及編程.ppt_第3頁
第六章 ARM9_串口UART及編程.ppt_第4頁
第六章 ARM9_串口UART及編程.ppt_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六章 S3C2410的串口UART及編程,6.1 S3C2410的串口UART概述 6.1.1 S3C2410異步串行通信(UART)單元 S3C2410 UART單元提供3個獨立的異步串行通信接口,皆可工作于查詢、中斷和DMA模式。使用系統(tǒng)時鐘最高波特率達230. 4 kb/s,如果使用外部設備提供的時鐘,可以達到更高的速率。每一個UART單元包含一個16字節(jié)的FIFO(First Input First Output,先進先出移位寄存器),用于數(shù)據(jù)的接收和發(fā)送。 S3C2410 UART支持可編程波特率、紅外發(fā)送/接收( UART2 )、1個或2個停止位、5位/6位/7位/8位數(shù)據(jù)寬度和

2、奇偶校驗。,6.1.2 波特率的產生 波特率由一個專用的UART波特率分頻寄存器(UBRDIVn)控制,UBRDIVn值計算公 如下: UBRDIVn=(int)ULK/(波特率 16)1 或者 UBRDIVn=(int) PLK/(波特率 16)1 式中:時鐘選用ULK還是PLK由UART控制寄存器UCONn10的狀態(tài)決定。如果UCONn10=0,則用PLK作為波特率發(fā)生器的時鐘源頻率;否則選用ULK作為波特率發(fā)生器的時鐘源頻率。UBRDIVn的值必須在1(2161)之間。 例如:若ULK或者PLK等于40 MHz,當波特率為115200 b/s時,則 UBRDIVn=(int)40 000

3、 000/(115 200 16)一1=int(21. 7)1= 211=20,6.1.3 UART通信操作 下面簡略介紹UART操作,關于數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產生、波特率產生、查詢檢測模式、紅外模式的詳細介紹,參見下面6.3節(jié)。 發(fā)送數(shù)據(jù)幀是可編程的。一個數(shù)據(jù)幀包含1個起始位、58個數(shù)據(jù)位、1個可選的奇偶校驗位和12位停止位,停止位通過行控制寄存器ULCONn配置。 與發(fā)送數(shù)據(jù)幀類似,接收數(shù)據(jù)幀也是可編程的。接收幀由1個起始位、58個數(shù)據(jù)位、l個可選的奇偶校驗位以及12位行控制寄存器ULCONn中設定的停止位組成。接收器還可以檢測溢出錯、奇偶校驗錯、幀錯誤和傳輸中斷,每一個錯誤均可以設置

4、一個錯誤標志。, 溢出錯誤(overrun error):指已接收到的數(shù)據(jù)在讀取之前被新接收的數(shù)據(jù)覆蓋; 奇偶校驗錯:指接收器檢測到的校驗和與設置的不符; 幀錯誤:指沒有接收到有效的停止位; 傳輸中斷:表示接收數(shù)據(jù)RxDn保持邏輯0超過一幀的傳輸時間。 在FIFO模式下,如果RxFIFO非空,而在3個字的傳輸時間內沒有接受到數(shù)據(jù),則產生超時。,6.2 UART的控制寄存器 6.2.1 UART行控制寄存器ULCONn 該寄存器的位6決定是否使用紅外模式,位5、位4和位3決定校驗方式,位2決定停止位長度,位1和位0決定每幀的數(shù)據(jù)位數(shù)。具體如下: ULCONn7 保留; ULCONn6 紅外線模式

5、,0:正常模式;1:紅外線模式; ULCONn5:3 校驗模式,0 xx:無校驗;100:奇校驗;101:偶校驗; ULCONn2 停止位,0:一個停止位;1:二個停止位; ULCONn1:0 數(shù)據(jù)位,00:5位;01:6位;10:7位;11:8位。,6.2.2 UART控制寄存器UCONn 該寄存器決定UART的各種模式。 UCONn10 1:ULK做波特率發(fā)生器;0:PLK做波特率發(fā)生器。 UCONn9 1:Tx中斷電平觸發(fā);0:Tx中斷脈沖觸發(fā)。 UCONn8 1:Rx中斷電平觸發(fā);0:Rx中斷脈沖觸發(fā)。 UCONn7 1:接收超時中斷允許;0:接收超時中斷禁止。 UCONn6 1:產生

6、接收錯誤中斷;0:不產生接收錯誤中斷。 UCONn5 l:發(fā)送直接傳給接收方式(loopback);0:正常模式。 UCONn4 1:發(fā)送間斷信號;0:正常模式發(fā)送。,UCONn3:2 發(fā)送模式選擇: 00:禁止發(fā)送; 01:中斷或查詢模式; 10:DMA0請求(UART0 ) , DMA3請求(UART2); 11:DMAl請求(UART1)。 UCONn1:0 接收模式選擇。 00:禁止接收; 01:中斷或查詢模式; 10 : DMA0請求UART0,DMA2請求UART2; 11:DMAl請求UART1。,6.2.3 UART FIFO控制寄存器UFCONn UFCONn7:6 00:T

7、x FIFO寄存器中有0字節(jié)就觸發(fā)中斷; 01:Tx FIFO寄存器中有4字節(jié)就觸發(fā)中斷; 10:Tx FIFO寄存器中有8字節(jié)就觸發(fā)中斷; 11:Tx FIFO寄存器中有12字節(jié)就觸發(fā)中斷。 UFCONn5:4 00:Rx FIFO寄存器中有4字節(jié)就觸發(fā)中斷; 01:Rx FIFO寄存器中有8字節(jié)就觸發(fā)中斷; 10:Rx FIFO寄存器中有12字節(jié)就觸發(fā)中斷; 11:Rx FIFO寄存器中有16字節(jié)就觸發(fā)中斷。,UFCONn3 保留。 UFCONn2 1: FIFO復位清零Tx FIFO;0 : FIFO復位不清零TxFIFO。 UFCONn1 1: FIFO復位清零Rx FIFO;0:F1

8、FO復位不清零RxFIFO。 UFCONn0 1:允許FIFO功能;0:禁止FIFO功能。,6.2.4 UART MODEM控制寄存器UMCONn UMCONn7:5 保留,必須全為0。 UMCONn4 1:允許使用AFC模式;0:禁止使用AFC模式。 UMCONn3 保留,必須全為0。 UMCONn0 1:激活rRTS;0:不激活rRTS。 6.2.5 發(fā)送寄存器UTXH和接收寄存器URXH 這兩個寄存器存放發(fā)送和接收的數(shù)據(jù),當然只有1字節(jié)(8位數(shù)據(jù))。需要注意的是,在發(fā)生溢出錯誤時,接收的數(shù)據(jù)必須被讀出來,否則會引發(fā)下次溢出錯誤。,6.2.6 發(fā)送和接收狀態(tài)寄存器UTRSTATn UTRS

9、TATn發(fā)送和接收狀態(tài)寄存器包括 UTRSTAT0, UTRSTAT1 and UTRSTAT2 UTRSTATn 寄存器各位定義: UTRSTATn 1 發(fā)送緩沖器空標志 0 =不空; 1 = 空。 UTRSTATn 0 接收緩沖器有接收數(shù)據(jù)標志 0 =空; 1 = 接收緩沖器有數(shù)據(jù)。 6.2.7 波特率分頻寄存器UBRDIV 波特率分頻寄存器UBRDIV的定義和使用在6.1.2中已敘述,不再重復。 6.2.8 UART單元各寄存器的定義 在隨書提供的軟件包2410test中,在2410addr.h文件中有關于UART單元各寄存器的定義。,/UART #define rULCON0 ( *

10、(volatile unsigned * )0 x50000000)/UART 0 Line control #define rUCON0 ( * (volatile unsigned * )0 x50000004)/UART 0 control #define rUFCON0 ( * (volatile unsigned * )0 x50000008)/UART 0 FIFO control #define rUMCON0 ( * (volatile unsigned * )0 x5000000c)/UART 0 Modem control #define rUTRSTAT0 ( * (vo

11、latile unsigned * )0 x50000010)/UART 0 Tx/Rx status #define rUERSTAT0 ( * (volatile unsigned * )0 x50000014)/UART 0 Rx error status #define rUFSTAT0 ( * (volatile unsigned * )0 x50000018)/UART 0 FIFO status,#define rUMSTAT0 ( * (volatile unsigned * )0 x5000001c)/UART 0 Modem status #define rUBRDIV0

12、( * (volatile unsigned * )0 x50000028)/UART 0 Baud rate diviaor #define rULCON1 ( * (volatile unsigned * )0 x50004000)/UART 1 Line control #define rUCON1 ( * (volatile unsigned * )0 x50004004)/UART 1 Control #define rUFCON1 ( * (volatile unsigned * )0 x50004008)/UART 1 FIFO control #define rUMCON1 (

13、 * (volatile unsigned * )0 x5000400c)/UART 1 Modem control #define rUTRSTAT1 ( * (volatile unsigned * )0 x50004010)/UART 1 Tx/Rx status,#define rUERSTAT1 ( * (volatile unsigned * )0 x50004014)/UART 1 Rx error status #define rUFSTAT1 ( * (volatile unsigned * )0 x50004018)/UART 1 FIFO status #define r

14、UMSTAT1 ( * (volatile unsigned * )0 x5000401c)/UART 1 Modem status #define rUBRDIV1 ( * (volatile unsigned * )0 x50004028)/UART 1 Baud rate divisor #define rULCON2 ( * (volatile unsigned * )0 x50008000)/UART 2 Line control #define rUCON2 ( * (volatile unsigned * )0 x50008004)/UART 2 Control #define

15、rUFCON2( * (volatile unsigned * )0 x50008008)/UART 2 FIFO control,#define rUMCON2 ( * (volatile unsigned * )0 x5000800c)/UART 2 Modem control #define rUTRSTAT2 ( * (volatile unsigned * )0 x50008010)/UART 2 Tx/Rx status #define rUERSTAT2 ( * (volatile unsigned * )0 x50008014)/UART 2 Rx error status #

16、define rUFSTAT2 ( * (volatile unsigned * )0 x50008018)/UART 2 FIFO status #define rUMSTAT2 ( * (volatile unsigned * )0 x5000801c)/UART 2 Modem status #define rUBRDIV2 ( * (volatile unsigned * )0 x50008028)/UART 2 Baud rate divisor #ifdef_BIG_ENDIAN,#define rUTXH0 ( * (volatile unsigned char * )0 x50

17、000023)/UART 0 Transmission Hold #define rURXH0 ( * (volatile unsigned char * )0 x50000027)/UART 0 Receive buffer #define rUTXH1 ( * (volatile unsigned char * )0 x50004023)/UART 1 Transmission Hold #define rURXH1 ( * (volatile unsigned char * )0 x50004027)/UART 1 Receive buffer #define rUTXH2 ( * (v

18、olatile unsigned char * )0 x50008023)/UART 2 Transmission Hold,#define rURXH2 ( * (volatile unsigned char * )0 x50008027)/UART 2 Receive buffer #define WrUTXH0(ch) ( * (volatile unsigned char * )0 x50000023)=(unsigned char)(ch) #define RdURXH0() ( * (volatile unsigned char * )0 x50000027) #define Wr

19、UTXH1(ch) ( * (volatile unsigned char * )0 x50004023)=(unsigned char)(ch) #define RdURXH1() ( * (volatile unsigned char * )0 x50004027) #define WrUTXH20(ch) ( * (volatile unsigned char * )0 x50008023)=(unsigned char)(ch) #define RdURXH2() ( * (volatile unsigned char * )0 x50008027) #difine UTXH0 (0

20、x50000020+3) /Byte_access address by DMA #define URXH0 (0 x50000024+3) #difine UTXH1 (0 x50004020+3),#define URXH1 (0 x50004024+3) #difine UTXH2 (0 x50008020+3 ) #define URXH2 (0 x50008024+3) #else/Little Endian #define rUTXH0 ( * (volatile unsigned char * )0 x50000020)/UART 0 Transmission Hold #def

21、ine rURXH0 ( * (volatile unsigned char * )0 x50000024)/UART 0 Receive buffer #define rUTXH1 ( * (volatile unsigned char * )0 x50004020)/UART 1 Transmission Hold #define rURXH1 ( * (volatile unsigned char * )0 x50004024)/UART 1 Receive buffer #define rUTXH2 ( * (volatile unsigned char * )0 x50000820)

22、/UART 2 Transmission Hold,#define rURXH2 ( * (volatile unsigned char * )0 x50008024)/UART 2 Receive buffer #define WrUTXH0(ch) ( * (volatile unsigned char * )0 x50000020)=(unsigned char)(ch) #define RdURXH0() ( * (volatile unsigned char * )0 x50000024) #define WrUTXH1(ch) ( * (volatile unsigned char

23、 * )0 x50004020)=(unsigned char)(ch) #define RdURXH1() ( * (volatile unsigned char * )0 x50004024) #define WrUTXH2(ch) ( * (volatile unsigned char * )0 x50008020)=(unsigned char)(ch) #define RdURXH2() ( * (volatile unsigned char * )0 x50008024) #difine UTXH0 (0 x50000020+3) /Byte_access address by D

24、MA,#define URXH0 (0 x50000024+3) #difine UTXH1 (0 x50004020+3) #define URXH1 (0 x50004024+3) #difine UTXH2 (0 x50008020+3 ) #define URXH2 (0 x50008024+3) #endif,6.3 UART通信程序編寫 6.3.1 通信程序編寫步驟 UART通信程序可以采用查詢、中斷和DMA模式。我們通過使用較多的中斷方式來介UART通信程序的編寫。簡單做法是,UART通信程序的編寫參照例子程序。 選通道,通過函數(shù)Uart_Select();選UART0UART2

25、; 選波特率和波特率發(fā)生器時鐘,選波特率通過函數(shù)Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)來進行。時鐘選UCLK ,rUCON0|=0 x400;時鐘選PCLK ,rUCON0, 通信控制字(rUCON0)設定,如時鐘選ULK做波特率發(fā)生器;Tx中斷脈沖觸發(fā),Rx中斷脈沖觸發(fā);接收超時中斷允許;產生接收錯誤中斷;正常模式發(fā)送: rUCON0|= (TX_INTTYPE9)|(RX_INTTYPE8)|(07)|(06)|(05)|(04)|(12)|(1); I/O口初始化,因為UART通信使用H口的第二功能,所以

26、H口要上拉禁止:rGPHUP|=0 x1ff。H口控制寄存器nRTS1,nCTS1功能使能,rGPHCON rINTSUBMSK=(BIT_SUB_TXD0); 進入中斷后,先屏蔽發(fā)送和接收中斷,防止新來中斷干擾我們的正常發(fā)送和接收,正常發(fā)送和接收結束后,清中斷掛起和中斷源掛起寄存器:ClearPending(BIT_UART0),rSUBSRCPND=(BIT_SUB_TXD0(發(fā)送),rSUBSRCPND=(BIT_SUB_RXD0|BIT_SUB_ERR0)(接收); 取消中斷屏蔽,等下一次中斷。 6.3.2 通信程序編寫示例 下面給出的幾個函數(shù),是查詢方式URAT通信常用到的主要函數(shù),

27、包括URAT初始化,字符的發(fā)送、接收函數(shù),希望大家仔細閱讀,理解每一行的含義。,1, UART 通信,采用查詢方式: /引用頭文件 #include 2410addr.h #include 2410lib.h #include option.h #include def.h #include #include #include #include #include ,/函數(shù)聲明 void Uart_Init(int pclk,int baud); char Uart_Getch(void); char Uart_GetKey(void); void Uart_GetString(char *st

28、ring); void Uart_SendByte(int data); void Uart_SendString(char *pt); void Uart_Select(int ch); /- / 串口初始化,輸入PCLK,輸入波特率 /-,static int whichUart=0; void Uart_Init(int pclk,int baud) int i; if(pclk = 0) pclk = PCLK; rUFCON0 = 0 x0; /UART channel 0 FIFO control register, FIFO disable rUFCON1 = 0 x0; /UA

29、RT channel 1 FIFO control register, FIFO disable rUFCON2 = 0 x0; /UART channel 2 FIFO control register, FIFO disable rUMCON0 = 0 x0; /UART chaneel 0 MODEM control register, AFC disable rUMCON1 = 0 x0; /UART chaneel 1 MODEM control register, AFC disable,/UART0 rULCON0 = 0 x3; /Line control register :

30、 Normal,No parity,1 stop,8 bits. / 0 0 0 0 0 0 1 1 rUCON0 = 0 x245; / Control register / 10 9 8 7 6 5 4 3:2 1:0 / Clock Sel, Tx Int, Rx Int, Rx Time Out, Rx err, Loop-back, Send break, Transmit Mode, Receive Mode 0 1 0 0 1 0 0 0 1 0 1 / PCLK ,Level Pulse Disable Generate Normal Normal Interrupt or P

31、olling / rUBRDIV0=( (int)(pclk/16./baud) -1 ); /Baud rate divisior register 0 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); /Baud rate divisior register 0,/UART1 rULCON1 = 0 x3; rUCON1 = 0 x245; rUBRDIV1=( (int)(pclk/16./baud) -1 ); /UART2 rULCON2 = 0 x3; rUCON2 = 0 x245; rUBRDIV2=( (int)(pclk/16./baud)

32、 -1 ); for(i=0;i100;i+); /- / 選擇串口通道 /- void Uart_Select(int ch) whichUart = ch; ,/- / 等待發(fā)送移位寄存器空 /- void Uart_TxEmpty(int ch) if(ch=0) while(!(rUTRSTAT0 /Wait until tx shifter is empty. ,/- / 接收串口一字節(jié)數(shù)據(jù),注意 RdURXH0(),RdURXH1(),RdURXH2() 的使用 /- char Uart_Getch(void) if(whichUart=0) while(!(rUTRSTAT0 ,

33、else if(whichUart=2) while(!(rUTRSTAT2 ,else if(whichUart=1) if(rUTRSTAT1 ,/- / 串口得到字符串 /- void Uart_GetString(char *string) char *string2 = string; char c; while(c = Uart_Getch()!=r) if(c=b) if( (int)string2 (int)string ) Uart_Printf(b b); string-; ,else *string+ = c; Uart_SendByte(c); *string=0; U

34、art_SendByte(n); ,/- / 得到串口初始號 /- int Uart_GetIntNum(void) char str30; char *string = str; int base = 10; int minus = 0; int result = 0; int lastIndex; int i; Uart_GetString(string);,if(string0=-) minus = 1; string+; if(string0=0 ,if(stringlastIndex=h | stringlastIndex=H ) base = 16; stringlastIndex

35、 = 0; lastIndex-; if(base=10) result = atoi(string); result = minus ? (-1*result):result; ,else for(i=0;i=lastIndex;i+) if(isalpha(stringi) if(isupper(stringi) result = (result4) + stringi - A + 10; else result = (result4) + stringi - a + 10; ,else result = (result4) + stringi - 0; result = minus ?

36、(-1*result):result; return result; /- / 串口發(fā)送字節(jié) /- void Uart_SendByte(int data) if(whichUart=0), if(data=n) while(!(rUTRSTAT0 else if(whichUart=1) if(data=n), while(!(rUTRSTAT1 else if(whichUart=2) if(data=n), while(!(rUTRSTAT2 ,/- / 串口發(fā)送字符串 /- void Uart_SendString(char *pt) while(*pt) Uart_SendByte(

37、*pt+); 2,UART0 中斷方式發(fā)送和接收 /- / UART0中斷方式發(fā)送和接收 /-,void Test_Uart0_Int(void) Uart_Port_Set(); Uart_Select(0); /* UART0 Tx test with interrupt */ isTxInt=1; uart0TxStr=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-UART0 Tx interrupt test is good!rn; Uart_Printf(Uart channel 0 Tx Interrupt Testn);,pISR_UART0=(uns

38、igned)Uart0_TxInt; rULCON0=(0 UCLK fuction rUCON0|= (TX_INTTYPE9)|(RX_INTTYPE8)|(07)|(06)|(05)|(04)|(12)|(1); /Clock,Tx:Def,Rx:Def,Rx timeout:x,Rxerror int:x,Loop-back:x,Send break:x,Tx:int,Rx:int Uart_TxEmpty(0); /wait until tx buffer is empty. rINTMSK=(BIT_UART0); rINTSUBMSK=(BIT_SUB_TXD0); while(

39、isTxInt);,/* UART0 Rx test with interrupt */ isRxInt=1; uart0RxStr=(char *)UARTBUFFER; Uart_Printf(nUart channel 0 Rx Interrupt Test:n); Uart_Printf(After typing ENTER key, you will see the characters which was typed by you.);,Uart_Printf(nTo quit, press ENTER key.!n); Uart_TxEmpty(0); /wait until t

40、x buffer is empty. pISR_UART0 =(unsigned)Uart0_RxIntOrErr; rULCON0=(0 UCLK fuction rUCON0|= (TX_INTTYPE9)|(RX_INTTYPE8)|(07)|(16)|(05)|(04)|(12)|(1); /Clock,Tx:pulse,Rx:pulse,Rx:timeout:x,Rx,errorint:o,Loop-back:x,Sendbreak:x,Tx:int,Rx:int / Clear Int Pending and Unmask ClearPending(BIT_UART0); rINT

41、MSK=(BIT_UART0);,rSUBSRCPND=(BIT_SUB_TXD0|BIT_SUB_RXD0|BIT_SUB_ERR0); rINTSUBMSK=(BIT_SUB_RXD0|BIT_SUB_ERR0); while(isRxInt); rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_ERR0); rINTMSK|=(BIT_UART0); Uart_Printf(%sn,(char *)UARTBUFFER); Uart_Port_Return(); /- /UART發(fā)送和接收用到的I/O口保存和初始化 /-,void Uart_Port_Set(void)

42、 /Push UART GPIO port configuration save_rGPHCON=rGPHCON; save_rGPHDAT=rGPHDAT; save_rGPHUP=rGPHUP; /Configure UART port rGPHCON /SUBINT ALL MASK /Push Uart control registers,save_ULCON0=rULCON0; save_UCON0=rUCON0; save_UFCON0=rUFCON0; save_UMCON0=rUMCON0; save_ULCON1=rULCON1; save_UCON1 =rUCON1; sa

43、ve_UFCON1=rUFCON1; save_UMCON1=rUMCON1; save_ULCON2=rULCON2; save_UCON2 =rUCON2; save_UFCON2=rUFCON2; save_UMCON2=rUMCON2; /Initialize UART1,2 port ,/- / UART發(fā)送和接收結束,用到的I/O口恢復原來狀態(tài) /- void Uart_Port_Return(void) /Pop UART GPIO port configuration rGPHCON=save_rGPHCON; rGPHDAT=save_rGPHDAT; rGPHUP=save

44、_rGPHUP; /Pop Uart control registers rULCON0=save_ULCON0; rUCON0 =save_UCON0; rUFCON0=save_UFCON0; rUMCON0=save_UMCON0; rULCON1=save_ULCON1; rUCON1 =save_UCON1;,rUFCON1=save_UFCON1; rUMCON1=save_UMCON1; rULCON2=save_ULCON2; rUCON2 =save_UCON2; rUFCON2=save_UFCON2; rUMCON2=save_UMCON2; /- / UART發(fā)送和接收

45、使用UCLK,并計算rUBRDIV0和設定波特率 /-,void Uart_Uclk_En(int ch,int baud) /* int ch, baud; Uart_Printf(nSelect UART channel0:UART0/1:UART1/2:UART2:n); ch=Uart_GetIntNum(); Uart_Printf(nSelect baud rate :n); baud=Uart_GetIntNum(); */ if(ch = 0) Uart_Select(0); rUCON0|=0 x400;/ Select UCLK rUBRDIV0=( (int)(UCLK/

46、16./baud) -1 );/Baud rate divisior register Uart_Printf(UCLK is enabled by UART0.n); ,else if(ch=1) Uart_Select(1); rUCON1|=0 x400;/ Select UCLK rUBRDIV1=( (int)(UCLK/16./baud) -1 );/Baud rate divisior register Uart_Select(0); Uart_Printf(UCLK is enabled by UART1.n); else Uart_Select(2); rUCON2|=0 x

47、400;/ Select UCLK rUBRDIV2=( (int)(UCLK/16./baud) -1 );/Baud rate divisior register Uart_Select(0); Uart_Printf(UCLK is enabled by UART2.n); /for(i=0;i100;i+);/ For the satble operation ,/- / UART發(fā)送和接收使用PCLK,并計算rUBRDIV0和設定波特率 /- void Uart_Pclk_En(int ch, int baud) /* int ch, baud; Uart_Printf(nSelect UART channel0:UART0/1:UART1/2:UART2:n); ch=Uart_GetIntNum(); Uart_Printf(nSelect baud rate :n); baud=Uart_GetIntNum(); */ if(ch = 0) Uart_Select(0); rUCON0 ,else if(ch=1) Uart_Select(1); rUCON1|=0 x3ff;/ Select PCLK rUBRDIV1=( (int)(PCLK/16./baud) -1 );/Baud rate divisior re

溫馨提示

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

評論

0/150

提交評論