[S3C2440] keil里面的s3c2440a.s里面的中断进入后怎么返回啊?

[复制链接]
2561|6
 楼主| expresschs 发表于 2013-10-16 20:11 | 显示全部楼层 |阅读模式
IRQ_Entry
subsp,sp,#4 ;reserved for PC
stmfdsp!,{r8-r9}

ldrr9,=INTOFFSET
ldrr9,[r9]
ldrr8,=HandleEINT0
addr8,r8,r9,lsl #2
ldrr8,[r8]
strr8,[sp,#8]
ldmfdsp!,{r8-r9,pc}
使pc指向中断入口 那么该怎么返回啊
阿南 发表于 2013-10-16 21:56 | 显示全部楼层
应该有保存在寄存器的吧
 楼主| expresschs 发表于 2013-10-16 22:00 | 显示全部楼层
汇编代码里没有体现啊 是不是keil自动保存的?
 楼主| expresschs 发表于 2013-10-16 22:11 | 显示全部楼层
阿南 发表于 2013-10-16 21:56
应该有保存在寄存器的吧

是不是keil编译时在进入中断的地方自动加入保存寄存器的代码 ;s3c2440a.s中没有相关代码啊  
 楼主| expresschs 发表于 2013-10-16 22:44 | 显示全部楼层
  通过使用__irq关键字,编译器将为上面的函数添加下面的代码

                                        1. 在函数入口处,工作寄存器(包括ATPCS的敏感(易被破坏的)寄存器)被压栈。

                                        2. 在函数返回处,出栈上面保存的寄存器

                                        3. 使用SUBS PC,R14,#4从中断服务程序中返回。这条指令恢复了PC和CPSR。
明白了,以前一直用gnu写裸机程序,中断保存寄存器都要自己来,原来这些东西keil都为你做好了。
阿南 发表于 2013-10-17 07:20 | 显示全部楼层
是的,编译器会自己做,所以尽量不要自己再去 改了,除非在理解和不得以情况下
zdhlixiang2006 发表于 2013-12-5 20:35 | 显示全部楼层
用__irq的话,编译器就自己添加了保存和恢复代码,从反汇编可以看得出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

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