|
|||||||||||
| 技術(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 |
UART0接收只能中斷一次??IRQEnable(); |
| 作者:zsdfwnl 欄目:ARM技術(shù) |
PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05; // 設(shè)置I/O連接 U0LCR = 0x80; Fdiv = (Fpclk /16) / UART0_baud; // 設(shè)置波特率 U0DLM = Fdiv /256; U0DLL = Fdiv %256; U0LCR = 0x03; U0FCR=0x87; U0IER=0x01; //IRQEnable();--------》這里面是什么,怎么編譯不了 VICIntSelect=0x00; VICVectCntl0=0x20 | 0x06; VICVectAddr0=(unsigned int)UART0_ISR;//設(shè)置中斷地址 VICIntEnable=1<<0x06;//使能中斷 |
| 2樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 11:21:00 發(fā)布:
UART0接收只能中斷一次 要是按復(fù)位可以接收一次 第二次就不行了 void UART0_ISR(void)__irq { unsigned CHAR i; i=U0IIR; SWITCH(i &0x0e) { case 0x02:{ //發(fā)送數(shù)據(jù) }break; case 0x04:{//接收數(shù)據(jù) i=0; while((U0LSR&0x01) == 1)//還有數(shù)據(jù)繼續(xù)處理 { UART0_buf[i]=U0RBR; i++; } UART0_bb1=1; }break; case 0x06:{//接收線狀態(tài) }break; case 0x0c:{//字符超時(shí) // UOIER=U0IER &(~0x01);//禁止 }break; default:break; } VICVectAddr0=0x00; } |
|
| 3樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 11:25:00 發(fā)布:
IRQEnable();--------》這里面是什么,怎么編譯不了 IRQEnable();--------》這里面是什么,怎么編譯不了 沒(méi)找個(gè)這個(gè) 程序是按ZLG--》深入淺出ARM7里面的實(shí)力來(lái)寫的 |
|
| 4樓: | >>參與討論 |
| 作者: 汽車電子 于 2006/3/24 11:28:00 發(fā)布:
把超時(shí)和接收數(shù)據(jù)放在一起,再試 case 0x0c: //字符超時(shí),注,沒(méi)有break; case 0x04: //接收數(shù)據(jù) //接收處理 break; |
|
| 5樓: | >>參與討論 |
| 作者: john1225cn 于 2006/3/24 11:29:00 發(fā)布:
re 中斷里面沒(méi)有使能中斷。 |
|
| 6樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 11:31:00 發(fā)布:
謝謝!!這是完整程序,在UV3下 unsigned CHAR const ttt[]={"123456789"}; void main(void) { PINSEL0=0x00; PINSEL1=0x00; PINSEL2=0x00; IODIR0 = Bz; IODIR1 = led_1 | led_2; led_1_1; Bz_0; UART0_init(19200); UART0_sendBuf(ttt); led_1_0; Bz_1; while(1) { if(UART0_bb1) { led_2_0; UART0_bb1=0; UART0_sendBuf(UART0_buf); delay(500); led_2_1; } } } unsigned CHAR UART0_bb1; unsigned CHAR UART0_buf[20]; //=========================== __ram===================================================== void UART0_ISR(void)__irq { unsigned CHAR i; i=U0IIR; SWITCH(i &0x0e) { case 0x02:{ //發(fā)送數(shù)據(jù) }break; case 0x04:{//接收數(shù)據(jù) i=0; while((U0LSR&0x01) == 1)//還有數(shù)據(jù)繼續(xù)處理 { UART0_buf[i]=U0RBR; i++; } UART0_bb1=1; }break; case 0x06:{//接收線狀態(tài) }break; case 0x0c:{//字符超時(shí) // UOIER=U0IER &(~0x01);//禁止 }break; default:break; } VICVectAddr0=0x00; } //================================================================================= void UART0_init(unsigned int UART0_baud) { unsigned int Fdiv; PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05; // 設(shè)置I/O連接到UART0 U0LCR = 0x80; // DLAB=1,允許設(shè)置波特率 Fdiv = (Fpclk /16) / UART0_baud; // 設(shè)置波特率 U0DLM = Fdiv /256; U0DLL = Fdiv %256; U0LCR = 0x03;//禁止訪問(wèn)除數(shù)鎖存器 8 //1 :0 字長(zhǎng)設(shè)置 5 6 7 8 //2 停止位選擇 0--1個(gè) 1--2個(gè) //3 奇偶使能 0--禁止 1--使能 //5:4 奇偶選擇 奇 偶 1 0 //6 間隔控制 0--禁止間隔發(fā)送 1--使能 //7 除數(shù)使能 0--禁止 1--使能 U0FCR=0x87;// //0 1可以訪問(wèn)高7位 //1 1 清零RxFIFO并復(fù)位指針 //2 1 清零TxFIFO并復(fù)位指針 //5:3 nc //7:6 R觸發(fā)選擇 1 4 8 14 觸發(fā)前FIFO必須寫入多個(gè)字符 U0IER=0x01;// 訪問(wèn)條件DLAB=0 //0 RBP--RDA中斷控制 0--禁止 1---使能 //1 THRE-- 中斷控制 0--禁止 1---使能 //2 Rx 中斷控制 0--禁止 1---使能 //7:3 Nc // IRQEnable(); VICIntSelect=0x00; VICVectCntl0=0x20 | 0x06; VICVectAddr0=(unsigned int)UART0_ISR;//設(shè)置中斷地址 VICIntEnable=1<<0x06;//使能中斷 } //================================================================================ void UART0_sendBuf(unsigned CHAR *str) { // while(*str != '\0') // 遇到結(jié)束符,退出 for(;*str != '\0';str++) { U0THR=*str; // 發(fā)送數(shù)據(jù) while ((U0LSR & 0x40) == 0);// 等待數(shù)據(jù)發(fā)送完畢 } } void delay(unsigned int tmp_t) { unsigned CHAR tmp_j; while( tmp_t--) { for(tmp_j=100; tmp_j;tmp_j--); } } |
|
| 7樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 11:34:00 發(fā)布:
謝謝!汽車電子 現(xiàn)在按您的試過(guò),還是不行 也只只復(fù)位可以中斷一次,后來(lái)就沒(méi)反映了 |
|
| 8樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 11:36:00 發(fā)布:
謝謝!john1225cn 中斷里面沒(méi)有使能中斷 應(yīng)該是怎么樣的呢? IRQEnable();在ZLG的實(shí)例里找不到這個(gè) |
|
| 9樓: | >>參與討論 |
| 作者: rili0508 于 2006/3/24 11:49:00 發(fā)布:
路過(guò) 你把中斷子程序中的VICVectAddr0=0x00改成VICVectAddr=0x00試試看, IRQEnable()在ZLG的target.h中被定義成了宏,它真真的實(shí)體在startup.s的 SwiFunction DCD IRQDisable ;0 DCD IRQEnable ;1 DCD FIQDisable ;2 DCD FIQEnable ;3 IRQDisable ;關(guān)IRQ中斷 MRS R0, SPSR ORR R0, R0, #NoInt MSR SPSR_c, R0 MOVS PC, LR IRQEnable ;開IRQ中斷 MRS R0, SPSR BIC R0, R0, #NoInt MSR SPSR_c, R0 MOVS PC, LR FIQDisable ;關(guān)FIQ中斷 MRS R0, SPSR ORR R0, R0, #NoFIQ MSR SPSR_c, R0 MOVS PC, LR FIQEnable ;開FIQ中斷 MRS R0, SPSR BIC R0, R0, #NoFIQ MSR SPSR_c, R0 MOVS PC, LR |
|
| 10樓: | >>參與討論 |
| 作者: 汽車電子 于 2006/3/24 11:50:00 發(fā)布:
下載這個(gè) http://www.shawyoo.com下載中心有基于中斷和FIFO的串口程序 Keil for ARM中開關(guān)中斷函數(shù) /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 函數(shù)名稱:DisableInterrupt 功能描述:禁止中斷 入口參數(shù):無(wú) 出口參數(shù):無(wú) 全局變量: 創(chuàng)建時(shí)間: 修改時(shí)間: 注:關(guān)中斷要在中斷模式里執(zhí)行,SPSR要在arm模式才能識(shí)別 */ // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 以上原形聲明的函數(shù)供本函數(shù)調(diào)用 void DisableInterrupt(void) __arm __swi(9) { //uint32 t; __asm { MRS R0, SPSR ORR R0, R0, #0xc0 MSR SPSR_c, R0 } } /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 函數(shù)名稱:EnableInterrupt 功能描述:使能中斷 入口參數(shù):無(wú) 出口參數(shù):無(wú) 全局變量: 創(chuàng)建時(shí)間: 修改時(shí)間: 注:關(guān)中斷要在中斷模式里執(zhí)行,SPSR要在arm模式才能識(shí)別 */ // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 以上原形聲明的函數(shù)供本函數(shù)調(diào)用 void EnableInterrupt(void) __arm __swi(8) { __asm { MRS R0, SPSR BIC R0, R0, #0xc0 MSR SPSR_c, R0 } } * - 本貼最后修改時(shí)間:2006-3-24 11:54:57 修改者:汽車電子 |
|
| 11樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 11:54:00 發(fā)布:
謝謝 rili0508 按你的現(xiàn)在編譯測(cè)試通過(guò)了 可以多次中斷 還請(qǐng)問(wèn)下IRQEnable(); 還是編譯不了,我有加startup.s的 是不是還要再定義一次還是怎么的 |
|
| 12樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 11:58:00 發(fā)布:
謝謝 汽車電子 正在看 |
|
| 13樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 12:08:00 發(fā)布:
3Q IRQEnable();通過(guò)編譯,還有個(gè)警告是什么 __swi(0x00); void SwiHandle1(int Handle); 改成 void SwiHandle1(int Handle)__swi(0x00); 就可以編譯通過(guò) 已經(jīng)通過(guò)IRQEnable(); ********************************************************************************************************/ #endif #ifdef __cplusplus } #endif #endif #ifndef __TARGET_H #define __TARGET_H #ifdef __cplusplus extern "C" { #endif #ifndef IN_TARGET extern void Reset(void); extern void TargetInit(void); // Add IntDisable() and IntEnable() Functions // changed by Chenxibing // 2004-12-09 void SwiHandle1(int Handle)__swi(0x00);--------------->這里 #define IRQDisable() SwiHandle1(0) #define IRQEnable() SwiHandle1(1) #define FIQDisable() SwiHandle1(2) #define FIQEnable() SwiHandle1(3) //---end //********************************************************** assembling Startup.s... linking... *** WARNING L23: UNRESOLVED EXTERNAL SYMBOLS Program Size: data=1189 const=34 code=924 creating hex file from "060323"... "060323" - 0 Error(s), 1 Warning(s). |
|
| 14樓: | >>參與討論 |
| 作者: rili0508 于 2006/3/24 12:38:00 發(fā)布:
發(fā)現(xiàn)你原來(lái)的小問(wèn)題 __swi(0x00); void SwiHandle1(int Handle); 原來(lái)這句你的__swi(0x00)后面多了個(gè)分號(hào),當(dāng)然編譯不過(guò)去 要仔細(xì)哦 |
|
| 15樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/24 12:41:00 發(fā)布:
回 rili0508 對(duì)不起!那是筆誤! 寫在前面在UV32下編譯不了 在后面就可以 現(xiàn)在加上那些.h就只有一個(gè)警告了 但是下載后居然程序是一點(diǎn)也執(zhí)行不了 |
|
| 16樓: | >>參與討論 |
| 作者: hotpower 于 2006/3/25 1:11:00 發(fā)布:
這些老師真不錯(cuò)~~~ |
|
| 17樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/25 10:01:00 發(fā)布:
回hotpower 你們都是我好老師啊 你那個(gè)頭文件做了嗎 很討厭人家那一堆的.c .s .h,要你一塊菜地就好了 |
|
| 18樓: | >>參與討論 |
| 作者: hotpower 于 2006/3/25 10:07:00 發(fā)布:
頭文件基本全了 正在補(bǔ)充所有的硬件模塊的定義. 因?yàn)槊總(gè)模塊必須要調(diào)試才算通過(guò),主要是想實(shí)現(xiàn)"尿童也能玩ARM" |
|
| 19樓: | >>參與討論 |
| 作者: feifan570 于 2006/3/25 10:23:00 發(fā)布:
VICVectAddr0=0x00;有問(wèn)題 應(yīng)該是 VICVectAddr=0x00; |
|
| 20樓: | >>參與討論 |
| 作者: zsdfwnl 于 2006/3/25 10:37:00 發(fā)布:
. VICVectAddr=0x00; 已經(jīng)OK 現(xiàn)在是調(diào)用IRQEnable(); 程序完全不能動(dòng) 屏蔽還可以 還有 void SwiHandle1(int Handle)__swi(0x00);--------------->這里 #define IRQDisable() SwiHandle1(0) #define IRQEnable() SwiHandle1(1) #define FIQDisable() SwiHandle1(2) #define FIQEnable() SwiHandle1(3) //---end //********************************************************** assembling Startup.s... linking... *** WARNING L23: UNRESOLVED EXTERNAL SYMBOLS Program Size: data=1189 const=34 code=924 creating hex file from "060323"... "060323" - 0 Error(s), 1 Warning(s). |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |