第2章 Cortex-M3 内核原理3--Thumb-2指令系统

合集下载

第2章 ARM-cortex-M3内核1

第2章  ARM-cortex-M3内核1
在复位后,该寄存器的值为0。因此,在地址0 处必须包 含一张向量表,用于初始时的异常分配。

举例

如果发生了异常11(SVC),则NVIC 会计算出偏移 移量是11x4=0x2C,然后从那里取出服务程序的入口 地址并跳入。 0 号异常的功能则是个另类,它并不是什么入口地址, 而是给出了复位后MSP 的初值。

程序状态寄存器(PSRs 或xPSR)


程序状态寄存器在其内部又被分为三个子状态寄存器: 应用程序 PSR(APSR) 中断号 PSR(IPSR) 执行 PSR(EPSR) 这3 个寄存器即可以单独访问,也可以组合访问(2 个组 合,3 个组合都可以),当使用三合一的方式访问时,应 使用名字“xPSR”或者“PSRs”。

可嵌套中断支持
可嵌套中断支持的作用范围很广,覆盖了所有的外部中断 和绝大多数系统异常。 外在表现是:这些异常都可以被赋予不同的优先级,当前 优先级被存储在xPSR 的专用字段中。当一个异常发生时, 硬件会自动比较该异常的优先级是否比当前的异常优先级 更高。



如果发现来了更高优先级的异常,处理器就பைடு நூலகம்中断当前的 中断服务程序,而服务新来的异常,这个过程立即抢占。


3.3 操作模式和特权级别

Cortex‐M3 处理器支持两种处理器的操作模式,支持两 级特权操作。
操作模式

两种操作模式分别为:处理器模式(handler mode)和线程 模式(thread mode)。 引入两个模式的目的,是用于和区别异常服务例程的代码 和普通应用程序的代码。

特权极别

特权的分级——特权级和用户级。这可以提供一种存储器 访问的保护机制,使得普通的用户程序代码不能意外地, 甚至是恶意地执行涉及到要害的操作。 处理器支持两种特权级,这也是系统一个基本的安全模型。

第3章 Thumb-2指令系统4H

第3章 Thumb-2指令系统4H

LDR R1,[R2]
5、基址寻址
• 就是将基址寄存器的内容与给出的偏移量相加,形成 操作数的有效地址。用于查表、数组操作、功能部件 寄存器访问等。例: LDR R2,[R3,#0x0C];读R3+0x0C地址上的存储单元的值存R2
0x4000000C
0xAA
将R3+0x0C作为 R3 0x40000000 地址装载数据 R2 0xAA 0x55 LDR R2,[R3,#0x0C]
堆栈寻址

所以可以组合出四种类型的堆栈方 式: 向上生长的满栈、向上生长的空栈、 向下生长的满栈、向下生长的空栈。

Cortex-M3向下生长的满栈模型。

例: STMDB SP!, {R1-R7, LR} ; 将R1~R7、LR 入栈 LDMIA SP!, {R1-R7, PC} ; 出栈,到R1~R7、LR 寄存器
<指令码><目标寄存器>,<第一操作数>[,<第二操作数>]
Cortex-M3处理器支持8种基本寻址方式: –1、寄存器寻址 –2、立即寻址 –3、寄存器移位寻址 –4、寄存器间接寻址 –5、基址寻址 –6、多寄存器寻址 –7、堆栈寻址 –8、相对寻址
1、寄存器寻址
• 指令中的地址码字段(第一或第二操作数)给出的 是寄存器编号,操作数的值在寄存器中,指令执行 时直接取出寄存器值来操作。例: MOV R1,R2 ;将R2的值存入R1
3.1 Thumb-2指令集简介


Cortex-M3处理器使用的是Thumb-2指令集的子集,它的指 令工作状态只有Thumb-2状态。 Thumb-2继承了传统的Thumb指令集和ARM指令集的各自优 点,并不是Thumb的升级,包含16-bit指令集和32-bit指 令集两种长度的指令子集。 Thumb-2指令集体系架构,无需处理器进行工作状态的显 示切换,就可运行16位与32位混合代码,并由同一汇编器 对其进行汇编。

第2章--Cortex-M3-内核原理3--Thumb-2指令系统PPT优秀课件

第2章--Cortex-M3-内核原理3--Thumb-2指令系统PPT优秀课件
7
1. 概述(续)
• Thumb-2并不是Thumb的升级 • 它是另起炉灶,继承并集成了传统的Thumb指
令集和ARM指令集的各自优点,可以完全代 替Thumb和原先的ARM指令集, • 是Thumb指令集和ARM指令集的一个超集。 • Thumb-2指令集体系架构,无需处理器进行工 作状态的显示切换,就可运行16位与32位混合 代码。 • 与ARM体系架构相比,速度提高大约15%到 20%。
11
2. Thumb-2指令集分类(续)
• 基于Thumb-2指令体系架构编写的代码在执 行 过 程 中 , 处 理 器 不 存 在 ARM 工 作 状 态 和 Thumb工作状态之间的切换。 • 那么,处理器必须能够自动识别当前指令长 度,是16-bit还是32-bit,以正确地执行Thumb2指令代码,它是如何识别呢?
14
3. 统一的汇编语言
• ARM指令集体系架构下,ARM指令与Thumb 指令分属不同的程序模块,由不同的汇编 器对其分别进行汇编。
• Thumb-2指令集体系架构下, 16bit指令与 32bit指令可以在同一程序模块出现,并由 同一汇编器对其进行汇编。
15
Toolchain flow with ARM7
(1)数据传送指令
Cortex-M3 中的数据传送类型包括:
① 两个寄存器间传送数据 ② 寄存器与特殊功能寄存器间传送数据 ③ 把一个立即数加载到寄存器
指令 MOV <Rd>, #<immed_8> MOV <Rd>, <Rn> MOV <Rd>, <Rm> MVN <Rd>, <Rm> MOV{S}.W #<modify_constant(immed_12)> MOV{S}.W <Rd>, <Rm>{, <shift>} MOVT.W <Rd>, #<immed_16>

第2章cortex-M3内核

第2章cortex-M3内核

Cortex-M3 处理器
集成了内核和高级系统外设的分级处理器 Cortex-M3 内核 哈佛体系结构 拥有分支预测功能的三级流水线 Thumb®-2 指令集和传统的 Thumb指令集 带有 硬件除法和 单信号周期乘法的ALU Cortex-M3 处理器 Cortex-M3 内核 可配置的中断控制器 总线矩阵 先进的调试组件 可选择的 MPU & ETM
(irq) 用于通用中断处理
管理 (svc)
中止 (abt) 未定义 (und)
操作系统保护代码
用于支持虚拟内存和/或 存储器保护 支持硬件协处理器的软件 仿真
系统复位和软件中断响应时进入 此模式
在ARM7TDMI没有大用处 未定义指令异常响应时进入此模 式
特权模式
处理器模式 用户 系统 (usr) (sys) 系统 快中断 (sys) 快中断 中断 (fiq) (fiq) (irq) 说明 正常程序工作模式 用于支持操作系统的特权 任务等 备注 不能直接切换到其它模式
未定义指令异常响应时进入此模 式
异常模式
处理器模式 用户 (usr) 系统 快中断 (sys) (fiq) 说明 正常程序工作模式 备注 不能直接切换到其它模式
中断 (irq) 快中断 (fiq) 管理 中断(svc) (irq) 管理 中止 (svc) (abt) 中止 未定义 (abt) (und) 未定义 (und)
非特权模式:
对有些资源的访问受到限制或不允许访问
处理器模式
处理器模式 用户 (usr) 系统 (sys) 快中断 中断 (fiq) 说明 正常程序工作模式 用于支持操作系统的特权 任务等 支持高速数据传输及通道 处理 备注 不能直接切换到其它模式 与用户模式类似,但具有可以直 接切换到其它模式等特权 FIQ异常响应时进入此模式 IRQ异常响应时进入此模式

微机原理与嵌入式接口技术课件:Cortex-M3 的指令系统与汇编程序设计

微机原理与嵌入式接口技术课件:Cortex-M3 的指令系统与汇编程序设计
2. 寄存器移位寻址 寄存器移位寻址是Cortex-M3指令集特有的寻址方式。
Cortex-m3的指令系统与汇编程序设计
可用的移位操作如下: ·LSL: 逻辑左移, 寄存器中数据位低端空出的位补 0。 ·LSR: 逻辑右移, 寄存器中数据位高端空出的位补 0。 ·ASR: 算术右移, 移位过程中保持符号位不变, 即 若源操作数为正数, 则数据位的高端空出的位补 0, 否则 补 1。 ·ROR: 循环右移(Rotate Right), 从数据位低端移 出的位填入数据位高端空出的位。 ·RRX: 带扩展的循环右移, 操作数右移一位, 高端 空出的位用原 C 标志值填充。
Cortex-m3的指令系统与汇编程序设计 例程 3.4 立即寻址应用示例。
说明: 前缀“#”表示立即数, “0x”表示 16 进制数 值。
从表 3.2 可以看出, ARM 将 32 位指令分为两个部分。
Cortex-m3的指令系统与汇编程序设计
Cortex-m3的指令系统与汇编程序设计
立即数要满足一定的生成规则: 即每个立即数由一个 8 位的常数循环右移偶数位得到,其中循环右移的位数用一个 4 位二进制数的两倍表示。 如果立即数记作<immediate>, 8 位常数记作 immed_8, 4 位的循环右移值记作 rotate_imm, 则有
Thumb-2 技术改善了 Thumb 指令集的性能, 它在原 有的 Thumb 指令的基础上进行了如下的扩充: 增加了一些 新的 16 位 Thumb 指令来改进程序的执行流程, 增加了一 些新的32 位 Thumb 指令以实现一些 ARM 指令的专有功能, 解决了之前 Thumb 指令集不能访问协处理器、 特权指令和 特殊功能指令的局限。 Thumb-2 指令集可以实现所有的功 能, 这样就不需要在 ARM/ Thumb 状态之间反复切换了, 代码密度和性能得到了显著的提高, 但值得注意的是 Thumb-2 并不支持 32 位 ARM 指令集。

第2章 Cortex-M3 内核原理2

第2章  Cortex-M3 内核原理2

2.5 工作模式
工作模式
• Cortex‐M3支持两种模式和两个特权等级。
特权级 异常handler代码 Bootloader或主应 用程序代码 处理模式(handler mode) 用户级 用法错误
线程模式(thread mode) 线程模式(thread mode)
RESET
工作模式
• Cortex‐M3处理器的工作模式和特权等级共有三种配合。
Control寄存器与微处理器工作模式
工作模式(续)
• 在“线程模式+用户级”下,
禁止访问包含配置寄存器以及调试组件寄存器的系统控制空间 (SCS);P39 禁止使用MSR访问除APSR外的特殊功能寄存器。
• 在特权级下(“处理模式 or 线程模式”)
可通过置位CONTROL[0]来进入用户级; 不管是任何原因产生了任何异常,处理器都将以特权级来运行其服 务例程; 异常返回后将回到产生异常之前的特权级。
CONTROL[0]=? CONTROL[1]=0
CONTROL[0]=0 CONTROL[1]=0
工作模式(续)
• 特权等级和堆栈指针的选择均由CONTROL负责。
(2)若CONTROL[0]=1(线程模式+用户级),则在中断响应的始 末,处理器模式和特权等级都要发生变化。
CONTROL[0]=1 CONTROL[1]=1
• 用户级下(“线程模式”)
代码不能再试图修改CONTROL[0]来回到特权级。 它必须通过产生异常,并通过异常处理程序程序(处于特权级下) 来修改CONTROL[0],才能在线程模式拿到特权级。
工作模式(续)
• 特权级和处理器模式的切换
置位control[0]

第2章ARMcortexM3内部结构详解

第2章ARMcortexM3内部结构详解

2.1 ARMCortex-M3简介
嵌入式跟踪宏单元ETM •选配件 •实时的指令跟踪 •跟踪结果由TPIU输出 数据观察点及跟踪单元DWT: 设置数据观察点,匹配后可触发ETM 可将数据信息输出至ITM 指令跟踪宏单元ITM: 该模块可以支持DWT的调试消息输出 调试消息输出到TPIU 跟踪端口的接口单元TPIU: 提供处理器和外部跟踪设备的数据接口
异常类型
0 1 2 3 4 5 6 7‐10 11 12 13 14 15 16 17 18‐255
表项地址偏移量
0x00 0x04 0x08 0x0C 0x10 0x14 0x18 0x1c‐0x28 0x2c 0x30 0x34 0x38 0x3c 0x40 0x44 0x48‐0x3FF
异常向量
2.1 ARMCortex-M3简介
存储器保护单元MPU •选配件 •将存储器分为多个区域并分别进行保护
2.1 ARMCortex-M3简介
AHB-Lite
AHB APB
2.2 指令集
旧版本指令集 ARM:32位指令集 Thumb:16位指令集
新版本指令集Thumb2指令集 消灭了状态切换的额外开销,节省了执行时间和指令空间。 UAL(统一汇编语言)语法机制,由编译器决定使用32位指令或 16位指令。 不再需要把源代码文件分成按 ARM 编译的和按 Thumb 编译的, 软件开发的管理大大减负。
功能描述
这是个只有1个位的寄存器。当它置1时,就关掉所有可屏蔽 的异常,只剩下NMI和硬fault可以响应。它的缺省值是0,表 示没有关中断。
这是个只有1个位的寄存器。当它置1时,只有 NMI 才能响 应,所有其它的异常,包括中断和fault,通通屏蔽。它的缺 省值也是0,表示没有关异常。主要用于操作系统。

cortex-m3工作模式_工作原理_理论说明以及概述

cortex-m3工作模式_工作原理_理论说明以及概述

cortex-m3工作模式工作原理理论说明以及概述1. 引言1.1 概述Cortex-M3是一款基于ARM架构的微控制器处理器,它在嵌入式系统中具有广泛应用的能力。

该处理器以低功耗、高性能和可靠性著称,广泛应用于各种嵌入式系统中,如汽车电子、智能家居、医疗设备等领域。

本文将对Cortex-M3的工作模式和工作原理进行深入探讨,并介绍了相关的理论知识。

1.2 文章结构本文共分为5个部分。

首先,在引言部分简要介绍了Cortex-M3处理器的概述、应用领域和重要性。

其次,在第2部分“Cortex-M3工作模式”中,我们将详细解释什么是Cortex-M3的工作模式,并列举常见的工作模式及其特点,最后还将介绍工作模式之间的切换过程。

第3部分“Cortex-M3工作原理”将对该处理器的架构概述、处理器核心详解以及访存交互机制进行详细说明。

然后,第4部分“Cortex-M3理论说明”将介绍ARM指令集简介、硬件保护和栈管理以及特殊功能寄存器(SFR)的作用和使用方法。

最后,在第5部分“结论”中,我们将对全文进行总结,并提出进一步研究方向的建议。

1.3 目的本文的目的在于全面了解和掌握Cortex-M3处理器的工作模式、工作原理以及相关理论知识。

通过学习本文,读者将能够理解Cortex-M3在嵌入式系统中运行的方式和机制,从而为嵌入式系统设计与开发提供有力支持。

同时,本文还可以为进一步深入研究该领域奠定基础,并为相关技术人员提供参考资料。

2. Cortex-M3工作模式:2.1 工作模式定义:Cortex-M3是一种高性能、低功耗的32位嵌入式处理器核,具备多种工作模式以满足不同应用需求。

工作模式是指处理器在执行任务时所处的状态。

2.2 常见的工作模式:在Cortex-M3中,常见的工作模式包括运行、睡眠和待机。

以下分别介绍这些工作模式:- 运行(Run):在运行模式下,处理器核心处于正常运行状态,可以执行指令,并响应中断请求。

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

3. 统一的汇编语言
• ARM指令集体系架构下,ARM指令与Thumb 指令分属不同的程序模块,由不同的汇编 器对其分别进行汇编。
• Thumb-2指令集体系架构下, 16bit指令与 32bit指令可以在同一程序模块出现,并由 同一汇编器对其进行汇编。
Toolchain flow with ARM7
ARM7TDMI
r0
r1
r2
r3
State Change
r4 r5
eg. ISR entry/exit
r6
r7
r8
r8
r9
r9
r10
r10
r11
r11
rr1134r1((2slpr))rr1134r1((2slrrpr11))34
(spr)13 (lrr)14
r13 r(1s3p)(srp1)4 r(1l4r)(lr)
2. Thumb-2指令集分类(续)
• 基于Thumb-2指令体系架构编写的代码在执 行 过 程 中 , 处 理 器 不 存 在 ARM 工 作 状 态 和 Thumb工作状态之间的切换。
• 那么,处理器必须能够自动识别当前指令长 度,是16-bit还是32-bit,以正确地执行Thumb2指令代码,它是如何识别呢?
4. Cortex-M3常用的Thumb-2指令集(续)
(1)数据传送指令(续)
MRS/MSR 指令中的Sreg寄存器:
符号 IPSR EPSR APSR IEPSR IAPSR EAPSR PSR MSP PSP PRIMASK BASEPRI BASEPRI_MAX FAULTMASK CONTROL
当前服务中断号寄存器
功能
执行状态寄存器。它里面含T 位,在CM3 中T 位必须是1。 上条指令结果的标志
IPSR+EPSR
IPSR+APSR
EPSR+APSR
xPSR = APSR+EPSR+IPSR 主堆栈指针
进程堆栈指针
常规异常屏蔽寄存器
常规异常的优先级阈值寄存器
等同BASEPRI,但是施加了写的限制:新的优先级比较比旧的高(更小的数) fault 屏蔽寄存器(同时还包含了PRIMASK 的功能,因为faults 的优先级更高) 控制寄存器(堆栈选择,特权等级)
将移位后的寄存器值传送到寄存器中 将16位立即数传送到寄存器的高半字[31:16]中 将16位立即数传送到寄存器的低半字[15:0]中, 并将高半字[31:16]清零 将特殊寄存器PSR中的数据传送到寄存器Rd中 将 寄 存 器 Rn 中 的 数 据 传 送 到 特 殊 寄 存 器 PSR 的 fields位域中
1. 概述(续)
• Cortex-M3处理器使用的指令集是Thumb-2 指令集的子集,它的(指令)工作状态只 有一个,那就是Thumb-2状态。
• Cortex-M3处理器的两种工作状态:
① Thumb-2状态 ② 调试状态
2. Thumb-2指令集分类
• 按照指令的长度分类,Thumb-2指令集可 分为两种:
4. Cortex-M3常用的Thumb-2指令集(续)
(1)数据传送指令(续)
MRS/MSR 用于特权级别条件下访问特殊功能寄 存器。指令语法如下:
➢MRS <Rn>, <SReg> ; 加载特殊功能寄存器的值到Rn ➢MSR <Sreg>,<Rn> ; 传送Rn 的值到特殊功能寄存器
其中,SReg 可以是下表中的一个。
User/System
Unified (UAL)
Register File
Assembler Language
Thumb(2) C/C++
C/C++
Compiler
Code which
Files
operates on the
visible Register
file
4. Cortex-M3常用的Thumb-2指令集
NB: Most compilers automatically provide the Assembler code stubs shown here, allowing majority of code in High Level ‘C’ language
Assembler
Thumb C/C++ Compiler
④ Thumb指令集作为ARM指令集的压缩方案,简洁、 有效,应用广泛并得到很好的支持,通过Thumb指 令替换ARM指令,可以将某些代码的规模减小大约 20%到30%。
1. 概述(续)
对于ARM体系架构的来说(续):
⑤ 但是,有限的Thumb指令仅对基本的算术和逻辑操 作有用:
➢ Thumb状态下,处理器将仅可使用有限数量的寄存器, R8-R12的使用受到限制,
register file set as ARM7 enabled the creation of a
r3 r4
No State Change:
‘Unified Assembler’ which allows Thumb-2 to
r5
Automated by NVIC
r6
mimic 32-bit ARM instructions
(1)数据传送指令
Cortex-M3 中的数据传送类型包括:
① 两个寄存器间传送数据 ② 寄存器与特殊功能寄存器间传送数据 ③ 把一个立即数加载到寄存器
指令 MOV <Rd>, #<immed_8> MOV <Rd>, <Rn> MOV <Rd>, <Rm> MVN <Rd>, <Rm> MOV{S}.W #<modify_constant(immed_12)> MOV{S}.W <Rd>, <Rm>{, <shift>} MOVT.W <Rd>, #<immed_16>
ARM C/C++ Compiler
ARM Cortex-M3 Toolchain Flow
ARM Cortex-M3
The combination of a conditional instruction
r0
sequence IT (If/Then) with the same visible
r1 r2
• 通常,存储器的大小是固定的,而产品的 功能特性却各异,选择恰当的处理器并精 心调整代码是明智的。
1. 概述(续)
对于ARM体系架构的来说:
① 微处理器有两种工作状态:
➢ ARM工作状态 ➢ Thumb工作状态
② Thumb指令集是添加到ARM的标准RISC指令集之上 的独立指令集;
③ Thumb指令集包括了基本的加法、减法、循环移位 以及跳转等大约36条16位指令;
(1)16-bit指令集; (2)32-bit指令集。
2. Thumb-2指令集分类(续)
• 按功能和寻址方式分类
(1)数据传送指令 (2)Load/Store指令 (3)批量Load/Store指令 (4)算术四则运算指令 (5)逻辑操作指令 (6)移位和循环指令 (7)符号扩展指令 (8)字节调序指令REV, REVH,REV16,REVSH (9)位域处理指令 (10)子程序调用与无条件转移指令 (11)隔离(barrier)指令 (12)饱和运算指令 (13) If‐Then指令 (14)比较跳转指令等
• PC寄存器所指向半字的Bits<15:11>的编码格式决定了 CPU所处理指令的长度。
• Thumb-2指令集空间被划分为16-bit 和32-bit 两个子集。 其中,x原则上可以为“0”、“1”任意值,但x 的取值 不能使得0b111xx=0b11100,以及0bxxxxx=0b111xx或者 0bxxxxx=0b11100。
➢ 无法完成诸如处理中断、长跳转、原子存储器(atomic memory)操作,或协处理器操作等等复杂任务,
➢ 也无法像ARM模式那样进行条件执行和移位或循环移 位等操作。
⑥ Thumb代码和标准ARM代码不能混杂使用,必须显 式地在两种工作状态间进行切换,这迫使程序员必须 将所有的16位代码与32位代码分开并隔离到独立的模 块中。
(sp) (lr)
r15 (pc) cpsr spsr spsr
spsrspsr spsr
ASM ASM
User/System
User
Register File
Optimized
Code which operates on the visible Register file
C/C++ Files
C/C++ Files
MOVW.W <Rd>, #<immed_16>
MRS<c> <Rd>, <psr>
MSR<c> <psr>_<fields>,<Rn>
功能描述
将8 位立即数传送到目标寄存器 将低寄存器值传送给低目标寄存器 将高或低寄存器值传送给高或低目标寄存器 将寄存器值取反后传送给目标寄存器
<Rd>, 将12位立即数传送到寄存器中
功能描述 从地址 Rn+offset 处读取一个字节到Rd 从地址Rn+offset 处读取一个半字到Rd 从地址Rn+offset 处读取一个字到Rd 从地址Rn+offset 处读取一个双字(64 位整数) 到Rd1(低32 位)和Rd2(高32 位)中。
相关文档
最新文档