第2章-Cortex-M3微处理器
第2章 ARM-cortex-M3内核1

举例
如果发生了异常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)。 引入两个模式的目的,是用于和区别异常服务例程的代码 和普通应用程序的代码。
特权极别
特权的分级——特权级和用户级。这可以提供一种存储器 访问的保护机制,使得普通的用户程序代码不能意外地, 甚至是恶意地执行涉及到要害的操作。 处理器支持两种特权级,这也是系统一个基本的安全模型。
第2章--Cortex-M3-内核原理3--Thumb-2指令系统PPT优秀课件

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内核

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权威指南J oseph Yiu 著宋岩 译译序我接触ARM的历史约4年,早期是很欣赏这类处理器,到了后来切身使用它们的机会越来越多,慢慢地有了感觉,也更加喜欢了。
在偶然听说Cortex‐M3后,我就冥冥地感到它不寻常。
只是因为其它工作一直没有去了解它,直到今年初才进一步学习,很快就觉得相知恨晚。
当时只能看ARM官方的重量级资料,在看到这本书的英文原稿后,更感觉被电到了一样,于是突然有了把它翻译成中文的冲动。
经过累计约150个小时的奋战,终于有了此译稿。
在翻译过程中,我始终采用下列指导思想:1.尽量使用短句,并且把句子口语化。
我认为高深的道理不一定要用高级的语法句型才能表达。
想想看,即使是几位博士互相聊天讨论一个课题,也还是使用口语吧,而且火花往往就是在这种讨论中产生呢!2.多用修辞方法,并且常常引用表现力强的词汇——甚至包括网络用语和脍炙人口的歌词。
另外,有时会加工句子,使得风格像是对话。
这样做的目的是整个文风更鲜活——有点像为写出高分作文而努力的样子。
这点可能与很多学术著作的“严肃、平实”文风不同,也是一次大胆的尝试。
还希望读者不吝给予反馈。
3.在“宏观”上直译,在“微观”上意译。
英语不仅单一句子的语法和汉语不同,并且句子的连贯方式也与汉语不同。
因此在十几个到几十个单词的范围内,我先把它们翻译成脑子里的“中间语言”,再把中间语言翻译成汉语。
这样,就最大地避免了贻笑大方的“英式汉语”。
4.有些术语名词不方便翻译成汉语,或者目前的翻译方式不统一,或者与其它术语翻译的结果很接近,如error和fault,就只能用英语意会。
此时我就保留英文单词,相信这样比硬生生地翻译成汉语还好。
这些词汇主要是:retarget, fault, region等。
另外,英文中有一个很能精练表达“两者都”意思的单词及其用法:”both”,我也常常保留之。
5.图表对颜色的使用比较丰满,尤其是比较大型的插图,相信这样能帮助读者分析和理解。
第2章 ARM Cortex-M3技术

跳转和控制指令
相关的跳转和控制指令包括B、BL、BLX、BX、 CBNZ、CBZ、IT、TBB、TBH指令; B{cond} label BL{cond} label BX{cond} Rm BLX{cond} Rm 详细信息参考《STM32W108嵌入式无线传感器网 络》2.2节。
移位操作
直接使用指令ASR、LSR、LSL、ROR和 RRX,移位结果写入指定的目标寄存器 寄存器移位结果作为第二操作数被指令使用
ASR:
LSR:
LSL:
ROR:
RRX:
地址对齐
字对齐的地址存取访问被用于一个字、两个字和更多 的字的存取访问,半字对齐的地址存取访问用于半字 的存取访问,字节的访问始终是对齐的。 Cortex-M3处理器只对以下指令支持非对齐的存取访 问: LDR、LDRT LDRH、LDRHT LDRSH、LDRSHT STR、STRT STRH、STRHT
1. 采用新的Thumb-2指令集架构的Cortex-M3处 理器,与执行Thumb指令的处理器相比,在效率方面 有哪些提高? 2. Cortex-M3处理器是多少位的?有哪些寄存器? 3. APSR寄存器标志位如何被指令操作影响,请举例 说明。 4. Cortex-M3处理器有哪些移位操作指令?针对每 种移动操作画出一个移位操作过程示意图。 5. 指令LDREX、LDREXB、LDREXH的一般格式 是什么?各举一条指令,并说明其具体含义。
乘法和除法指令
MUL执行乘法,MLA执行乘法累加,MLS执行乘法 扣除,都是用32位的操作数,保存32位的结果。 句法表达式: MUL{S}{cond} {Rd,} Rn, Rm MLA{cond} Rd, Rn, Rm, Ra MLS{cond} Rd, Rn, Rm, Ra
cortex-m3体系结构

5、XPSR----程序状态寄存器
应用状态寄存器(APSR) 中断状态寄存器(IPSR) 执行状态寄存器(EPSR)
程序状态寄存器----应用状态寄存器(APSR)
APSR的位分配
31 30 29 28 27 26
0
NZCVQ
保留
饱和(sticky saturation)标志
溢出标志: 1:溢出 0:没有溢出
7、控制寄存器CONTROL
CONTROL[1:0] 由两个状态位组成:
CONTROL[1] CONTROL[0]
0
主堆栈
特权级
1
进程堆栈
用户级
寄存器总结
寄存器名称 APSR IAPSR EAPSR XPSR
功能 应用状态寄存器 APSR和IPSR的组合 APSR和EPSR的组合 APSR、EPSR和IPSR的组合
STEP4
EPSR使用的是[26:24]和[15:10]位
6、异常中断寄存器
6-1中断屏蔽寄存器( PRIMASK )
PRIMASK 1
0
只有最低位有效
屏蔽所有中断
响应中断
相当于中断总开关, 为1,所有中断被屏蔽; 为0,中断能正常响应。
6-2 中断屏蔽寄存器BASEPRI
BASEPRI 2
优先级0 优先级1
IPSR EPSR IEPSR MSP PSP PRIMASK BASEPRI BASEPRI_MAX FAULTMASK CONTROL
中断状态寄存器 执行状态寄存器 IPSR和EPSR的组合 主堆栈指针 进程堆栈指针 中断屏蔽寄存器 可屏蔽等于和低于某个优先级的中断 BASEPRI允许设置的最大值 错误屏蔽寄存器 控制寄存器
第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]
《ARM 白皮书—Cortex-M3 处理器简介》

I
ARM 白皮书
第一章 简介
第1章 简介
基于ARM嵌入式处理器的片上系统解决方案可应用于企业应用、汽车系统,家庭网络 和无线技术等市场领域。ARM CortexTM系列提供了一个标准的体系结构来满足以上各种技 术的不同性能要求,其包含的处理器基于ARMv7 架构的三个分工明确的部分。A部分面向 复杂的尖端应用程序,用于运行开放式的复杂操作系统;R部分针对实时系统;M部分为成 本控制和微控制器应用提供优化。Cortex-M3 是首款基于ARMv7-M架构的处理器,是专门 为了在微控制器,汽车车身系统,工业控制系统和无线网络等对功耗和成本敏感的嵌入式应 用领域实现高系统性能而设计的,它大大简化了可编程的复杂性,使ARM架构成为各种应 用方案(即使是最简单的方案)的上佳选择。
1.3 针对敏感市场降低成本和功耗
成本是采用高性能微控制器永恒的屏障。由于先进的制造工艺相当昂贵,只有降低芯片 的尺寸才有可能从本质上降低成本。为了减小系统区域,Cortex-M3 处理器采用了至今为止 最小的 ARM 内核,该内核的核心部分(0.18um G)的门数仅为 33000 个,它把紧密相连的
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储单元地址
地址=编号
为每个存储单元编排的一个唯一的编号
现代计算机中,主存储器是字节可寻址的:主存储器的每个存储单元 具有一个地址,保存一个字节的信息
第2章 Cortex-M3微处理器
• 三级流水
取指 译码 执行
程序计数器PC确定下一条指令的主存地址,PC具有自动增量的能力,实 现程序的顺序执行,转移指令改变PC的数值,实现分支、循环、调用
DSP NVIC DSP DSP+浮点运算 DSP, Jazelle
5
第2章 Cortex-M3微处理器
2.1 Cortex-M3微处理器简介
• ARMv7架构:ARMv7的三个款式都以Cortex作为主名。
Cortex-A(ARMv7-A):需要运行复杂应用程序的“应用处理器” 。支持 大型嵌入式操作系统,比如Symbian(诺基亚智能手机用),Linux, 以及微软的Windows CE和智能手机操作系统Windows Mobile。
8
指令集演进图
第2章 Cortex-M3微处理器
2003年:Thumb-2指令集出现,它是Thumb的超集,它支持16位和32位指令。 使得同样工作需要的指令周期数也明显下降。 Cortex-M3只支持Thumb-2指令集。 用ARM汇编语言程序不能直接移植到CM3上来。 用Thumb指令写的汇编程序可以。
11
第2章 Cortex-M3微处理器
Cortex-M3的一个简化视图
12
第2章 Cortex-M3微处理器
Cortex-M3处理器系统方框图
13
第2章 Cortex-M3微处理器
• Cortex-M3内核
中央处理器核心: 取指单元、译码单元、寄存器组、Aபைடு நூலகம்U; 嵌套向量中断控制器(NVIC); 系统时钟(SysTick)。
•进程堆栈指针(PSP):
由用户的应用程序代码使用。简单的应用程序只使用MSP就够了(不处于异常 服用例程中时) 。
20
第2章 Cortex-M3微处理器
堆栈的说明:堆栈是一种存储器的使用模型。它由一块连续的内存和一个栈顶 指针组成,用于实现“后进先出”的缓冲区。其最典型的应用,就是在数据处 理前先保存寄存器的值,再在处理任务完成后从中恢复先前保护的这些值。在 执行入栈(PUSH )和出栈(POP)操作时,那个通常被称为SP的地址寄存器, 会由硬件自动调整它的值,以避免后续操作破坏先前的数据。
6
第2章 Cortex-M3微处理器
Cortex-M3处理器内核是单片机的中央处理单元(CPU)。芯片制造商得到 CM3处理器内核的使用授权后,可以把CM3内核用在自己的硅片设计中,添加 存储器,外设,I/O以及其它功能块,设计出不同的单片机。
7
第2章 Cortex-M3微处理器
• 指令集
ARM处理器一直支持两种形式上相对独立的指令集。 32位的ARM指令集——对应处理器状态:ARM状态 16位的Thumb指令集——对应处理器状态:Thumb状态
23
第2章 Cortex-M3微处理器
R14为程序连接寄存器LR:在执行BL时,PC的返回地址自动保存进LR。
LR在子程序调用时保存子程序的返回地址。
main
;主程序
…
BL function1 ; 使用“分支并连接”指令调用function1
…
Function1
…
; function1的代码
BX LR
• 总线互联网络(总线矩阵) • 存储器保护单元(MPU)* • 跟踪系统与调试接口
14
存储程序和程序控制
存储程序
把指令以代码的形式事先输入到计算机的主存储器中,这些指令按一 定的规则组成程序
程序控制
当计算机启动后,程序就会控制计算机按规定的顺序逐条执行指令,
自动完成预定的信息处理任务
它们,32位的thumb-2指令则不受限制。它们也是32位字长,且复位后的初始 值是不可预料的。
19
第2章 Cortex-M3微处理器
2. 堆栈指针R13(SP)
Cortex-M3拥有两个堆栈指针,任一时刻只能使用其中的一个。
•主堆栈指针(MSP):
复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断 服务例程)
10
第2章 Cortex-M3微处理器
2.2 Cortex-M3微处理器内核体系结构
• Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32
位的,存储器接口也是 32 位的。
• CM3 采用了哈佛结构,拥有独立的指令总线和数据总线。 • 指令总线和数据总线共享同一个存储器空间(统一编址)。 • CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache。 • CM3内部包含许多调试组件,在硬件水平上支持调试操作。
25
第2章 Cortex-M3微处理器
PC是指向被取指的指令,而不是指向正在执行的指令 ,正在执行的指令的地址为pc-8。在正常操作过程中 ,在执行一条指令的同时对下一条指令进行译码,并 将第三条指令从存储器中取出。 处理器处于ARM状态时,每条指令为4个字节,所以 PC值为正在执行的指令地址加8字节,即是: PC值 = 当前程序执行位置+8字节 处理器处于Thumb状态时,每条指令为2字节,所以 PC值为正在执行的指令地址加4字节,即是: PC值 = 当前程序执行位置+4字节
专用寄存器:只用于特定目的
第2章 Cortex-M3微处理器
2.3 寄存器组 1. 通用寄存器
•R0-R12都是32位通用寄存器,用于数据操作。 •R0-R7也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32位
,复位后的初始值是不可预料的。
•R8-R12 也被称为高组寄存器。这是因为只有很少的16位 Thumb指令能访问
ARM1156T2(F)-S Cortex-M3 Cortex-R4 Cortex-R4F Cortex-A8
架构版本号 v4T v4T v5E v4T v4T v5E v5E v5E v5E v5E v5E v5E v5E v6 v6 v6
v6 v7-M v7-R v7-R v7-A
存储器管理特性
Cortex-R(ARMv7-R):硬实时且高性能的处理器。面向高端实时市场。 像高档轿车的组件,大型发电机控制器,机器手臂控制器等,要求可靠 性高,对事件的反应也要极其敏捷。
Cortex-M(ARMv7-M):面向单片机的应用而量身定制。面向实时控制系 统,具有低成本、低功耗、极速中断反应以及高处理效率。
其它特性
MMU MMU MMU MPU
MPU(可选) MMU MMU MMU 或 MPU MMU MMU+TrustZone MMU+多处理器缓存 支持 MPU MPU(可选) MPU MPU MMU+TrustZone
DSP,Jazelle
DSP,Jazelle DSP DSP DMA,DSP DSP DSP DSP DSP, Jazelle DSP, Jazelle DSP, Jazelle DSP
第2章 Cortex-M3微处理器
4 .程序计数寄存器(PC)R15: Cortex-M3中的指令是隶属于Thumb2指令集,且至少是半字对齐的,所以PC的 LSB总是读回0。指令始终与字或半字边界对齐。 在编写分支指令时,无论是直接写PC的值还是使用分支指令,都必须保证加载 到PC的数值是奇数(即LSB=1),用以表明当前指令在Thumb-2状态下执行。
处理器名字 ARM7TDMI ARM7TDMI-S ARM7EJ-S ARM920T ARM922T ARM926EJ-S ARM946E-S ARM966E-S ARM968E-S ARM966HS ARM1020E ARM1022E ARM1026EJ-S ARM1136J(F)-S ARM1176JZ(F)-S ARM11 MPCore
22
第2章 Cortex-M3微处理器
3. 连接寄存器(LR)R14: 当调用一个子程序时,用R14存储返回地址 ,目的是为了减少访问内存的 次数。
• 子程序:与主程序分开的、完成
特定功能的一段程序
• 当主程序(调用程序)执行调用
指令CALL调用子程序
• 子程序(被调用程序)执行返回
指令RET返回主程序
27
第2章 Cortex-M3微处理器
5 .特殊功能寄存器: 程序状态字寄存器组(xPSR) 中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI) 控制寄存器(CONTROL)
28
第2章 Cortex-M3微处理器
5 .特殊功能寄存器——程序状态寄存器 xPSR:记录ALU标志(0标志,进位标志,负数标志,溢出标志),执行状态 ,以及当前正服务的中断号 程序状态寄存器在其内部又被分为三个子状态寄存器:
16
第2章 Cortex-M3微处理器
2.3 寄存器组
17
寄存器(Register)
• 处理器内部需要高速存储单元,用于暂时存放程序执行过程中的代码和
数据
• 透明寄存器
对应用人员不可见、不能直接控制的寄存器
• 可编程(Programmable)寄存器
具有引用名称、供编程使用
通用寄存器:数量较多、使用频度较高,具有多种用途
Thumb-2指令集与Thumb指令集的关系
9
第2章 Cortex-M3微处理器
• Cortex-M3的应用场合
低成本单片机:用于做玩具和小电器的单片机,都能使用CM3作为内核。 汽车电子:CM3同时拥有非常高的性能和极低的中断延迟,实现实时应用。 数据通信:适合于很多数据通信应用,尤其是无线数传和Ad-Hoc网络,如