ARM微控制器工作模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

那么究竟如何才能从非特权模式即用户模式切换到特 权模式(即其他六种模式)呢?
这就需要用到SWI软件中断异常。 从用户模式下切换到特权模式的唯一途径,就是使 用一个SWI指令调用。SWI指令强迫处理器用用户模 式切换到SVC管理模式,并且IRQ中断自动关闭。
思考 (1)在用户模式或系统模式下读取SPSR寄存器会有何 结果? (2)在非特权模式下能否对CPSR寄存 器设置?能否读 取CPSR寄存器的值? (提示:参考实验程序有相应的 代码,运行测试一下) (3)在非特权模式下如何使能/禁止IRQ或FIQ中断? (提示:可以先使用SWI指令切换到管理模式。) (4)程序中能否通过MSR指令直接修改CPSR中的T位来 实现ARM状态/ Thumb 状态的切换?
(1)在用户模式或系统模式中是没有SPSR寄存器的,所以要想 知道在用户模式或系统模式下标志位的值,只能通过CPSR。
如上图所示,切换到用户模式,在CPSR中的标志位变成了 用户模式,其值赋给R0寄存器中,所以通过观察R0知道用 户模式即0D0。 相同的方法可以知道系统模式为0DF
(2)在非特权模式下即用户模式下只允许对
备注 不能直接从用户模式切换到其他模 式 与用户模式类似,但具有直接切换到 其他模式等特权
系统(sys) 用于支持操作系统 的特权任务等
特 权 模 式
管理 供操作系统使用的 (svc) 一种保护模式
中止 用于虚拟内存和 (abt) (或)存储器保护
只有在系统复位和软件中断响应时, 才进入此模式
在ARM7内核中没有多大用处 只有在未定义指令异常响应时,才进 入此模式 只有在IRQ异常响应时,才进入此模式
CPSR寄存器显示方式如右图所示。显 示分为两部分,一部分是各个标志位, 另一部分是工作模式。 标志位NZCVQ为条件码标志N、Z、C、 V和Q,显示为大写字母,表示该位为 1;显示为小写字母,表示该位为0。 Q标志在ARM体系结构v5及以上版本 的E变量中才有效。 标志位IFT为IRQ中断禁止位I、FIQ中 断禁止位F和ARM微控制器状态位T,显 示为大写字母,表示该位为1;显示 为小写字母,表示该位为0。T标志在 ARM体系结构v4及以上版本的T变量 中才有效。
CPSR_c CPSR_x CPSR_s CPSR_f 是什么意思?
CPSR是一个32位的寄存器,状态寄存器;每 8位为一组(按功能),即 C 控制域屏蔽字节(psr[7:0]) X 扩展域屏蔽字节(psr[15:8]) S 状态域屏蔽字节(psr[23:16]) F 标志域屏蔽字节(psr[31:24]) _c是最低的8位。
5.实验步骤 (1)启动ADS1.2,使用ARM Executable Image 工程模板建立一个工 程MODE。 (2)建立汇编源文件TEST7.S,编写实验程序,然后添加到工程中。 (3)设置工程连接地址RO Base为0x40000000,RW Base为 0x40003000。设置调试入口地址Image entry point 为0x40000000。 RO Base:这个文本框设置包含有RO 段的加载域和运行域为同一个 地址。默认是0x8000。针对Magic2200实验板(目标板)上的 DeviceARM2200嵌入式工控板上的存储器地址,片内RAM的空间范 围为0x40000000~0x40003FFF,所以这里RO Base可设置为0x40000000。 RW Base:这个文本框设置了包含RW 和ZI 输出段的运行域地 址。如果选中split 选项,链接器生成的映像文件将包含两个加载域 和两个运行域,此时,在RW Base 中所输入的地址为包含 RW 和 ZI 输出段的域设置了加载域和运行域地址 .这里 RW Base可设置为 0x40003000。
异 常 未定 支持软件仿真的硬 件协处理器 模 义 式 (und) 中断 (irq) 中断请求处理 快速 中断 (fiq) 快速中断请求处理
只有在FIQ异常响应时,才进入此模式
初始化堆栈
因为ARM有7种执行状态,每一种状态的堆栈指针寄存器 (SP)都是独立的。因此,对程序中需要用到的每一种模式都 要给SP定义一个堆栈地址。方法是改变状态寄存器内的状态位, 使处理器切换到不同的状态,然后给SP赋值。注意:不要切换 到User模式进行User模式的堆栈设置,因为进入User模式后就 不能再操作CPSR回到别的模式了,可能会对接下去的程序执行 造成影响。
CPSR的控制位进行间接访问。即如思考题(1) 中所演示的,可以读出CPSR寄存器的值,但是 不能对其进行设置
(3)在非特权模式下即用户模式是不能直接使 能/禁止IRQ或FIQ中断的,因为用户模式是一种 不能直接切换到其他模式的处理器模式。一定 要先切换到系统模式或管理模式,需要使用软 件中断SWI指令。SWI指令强迫处理器从用户模 式切换到SVC管理模式,并且IRQ中断自动关闭。
此段程序的目 的是要求从用 户模式转换到 管理模式,但 由于不能从用 户模式切换到 其他模式,所 以Current中工 作模式标志位 没有发生变化
将“切换到管理模式” 的几条程序前加分号, 使这几条程序不运行, 得到的结果和运行了 这几条程序的结果是 一致的,进一步说明 了不能从用户模式切 换到其他模式。
实验七 ARM微控制器工作模式实验
ARM大作业
制作者:XXX
引 言
基于ARM的芯片多数为复杂的片上系统,这种复杂系统里 的多数硬件模块都是可配置的,需要由软件来设置其需要的工 作状态。因此在用户的应用程序之前,需要由专门的一段代码 来完成对系统的初始化(称之为启动程序/启动代码 (Startup.s))。由于这类代码直接面对处理器内核和硬件控制 器进行编程,一般都是用汇编语言。 一般通用的内容包括: 本实验重 中断向量表 点介绍的 初始化存储器系统 初始化堆栈 初始化有特殊要求的端口/设备 初始化用户程序执行环境 改变处理器模式 呼叫主应用程序
开始调用子程序 Pc值发生改变如下图所示。 R14(LR)中保存了调用发 生时pc所指向的地址。
此条程序将R14 中值赋给R0,在 R0中保存。直到 调用结束后又由 R0将此值赋回给 PC
设置堆栈均是通过 直接修改CPSR来实 现的
该图显示的是 设置管理模式 (SVC)的堆 栈,相应的在 在工作模式标 志位变成了 SVC,观察SVC 中R14也发生 变化
实验七 ARM微控制器工作模式实验
1.实验目的 (1)掌握如何使用MRS/MSR指令实现ARM微控制器 工作模式的切换。 (2)了解在各个工作模式下的寄存器。
2.实验设备 (1)硬件:PC机一台 (2)软件:Windows 98/XP/2000系统和ADS1.2集成 开发环境。
3.实验内容 (1)使用MRS/MSR指令切换工作模式,并初始化 各种模式下堆栈指针。 (2)观察ARM微控制器在各种模式下寄存器的区 别。 4.实验预习要求 (1)仔细阅读参考文献 【1】第4章ARM指 令系统的内容。 (仔细阅读产品配套光 盘附带文档 《ADS集成开发环境及仿真器应用》或其他相关资 料,了解ADS工程编辑和AXD调试的内容。(本实 验使用软件仿真。)
(4)在管理模式下,想通过MSR指令直接修改CPSR中 的T位以实现ARM状态/Thumb状态的切换,没有达到 想到的结果。看来此方法是不可行的,要想实现切换 只能应用如下程序: ;从ARM状态切换到Thumb状态 CODE32 LDR R0,=Lable+1 BX R0 CODE16 Lable MOV R1,#12 ;从Thumb状态切换到ARM状态 CODE16 LDR R0,=Lable BX R0 CODE32 Lable MOV R1,#10
(4)编译连接工程,选择Project Debug,启动AXD进 行软件仿真调试。 (5)打开寄存器窗口(Processor Registers),选择 Current项监视各寄存器的值。 (6)单步运行程序,注意观察CPSR、SPSR、R13(SP)、 R14(LR)和R15(PC)寄存器。 6.实验参考程序 ARM微控制器工作模式实验 的参考程序见程序清单。
一条 指令将R0一直保存的 地址赋给PC,标志子 程序调用结束,又回 到主程序中。
现在程序处于系统工作模式状态下,系统模式具有直接 切换到其他模式的特权,即可以执行IRQ中断,IRQ中断被 打开,也就是说CPSR的标志位IFT中的IRQ中断禁止位I变 成i代表中断IRQ打开
程序继续向下运行,工作模式由系统模式转换成用户模式
工作模式
程序计数器PC 可以作为一般的通用寄存器使用,但 有一些指令在使用R15时有一些限制。 ,该值为当前 指令地址值加上8个字节。也就是说, 对于ARM指令集来说,PC指向当前指 令的下两条指令的地址。 模式下都有一个专用的物理状态寄存 器,称为SPSR(备份程序状态寄存 器)。 当特定的异常中断发生时,这个寄存 器用于存放当前程序状态寄存器的内 容。在异常中断退出时,可以用SPSR 来恢复CPSR。由于用户模式和系统模 式不是异常中断模式,所以它没有 SPSR。如右图所示
定义段
伪指令用来定义 一个代码段或数 据段
expr
下面对几条程序进行具体分析
USR_STACK_LEGTH EQU 64 ;定义用户模式堆栈长度为64字 StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH1)*4 ;定义一个字的空间,这个字的内 ;容是一个递减堆栈的首地址 UsrStackSpace SPACE USR_STACK_LEGTH*4 ;为用户模式分配一个64字的堆栈 ;空间,若这个堆栈做递减使用, ;则其首地址为 UsrStackSpace + (USR_STACK_LEGTH-1)*4
AREA MyStacks, DATA, NOINIT, ALIGN=2,这是什么意思?
area 声明段 mystack 段名 data 数据段 noinit 未初始化数据段 align=2 数据按 2^2 = 4 字节对齐
使用单步运行按 钮开始对程序进 行操作
此14张图片表现的 是程序给寄存器 R0—R12赋初值的 情况,当寄存器值 发生改变时字的颜 色会变成红色。 (即从程序开始到 第24行运行结束的 结果)
工作 模式 的切 换
将中断IRQ标志位I清零以开 中断
对上面程序的循环
大范围的地址读取指令用于 加载32位的立即数或一个地 址值到指定寄存器。 设置各种工作模式的堆栈 NOINIT指定本数据段仅仅保留了内存单 元,而没有将各初始化写入内存单元, 或者将内存单元值初始为0 DCD用于分配一段字内存单 元,并用伪指令中的expr初 始化
ARM微控制器的工作模式共有七种
User(用户模式) FIQ(FIQ中断模式) IRQ(IRO中断模式) SVC(管理模式) Abort(中断模式) Undef(未定义模式) SYS(系统模式)
注:实验七中只涉及到了用户模式和管理模式、IRQ中断。
处理器模式 用户(usr)
说明 正常程序运行的工 作模式
MRS读状态寄存器指令,在ARM处理器中,只有MRS指 令可以状态寄存器CPSR或SPSR读出到通用寄存器中。 MSR写状态寄存器指令,同样也只有它可以设置状态寄 存器CPSR或SPSR
赋初值的原因:在复位后,
各个寄存 器赋初值 除PC和CPSR之外的所有寄存器 的值都是随机的。所以为了在 后面程序运行时能够知道各寄 存器的变化,在程序开始时先 给寄存器赋初值。这样就能够 很明显的看到寄存器值的变化。 调用子程序(见下页图)
设置IRQ中断 堆栈. 相应的Current 中R13 R14位 变成IRQ中R13 R14的值
设置FIQ中 断堆栈, 工作模式标 志位及寄存 器值随FIQ 中的值而变 化
设置中止堆栈
设置未定义堆栈
设置系统模式 堆栈,由于用 户模式和系统 模式不是异常 中断模式,没 有SPSR。所以 SPSR变成 Unavailable
相关文档
最新文档