|
|||||||||||
| 技術(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 |
Setup IRQ handler,不懂 |
| 作者:fm867 欄目:ARM技術(shù) |
; ******************************************************* ; * NAME : 44BINIT.S * ; * Version : 10.April.2000 * ; * DESCRIPTION: * ; * C start up codes * ; * Configure MEMORY, Initialize ISR ,stacks * ; * Initialize C-variables * ; * Fill zeros into zero-initialized C-variables * ; ******************************************************* GET ..\inc\option.s GET ..\inc\memcfg.s ;MEMORY Area ;GCS6 16bit(2MB) SDRAM(0xc000000-0xc1fffff) ;INTTABLE =0xc1fff00~0xc1fffff ;STACK =0xc7ffa00 ;Interrupt CONTROL INTPND EQU 0x01e00004 INTMOD EQU 0x01e00008 INTMSK EQU 0x01e0000c I_ISPR EQU 0x01e00020 I_CMST EQU 0x01e0001c ;Watchdog timer WTCON EQU 0x01d30000 ;Clock CONTROLler PLLCON EQU 0x01d80000 CLKCON EQU 0x01d80004 LOCKTIME EQU 0x01d8000c ;MEMORY CONTROLler REFRESH EQU 0x01c80024 ;BDMA destination register BDIDES0 EQU 0x1f80008 BDIDES1 EQU 0x1f80028 ;Pre-defined constants USERMODE EQU 0x10 FIQMODE EQU 0x11 IRQMODE EQU 0x12 SVCMODE EQU 0x13 ABORTMODE EQU 0x17 UNDEFMODE EQU 0x1b MODEMASK EQU 0x1f NOINT EQU 0xc0 PDATE EQU 0x1d2002C ;LEE PCONE EQU 0x1d20028 ;LEE ;check if tasm.exe is used. GBLL THUMBCODE [ {CONFIG} = 16 THUMBCODE SETL {TRUE} CODE32 | THUMBCODE SETL {FALSE} ] [ THUMBCODE CODE32 ;for start-up code for Thumb mode ] 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 IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data) IMPORT |Image$$RW$$Base| ; Base of RAM to initialise IMPORT |Image$$ZI$$Base| ; Base and limit of area IMPORT |Image$$ZI$$Limit| ; to zero initialise IMPORT Main ; The main entry of mon program AREA Init,CODE,READONLY 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 H/W interrupt vector table ldr pc,=HandlerEINT1 ; ldr pc,=HandlerEINT2 ; ldr pc,=HandlerEINT3 ; ldr pc,=HandlerEINT4567 ; ldr pc,=Handler |
| 2樓: | >>參與討論 |
| 作者: kingpoo 于 2005/12/3 8:19:00 發(fā)布:
就是安裝IRQ中斷處理程序啊! 就是安裝IRQ中斷處理程序啊!相當(dāng)于把IsrIRQ開始的地址存放到HandleIRQ這個地址上,而HandleIRQ這個地址就是IRQ中斷向量地址 |
|
| 3樓: | >>參與討論 |
| 作者: fm867 于 2005/12/3 9:02:00 發(fā)布:
向量中斷VS非向量中斷 先謝謝kingpoo,我看過S3C44B0X的介紹,上面說如果是向量中斷模式的話,當(dāng)ARM7TDMI受到IRG中斷請求時,ARM7TDMI就會執(zhí)行在0x00000018的指令,然后跳到相應(yīng)中斷的服務(wù)程序。上面的程序在0x00000018的指令就是b HandlerIRQ,而這里又把HandleIRQ指向IsrIRQ這個非向量中斷處理程序。越搞越糊涂了,請kingpoo和大家再說說看怎么會事? |
|
| 4樓: | >>參與討論 |
| 作者: fm867 于 2005/12/3 9:24:00 發(fā)布:
等待回復(fù) 等待回復(fù)。。。 |
|
| 5樓: | >>參與討論 |
| 作者: kingpoo 于 2005/12/3 9:30:00 發(fā)布:
說明使用的是非向量中斷啊 |
|
| 6樓: | >>參與討論 |
| 作者: fm867 于 2005/12/3 10:07:00 發(fā)布:
謝謝kingpoo 這樣就有點(diǎn)可以理解了,謝謝kingpoo。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |