NXPLPC1788之UART用法_第1頁
NXPLPC1788之UART用法_第2頁
NXPLPC1788之UART用法_第3頁
NXPLPC1788之UART用法_第4頁
NXPLPC1788之UART用法_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、在工作中經常將平臺的串口和PC機連接,通過串口打印信息進行程序調試。LPC1788共有5個串口Uart0-Uart4,跟具開發板的資源,將使用Uart2進行簡單的串口輸出和輸入中斷的操作。開發板上使用74HC4052多路開關對UART2的RXD和TXD進行選擇,使用SP3243E進彳f3.0V到5.5V的RS-232電平轉換。查看手冊配置好相關的跳線帽,保證DB口上的串口輸出采用的是Uart2。下面介紹Uart相關系統配置和Uart模塊的配置。Uart的時鐘采用PCLK,我們配置系統的CCLK為120M,PCLK為60M,后面設置串口的波特率就采用PLCK進行計算要使用串口2的功能需要使能系統

2、時鐘控制PCONP,以及配置GPIO管腳為Uart2的RXD和TXD功能。要實現通信,我們需要設置數據的格式,包括傳輸的波特率,數據長度,停止位,以及校驗等,這些數據在線性控制寄存器UnLCR中控制。波特率的產生需要經過分數波特率分頻器UnFDR和主分頻器DLL,DLM。計數公式如下圖。PCLKWWW/心茂(25axCir)LM十CmLi根據計算,當PLCK=60M,波特率為115200,數據位為8,停止位為1,無校驗,則DLL=22,DLM=0,DivAddVal=1,MulVal=2,線性控制寄存器中的值為0x3要通過串口發送數據時,只需要把要發送的數據寫入發送保持寄存器UnTHR,系統就

3、會通過移位寄存器將數據通過串口發送。為了了解系統的發送狀態,還需要線性狀態寄存器UnLSR,例如程序中使用I該寄存器的第5位判斷發慫保持寄存器是否為空,防止數據溢出。如果需要進行串口的中斷操作,還需要對串口中斷進行配置,如串口中斷使能寄存器UnIER和串口中斷標識寄存器UnIIR。程序中使用到了串口2的接收中斷,為此在中斷使能設置寄存器ISER中使能UART2中斷,在串口中斷使能寄存器UnIER中使能串口的接收中斷,該中斷同時使能了字符接收超時中斷。UART2的RXD管腳接收到數據將存放在FIFO中,程序中配置接收FIFO的觸發條件為1個字節,即有接收到數據就觸發。中斷觸發后,我們可以根據中斷

4、標識寄存器UnIIR判斷到底是串口的接收中斷,超時中斷,發送中斷等。進入中斷以后,接收中斷和超時中斷,都可以通過讀取接收緩存寄存器UnRBR進行中斷復位,使下次中斷可以發生。下面的程序例子,程序開始打印菜單,PC用口軟件發送一個字節數據給開發板,開發板接收到數據后將讀取UnRBR前后的中斷標識寄存器IIR的值,以及接收到的值發送回給PC。如果是0x5a或者0xa5還可以打開或者關閉LED指示燈。#defineCCLK120000000#definePCLK60000000#definerFIOIDIR(*(volatileunsigned*)(0x20098020)#definerFIO1MA

5、SK(*(volatileunsigned*)(0x20098030)#definerFIO1PIN(*(volatileunsigned*)(0x20098034)#definerFIO1SET(*(volatileunsigned*)(0x20098038)#definerFIO1CLR(*(volatileunsigned*)(0x2009803c)#definerISER0(*(volatileunsigned*)(0xE000E100)#definerCLKSRCSEL(*(volatileunsigned*)(0x400FC10C)/時鐘源選擇寄存器#definerPLL0CON(

6、*(volatileunsigned*)(0x400FC080)/PLL0控制寄存器#definerPLL0CFG(*(volatileunsigned*)(0x400FC084)/PLL0配置寄存器#definerPLL0STAT(*(volatileunsigned*)(0x400FC088)/PLL0狀態寄存器#definerPLL0FEED(*(volatileunsigned*)(0x400FC08C)/PLL0饋送寄存器#definerPLL1CON(*(volatileunsigned*)(0x400FC0A0)#definerPLL1CFG(*(volatileunsigned

7、*)(0x400FC0A4)#definerPLL1STAT(*(volatileunsigned*)(0x400FC0A8)#definerPLL1FEED(*(volatileunsigned*)(0x400FC0AC)#definerCCLKSEL(*(volatileunsigned*)(0x400FC104)/CPU時鐘選擇寄存器#definerUSBCLKSEL(*(volatileunsigned*)(0x400FC108)/USB時鐘選擇寄存器#definerPCLKSEL(*(volatileunsigned*)(0x400FC1A8)/外設時鐘寄存器#definerPCON

8、(*(volatileunsigned*)(0x400FC0C0)#definerPXCONP(*(volatileunsigned*)(0x400FC0C4)#definerSCS(*(volatileunsigned*)(0x400FC1A0)/系統控制和狀態寄存器#definerCLKOUTCFG(*(volatileunsigned*)(0x400FC1C8)#definerIOCON_P0_10(*(volatileunsigned*)(0x4002C028)#definerIOCONP011(*(volatileunsigned*)(0x4002C02C)#definerPCONP

9、(*(volatileunsigned*)(0x400FC0C4)#definerU2LCR(*(volatileunsigned*)(0x4009800C)#definerU2FDR#definerU2DLL#definerU2DLM#definerU2TER#definerU2THR#definerU2RBR#definerU2FCR#definerU2IIR#definerU2LSR#definerU2IER#definerU2ACR(*(volatileunsigned*)(0x40098028)(*(volatileunsigned*)(0x40098000)(*(volatileu

10、nsigned*)(0x40098004)(*(volatileunsigned*)(0x40098030)(*(volatileunsigned*)(0x40098000)(*(volatileunsigned*)(0x40098000)(*(volatileunsigned*)(0x40098008)(*(volatileunsigned*)(0x40098008)(*(volatileunsigned*)(0x40098014)(*(volatileunsigned*)(0x40098004)(*(volatileunsigned*)(0x40098020)voidUART2_IRQHa

11、ndler()unsignedintintId;chartmp_char;intId=rU2IIR&0xf;rU2THR=intId;/RDA或者CTI中斷if(intId=0xc|intId=0x4)/DLAB=0rU2LCR&=(0x1<<7);tmp_char=rU2RBR&0xff;rU2THR=tmp_char;intId=rU2IIR&0xf;rU2THR=intId;if(tmp_char=0xa5)rFIOIPIN|=(1<<18);elseif(tmp_char=0x5a)rFIO1PIN&=(1<<

12、18);voidSystemInit()rSCS&=(0x1<<4);/頻率12MrSCS|=(0x1<<5);/使能主振蕩器while(0=(rSCS&(0x1<<6);/等待主振蕩器穩定rCLKSRCSEL=0x1;rPLL0CFG=0x9;/配置CCLK=120MrPLL0CON=0x01;rPLL0FEED=0xAA;rPLL0FEED=0x55;while(0=(rPLL0STAT&(0x1<<10);rCCLKSEL=(0x1|(0x1<<8);rPCLKSEL=0x2;/配置PCLK=60MrCL

13、KOUTCFG=0x0|(0xb<<4)|(0x1<<8);voidInit_Uart2()rPCONP|=0x1<<24;/使能UART2功率控制rIOCON_P0_10=(rIOCON_P0_10&(0x7)|0x1;/P0.10P0.11做UART2的發送和接收管腳rIOCON_P0_11=(rIOCON_P0_11&(0x7)|0x1;rU2LCR|=0x1<<7;/DLAB=1rU2FDR=1|2<<4;/波特率設置115200/等待rU2THR中的數據發送完成,防止rU2DLM=0;rU2DLL=22;rU

14、2LCR&=(0x1<<7);rU2LCR|=0x3;rU2TER|=0x1<<7;rU2IER|=0x1;rU2FCR|=0x1;rU2FCR|=0x1<<1|0x1<<2;rISER0|=0x1<<7;voidUart2SendC(charc)rU2THR=c&0xff;while(!(rU2LSR&(0x1<<5);數據溢出/DLAB=0/8位數據位,無校驗,1個停止位/使能串口2的發送/使能串口2的接收中斷/復位FIFO,設置接收1個字符觸發中斷/使能串口2中斷voidUart2SendS(char*s)(while(*s)(Uart2SendC(*s);s+;intmain(void)(charstr="nr1,DisplaytheU2IIR3:0+Data+U2IIR3:0nr2,Send0x5a->TurnontheLEDnr3,Send0xa5->TurnofftheLEDnr"rFI

溫馨提示

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

評論

0/150

提交評論