|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我买的是万龙的板,在阅读实验代码中的44BINIT.S时对其中的中断处理有点不明白:
程序中先定义了这样的一个宏
MACRO
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
sub sp,sp,#4
stmfd sp!,{r0}
ldr r0,=$HandleLabel
ldr r0,[r0]
str r0,[sp,#4]
ldmfd sp!,{r0,pc}
MEND
再通过
LTORG
HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ
HandlerUndef HANDLER HandleUndef
.
.
.
展开宏得到进入中断处理程序的真正地址(ldr r0,=$HandleLabel).到这里中断之前的处理应该就OK了,剩下的就是在Main中各个HandleLabel等处写真正的中断服务函数了.为什么还要定义_ISR_STARTADDRESS起始的数据表,这个表是做什么的?
是不是下面的表格中每个变量都装了个4字节的指向中断服务函数的指针?
ldr r0,=$HandleLabel中的=$HandleLabel是不是取下面这个表格对应变量装的值?
^ _ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
HandleADC # 4
HandleRTC # 4
HandleUTXD1 # 4
HandleUTXD0 # 4
.
.
[ 本帖最后由 wuyiduan 于 2006-12-11 15:38 编辑 ] |
|