打印
[ZLG-ARM]

请教swiHandle这个函数

[复制链接]
3022|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
husion|  楼主 | 2011-1-11 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 husion 于 2011-1-11 17:08 编辑

__swi(0x01) unsigned int swiHandle (int iHandle, unsigned int, unsigned int, unsigned int);
/*********************************************************************************************************
** Function name: micIrqFuncSet
** Descriptions: 设置所选外设的中断触发类型、中断服务函数地址,并使能中断
** input parameters: uiChannel: 外设对应的中断通道号
** uiType: 中断触发类型 -- 0:下降沿 1:上升沿 2:低电平 3:高电平
** uiFuncAddr: 中断服务函数地址
** output parameters: none
** Returned value: 1: 成功
** 0: 失败 *********************************************************************************************************/
__inline unsigned int sic1IrqFuncSet (unsigned int uiChannel, unsigned int uiType, unsigned int uiFuncAddr)
{ return swiHandle(0x106, uiChannel, uiType, uiFuncAddr);
}
上面是周立功代码.

问题
1.swiHandle(0x106, uiChannel, uiType, uiFuncAddr);中的0x106代表什么意思

2.swiHandle(0x106, uiChannel, uiType, uiFuncAddr);中的uiChannel, uiType, uiFuncAddr是怎样传递到__swi(0x01)的

相关帖子

沙发
acgean| | 2011-1-11 16:52 | 只看该作者
问题 1.swiHandle(0x106, uiChannel, uiType, uiFuncAddr);中的0x106代表什么意思
swiHandle用于产生软中断, (指令 SWI)
arm 的指令系统中,    SWI{cond} immed_24
0x106 就是 SWI 指令后面的 immed_24. 由于 SWI 指令只能接受 立即数. 所以后面必须要使用立即数据(或宏常量). 而不能使用变量.

2.swiHandle(0x106, uiChannel, uiType, uiFuncAddr);中的uiChannel, uiType, uiFuncAddr是怎样传递到__swi(0x01)的
这些数据当然是通过堆栈传递给中断的咯, 在进入中断时, 保存在寄存器这些变量会入栈的

使用特权

评论回复
板凳
husion|  楼主 | 2011-1-11 17:15 | 只看该作者
问题
1.swiHandle(0x106, uiChannel, uiType, uiFuncAddr);中的0x106代表什么意思,我能不能用0X110或其它,还是0x106具体代表什么

使用特权

评论回复
地板
acgean| | 2011-1-12 11:26 | 只看该作者
可以, 这是 swiHandle 提供的服务的编号.
如果 swiHandle 的服务代码是你自己写的, 你可以自己来定.
如果这时 OS 提供的服务(通常都是这样的情况). 那就不能改.
至于 0x106 到底是什么意思, 看 swiHandle 的说明(或者 OS 的说明).

使用特权

评论回复
5
husion|  楼主 | 2011-1-13 08:31 | 只看该作者
问题 1.swiHandle(0x106, uiChannel, uiType, uiFuncAddr);中的0x106代表什么意思
swiHandle用于产生软中断, (指令 SWI)
arm 的指令系统中,    SWI{cond} immed_24
0x106 就是 SWI 指令后面的 immed_24. 由于 SWI  ...
acgean 发表于 2011-1-11 16:52


昨天查了很多资料,还是搞不清swiHandle(0x106, uiChannel, uiType, uiFuncAddr);中的0x106, uiChannel, uiType, uiFuncAddr的值是怎样传递,通过堆栈传给中断?那应该有相应的过程.ADS中只是通过__swi(0x01) unsigned int swiHandle (int iHandle, unsigned int, unsigned int, unsigned int);这样一个定义而已.请高手们说具体点,小弟谢过了~~

使用特权

评论回复
6
bairan168| | 2011-1-13 10:00 | 只看该作者
怎么看着有点晕啊?Z的专业技术支持呢?

使用特权

评论回复
7
acgean| | 2011-1-14 13:17 | 只看该作者
怎么还不明白呢?
SWI 是软中断。 当然也是中断,所以执行软件中断也一样会保护现场(把寄存器压栈)——这样就进入堆栈了嘛。

使用特权

评论回复
8
ladygaga| | 2011-1-30 12:52 | 只看该作者
楼主辛苦了,学习了。

使用特权

评论回复
9
diny| | 2011-2-27 17:03 | 只看该作者
我真没明白。

使用特权

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

本版积分规则

16

主题

70

帖子

1

粉丝