|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教周工uart中斷問題 |
| 作者:bsp25K 欄目:ARM技術 |
| 2樓: | >>參與討論 |
| 作者: bsp25K 于 2006/1/1 10:52:00 發(fā)布:
請教周工uart中斷問題 我編寫的EasyARM2200 的uart0驅(qū)動,在禁止FIFO,用軟件實現(xiàn)發(fā)送接收緩沖的情況下,Rx中斷沒有問題,我發(fā)送34個數(shù)字,Tx中斷只進入了1次,但是有時候卻正常,以下是我的設置,請周工指點一下 void VICConfig (void) { VICIntEnable = VICIRQ_UART0; VICIntSelect &= ~VICIRQ_UART0; VICVectCntl0 = VICIRQ_SLOT_EN + UART0_ID; VICVectAddr0 = (INT32U)&IRQUART0Handler; VICVectAddr = 0x00000000; } INT8U UART0Config (INT32U baud, UARTMODE set) { //UARTMODE uart0_set; INT32U bak; //Parameters FILTER if ((baud == 0)||(baud > 115200)) return (0); if ((set.datab < 5)||(set.datab >8)) return (0); if ((set.stopb == 0)||(set.stopb > 2)) return (0); if ((set.parity > 4)) return (0); // Set the Baud rate of COM OS_ENTER_CRITICAL(); /* Necessary!!!! */ U0LCR |= UART_LCR_ACCESS_DL; /* Set DLAB = 1 to access the DLL,DLM registers */ bak = BAUD_SET / baud; U0DLL = bak & 0x00ff; U0DLM = (bak >> 8) & 0x00ff; // Set the mode of COM(LCR) bak = set.datab - 5; /* Set word length */ if (set.stopb == 1) { bak &= ~0x04; /* 1 stop bit */ } SWITCH (set.parity) { case 0: bak &= ~UART_LCR_PARITY_EN; break; case 1: bak |= UART_LCR_PARITY_EN; set.parity = set.parity - 1; bak |= set.parity << 4; break; case 2: bak |= UART_LCR_PARITY_EN; set.parity = set.parity - 1; bak |= set.parity << 4; break; default: break; } U0LCR = bak; // FIFO Setting U0FCR |= (UART_FCR_FIFO_EN + UART_FCR_TXFIFO_RST + UART_FCR_RXFIFO_RST); //U0FCR = UART_FCR_RX_TRG1; U0FCR &= ~UART_FCR_FIFO_EN; OS_EXIT_CRITICAL(); return (1); } |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |