打印

arm中断系统的疑惑

[复制链接]
1668|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsgy123|  楼主 | 2011-8-21 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
arm中断疑惑:
当中断产生时,通过中断向量表
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
调转到handlerIRQ,handlerIRQ根据INTOFFSET判断具体是哪个中断,然后进入相应的中断服务程序,
我的疑惑是中断服务程序执行完后,它怎么样回到被打断的地方继续运行,这是一个IRQ的主体程序
IsrIRQ
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}

ldr r9,=INTOFFSET
ldr r9,[r9]
ldr r8,=HandleEINT0
add r8,r8,r9,lsl #2
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}

注册一个时钟中断程序:
pISR_TIMER0=(unsigned)timer0Handler;
IsrIRQ注册到了0x18的地方
当时钟time0中断产生时,pc先指向IsrIRQ,然后跳转到pISR_TIMER0这个地址执行具体的中断服务程序,运行完了后,该怎么回来?
我查了一下__irq中断程序关键字,但这个只是会保存中断函数的进入现场,和恢复退出现场,它怎么回到user状态下被打断的地方继续运行?

相关帖子

沙发
思行合一| | 2011-8-22 19:29 | 只看该作者
好好看看启动文件吧

使用特权

评论回复
板凳
maoyanketi| | 2011-8-23 13:49 | 只看该作者
你的启动文件看全了吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

229

主题

2603

帖子

1

粉丝