arm中断系统的疑惑

[复制链接]
2462|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

粉丝
快速回复 在线客服 返回列表 返回顶部