版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、科 技 學(xué) 院課程設(shè)計(jì)報(bào)告( 2015 - 2016年度第 二 學(xué)期)名 稱(chēng):ARM試驗(yàn)UART 題 目: 院 系: 科 技 學(xué) 院 班 級(jí): 13k2 學(xué) 號(hào):31 學(xué)生姓名: 指導(dǎo)教師: 張老師 設(shè)計(jì)周數(shù): 成 績(jī): 日期:2016年 5月 10 日實(shí)驗(yàn)四:(1)UART0-4一:實(shí)驗(yàn)現(xiàn)象1. 本次實(shí)驗(yàn)是使用LPC178/177x系列Cortex-M3中的通用異步收發(fā)器UART0-4,短接P0.2和TXD0、P0.3和RXD0,通過(guò)串口0-4發(fā)送緩沖器中的數(shù)據(jù),通過(guò)串口調(diào)試軟件可以觀(guān)察到發(fā)送的數(shù)據(jù)(16進(jìn)制格式)。由于UART中的uart.c文件已經(jīng)對(duì)UART0-4的管腳接口都已設(shè)置好,所
2、以我們無(wú)需在對(duì)其進(jìn)行設(shè)置,只需用杜邦線(xiàn)連接各管腳和TXD0、RXD0,就可觀(guān)察現(xiàn)象。所以這里只寫(xiě)出UART0的,其余的和UART0的一樣。2. 現(xiàn)象如下圖所示:UART0UART1:總共有64個(gè)數(shù)據(jù)。(由BUFSIZE的值可得出)。二:實(shí)驗(yàn)代碼分析(1)uart.c文件部分此部分為UART的設(shè)置部分,因此所有的UART實(shí)驗(yàn)都有,所以后面實(shí)驗(yàn)就不在給出解釋。首先我們要知道UART的基本設(shè)置流程。下面幾張圖說(shuō)明:代碼如下:#include ./LPC177x_8x/LPC177x_8x.h#include ./LPC177x_8x/type.h#include uart.hvolatile uin
3、t32_t UART0Status, UART1Status;volatile uint32_t UART2Status, UART3Status;volatile uint32_t UART4Status;volatile uint8_t UART0TxEmpty = 1, UART1TxEmpty = 1;volatile uint8_t UART2TxEmpty = 1, UART3TxEmpty = 1;volatile uint8_t UART4TxEmpty = 1;volatile uint8_t UART0BufferBUFSIZE, UART1BufferBUFSIZE;vo
4、latile uint8_t UART2BufferBUFSIZE, UART3BufferBUFSIZE;volatile uint8_t UART4BufferBUFSIZE;volatile uint32_t UART0Count = 0, UART1Count = 0;volatile uint32_t UART2Count = 0, UART3Count = 0;volatile uint32_t UART4Count = 0;UART0-4的中斷處理函數(shù)(以UART0為例,1-4只需改變0為對(duì)應(yīng)的數(shù)字即可)void UART0_IRQHandler (void) uint8_t u
5、iIIRValue = 0, uiLSRValue = 0; uint8_t uiDummy = uiDummy; uiIIRValue = LPC_UART0-IIR; uiIIRValue = 1; /中斷標(biāo)志寄存器值右移1位 uiIIRValue &= 0x07; if ( uiIIRValue = IIR_RLS ) /接收線(xiàn)狀態(tài)中斷 uiLSRValue = LPC_UART0-LSR; / 讀取接收線(xiàn)狀態(tài)寄存器 溢出中斷、奇偶中斷、幀中斷、UART RBR中包含錯(cuò)誤數(shù)據(jù)和幀間隔中斷處理 if ( uiLSRValue & (LSR_OE|LSR_PE|LSR_FE|LSR_RXFE
6、|LSR_BI) ) UART0Status = uiLSRValue; uiDummy = LPC_UART0-RBR; return; if ( uiLSRValue & LSR_RDR ) /接收FIFO不為空中斷 UART0BufferUART0Count = LPC_UART0-RBR; UART0Count+; if ( UART0Count = BUFSIZE ) UART0Count = 0; else if ( uiIIRValue = IIR_RDA ) /接收數(shù)據(jù)可用中斷 UART0BufferUART0Count = LPC_UART0-RBR; UART0Count+
7、; if ( UART0Count = BUFSIZE ) UART0Count = 0; else if ( uiIIRValue = IIR_CTI ) /字符超時(shí)中斷 UART0Status |= 0x100; else if ( uiIIRValue = IIR_THRE ) /發(fā)送保持寄存器空中斷 uiLSRValue = LPC_UART0-LSR; if ( uiLSRValue & LSR_THRE ) UART0TxEmpty = 1; else UART0TxEmpty = 0; UART0-4端口引腳初始化函數(shù)uint32_t UARTInit( uint32_t Por
8、tNum) if ( PortNum = 0 ) LPC_SC-PCONP |= 0x00000008; #if 0 LPC_IOCON-P0_0 &= 0x07; LPC_IOCON-P0_0 |= 4; /P0.0為U0_TXD LPC_IOCON-P0_1 &= 0x07; LPC_IOCON-P0_1 |= 4; /P0.1為U0_RXD #endif #if 1 LPC_IOCON-P0_2 &= 0x07; LPC_IOCON-P0_2 |= 1; / P0.2為U0_TXD LPC_IOCON-P0_3 &= 0x07; LPC_IOCON-P0_3 |= 1; / P0.3為U
9、0_RXD #endif使能接收FIFO不為空中斷、發(fā)送保持寄存器空中斷、接收線(xiàn)狀態(tài)中斷 LPC_UART0-IER = IER_RBR | IER_THRE | IER_RLS;8為數(shù)據(jù)位,無(wú)奇偶檢驗(yàn)位,1位停止位 LPC_UART0-LCR = 0x83; /鎖定除數(shù)訪(fǎng)問(wèn) LPC_UART0-FCR = 0x07; /使能并復(fù)位FIFO NVIC_EnableIRQ(UART0_IRQn); return (TRUE); else if ( PortNum = 1 ) LPC_SC-PCONP |= 0x00000010; #if 0 LPC_IOCON-P0_15 &= 0x07; LP
10、C_IOCON-P0_15 |= 1; /P0.15為U1_TXD LPC_IOCON-P0_16 &= 0x07; LPC_IOCON-P0_16 |= 1; / P0.16為U1_RXD #endif #if 1 LPC_IOCON-P3_16 &= 0x07; LPC_IOCON-P3_16 |= 3; /P3.16為U1_TXD LPC_IOCON-P3_17 &= 0x07; LPC_IOCON-P3_17 |= 3; /P3.17為U1_RXD #endif #if 0 LPC_IOCON-P2_0 &= 0x07; LPC_IOCON-P2_0 |= 2; /P2.0為U1_TX
11、D LPC_IOCON-P2_1 &= 0x07; LPC_IOCON-P2_1 |= 2; /P2.1為U1_TXD #endif 使能接收FIFO不為空中斷、發(fā)送保持寄存器空中斷、接收線(xiàn)狀態(tài)中斷 LPC_UART1-IER = IER_RBR | IER_THRE | IER_RLS; 8為數(shù)據(jù)位,無(wú)奇偶檢驗(yàn)位,1位停止位 LPC_UART1-LCR = 0x83; LPC_UART1-FCR = 0x07; /使能并復(fù)位FIFO NVIC_EnableIRQ(UART1_IRQn); return (TRUE); else if ( PortNum = 2 ) LPC_SC-PCONP
12、|= 0x01000000; #if 1 LPC_IOCON-P0_10 &= 0x07; LPC_IOCON-P0_10 |= 1; /P0.10為U2_TXD LPC_IOCON-P0_11 &= 0x07; LPC_IOCON-P0_11 |= 1; /P0.11為U2_RXD #endif #if 0 LPC_IOCON-P4_22 &= 0x07; LPC_IOCON-P4_22 |= 2; /P4.22為U2_TXD LPC_IOCON-P4_23 &= 0x07; LPC_IOCON-P4_23 |= 2; /P4.23為U2_RXD #endif #if 0 LPC_IOCON
13、-P2_8 &= 0x07; LPC_IOCON-P2_8 |= 2; / P2.8為U2_TXD LPC_IOCON-P2_9 &= 0x07; LPC_IOCON-P2_9 |= 2; /P2.9為U2_RXD #endif 使能接收FIFO不為空中斷、發(fā)送保持寄存器空中斷、接收線(xiàn)狀態(tài)中斷 LPC_UART2-IER = IER_RBR | IER_THRE | IER_RLS; 8為數(shù)據(jù)位,無(wú)奇偶檢驗(yàn)位,1位停止位 LPC_UART2-LCR = 0x83; LPC_UART2-FCR = 0x07; /使能并復(fù)位FIFO NVIC_EnableIRQ(UART2_IRQn); retu
14、rn (TRUE); else if ( PortNum = 3 ) LPC_SC-PCONP |= 0x02000000; #if 0 LPC_IOCON-P0_25 &= 0x07; LPC_IOCON-P0_25 |= 3; / P0.25為U3_TXD LPC_IOCON-P0_26 &= 0x07; LPC_IOCON-P0_26 |= 3; /P0.26為U3_RXD #endif #if 0 LPC_IOCON-P0_0 &= 0x07; LPC_IOCON-P0_0 |= 2; /P0.0為U3_TXD LPC_IOCON-P0_1 &= 0x07; LPC_IOCON-P0_
15、1 |= 2; /P0.1為U3_RXD #endif #if 1 LPC_IOCON-P4_28 &= 0x07; LPC_IOCON-P4_28 |= 2; /P4.28為U3_TXD LPC_IOCON-P4_29 &= 0x07; LPC_IOCON-P4_29 |= 2; / P4.29為U3_RXD #endif #if 0 LPC_IOCON-P0_2 &= 0x07; LPC_IOCON-P0_2 |= 2; /P0.2為U3_TXD LPC_IOCON-P0_3 &= 0x07; LPC_IOCON-P0_3 |= 2; / P0.3為U3_RXD #endif 使能接收FI
16、FO不為空中斷、發(fā)送保持寄存器空中斷、接收線(xiàn)狀態(tài)中斷 LPC_UART3-IER = IER_RBR | IER_THRE | IER_RLS; 8為數(shù)據(jù)位,無(wú)奇偶檢驗(yàn)位,1位停止位 LPC_UART3-LCR = 0x83; LPC_UART3-FCR = 0x07; /使能并復(fù)位FIFO NVIC_EnableIRQ(UART3_IRQn); return (TRUE); else if ( PortNum = 4 ) LPC_SC-PCONP |= 0x00000100; #if 0 LPC_IOCON-P0_22 &= 0x07; LPC_IOCON-P0_22 |= 3; /P0.2
17、2為U4_TXD LPC_IOCON-P2_9 &= 0x07; LPC_IOCON-P2_9 |= 3; /P2.9為U4_RXD #endif #if 1 LPC_IOCON-P1_29 &= 0x07; LPC_IOCON-P1_29 |= 5; /P1.29為U4_TXD LPC_IOCON-P2_9 &= 0x07; LPC_IOCON-P2_9 |= 3; /P2.9為U4_RXD #endif #if 0 LPC_IOCON-P5_4 &= 0x07; LPC_IOCON-P5_4 |= 4; / P5.4為U4_TXD LPC_IOCON-P5_3 &= 0x07; LPC_I
18、OCON-P5_3 |= 4; /P5.3為U4_RXD #endif 使能接收FIFO不為空中斷、發(fā)送保持寄存器空中斷、接收線(xiàn)狀態(tài)中斷 LPC_UART4-IER = IER_RBR | IER_THRE | IER_RLS; 8為數(shù)據(jù)位,無(wú)奇偶檢驗(yàn)位,1位停止位 LPC_UART4-LCR = 0x83; LPC_UART4-FCR = 0x07; /* 使能并復(fù)位FIFO */ NVIC_EnableIRQ(UART4_IRQn); return (TRUE); return( FALSE );UART0-4串口發(fā)送數(shù)據(jù)初始化void UARTSend( uint32_t portNum
19、, uint8_t *BufferPtr, uint32_t Length ) if ( portNum = 0 ) while ( Length != 0 ) while ( !(UART0TxEmpty & 0x01) ); / 等待發(fā)送標(biāo)志為1 LPC_UART0-THR = *BufferPtr; /發(fā)送標(biāo)志清0 BufferPtr+; / 指針后移 Length-; /發(fā)送數(shù)目減1 else if ( portNum = 1 ) while ( Length != 0 ) while ( !(UART1TxEmpty & 0x01) ); /等待發(fā)送標(biāo)志為1 LPC_UART1-TH
20、R = *BufferPtr; /發(fā)送數(shù)據(jù) UART1TxEmpty = 0; /發(fā)送標(biāo)志清0 BufferPtr+; /指針后移 Length-; /發(fā)送數(shù)目減1 else if ( portNum = 2 ) while ( Length != 0 ) while ( !(UART2TxEmpty & 0x01) ); /等待發(fā)送標(biāo)志為1 LPC_UART2-THR = *BufferPtr; /發(fā)送數(shù)據(jù) UART2TxEmpty = 0; /發(fā)送標(biāo)志清0 BufferPtr+; /指針后移 Length-; /發(fā)送數(shù)目減1 else if ( portNum = 3 ) while (
21、Length != 0 ) while ( !(UART3TxEmpty & 0x01) ); / 等待發(fā)送標(biāo)志為1 LPC_UART3-THR = *BufferPtr; /發(fā)送數(shù)據(jù) UART3TxEmpty = 0; /發(fā)送標(biāo)志清0 BufferPtr+; /指針后移 Length-; /發(fā)送數(shù)目減1 else if ( portNum = 4 ) while ( Length != 0 ) while ( !(UART4TxEmpty & 0x01) ); /等待發(fā)送標(biāo)志為1 LPC_UART4-THR = *BufferPtr; /發(fā)送數(shù)據(jù) UART4TxEmpty = 0; /發(fā)送標(biāo)
22、志清0 BufferPtr+; /指針后移 Length-; /發(fā)送數(shù)目減1 return;(2)主函數(shù)部分#include ./LPC177x_8x/LPC177x_8x.h#include ./LPC177x_8x/type.h#include ./UART/uart.hextern volatile uint32_t UART0Count;extern volatile uint8_t UART0BufferBUFSIZE;extern volatile uint32_t UART1Count;extern volatile uint8_t UART1BufferBUFSIZE;exte
23、rn volatile uint32_t UART2Count;extern volatile uint8_t UART2BufferBUFSIZE;extern volatile uint32_t UART3Count;extern volatile uint8_t UART3BufferBUFSIZE;extern volatile uint32_t UART4Count;extern volatile uint8_t UART4BufferBUFSIZE;void dataInit (uint32_t uiLocation) /UART0-4發(fā)送數(shù)據(jù)初始化子函數(shù) uint32_t i =
24、 0; switch (uiLocation) case 0: for (i = 0; i BUFSIZE; i+) UART0Bufferi = i; UART0Count+; break; case 1: for (i = 0; i BUFSIZE; i+) UART1Bufferi = i; UART1Count+; break; case 2: for (i = 0; i BUFSIZE; i+) UART2Bufferi = i; UART2Count+; break; case 3: for (i = 0; i BUFSIZE; i+) UART3Bufferi = i; UART
25、3Count+; break; case 4: for (i = 0; i IER = IER_THRE | IER_RLS; UARTSend( 0, (uint8_t *)UART0Buffer, UART0Count ); LPC_UART0-IER = IER_THRE | IER_RLS | IER_RBR; break; case 1: LPC_UART1-IER = IER_THRE | IER_RLS; UARTSend( 1, (uint8_t *)UART1Buffer, UART1Count ); LPC_UART1-IER = IER_THRE | IER_RLS |
26、IER_RBR; break; case 2: LPC_UART2-IER = IER_THRE | IER_RLS; UARTSend( 2, (uint8_t *)UART2Buffer, UART2Count ); LPC_UART2-IER = IER_THRE | IER_RLS | IER_RBR; break; case 3: LPC_UART3-IER = IER_THRE | IER_RLS; UARTSend( 3, (uint8_t *)UART3Buffer, UART3Count ); LPC_UART3-IER = IER_THRE | IER_RLS | IER_
27、RBR; break; case 4: LPC_UART4-IER = IER_THRE | IER_RLS; UARTSend( 4, (uint8_t *)UART4Buffer, UART4Count ); LPC_UART4-IER = IER_THRE | IER_RLS | IER_RBR; break; while (1) int main (void) SystemInit(); UARTInit(0, 9600); /初始化串口0 dataInit(0); /初始化串口0的發(fā)送數(shù)據(jù) dataSend(0); /通過(guò)串口0發(fā)送數(shù)據(jù) 三:通過(guò)修改某些語(yǔ)句從而使得串口信息發(fā)生變化U
28、ART0-4的試驗(yàn)現(xiàn)象都是只發(fā)送一次數(shù)據(jù),所以在串口調(diào)試助手里只能看到一次數(shù)據(jù),所以可以修改主函數(shù)中的某些語(yǔ)句就可使得數(shù)據(jù)循環(huán)發(fā)送,但是在實(shí)驗(yàn)驗(yàn)證修改是否正確時(shí),不知道為什么還是只發(fā)送一次,但理論上是可以循環(huán)發(fā)送的。(2)UART自動(dòng)波特率一:實(shí)驗(yàn)現(xiàn)象1. 本次實(shí)驗(yàn)是使用LPC178/177x系列Cortex-M3中的通用異步收發(fā)器中的自動(dòng)波特率的設(shè)置,短接TXD0和P0.2、RXD0和P0.3,通過(guò)串口調(diào)試助手發(fā)送字符a或A,ARM將自動(dòng)測(cè)到波特率,并將波特率發(fā)送到串口調(diào)試軟件中,也就是ARM先自動(dòng)匹配出波特率的值,并將匹配的值在發(fā)送到串口調(diào)試助手窗口中顯示,注意:如果誤差較大,可調(diào)節(jié)鎖相環(huán)
29、倍頻值和外設(shè)分頻值。2. 現(xiàn)象如下圖所示:二:實(shí)驗(yàn)代碼分析#include ./LPC177x_8x/LPC177x_8x.h#include ./LPC177x_8x/type.h#include ./UART/uart.h#include stdio.h#include string.hvoid AutoBaud(void) char cStr64; uint32_t uiBand = 0; uint16_t uiDlm = 0; uint16_t uiDll = uiDll = 0; LPC_UART0-ACR = 0x01; /允許自動(dòng)波特率 while (LPC_UART0-ACR & 0x01) != 0x0); /等待自動(dòng)波特率測(cè)量完成 測(cè)量結(jié)束 LPC_UART0-ACR |= 0x01 IER &= (0x01 LCR = 0x83; /DLAB=1 uiDlm = (uint16_t)LPC_UART0-DLM; uiDll = (u
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中化學(xué)上學(xué)期第三周 氧化還原反應(yīng)說(shuō)課稿
- 7 我們有新玩法 說(shuō)課稿-2023-2024學(xué)年道德與法治二年級(jí)下冊(cè)統(tǒng)編版
- 2025二手車(chē)購(gòu)買(mǎi)合同書(shū)
- 2025合同的履行、變更、轉(zhuǎn)讓、撤銷(xiāo)和終止
- 14 《窮人》說(shuō)課稿-2024-2025學(xué)年六年級(jí)語(yǔ)文上冊(cè)統(tǒng)編版001
- 買(mǎi)方購(gòu)車(chē)合同范本
- 公路修建合同范本
- 鋪設(shè)碎石土路面施工方案
- 輕鋼吊頂施工方案
- 路燈池施工方案
- 護(hù)理工作中的人文關(guān)懷
- 完整液壓系統(tǒng)課件
- 班級(jí)建設(shè)方案中等職業(yè)學(xué)校班主任能力大賽
- T-TJSG 001-2024 天津市社會(huì)組織社會(huì)工作專(zhuān)業(yè)人員薪酬指導(dǎo)方案
- 芯片設(shè)計(jì)基礎(chǔ)知識(shí)題庫(kù)100道及答案(完整版)
- 00015-英語(yǔ)二自學(xué)教程-unit2
- 人教版九上化學(xué)第二單元課題2氧氣課件
- 三年級(jí)上冊(cè)乘法豎式計(jì)算200道及答案
- 區(qū)塊鏈技術(shù)指南
- 中頻治療儀的使用流程
- 旅游裝備行業(yè)分析
評(píng)論
0/150
提交評(píng)論