|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
二改《深入淺出ARM7—LPC213X/214X(上)》第163頁(yè)的程序4.11? |
| 作者:上善若水 欄目:ARM技術(shù) |
同樣對(duì)于這個(gè)程序,我想不使用FIFO,其它設(shè)置和原程序相同,完整程序如下: #include "config.h" /* 定義串口模式設(shè)置數(shù)據(jù)結(jié)構(gòu) */ typedef struct UartMode { 略 } uint8 rcv_buf[]; // UART0數(shù)據(jù)接收緩沖區(qū) volatile uint8 rcv_new; // 接收新數(shù)據(jù)標(biāo)志 uint8 i=0; /* ********************************************************************************************************* ** 函數(shù)名稱 :IRQ_UART0() ** 函數(shù)功能 :串口0接收中斷服務(wù)程序 ********************************************************************************************************* */ void __irq IRQ_UART0 (void) { //uint8 i; if ((U0IIR & 0x0F) == 0x04) rcv_new = 1; // 設(shè)置接收到新的數(shù)據(jù)標(biāo)志 //for (i=0; i<4; i++) //{ rcv_buf[i] = U0RBR; // 讀取FIFO的數(shù)據(jù),并清除中斷 //} VICVectAddr = 0x00; // 中斷處理結(jié)束 } /* ********************************************************************************************************* ** 函數(shù)名稱 :UART0_SendByte() ** 函數(shù)功能 :向串口0發(fā)送1字節(jié)數(shù)據(jù) ********************************************************************************************************* */ void UART0_SendByte (uint8 dat) { U0THR = dat; // 要發(fā)送的數(shù)據(jù) } /* ********************************************************************************************************* ** 函數(shù)名稱 :UART0_SendBuf() ** 函數(shù)功能 :向串口發(fā)送8字節(jié)數(shù)據(jù) ** 入口參數(shù) :dat 要發(fā)送的數(shù)據(jù) ** 出口參數(shù) :無(wú) ********************************************************************************************************* */ void UART0_SendBuf (void) { //uint8 i; //for (i=0; i<4; i++) UART0_SendByte(rcv_buf[i]); while ((U0LSR & 0x20) == 0); // 等待數(shù)據(jù)發(fā)送完畢 i++; } /* ********************************************************************************************************* ** 函數(shù)名稱 :UART0_Init() ** 函數(shù)功能 :串口初始化,設(shè)置工作模式和波特率。 ********************************************************************************************************* */ int8 UART0_Init (uint32 baud, UARTMODE set) { 略 } /* ********************************************************************************************************* ** 函數(shù)名稱 :main() ********************************************************************************************************* */ int main (void) { UARTMODE set; set.datab = 8; set.stopb = 1; set.parity = 0; rcv_new = 0; PINSEL0 = 0x00000005; // 設(shè)置I/O連接到UART0 UART0_Init(115200, set); // 串口初始化 U0FCR = 0x00; // 使能FIFO,并設(shè)置觸發(fā)點(diǎn)為8字節(jié) U0IER = 0x01; // 允許RBR中斷,即接收中斷 IRQEnable(); // 使能IRQ中斷 /* 使能UART0中斷 */ VICIntSelect = 0x00000000; // 設(shè)置所有的通道為IRQ中斷 VICVectCntl0 = 0x20 | 0x06; // UART0分配到IRQ slot0,即最高優(yōu)先級(jí) VICVectAddr0 = (uint32)IRQ_UART0; // 設(shè)置UART0向量地址 VICIntEnable = 1 << 0x06; // 使能UART0中斷 while (1) { if (rcv_new == 1) { rcv_new =0; UART0_SendBuf(); } } return 0; } 運(yùn)行的結(jié)果是:無(wú)論發(fā)多少數(shù),沒有任何響應(yīng),不用FIFO就不能使用RBR的中斷了嗎?我改的這個(gè)程序錯(cuò)在哪里? |
| 2樓: | >>參與討論 |
| 作者: zlgarm 于 2005/12/24 10:16:00 發(fā)布:
re 將 if ((U0IIR & 0x0F) == 0x04); 改為 i=U0IIR;(讀取U0IIR以清除中斷標(biāo)志,并不是將值賦給i,當(dāng)然也可以用其他變量) * - 本貼最后修改時(shí)間:2006-1-4 14:14:03 修改者:zlgarm |
|
| 3樓: | >>參與討論 |
| 作者: 上善若水 于 2005/12/26 20:01:00 發(fā)布:
請(qǐng)問zlgarm 我好笨啊,考慮了好長(zhǎng)時(shí)間還是沒能明白您說這種改動(dòng)的道理。為什么要將中斷標(biāo)志付給i呢?麻煩您再給詳細(xì)的解釋一下。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |