ARM 中断问题

[复制链接]
2626|2
 楼主| cgsh7756 发表于 2007-5-10 18:04 | 显示全部楼层 |阅读模式
ARM, tmp, ps, BLE, RS
void&nbsp;IRQDisable(void)<br />{<br />&nbsp;&nbsp;&nbsp;int&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;__asm<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;tmp,&nbsp;CPSR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BIC&nbsp;tmp,&nbsp;tmp,&nbsp;#0x80<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;CPSR_c,&nbsp;tmp<br />&nbsp;&nbsp;&nbsp;}<br />}<br />/*<br />****************************************<br />*&nbsp;中断使能<br />****************************************<br />*/<br /><br />void&nbsp;IRQEnable(void)<br />{<br />&nbsp;&nbsp;&nbsp;int&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;__asm<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;tmp,&nbsp;CPSR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORR&nbsp;tmp,&nbsp;tmp,&nbsp;#0x80<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;CPSR_c,&nbsp;tmp<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />以上代码在应用中会有问题,<br />而使用SWI&nbsp;命令:<br /><br />__swi(0x00)&nbsp;void&nbsp;SwiHandle1(int&nbsp;Handle);<br />#define&nbsp;IRQDisable()&nbsp;SwiHandle1(0)<br />#define&nbsp;IRQEnable()&nbsp;&nbsp;SwiHandle1(1)<br /><br />;软中断<br />SoftwareInterrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;#2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDRLO&nbsp;&nbsp;&nbsp;PC,&nbsp;[PC,&nbsp;R0,&nbsp;LSL&nbsp;#2]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVS&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;LR<br /><br />SwiFunction<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQDisable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQEnable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />IRQDisable<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;关IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;SPSR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#NoInt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPSR_c,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVS&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;LR<br /><br />IRQEnable<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;开IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;&nbsp;&nbsp;R0,&nbsp;SPSR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BIC&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#NoInt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;SPSR_c,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVS&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;LR<br /><br />则正常。<br /><br />没搞清楚为什么?请高手们分析分析!<br />
computer00 发表于 2007-5-10 18:36 | 显示全部楼层

在用户模式下,不能访问CPSR这个寄存器,结果就相当于一条空

  
lcl987512 发表于 2007-5-11 08:21 | 显示全部楼层

任何模式下不是都可以访问cpsr吗

用户模式下不可修改cpsr中的控制位,那么条件码标志位可以修改吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

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