|
|||||||||||
| 技術(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 |
有沒(méi)有人在搞44b0向量中斷的時(shí)候遇到下面的問(wèn)題? |
| 作者:ican 欄目:ARM技術(shù) |
我編寫(xiě)的中斷向量表如下: ENTRY b ResetHandler ;for debug b HandlerUndef ;handlerUndef b HandlerSWI ;SWI interrupt handler b HandlerPabort ;handlerPAbort b HandlerDabort ;handlerDAbort b . ;handlerReserved b HandlerIRQ b HandlerFIQ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IMPORTANT NOTE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;If the H/W vectored interrutp mode is enabled, The above two instructions should ; ;be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller. ; ; b HandlerIRQ -> subs pc,lr,#4 ; ; b HandlerIRQ -> subs pc,lr,#4 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;中斷向量表 VECTOR_BRANCH ldr pc,=HandlerEINT0 ;mGA 0x20 ldr pc,=HandlerEINT1 ; ldr pc,=HandlerEINT2 ; ldr pc,=HandlerEINT3 ; ldr pc,=HandlerEINT4567 ; ldr pc,=HandlerTICK ;mGA 0x34 b . …… 定義了一個(gè)宏: MACRO $HandlerLabel HANDLER $HandleLabel $HandlerLabel sub sp,sp,#4 ;decrement sp(to store jump address) stmfd sp!,{r0} ;PUSH the work register to stack(lr does't PUSH because it return to original address) ldr r0,=$HandleLabel ;load the address of HandleXXX to r0 ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR) MEND 然后我發(fā)現(xiàn)在中斷的時(shí)候,pc跳到了0x18后,就死在了那里,不動(dòng)了。我反匯編的時(shí)候看到0x18那里是一條指令 b 0x78。為什么程序不往下執(zhí)行了呢?我之前做的非向量中斷是可以的,不知道為什么改為向量中斷后就不行了,不是只要改動(dòng)intcon這個(gè)寄存器就行了嗎? |
| 2樓: | >>參與討論 |
| 作者: ican 于 2005/1/6 20:35:00 發(fā)布:
這個(gè)與我是在仿真有關(guān)嗎? 我用的是multiice仿真,不知道是否與此有關(guān)?因?yàn)樵谧龇窍蛄恐袛嗟臅r(shí)候總是在SDRAM中運(yùn)行的,向量中斷跳到了FLASH中,會(huì)不會(huì)…… |
|
| 3樓: | >>參與討論 |
| 作者: ican 于 2005/1/7 9:18:00 發(fā)布:
向量中斷是不是一開(kāi)始就會(huì)跑到各自的中斷向量,不是0x18啊 但是現(xiàn)在我的程序是一開(kāi)始就跑到0x18,并且死在那里了 |
|
| 4樓: | >>參與討論 |
| 作者: ican 于 2005/1/7 14:31:00 發(fā)布:
是不是我的中斷向量并沒(méi)有燒寫(xiě)在FLASH的緣故? 我的這個(gè)程序是仿真的,那是不是第一步執(zhí)行的是b ResetHandler這條程序,pc顯示是c008000,也就是ro的地址。那是不是因?yàn)橹@些程序都沒(méi)有寫(xiě)在FLASH處,而只是在ram里面運(yùn)行了?所以在0x18處沒(méi)有跳轉(zhuǎn)的指令? AREA Init,CODE,READONLY ENTRY b ResetHandler ;for debug b HandlerUndef ;handlerUndef b HandlerSWI ;SWI interrupt handler b HandlerPabort ;handlerPAbort 樸 0 0 b HandlerDabort ;handlerDAbort 0 0 b . ;handlerReserved subs pc,lr,#4 subs pc,lr,#4 |
|
| 5樓: | >>參與討論 |
| 作者: high 于 2005/1/7 17:41:00 發(fā)布:
44b0沒(méi)有MEMORY remap,中斷 就會(huì)跳到0x0開(kāi)始的中斷向量表。所以FLASH處一定要有向量表,最少要有跳回用戶(hù)向量表的指令。 |
|
| 6樓: | >>參與討論 |
| 作者: gwnpeter 于 2005/1/13 10:41:00 發(fā)布:
44b0沒(méi)有MEMORY remap,需要在0x0處加中斷向量轉(zhuǎn)移,否則..... 剛開(kāi)始調(diào)試uCOS的時(shí)候就是怎么都進(jìn)不了定時(shí)器,后來(lái)才發(fā)現(xiàn)的這個(gè)問(wèn)題! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |