版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统设计西安邮电大学计算机学院王忠民第二章ARMCortex-M3微处理器体系结构目录ARMCortex体系结构概述CortexM3的组成寄存器阵列存储器系统中断与异常通用寄存器R0-R7:R0‐R7也被称为低组寄存器。所有指令都能访问它们。(绝大多数的16位指令只能使用R0‐R7);通用寄存器R8-R12:R8‐R12也被称为高组寄存器。这是因为只有很少的16位
指令能访问它们,32位的指令则不受限制;第二章ARMCortex-M3微处理器体系结构---通用寄存器组ARMCortex-M3寄存器组组第二章ARMCortex-M3微处理器体系结构---通用寄存器组在实际的程序编写过程中,没有必要纠结指令将被汇编成16位机器指令或32位机器指令;考虑到代码效率,编程时尽量使用低组寄存器就可以了,剩下的就交给ARM的汇编器考虑去了。低组寄存器和高组寄存器对指令编码的影响堆栈指针R13:R13是堆栈指针。在CM3处理器内核中共有两个堆栈指针,于是也就支持两个堆栈。(1)主堆栈指针(MSP),或写作SP_main。这是缺省的堆栈指针,它由OS内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。(2)进程堆栈指针(PSP),或写作SP_process。用于常规的应用程序代码。
要注意的是,并不是每个应用都必须用齐两个堆栈指针。简单的应用程序只使用MSP就够了。第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器ARMCortex-M3寄存器组组工程装入系统后,指向第一条要执行的指令,考虑以下问题:1、当前的SP值是多少?如何赋的初值?2、地址0x00000000-0x00000003四个单元放的内容是什么?3、地址0x00000004-0x00000007四个单元放的内容是什么?4、若地址0x00000004-0x00000007四个单元放的是标号“start”所在的地址,但start所在位置的地址为0x00000008,那为什么0x00000004-0x00000007四个单元放的值是0x00000009?第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器堆栈指针与程序入口主堆栈和进程堆栈Cortex-M3内核有两个堆栈指针:MSP和PSP结束复位后,所有代码都使用主堆栈所有异常都使用主堆栈异常处理程序(例如SVC)可以通过改变其在退出时使用的EXC_RETURN值来改变线程模式使用的堆栈。在线程模式中,使用MSR指令对CONTROL[1]执行写操作也可以从主堆栈切换到进程堆栈。堆栈指针r13是分组寄存器,在SP_main和SP_process之间切换。在任何时候,进程堆栈和主堆栈中只有一个是可见的,由r13指示。R13,两个堆栈指针第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器堆栈与微控制器模式的对应关系通过MSR指令修改CONTROL[1]进行堆栈切换CONTROL[1]主堆栈进程堆栈10控制寄存器的第1位一般通过中断返回进行堆栈切换,MSR指令切换用的极少。R13,两个堆栈指针第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器在Cortex‐M3中,有专门的指令负责堆栈操作——PUSH和POP。它俩的汇编语言语法如下例所演示:PUSH{R0};POP{R0};第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器在程序中为了突出重点,可以使用SP表示R13。在程序代码中,MSP和PSP都被称为R13/SP。不过,我们可以通过MRS/MSR指令来指名道姓地访问具体的堆栈指针。MSP,亦写作SP_main,这是复位后缺省使用堆栈指针,服务于操作系统内核和异常服务例程;而PSP,亦写作SP_process,典型地用于普通的用户线程中。通常在进入一个子程序后,第一件事就是把寄存器的值先PUSH入堆栈中,在子程序退出前再POP曾经PUSH的那些寄存器。另外,PUSH和POP还能一次操作多个寄存器,如下所示:pushpop工程演示向下生长(SP减小往下生长)的满堆栈R14是连接寄存器(LR):用于在程序转移前保存当前的地址(系统自动完成),以便程序的返回(用户程序完成)。在一个汇编程序中,你可以把它写作LR或R14。LR用于在调用子程序时存储返回地址。例如,当你在使用BL(分支并连接,BranchandLink)指令时,就自动填充LR的值。第二章ARMCortex-M3微处理器体系结构---连接寄存器R14LR工程演示R15是程序计数器,在汇编代码中你也可以使用名字“PC”来访问它。因为CM3内部使用了指令流水线,读PC时返回的值是当前指令的地址+4。比如说:0x1000:MOVR0,PC;R0=0x1004可以通过直接给把R14(LR)寄存器的值送R15(PC),实现程序的返回。第二章ARMCortex-M3微处理器体系结构---程序计数器R15除了通用寄存器外,Cortex‐M3还在内核水平上搭载了若干特殊功能寄存器,包括:程序状态字寄存器组(PSRs或xPSR---包括APSR,IPSR,EPSR三个独立的寄存器,也可作为一个整体访问)中断屏蔽寄存器组(包括PRIMASK,FAULTMASK,BASEPRI三个寄存器)控制寄存器(CONTROL)除APSR外,其他6个寄存器只能在特权级
被专用的MSR和MRS指令访问:MRS<gp_reg>,<special_reg> ;读特殊功能寄存器的值到通用寄存器MSR<special_reg>,<gp_reg> ;写通用寄存器的值到特殊功能寄存器第二章ARMCortex-M3微处理器体系结构---特殊功能寄存器程序状态寄存器在其内部又被分为三个子状态寄存器:应用程序PSR(APSR)中断号PSR(IPSR)执行PSR(EPSR)通过MRS/MSR指令,这3个PSRs即可以单独访问,也可以组合访问(2个组合,3个组合都可以)。当使用三合一的方式访问时,应使用名字“xPSR”或者“PSRs”。xPSR、IPSR、EPSR寄存器只能在特权模式下被访问,
APSR可以在特权或非特权(用户级)访问。第二章ARMCortex-M3微处理器体系结构---程序状态寄存器Cortex‐M3中的程序状态寄存器(xPSR)第二章ARMCortex-M3微处理器体系结构---程序状态寄存器合体后的程序状态寄存器(xPSR)N---NegtiveZ---ZeroC---CarryV---OverflowQ---饱和标志。在运算过程中,如果触发了饱和(即运算结果超出了可以表示的范围),饱和标志(Q)就会被置位。饱和运算概念:饱和运算(saturatedoperation)是一种算术运算,当运算结果大于一个上限或小于一个下限时,结果就等于这个上限或下限。这种运算方式在数字信号处理、图像处理等领域中非常常见,用于确保运算结果始终保持在有效范围内,避免溢出或下溢导致的错误。例如,在BYTE运算中,如果最大值是255,那么当两个数相加的结果超过255时,饱和运算的结果就会是255,而不是实际的溢出值。同样地,如果运算结果小于0,饱和运算的结果就会是0。饱和运算通过限制运算结果的范围,可以确保系统的稳定性和可靠性,防止由于数值错误导致的系统崩溃或性能下降。同时,饱和运算也可以简化硬件设计,降低实现复杂度,提高处理速度。在嵌入式系统中,特别是那些对性能和功耗有严格要求的系统中,饱和运算被广泛应用。它允许在有限的硬件资源下实现高效且可靠的数据处理,对于提高系统性能和降低能耗具有重要意义。总之,饱和运算是一种有效的算术运算方式,它通过限制运算结果的范围来确保系统的稳定性和可靠性,并在嵌入式系统等领域得到广泛应用。第二章ARMCortex-M3微处理器体系结构---程序状态寄存器xPSR工程演示 EXPORTmycode AREA ADDCODE, CODE,READONLY mycode
LDR R0,=0xFFFFFFFF ADD R0,#0x10
LDR R0,=0xFFFFFFFF ADDS R0,#0x10
LDR R0,=0xFFFFFFFF EOR R0,R0
LDR R0,=0xFFFFFFFF EORS R0,R0
MOV R0,#3 MOV R1,#1 CMP R0,R1
deadloop B deadloop END第二章ARMCortex-M3微处理器体系结构---程序状态寄存器合体后的程序状态寄存器(xPSR)ICI/IT(Interrupt-ContinuableInformation/If-Then):ICI标志位与中断的继续执行相关,通过检查ICI标志位,处理器可以确定是否可以在中断后安全地继续执行特定的指令;IT标志位与If-Then指令的基础条件有关,IT标志位存储了这些条件的状态,从而帮助处理器确定是否应该执行接下来的指令。总之,ICI和IT标志位在Cortex-M3的EPSR中扮演着重要的角色,它们共同协作以支持条件执行和中断处理等功能,从而确保处理器能够高效地执行程序。T:Thumb状态标志位(总是1;如果试图将该位清零,会引起故障异常)。ExceptionNumber:线程模式下为0,Handler模式下存放异常号(8位—0-255)。PRIMASK:(外部中断)关中断,中断屏蔽寄存器(相当于X86的IF)FAULTMASK:(内部中断)关异常,留给操作系统用。BASEPRI:关闭优先级大于某值的中断(不响应优先级低的中断)只有在特权级下,才允许访问这3个寄存器。第二章ARMCortex-M3微处理器体系结构---中断屏蔽寄存器组Cortex-M3的中断屏蔽寄存器第二章ARMCortex-M3微处理器体系结构---控制寄存器Cortex‐M3的CONTROL寄存器---用于控制和确定处理器的操作模式以及当前执行任务的特性当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面,handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。在线程模式+用户级下,对系统控制空间(SCS)的访问将被阻止——该空间包含了配置寄存器
以及调试组件的寄存器s。除此之外,还禁止使用MSR访问特殊功能寄存器——除了APSR有例外。谁若是以身试法,则将fault伺候。在特权级下的代码可以通过置位CONTROL[0]来进入用户级。而不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后将回到产生异常之前的特权级。用户级下的代码不能再试图修改CONTROL[0]来回到特权级。它必须通过一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF(石化)085-2023开路式红外可燃气体探测器校准规范
- 备战2024年高考化学模拟卷(黑龙江、甘肃、吉林、安徽、江西、贵州、广西)02(考试版)
- 闽江学院《护理学导论与法律法规》2025-2026学年期末试卷
- 江西科技学院《方剂学》2025-2026学年期末试卷
- 长春工程学院《刑事诉讼法》2025-2026学年期末试卷
- 福建艺术职业学院《中级微观经济学》2025-2026学年期末试卷
- 长治医学院《语言与文化》2025-2026学年期末试卷
- 漳州职业技术学院《康复功能评定学》2025-2026学年期末试卷
- 南昌理工学院《学前教育学》2025-2026学年期末试卷
- 滁州职业技术学院《旅游资源管理》2025-2026学年期末试卷
- 全国肿瘤防治宣传周科普
- 2025年贵州茅台酒销售有限公司社会招聘22人笔试历年参考题库附带答案详解
- 牙髓炎根管治疗流程
- 呼吸内科肺部感染抗生素治疗指南
- 食源性疾病知识培训
- 基于STM32单片机的智能水杯设计
- 基于沉浸式体验下的城市形象构建与传播研究-以西安大唐不夜城为例
- 2025光伏电站巡视规范
- 2024年中信银行社会招聘试题含答案详解(考试直接用)
- 《工业机器人技术基础》课件 2.3.1 工业机器人的内部传感器
- 2025年副高卫生职称-公共卫生类-健康教育与健康促进(副高)代码:091历年参考题库含答案解析(5套)
评论
0/150
提交评论