|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
各位老大幫忙~~關(guān)于UART0接收中斷的一個比較郁悶的問題 |
| 作者:newtarget 欄目:ARM技術(shù) |
使用中斷方式接收UART0數(shù)據(jù),但是如果一次發(fā)送觸發(fā)點所設(shè)置的字節(jié)個數(shù)時,就會沒完沒了的觸發(fā)中斷,其實這個時候我什么也沒發(fā)。 比如我設(shè)置的觸發(fā)點為8個字節(jié),如果我一次發(fā)1~7個字節(jié),都沒問題,但是一次發(fā)8個字節(jié),就會不停的中斷N次,N大概是幾千次吧。 下面是我的程序關(guān)于UART0的片段,設(shè)置的是1字節(jié)觸發(fā),也就是說只要我一發(fā)就肯定沒完沒了的中斷。 這是初始化部分: UART0_INI STMFD SP!,{LR} LDR R0,=U0LCR ;// 設(shè)置UART工作模式 MOV R1,#0x80 ;// DLAB = 1,可設(shè)置波特率 STR R1,[R0] LDR R0,=U0DLL ;// 設(shè)置波特率 MOV R1,#(FPCLK/16/9600):MOD:256 STR R1,[R0] LDR R0,=U0DLM MOV R1,#(FPCLK/16/9600)/256 STR R1,[R0] LDR R0,=U0LCR MOV R1,#0x03 STR R1,[R0] ;// N81 LDR R0,=U0FCR MOV R1,#0x01 STR R1,[R0] LDR R0,=U0IER MOV R1,#0x01 STR R1,[R0] LDMFD SP!,{PC} ;// 返回 這是中斷設(shè)置部分: LDR R0,=VIC_BASE LDR R1,=0x0 STR R1,[R0,#0x0C] ;// VICIntSelect=0x00000000 MOV R1,#0x25 STR R1,[R0,#0x200] ;// VICVectCntl0=0x25 MOV R1,#0x26 STR R1,[R0,#0x204] ;// VICVectCntl1=0x26 LDR R1,=IRQ_TIME1 STR R1,[R0,#0x100] ;// VICVectAddr0=(int)IRQ_TIME1 LDR R1,=IRQ_UART0 STR R1,[R0,#0x104] ;// VICVectAddr1=(int)IRQ_UART0 MOV R1,#0x00000060 STR R1,[R0,#0x10] ;// VICIntEnable=0x00000060 這是中斷服務(wù)程序,每接收一字節(jié)就會發(fā)送回去: IRQ_UART0 STMFD SP!,{R0-R7} LDR R0,=U0RBR LDR R1,[R0] LDR R0,=U0THR STR R1,[R0] ; 發(fā)送數(shù)據(jù) LDR R0,=U0LSR ; 等待發(fā)送完畢 UART0_SEND_LOOP LDR R1,[R0] ANDS R1,R1,#0x40 BEQ UART0_SEND_LOOP LDR R0,=VICVectAddr MOV R1,#0 STR R1,[R0] LDMFD SP!,{R0-R7} SUBS PC,LR,#4 ; IRQ中斷返回 郁悶啊,用光盤上的C程序就沒這問題,但是我覺得程序上沒問題啊。 現(xiàn)在必須用匯編,必須用中斷,所以這個問題必須解決。 各位老大幫忙! |
| 2樓: | >>參與討論 |
| 作者: newtarget 于 2006/1/4 13:09:00 發(fā)布:
暫時解決了 在中斷結(jié)束前加: LDR R0,=U0IIR LDR R1,[R0] 就可以了,仿佛是中斷被掛起了 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |