我确定他进入中断了,因为中断是按钮与led灯,当我按下按钮时,led有反映然后就卡住了。正常的话应该是返回到之前的状态。
程序在没中断的时候是在一个c函数里无限循环,同时流水led。有中断时按钮1对应led1,按钮2对应led2等等。可是当按下后led就卡住了。
因此断定是没有从irq中返回。
;Start up code for TQ2440
;2010-03-03 Zhan Yan
GET 2440addr.inc
GET Memcfg.inc
;4 bit of regiser CPSR
USERMODE EQU 0X10
FIQMODE EQU 0X11
IRQMODE EQU 0X12
SVCMODE EQU 0X13
ABORTMODE EQU 0X17
UNDEFMODE EQU 0X1b
;for same opretion
MODEMASK EQU 0X1f
NOINT EQU 0Xc0
;stack address
_STACK_BASEADDRESS EQU 0X33ff8000
UserStack EQU (_STACK_BASEADDRESS-0X3800)
SVCStack EQU (_STACK_BASEADDRESS-0X2800)
UndefStack EQU (_STACK_BASEADDRESS-0X2400)
AbortStack EQU (_STACK_BASEADDRESS-0X2000)
IRQStack EQU (_STACK_BASEADDRESS-0X1000)
FIQStack EQU (_STACK_BASEADDRESS-0X0)
U_MDIV EQU 52
U_PDIV EQU 2
U_SDIV EQU 2
M_MDIV EQU 92
M_PDIV EQU 1
M_SDIV EQU 1
IMPORT Main
IMPORT IRQ_Fun
;IMPORT RdNF2SDRAM
GBLA Y
Y SETA 0X10
GBLA X
PRESERVE8 ;The stack in this section is 8 duiqi
;Point of entry
AREA Init , CODE , READONLY
ENTRY
ResetEntry
B ResetHandler
B HandlerUndef
B HandlerSWI
B HandlerPabort
B HandlerDabort
B .
B HandlerIRQ
B HandlerFIQ
HandlerUndef
B HandlerUndef
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HandlerSWI
cmp r0 ,#4
ldrlo pc ,[pc,r0,lsl #2]
movs pc, lr
SwiFunction
DCD IRQEnable
DCD IRQDisable
IRQEnable
mrs r0 , cpsr
and r0 , r0 , #0x3f
movs pc ,lr
IRQDisable
bl LED
mov pc , lr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HandlerPabort
B HandlerPabort
HandlerDabort
B HandlerDabort
HandlerIRQ
stmfd sp! ,{r0-r9,lr}
BL IRQ_Fun
ldmfd sp! ,{r0-r9,lr}
subs pc , lr ,#4
HandlerFIQ
B HandlerFIQ
ResetHandler
; B ResetHandler
ldr r0 , =WTCON
ldr r1 , =0x0
str r1 , [r0]
ldr r0 , =INTMSK
ldr r1 , =0xffffffff
str r1 , [r0]
ldr r0 , =INTSUBMSK
ldr r1 , =0x7fff
str r1 , [r0]
ldr r0 , =LOCKTIME
ldr r1 , =0xffffff
str r1 , [r0]
ldr r0 , =CLKDIVN
ldr r1 , =5
STR r1 , [r0]
mrc p15 ,0,r0,c1,c0,0
orr r0 , r0 ,#0xc0000000
mcr p15 ,0,r0,c1,c0,0
ldr r0 , =UPLLCON
ldr r1 , =((U_MDIV