|
|||||||||||
| 技術(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 |
關(guān)于44b0 中斷中的I_ISPC寄存器的用法 |
| 作者:ican 欄目:ARM技術(shù) |
很多書都說要在中斷服務(wù)程序中清除中斷懸掛位,也就是加上 ;ldr r6,=I_ISPC ;ldr r7,=0x200000 ;清除外部中斷45676 ;str r7,[r6] 這樣寫對(duì)嗎?怎么我沒有看到有人怎么寫過?好像不能正確清除intpnd位啊,怎么回事?需要手動(dòng)清除ispc嗎?還有就是說明書里面寫ispc只能清除一次,而且會(huì)“通知中斷控制器中斷服務(wù)已經(jīng)結(jié)束了”,是什么意思? |
| 2樓: | >>參與討論 |
| 作者: ican 于 2005/1/2 13:58:00 發(fā)布:
為什么清除不了中斷懸掛呢? 這樣寫有錯(cuò)嗎?IsrIRQ ;using I_ISPR register. sub sp,sp,#4 ;預(yù)留返回指針的存儲(chǔ)位置 stmfd sp!,{r8-r9} ldr r9,=I_ISPR ldr r9,[r9] ;載入I_ISPR cmp r9, #0x0 ;If the IDLE mode work-around is used,r9 may be 0 sometimes. beq %F2 ;無可處理中斷,返回 mov r8,#0x0 ;r8為偏移量,清零 0 movs r9,r9,lsr #1 ;從右向左逐位檢驗(yàn) bcs %F1 add r8,r8,#4 ;偏移量累加 b %B0 1 ldr r9,=HandleADC ;中斷處理表的首址 add r9,r9,r8 ;計(jì)算中斷處理表的入口地址 r9+r8,即裝載中斷處理函數(shù)的指針 ldr r9,[r9] ;裝載中斷處理函數(shù)的地址 str r9,[sp,#8] ;將中斷處理函數(shù)的地址存入剛才預(yù)留的位置,r8和r9的上面 LDR r0, =I_ISPC ;清除中斷懸掛,但是一直清除不了 LDR r1, =BIT_EINT4567;BIT_EINT4567 EQU 0x00200000 STR r1, [r0] ldmfd sp!,{r8-r9,pc} ;出棧后,pc指向的既是中斷處理函數(shù)的地址 2 ldmfd sp!,{r8-r9}^ ;恢復(fù)r8,r9 add sp,sp,#4 ;恢復(fù)棧指針 subs pc,lr,#4 ;返回 |
|
| 3樓: | >>參與討論 |
| 作者: ican 于 2005/1/3 15:22:00 發(fā)布:
有沒有哪位高手可以指點(diǎn)一下? |
|
| 4樓: | >>參與討論 |
| 作者: 浮云者 于 2005/1/3 18:33:00 發(fā)布:
不懂,我只想知道原理 用的是什么原理,分析一下 |
|
| 5樓: | >>參與討論 |
| 作者: ican 于 2005/1/4 10:01:00 發(fā)布:
為什么只能清除最后一位? intpnd寄存器是0x03200080,運(yùn)行了下面的程序后 ldr r0,=I_ISPC ldr r1,=0x0fffffff str r1,[r0] 只能把08給清除了,變成0x03200000 |
|
| 6樓: | >>參與討論 |
| 作者: ican 于 2005/1/4 10:45:00 發(fā)布:
一個(gè)很奇怪的問題啊 我在這個(gè)程序前先把所有中斷屏蔽了,然后清除intpnd,誰(shuí)知竟然把I_ISPR清除了,但是intpnd還是清除不了。 ldr r0,=INTMSK ldr r1,=0x03ffffff ;禁止所有中斷 str r1,[r0] ldr r0,=I_ISPC ldr r1,=0x00200000 str r1,[r0] ;清除了I_ISPR,intpnd不變。搞到一打開intmsk,I_ISPR又會(huì)有中斷到來 |
|
| 7樓: | >>參與討論 |
| 作者: ican 于 2005/1/4 15:41:00 發(fā)布:
救命啊,哪位高手可以指點(diǎn)一下? |
|
| 8樓: | >>參與討論 |
| 作者: learn 于 2005/1/4 16:32:00 發(fā)布:
由于EINT4、5、6、7共用一個(gè)中斷線 rEXTINTPND = 0xf; //clear EXTINTPND reg. rI_ISPC = BIT_EINT4567; //clear pending_bit 必須先清除EXTINTPND,以下是DATASHEET原文 EINT4, EINT5, EINT6, and EINT7 share the same interrupt request LINE. Therefore, the ISR (interrupt service routine) will discriminate these four interrupt sources by reading the EXTINPND[3:0] register. EXTINPND[3:0] must be cleared by writing a 1 in the ISR after the corresponding ISR has been completed. |
|
| 9樓: | >>參與討論 |
| 作者: ican 于 2005/1/4 16:59:00 發(fā)布:
謝謝! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |