打印
[ZLG-ARM]

用户模式下开关中断问题

[复制链接]
1680|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiuzhou|  楼主 | 2008-1-19 09:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  《深入浅出》中写到:用户模式不能直接切换到其他模式,只能通过SWI进入特权模式。
  当运行在用户模式时,企图通过调用IRQ开关函数来控制中断的开关,但是没有成功。程序如下:
     void IRQ_En( void )
{
    unsigned int temp;
    
    __asm
    {
        MRS  temp, CPSR
        
        BIC  temp, temp, #0x80
        
        MSR  CPSR_c, temp
    }
}
  跟踪发现当执行到MSR  CPSR_c, temp时,CPSR_c的内容并不改变。书上只是说不能改变模式,并没有说不可以改变其他标志位。是不是CPSR_c是作为一个整体,在用户模式下不能被修改?
  若果在其他模式下,例如系统模式,运用上面的函数可以正常开启IRQ中断。

相关帖子

沙发
dld2| | 2008-1-19 10:15 | 只看该作者

用户模式下不能修改CPSR的control bits

包括:I、F、T、M0到M4。

使用特权

评论回复
板凳
xiuzhou|  楼主 | 2008-1-19 11:38 | 只看该作者

zlgarm_wgg,你好

还有一个疑问:当ARM从一种模式进入到另外一中模式时,例如从系统模式进入管理模式,ARM会自动的将CPSR的值备份到SPSR中,当退出管理模式时,ARM会自动的将SPSR中的内容复制到CPSR中。
不知道我上面的理解是否正确,谢谢!

使用特权

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

本版积分规则

16

主题

33

帖子

1

粉丝