爱问知识人 爱问教育 医院库

如何操作让ARM处理器进入SVC模式?

首页

如何操作让ARM处理器进入SVC模式?

如何操作让ARM处理器进入SVC模式?(3)

提交回答

全部答案

    2013-12-22 14:36:46
  •   ARM7有7种模式:User用户、System系统、Fast Interrupt快速中断、Interrupt中断、Supervisor管理、Abort中止、Undefined未定义,共有37个寄存器,结构如下图。其中白色寄存器为共有的,彩色为该模式独有的。
      模式由CPSR中的低五位决定,更改这5位(用户模式除外)就可以进入相应的模式,模式还可以由异常而转换,比如中断被触发,CPU自动进入中断模式。注意:像R13_irq的_irq这样的后缀在程序中不能出现。C51没有模式的概念,也可以说C51只有一种模式,不过它的四个工作寄存器组倒是有点模式的意思。
      SPSR(Saved Program Status Register)用来做CPSR的备份,发生异常时(不是修改模式位),CPU会自动将CPSR的内容备份到SPSR,所以当模式返回时,需要用软件把SPSR恢复答CPSR。除用户模式外,其他6个模式可以直接对CPSR进行读写,所以这6个模式叫特权(privileged)模式,系统模式和用户模式有相同的寄存器,只不过系统模式可以直接读写CPSR,其他5个模式需要发生异常(exception)来进入,所以叫异常模式。
      单步调试下面代码,观察各个寄存器的值:AREA ABC,CODE,READONLY CODE32 ;系统上电复位后,自动进入管理模式 MOV R0,#0x11MOV R13,#0x22 ;管理模式下的R13_svcMRS R1,CPSR ;将CPSR内容读取到R1中BIC R1,R1,#0x1F ;将R1的低5位清零ORR R1,R1,#0x12 ;将R1的低5位赋值为0x12,即中断模式MSR CPSR_C,R1 ;将R1的值载到CPSR的C域(低八位),CPU进入中断模式MOV R0,#0x33 ;R0还是前面那个R0MOV R13,#0x44 ;R13已经不是那个R13_svc,是R13_irqMRS R1,CPSRBIC R1,R1,#0x1F ;进入管理模式ORR R1,R1,#0x13MSR CPSR_C,R1S B SEND 系统上电复位后,自动进入管理模式对CPSR读写只能通过MRS和MSR,且要采取读—改—写的方式,BIC是按位清零,ORR是按位或,中断模式的模式位是10010(0x12),管理模式的模式位是10011(0x13),别的模式切换同理。
      经试验发现:R0的值被更新,说明它是共用的,而这两个模式都有自己的R13。

    荥***

    2013-12-22 14:36:46

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):