- 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微处理器的编程模型 本节内容 ARM微处理器的工作状态 字的长度与ARM指令长度 ARM处理器的运行模式 ARM处理器的寄存器组织 ARM体系的异常处理 ARM存储器接口 ARM存储器层次 RAM存储系统简介 4.1 ARM微处理器的工作状态 第一种为ARM状态 此时处理器执行32位的字对齐的ARM指令; 第二种为Thumb状态 此时处理器执行16位的、半字对齐的 Thumb 指令; 在程序的执行过中,可随时在两种工作状态之间切换 状态切换方法 ARM和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。 进入Thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。 进入ARM状态:当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。 4.2.1 字的长度 字(Word): 字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位。 字必须排成四字节对齐 半字(Half-Word): 半字的长度为16位,与8位/16位处理器体系结构中字的长度一致 半字必须排成两字节对齐 字节(Byte): 在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位 4.2.2 ARM指令长度 32位指令(ARM状态下) 16位指令(Thumb状态下) 4.3 ARM处理器的运行模式 七种模式 用户模式(usr):ARM处理器正常的程序执行状态 快速中断模式(fiq):用于高速数据传输或通道处理 外部中断模式(irq):用于通用的中断处理 管理模式(svc):操作系统使用的保护模式 指令终止模式(abt):当指令预取终止时进入该模式 数据访问终止模式(abt):当数据访问终止时进入该模式,可用于虚拟存储及存储保护 系统模式(sys):运行具有特权的操作系统任务 注:除了用户模式外,其它模式都是特权模式 4.4 处理器的寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。 4.4.1 ARM状态下寄存器组织 通用寄存器(R0-R15)(共31个) 程序状态寄存器(共6个) 通用寄存器分类 未分组寄存器R0~R7 分组寄存器(共22个) R8~R12(有2个物理R) R13~R14(有6个物理R) 程序计数器R15 ( PC) 堆栈指针SP(R13) R13在ARM指令中常用作堆栈指针SP,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。 在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。 由于处理器的每种运行模式均有自己独立的物理寄存器R13,在初始化部分,都要初始化每种模式下的R13,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复。 子程序连接寄存器LR(R14) R14也称作子程序连接寄存器或连接寄存器LR。当执行BL子程序调用指令时,可以从R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。 在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,指令先将下一条指令的PC值拷贝给R14;当执行完子程序后,再将R14的值拷贝回PC,即可完成子程序的调用返回。 R14还用于异常处理的返回。 例子 程序计数器PC(R15) ARM状态下,位[1:0]为0,位[31:2]保存PC; Thumb状态下,位[0]为0,位[31:1]保存PC; R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。 由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。 程序状态寄存器(CPSR/SPSR)R16 寄存器R16用作当前程序状态寄存器CPSR(Current P
原创力文档


文档评论(0)