打印

ARM 中断问题

[复制链接]
1804|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cgsh7756|  楼主 | 2007-5-10 18:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, tmp, ps, BLE, RS
void IRQDisable(void)
{
   int tmp;
   __asm
   {   
      MRS tmp, CPSR
      BIC tmp, tmp, #0x80
      MSR CPSR_c, tmp
   }
}
/*
****************************************
* 中断使能
****************************************
*/

void IRQEnable(void)
{
   int tmp;
   __asm
   {
      MRS tmp, CPSR
      ORR tmp, tmp, #0x80
      MSR CPSR_c, tmp
   }
}

以上代码在应用中会有问题,
而使用SWI 命令:

__swi(0x00) void SwiHandle1(int Handle);
#define IRQDisable() SwiHandle1(0)
#define IRQEnable()  SwiHandle1(1)

;软中断
SoftwareInterrupt            
        CMP     R0, #2
        LDRLO   PC, [PC, R0, LSL #2]
        MOVS    PC, LR

SwiFunction
        DCD     IRQDisable       ;0
        DCD     IRQEnable        ;1
        
IRQDisable
        ;关IRQ中断
        MRS     R0, SPSR
        ORR     R0, R0, #NoInt
        MSR     SPSR_c, R0
        MOVS    PC, LR

IRQEnable
        ;开IRQ中断
        MRS   R0, SPSR
        BIC   R0, R0, #NoInt
        MSR   SPSR_c, R0
        MOVS    PC, LR

则正常。

没搞清楚为什么?请高手们分析分析!

相关帖子

沙发
computer00| | 2007-5-10 18:36 | 只看该作者

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

使用特权

评论回复
板凳
lcl987512| | 2007-5-11 08:21 | 只看该作者

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

用户模式下不可修改cpsr中的控制位,那么条件码标志位可以修改吗

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝