- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
工作模式切换(嵌入式系统原理及应用实验报告)
嵌入式系统原理及应用实验报告
ARM的7种工作模式:
用户模式(usr):ARM处理器正常的程序执行状态。
快速中断模式(fiq):用于高速数据传输或通道处理。
外部中断模式(irq):用于通用的中断处理。
管理模式(svc):操作系统使用的保护模式。
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存
储及存储保护。
系统模式(sys):运行具有特权的操作系统任务。
未定义指令终止模式(und):当未定义的指令执行时进入该模式,可用于支持硬
件协处理器的软件仿真。
注意:
用户模式是最常见的模式。
除了用户模式的其他6个模式称为特权模式。
在用户模式下是不可以切换到特权模式的。
除了用户模式和系统模式,其他5个称为异常模式,常用于处理中断
或异常,以及需要访问受保护的系统资源等情况。
ARM的37个寄存器
用户模式 非用户模式(特权模式) 异常模式 用户 系统 管理 中止 未定义 IRQ FIQ R0 ~ R7 R8 ~ R12
R8_fiq ~
R12_fiq R13 ~ R14 R13_svc
R14_svc R13_abt
R14_abt R13_und
R14_und R13_irq
R14_irq R13_fiq
R14_fiq R15
ARM状态下的寄存器组织分为通用寄存器(31个)和状态寄存器(6个)。
其中,通用寄存器包括R0 ~ R15,可分为四类:
未分组寄存器:R0 ~ R7
用于保存地址或数据。是所有处理器模式下共用的寄存器,在模式切换时
必须进行保护,进堆。
分组寄存器:R8 ~ R12
FIQ模式有单独的分组寄存器R8_fiq~R12_fiq,FIQ(快速中断)处理程序
不用保存和恢复中断现场,中断处理更加快速。
FIQ以外的分组寄存器R8~R12为四种异常模式(Svc,Abort,Undef,IRQ)共
用,模式切换时需保护。
分组寄存器:R13 ~ R14
R13通常用做堆栈指针SP ,习惯用法,非强制。
R14称作子程序链接寄存器(Link Register-LR),简称LR,用于存放当前
子程序的返回地址。当程序执行子程序调用指令BL,BLX时,当前的PC将
保存在R14中。执行完子程序后,只要将R14复制到PC,子程序即可返回。
每一种异常模式都有自已的物理R13、R14。
程序计数器:R15(PC)
寄存器R15被用作程序计数器,也称为PC 。
R15值的改变将引起程序执行顺序的变化,这有可能引起程序执行中出现
一些不可预料的结果 。
ARM处理器采用多级流水线技术,因此保存在R15的程序地址并不是当前
指令的地址 。
一些指令对于R15的用法有一些特殊的要求 。
还有6个状态寄存器,分别为CPSR、SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq 。
CPSR:当前程序状态寄存器,指示当前程序的状态信息,包括条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。
SPSR:程序状态保存寄存器。每种异常模式都有一个对应的SPSR物理寄存器( SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq、SPSR_fiq ),当异常出现时,用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
程序解说:
.global _start /*定义全局变量*/
.text /*关键字,程序从此开始,程序放到存储代码中,闪存*/
_start: /*程序从这里开始 */
# /*注释 */
B /*声明变量*/
NOP /*在此没有操作*/
MRS R0,CPSR /*把程序状态寄存器的值存到R0中*/
BIC R0,R0,#0x1F /*主位清0,是一种逻辑运算,把R0的后5位变成0 ,
其他位不
文档评论(0)