关于中断的几个问题?

发 布 时 间 : 2008-11-15 来 源 : 立宇泰论坛 作 者 : zhuhehz 浏 览 :

斑竹和各位大侠:我有几个关于中断的几个问题!
1.当PC等于0X18时执行指令"b HandlerIRQ"后,它会跳转到44BINIT.S的那条语句?
2.以下程序在何时会执行(从哪句指令跳转至此?)?
IsrIRQ ;using I_ISPR register.
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}
;IMPORTANT CAUTION
;if I_ISPC isn't used properly, I_ISPR can be 0 in this routine.
ldr r9,=I_ISPR
ldr r9,[r9]
cmp r9, #0x0 ;If the IDLE mode work-around is used,
;r9 may be 0 sometimes.
beq %F2
mov r8,#0x0
0
movs r9,r9,lsr #1
bcs %F1
add r8,r8,#4
b %B0
1
ldr r9,=HandleADC
add r9,r9,r8
ldr r9,[r9]
str r9,[sp,#8]
ldmfd sp!,{r8-r9,pc}
2
ldmfd sp!,{r8-r9}
add sp,sp,#4
subs pc,lr,#4
望各位斑竹和大侠告诉我.谢谢!!
版主 raodali 答:
执行b HandlerIRQ后,跳转到
HandlerIRQ HANDLER HandleIRQ,这个宏定义的动作是要跳转到HandleIRQ中存放的地址去运行。
然后就看复位初始化(ResetHandler)中有:
;****************************************************
;* Setup IRQ handler *
;****************************************************
ldr r0,=HandleIRQ ;This routine is needed
ldr r1,=IsrIRQ ;if there isn't 'subs pc,lr,#4' at 0x18, 0x1c
str r1,[r0]
这里是把IsrIRQ的地址放到了HandleIRQ中。因此程序会跳转到IsrIRQ去执行了。



上一篇:C语言声明的语法概述 下一篇:使用各种ARM的仿真器后,比较总结了以下心得