3925|3

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ARM的中断处理和SWI参数问题 [复制链接]

我现在知道的在ARM里软件中断(SWI call)是用来将模式转换成超级用户模式的(SVC mode)
然后用这两句话可以将SWI的参数储存在R0里面

LDR R0,[LR,#-4]
BIC R0,R0, #0xFF000000

因为刚刚学习ARM, 现在我不理解的是这个SWI的参数到底可以用来干什么。看到有资料说是用这个值可以找到下一段要执行程序的地址,我不知道如何运用。比如说我现在有个很简单的程序如下

MOV R0, #12
ADD R0,R0,#2

然后我现在希望可以通过一个中断处理程序在超级用户模式(SVC)下求R0的值或者说运行上面两行代码,要用到SWI call,应该怎么做? 希望高手能指点下,谢谢!

此帖出自ARM技术论坛

最新回复

那如果把程序 MOV R0, #12 ADD R0,R0,#2 通过一个中断处理程序在超级用户模式(SVC)下求出R0的值或者说运行上面两行代码,具体代码应该怎么写?  详情 回复 发表于 2010-3-2 19:20
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶下。

MARK。
此帖出自ARM技术论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
在ARM7和ARM9中,SWI函数是运行在Supervisor模式下的, 能接受参数,并返回值,跟普通函数使用起来一样。编译器隐藏了SWI函数和普通函数的区别, 调用SWI函数实际是调用一个SWI指令,执行到SWI指令时,ARM被改到Supervisor模式运行,并阻塞IRQ请求(注意:并没有阻止FIQ请求)。当ARM离开Supervisor模式, 中断重新打开。从Supervisor模式返回,是用MOVS指令实现的,(MOVS pc, lr) 它改变PC, 也恢复原来的CPSR。
参考:[url=http://zhiwei.li/text/2009/07/arm%E7%9A%84%E8%BD%AF%E4%BB%B6%E4%B8%AD%E6%96%ADswi%E5%92%8C%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8system-call/][/url]
此帖出自ARM技术论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
那如果把程序

MOV R0, #12
ADD R0,R0,#2

通过一个中断处理程序在超级用户模式(SVC)下求出R0的值或者说运行上面两行代码,具体代码应该怎么写?
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表