|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
如何開了一個FIQ的情況下再開其它的IRQ |
| 作者:w_ang 欄目:ARM技術(shù) |
在只開FIQ或IRQ時,都正常,但同時開時,只有FIQ,卻沒有IRQ,請高手指教,如何才能讓其都產(chǎn)生中斷. 我的程序如下://T0為匹配0的中斷,FIQ T0PR = 0; T0MCR =0x03; T0MR0 =Fpclk/20000; FIQEnable(); //快中斷使能 VICIntSelect = VICIntSelect|(1<<4); //FIQ VICIntEnable = VICIntEnable|(1<<4); T0TCR =0x01; //開計數(shù)器 //T1為匹配0的中斷,IRQ T1TC = 0; //清T1 T1PR = 0; //預(yù)分頻 T1CTCR = 0; //T1為定時器 T1MCR = 0x03; //T1MR0匹配后復(fù)位,并產(chǎn)生中斷 T1MR0 = Fpclk/1000;//初始頻率為1000Hz T1TCR = 0x03; //復(fù)位 IRQEnable(); //中斷使能 VICIntSelect = 0x00; //分配為IRQ VICVectCntl0 = 0x20|0x05; //分配優(yōu)生級 VICVectAddr0=(uint32)T1MC0;//設(shè)置中斷地址 VICIntEnable = VICIntEnable|(1<<5); //開T1匹配0中斷 T1TCR =0x01; //開計數(shù)器 //T1 MR0匹配中斷函數(shù) void __irq T1MC0(void) { T1IR = 1<<0 ;//清中斷 T1MR0 = Fpclk/500;//設(shè)定速度 VICVectAddr=0x00;//向量中斷處理結(jié)束 } //FIQ的中斷函數(shù) void FIQ_Exception(void) { //while(1); // change it to your code 這一句替換為自己的代碼 LEDON(); T0IR =0x01; //清中斷標(biāo)志 LEDOFF(); } |
| 2樓: | >>參與討論 |
| 作者: zlgARM 于 2007/3/22 18:34:00 發(fā)布:
RE w_ang : IRQEnable()最終是跳到啟動文件里的IRQEnable執(zhí)行; FIQDisable()最終是跳到啟動文件里的FIQDisable執(zhí)行。 如您所見,這兩個操作是彼此互斥的。 您可以自己參照著啟動文件和IRQEnable()的寫法,寫一個軟中斷,令CPSR使能IRQ和FIQ中斷。 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 |
|
| 3樓: | >>參與討論 |
| 作者: w_ang 于 2007/3/22 20:27:00 發(fā)布:
多謝!我試試 |
|
| 4樓: | >>參與討論 |
| 作者: w_ang 于 2007/3/22 23:04:00 發(fā)布:
忙了一晚上,也沒搞定,還望周工指教 1.可不可以同時開一個FIQ,多個IRQ? 2.FIQ可不可以中斷正在執(zhí)行的IRQ? 3.如何實現(xiàn)? 是不是在LPC213X的模板下只能采用軟中斷(IRQ)中修改CPSR? 在STARTUP.S中 ;設(shè)置系統(tǒng)模式堆棧 MSR CPSR_c, #0x0f ;開F&I LDR SP, =StackUsr MOV PC, R0 只修改此處,而不再調(diào)用IRQ_Enable()和FIQ_Enable()為什么程序只產(chǎn)生前述程序中的T0中斷而沒有T1的中斷,且主程序不能再運行. |
|
| 5樓: | >>參與討論 |
| 作者: zlgARM 于 2007/3/23 8:36:00 發(fā)布:
RE 1:可以;如果這都無法實現(xiàn),那么FIQ相對于IRQ的高優(yōu)先級還有意義嗎? 2:可以。 首先,如果要求可以同時允許FIQ和IRQ,那么必要條件是CPSR里允許了FIQ和IRQ中斷。 調(diào)試一下您的程序,確保這個必要條件,問題的核心是讓CPSR同時令FIQ和IRQ使能,看看是程序哪個地方破壞了這個條件。做了試驗才知道,先往這個方向試一下吧。 |
|
| 6樓: | >>參與討論 |
| 作者: w_ANG 于 2007/3/23 11:12:00 發(fā)布:
解決了. 用兩種方式都可以, 1.修改STARTUP.S中的 ;設(shè)置系統(tǒng)模式堆棧 MSR CPSR_c, #0xdf ;關(guān)F&I 為 MSR CPSR_c, #0x1f ;開F&I 2.象1樓的程序,不改. 只是編譯方式由DebugInFlash改為RelInFlash,就可以了,是不是模板中有BUG? |
|
| 7樓: | >>參與討論 |
| 作者: hotpower 于 2007/3/23 12:04:00 發(fā)布:
實際也可以控制VICIntEnable |
|
| 8樓: | >>參與討論 |
| 作者: zlgARM 于 2007/3/23 17:59:00 發(fā)布:
RE w_ANG: 問題解決九號!或許有BUG。歡迎您調(diào)試出來告訴我們,我們好改進(jìn)!謝謝。 |
|
| 9樓: | >>參與討論 |
| 作者: lijing1982 于 2007/3/24 9:11:00 發(fā)布:
詢問 我想問一下,FIQ和IRQ的區(qū)別,樓主能給解釋一下嗎? |
|
| 10樓: | >>參與討論 |
| 作者: w_ang 于 2007/3/24 19:31:00 發(fā)布:
lijing1982 :FIQ快中斷,主要特點就是一個字:(響應(yīng))快. FIQ快中斷,主要特點就是一個字:(響應(yīng))快. 次要特點:可以中斷正在執(zhí)行的IRQ. IRQ就是沒有這兩特點的中斷了, 你能明的嗎? |
|
| 11樓: | >>參與討論 |
| 作者: lijing1982 于 2007/3/26 15:29:00 發(fā)布:
to w_ang 謝謝你的回答,這個我理解了!!但是ZLG出的一本書上講,FIQ最好設(shè)置成一個,要不會影響時間的,是嗎?我覺的一般的中斷設(shè)置成IRQ就可以了,是不是不用設(shè)置成FIQ;在什么情況下需要設(shè)置,舉個例子好嗎? |
|
| 12樓: | >>參與討論 |
| 作者: w_ang 于 2007/3/28 20:31:00 發(fā)布:
TO:lijing1982 是這樣的,在我的應(yīng)用中有一個信號實時性的要求特別高,我覺著最好的辦法就是讓一個FIQ來響應(yīng)它.所以我這樣用了. |
|
| 13樓: | >>參與討論 |
| 作者: lijing1982 于 2007/3/30 8:54:00 發(fā)布:
to w_ang 好的,謝謝。∮袡C會向你請教! |
|
| 14樓: | >>參與討論 |
| 作者: lijing1982 于 2007/3/31 10:35:00 發(fā)布:
to w_ang 我想問一下,分布裝載描述文件是bootloader嗎? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |