打印
[S3C2440]

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

[复制链接]
1307|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中没有相关代码啊  

使用特权

评论回复
5
expresschs|  楼主 | 2013-10-16 22:44 | 只看该作者
  通过使用__irq关键字,编译器将为上面的函数添加下面的代码

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

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

                                        3. 使用SUBS PC,R14,#4从中断服务程序中返回。这条指令恢复了PC和CPSR。
明白了,以前一直用gnu写裸机程序,中断保存寄存器都要自己来,原来这些东西keil都为你做好了。

使用特权

评论回复
6
阿南| | 2013-10-17 07:20 | 只看该作者
是的,编译器会自己做,所以尽量不要自己再去 改了,除非在理解和不得以情况下

使用特权

评论回复
7
zdhlixiang2006| | 2013-12-5 20:35 | 只看该作者
用__irq的话,编译器就自己添加了保存和恢复代码,从反汇编可以看得出来

使用特权

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

本版积分规则

3

主题

9

帖子

0

粉丝