ARMCortexM3内核结构.docx
- 文档编号:10307672
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:64
- 大小:552.32KB
ARMCortexM3内核结构.docx
《ARMCortexM3内核结构.docx》由会员分享,可在线阅读,更多相关《ARMCortexM3内核结构.docx(64页珍藏版)》请在冰豆网上搜索。
ARMCortexM3内核结构
ARMCortex-M3内核结构
2.1ARMCortex-M3处理器简介
2.1.1概述
ARM公司成立于上个世纪九十年代初,致力于处理器内核研究,ARM即AdvaneedRISCMachines
的缩写,ARM公司本身不生产芯片,只设计内核,靠转让设计许可,由合作伙伴公司来生产各具特色的芯片。
这种运行模式运营的成果受到全球半导公司以及用户的青睐。
目前ARM体系结构的处理器内核有:
ARM7TDMIARM9TDMIARM10TDMIARM11以及Cortex等。
2005年ARMf出的ARMCortex系列内核,分别为:
A系列、R系列和M系列,其中A系列是针对可以运行复杂操作系统(Linux、WindowsCE、
Symbian等)的处理器;R系列是主要针对处理实时性要求较高的处理器(汽车电子、网络、影像系统);M系列又叫微控制器,对开发费用敏感,对性能要求较高的场合。
Cortex-M系列目前的产品有M0M1、M3其中M1用在FPGA中。
Cortex-M系列对微控制器和低成本应用提供优化,具有低成本、低功耗和高性能的特点,能够满足微控制器设计师进行创新设计的需
求。
其中,ARMCortex-M3处理器的性能是ARM7勺两倍,而功耗却只有ARM7勺1/3,适用于众多高性能、极其低成本需求的嵌入式应用,如微控制器、汽车系统、大型家用电器、网络装置等,ARM
Cortex-M3提供了32位微控制器市场前所未有的优势。
Cortex-M3内核,内部的数据路径为32位,寄存器为32位,存储器接口也是32位。
Cortex-M3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问分开进行。
Cortex-M3还提
供一个可选的MPU对存储器进行保护,而且在需要的情况下也可以使用外部的cache。
另外在
Cortex-M3中,存储器支持小端模式和大端存储格式。
Cortex-M3内部还附赠了很多调试组件,用于
在硬件水平上支持调试操作,如指令断点,数据观察点等。
另外,为支持更高级的调试,还有其它可
选组件,包括指令跟踪和多种类型的调试接口。
2.1.2内核结构组成及功能描述
Cortex-M3微控制器内核包括处理核心和许多的组件,目的是用于系统管理和调试支持。
如图2.1
为Cortex-M3内核方框图。
图2.1Cortex-M3内核方框图
1.处理器内核
Cortex-M3处理器内核采用ARMv7-M架构,其主要特性如下:
Thumb-2指令集架构(ISA)的子集,包含所有基本的16位和32位Thumb-2指令;
哈佛处理器架构,在加载/存储数据的同时能够执行指令取指;
带分支预测的三级流水线;
32位单周期乘法;
硬件除法;
Thumb状态和调试状态;
处理模式和线程模式;
ISR的低延迟进入和退出;
可中断-可继续(interruptible-continued)的LDM/STMPUSH/POP
支持ARMv6类型BE8/LE;
支持ARMv6非对齐访问。
2.NVIC(嵌套向量中断控制器)
NVIC与处理器内核是紧密耦合的,这样可实现快速、低延迟的异常处理。
在Cortex-M微控制器此功能非常强大。
3.总线矩阵
总线矩阵用来将处理器和调试接口与外部总线相连。
处理器
包含4个总线接口:
ICode存储器接口:
从Code存储器空间(0x0000000-Ox仆FFFFFF)的取指都在这条32位AHBLite总线上执行。
DCode存储器接口:
对Code存储器空间(0x0000000-0x仆FFFFFF)进行数据和调试访问都在这条32位AHBLite总线上执行。
系统接口:
对系统空间(0x20000000-0xDFFFFFFF进行取指、数据和调试访问都在这条32位
AHBLite总线上执行。
外部专用外设总线(PPB:
对外部PPB空间(0xE0040000-0xE00FFFFF进行数据和调试访问都在这条32位APB总线(AMBAv2.0)上执行。
跟踪端口接口单元(TPIU)和厂商特定的外围器件都在这条总线上。
注:
处理器包含一条内部专用外设总线,用来访问嵌套向量中断控制器(NVIC)、数据观察点和触
发(DWT、Flash修补和断点(FPB,以及存储器保护单元(MPU。
4.FPB
FPB单元实现硬件断点以及从代码空间到系统空间的修补访问,FPB有8个比较器。
5.DWT
数据观察点和跟踪,调试功能部件。
6.ITM
ITM是一个应用导向(即plicationdriven)的跟踪源,支持对应用事件的跟踪和printf类型的
调试。
7.MPU
存储器保护单元(MPU是用来保护存储器的一个元件。
处理器支持标准的ARMv7“受保护的存储器系统结构”(PMSA模型。
如果希望向处理器提供存储器保护,则可以使用可选的MPUMPU对访问允
许和存储器属性进行检验。
它包含8个区和一个可选的执行默认存储器映射访问属性的背景区。
8.ETM
ETM支持指令跟踪的低成本跟踪宏单元。
9.TPIU
TPIU用作来自ITM和ETM如果存在)的Cortex-M3内核跟踪数据与片外跟踪端口分析仪之间的桥接。
10.SW/JTAG-DP
Cortex-M3处理器可配置为具有SW-DP或JTAG-DP调试端口的接口,或两者都有。
这两个调试端口提供对系统中包括处理器寄存器在内的所有寄存器和存储器的调试访问。
2.2内核寄存器组织
如图2.2所示,Cortex_M3内核寄存器分为16个通用寄存器RZR15和7个特殊功能寄存器。
图2.2寄存器组织图
2.2.1通用寄存器R0-R15
R0〜R12寄存器:
是真正意义上的通用。
在处理器运行过程中,作数据的寄存。
R13为堆栈指针寄存器:
堆栈指针是用于访问堆栈,也即系统的RAM区。
Cortex_M3中采用了两个
堆栈指针:
主堆栈指针(MSP和进程堆栈指针(PSP,R13在任何时刻只能是其中一个,默认情况为MSP可以通过控制寄存器(CONTORL来改变。
Cortex_M3中堆栈方向是向低地址方向增长,为满堆栈机制。
堆栈操作是通过PUSH和POP来完成操作的。
例如MSP当前指针指向:
0x2000_000C;R0=0x00000000。
执行:
PUSHRO
此时MSF指向:
0x2000_0008执
行示意如图2.3所示。
2.3堆栈操作示意图
R14程序连接寄存器(LR):
在执行分支(B)和链接(BL)指令或带有交换分支(BX)和链接指令(BLX)时,PC的返回地址自动保存进LR。
比如在子程序调用时用保存子程序的返回地址。
LR
也用于异常返回,但是在这里保存的是返回后的状态,不是返回的地址,异常返回是通过硬件自动出栈
弹出之前压入的PC完成的。
R15程序计数器(PC):
是程序运行的基础,具有自加的功能。
该寄存器的位0始终为0,因此,
指令始终与字或半字边界对齐。
2.2.2特殊功能寄存器
特殊功能寄存器分为程序状态寄存器、中断屏蔽寄存器和控制寄存器三类。
xPSR程序状态寄存器:
系统级的处理器状态可分为3类,应用状态寄存器(APSR、中断状态寄
存器(IPSR)、执行状态寄存器(EPSR,可组合起来构成一个32位的寄存器,统称xPSR
表2.1xPSR寄存器
寄存器名
位
31
30
29
28
27
26:
25
24
23:
2019:
16
15:
10
9
87654:
0
APSR
N
Z
C
V
Q
IPSR
中断编号
EPSR
ICI/IT
T
ICI/IT
xPSR寄存器的各位的功能如表2.2:
表2.2xPSR寄存器各位功能
位
名称
定义
31
N
负数或小于标志:
1:
结果为负数或小于;0结果为正数或大于
30
Z
零标志:
1:
结果为0;0:
结果为非0
29
C
进位/借位标志:
1:
进位或借位;0没有进位或借位
28
V
溢岀标志:
1:
溢岀;0:
没有溢岀
27
Q
粘着饱和标志:
1:
已饱和;0:
没有饱和
26:
25
15:
10
IT
IF-Then位。
它们是if-Then指令的执行状态位。
包含if-Then模块的指令数目和它们的执行条件
24
T
用于指示处理器当前是ARM状态还是Thumb状态
15:
12
ICI
可中断-可继续的指令位:
如果在执行LDM或STM操作时产生一次中断,则LDM或STM操作暂停,该位来保存该操作中下一个寄存器操作数的编号,在中断响应之后,处理器返回由该位指向的寄存器并恢复操作。
8:
0
ISR
占先异常的编号
中断屏蔽寄存器:
分为三组,分别是PRIMASKFAULTMASKBASEPRI
PRIMASK为片上外设总中断开关,该寄存器只有位0有效,当该位为0是响应所有外设中断;当该
位为1时屏蔽所有片上外设中断。
FAULTMAS寄存器管理系统错误的总开关,该寄存器中有位0有效,当该位为0时,响应所有的异
常;为1屏蔽所有的异常。
BASEPR寄存器用来屏蔽优先级等于和小于某一个中断数值的寄存器。
控制寄存器:
CONTROL两个作用,其一用于定义处理器特权级别,其二用于选择堆栈指针,如表3.3所示。
表2.3CONTROL寄存器
位
功能
CONTROL[1]
堆栈指针选择
0:
选择主堆栈指针MSP
1:
选择进程堆栈指针PSP
CONTROL[0]
0:
特权级
1:
用户级
CONTROL[0]异常情况下,处理器总是处于特权模式,CONTROL[(位总是为0;在线程模式情况下
(非异常情况),处理器可以工作在特权级也可工作在用户级,该位可为0或1。
特权级下所有的资源
都可以访问,而用户级下被限制的资源不能访问,比如MPU被限制的资源。
CONTROLS为0时,只使用MSP此时用户程序和异常共享同一个堆栈,处理器复位后默认的也是
该模式。
为1时,用户应用程序使用进程堆栈PSP而中断任然得使用主堆栈MSP这种双堆栈机制,特
别适合在带有OS(操作系统)的环境下使用,只要OS内核在特权级下执行,而用户应用程序在用户模式
下执行,就可很好的将代码隔离互不影响。
2.3处理器操作模式
ARMCortex-M3支持2个模式和两个特权等级。
如图2.4所示,在嵌入式系统应用程序中,程序代码涉及异常服务程序代码和非异常服务程序代码,这些代码可以工作在处理器特权级也可以工作在用
户级级,但有区别。
当处理器处在线程模式下时,既可以使用特权级,也可以使用用户级;另一方面,
handler模式总是特权级的。
在复位后,处理器进入线程模式+特权级。
图2.4操作模式和特权等级
在线程模式+用户级下,对系统控制空间(SCSOxEOOOEOOO〜OxEOOOEFFF,包括NVICSysTick、
MPU以及代码调试控制所用的寄存器)的访问将被禁止。
除此之外,还禁止使用MRS/MS访问,除了APSR
之外的特殊功能寄存器。
如果操作,则对于访问特殊功能寄存器的,访问操作被忽略;而对于访问SCS
空间的,将产生错误。
在特权级下不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后,系统将回到产生异常时所处的级别,同时特权级也可通过置位CONTROL[0来进入用户级。
用户级下
的代码不能再试图修改CONTROL[0来回到特权级。
它必须通过一个异常handler,来修改CONTROL[0]
才能在返回到线程模式后进入特权级。
如图2.5所示。
图2.5处理器模式转换图
把代码按特权级和用户级分开处理,有利于使Cortex-M3的架构更加稳定可靠。
例如,当某个用
户程序代码出问题时,可防止处理器对系统造成更大的危害,因为用户级的代码是禁止写特殊功能寄
存器和NVIC中寄存器的。
另外,如果还配有MPU保护力度就更大,甚至可以阻止用户代码访问不属
于它的内存区域。
在引入了嵌入式实时操作系统中,为了避免系统堆栈因应用程序的错误使用而毁坏,我们可以给应用程序专门配一个堆栈,不让它共享操作系统内核的堆栈。
在这个管理制度下,运行在线程模式的用
户代码使用PSP,而异常服务例程则使用MSP这两个堆栈指针的切换是智能全自动的,在异常服务的
始末由Cortex-M3硬件处理。
如前所述,特权等级和堆栈指针的选择均由CONTROL责。
当CONTROL[0]=0在异常处理的始
末,只发生了处理器模式的转换,如图2.6所示。
若CONTROL[0]=1(线程模式+用户级),则在
中断响应的始末,处理器模式和特权等级都要发生变
化,如图2.7所示。
CONTROL:
0]只有在特权级下才能访问。
用户级的程序如想进入特权级,通常都是使用一条“系
CONTROL[Q。
统服务呼叫指令(SVC”来触发“SVC异常”,该异常的服务例程可以视具体情况而修改
图2.6中断前后的状态转换
图2.7中断前后的状态转换+特权等级切换
2.4存储器系统
2.4.1存储器映射
Cortex-M3采用了固定的存储映射结构,如图2.8所示。
Cortex-M3的地址空间是4GB,程序可以在代码区,内部SRAM区以及外部RAM区中执行。
但是因为指令总线与数据总线是分开的,最理想的是把程序放到代码区,从而使取指和数据访问各自使用己的总
线。
内部SRAM区的大小是512MB用于让芯片制造商连接片上的SRAM这个区通过系统总线来访问。
在这个区的下部,有一个1MB的区间,被称为“位带区”。
该位带区还有一个对应的32MB的“位带别
名(alias)区”,容纳了8M个“位变量”(对比8051的只有128个位变量),位带区对应的是最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特。
位带操作只适用于数据访问,不适用于取指。
通过位带的功能,可以把多个布尔型数据打包在单一的字中,却依然可以从位带别名区中,像访问普通内存一样地使用它们。
位带别名区中的访问操作是原子的,消灭了传统的“读一改一写”三
OxFFFFFFFF
OxEOIOOOOOOxEOOFFFFF
OxEOO4OOOO
OxEOO3FFFF
OxEOOOOOOOOxDFFFFFFF
OxAOOOOOOOOx9FFFFFFF
Ox6OOOOOOOOx5FFFFFFF
Ox4OOOOOOO
Ox3FFFFFFF
Ox2OOOOOOOOxIFFFFFFF
OxOOOOOOOO
片上外设对应512MB的空间,芯片上所有与外围设备相关的寄存器都位于该区域。
这个区中也有一
条32MB的位带别名,以便于快捷地访问外设寄存器,用法与内部SRAM区中的位带相同。
例如,可以方
便地访问各种控制位和状态位。
要注意的是,外设区内不允许执行指令。
通常半导体厂商就是修改此区域的片上外设,来达到各具特色的、个性化的设备。
还有两个1GB的范围,分别用于连接外部RAM和外部设备,它们之中没有位带。
两者的区别在于外部RAM区允许执行指令,而外部设备区则不允许。
最后还剩下0.5GB的隐秘地带,包括了系统级组件,内部私有外设总线,外部私有外设总线,以及由
提供者定义的系统外设。
私有外设总线有两条:
AHB私有外设总线,只用于CM3内部的AHB外设,它们是:
NVIC,FPB,DWT和ITM。
APB私有外设总线,既用于CM3内部的APB设备,也用于外部设备(这里的“外部”是对内核而言)。
Cortex-M3允许器件制造商再添加一些片上APB外设到APB私有总线上,它们通过APB接口来访问。
NVIC所处的区域叫做“系统控制空间(SCS”,在SCS里的除了NVIC外,还有SysTick、MPU以
及代码调试控制所用的寄存器。
最后,未用的提供商指定区也通过系统总线来访问,但是不允许在其中执行指令。
2.4.2位带操作
在Cotex-M3存储器映射中包括两个位操作区。
分别位于SRAM和片上外设存储区的最低1MB空间
中。
这两个位带中的地址除了可以像普通的RAM一样使用外,它们还都有自己的“位带别名区”,位
带别名区把每个比特膨胀成一个32位的字形成位地址。
当你通过位带别名区访问这些字时,就可以达
到访问原始比特的目的,其对应关系如图2.8所。
位地址与位别名对应关系统如下:
对
于SRAM位带区的某个位:
Aliasaddr0x22000000((A-0x20000000)8n)4
二0x22000000(A-0x2000000C)32n4
对于片上外设位带区的某个位:
Aliasaddr=0x42000000((A-0x4000000C)8n)4
=0x42000000(A-0x4000000C)32n4
在上述表达式中,A表示要操作的位所在的字节地址,n(nW7)表示位序号。
2.9位操作对应关系图
举例:
将地址0x20000000的第2位置1。
通过上述计算关系,可计算出位带别名为0x22000008。
如程序清单L2.1所示。
程序清单L2.1SRAM位操作实例
LDRR0,=0x22000008
LDRR1,=OxO1
STRR1,[R0]
将片上外设I/O端口的A口的第0位(也即PORTA0为输出,其A口的方向寄存器地址为0x40004400,设置1作为输出,可根据上述关系计算出位带别名为0x42088000。
如程序清单L2.2所示。
程序清单L2.2片上外设位操作实例
LDRR0,=0x42088000
LDRR1,=0x01
STRR1,[R0]
注:
采用大端格式时,对位邦定别名区的访问必须以字节方式,否则访问不可预知。
2.5异常
ARMCortex-M3中异常涉及异常的类型、优先级、向量表等,本节并以Luminary系列微控制器为例
说明异常的具体行为。
2.5.1异常类型
在Cortex-M3中有一个与内核紧耦合部件叫嵌套向量中断控制器(NVIC,NestedVectoredInterruptController),定义了16种系统异常和240路外设中断。
通常芯片设计者可自由设计片上外
设,因此具体的片上外设中断都不会用到多达240路。
如表2.4所示系统异常类型,表2.5所示为外设中
断类型。
Cortex-M3中目前只有11种系统异常可用分别是:
系统复位、NMI(不可屏蔽中断)、硬件故障、
存储器管理、总线故障、用法故障、SVCall(软件中断)、调试监视器中断、PendSV係统服务请求)、
SysTick(24位定时器中断)。
240路外设中断,是指片上外设的各模块,比如I/O口、UART通信接口、
SSI总线接口等所需的中断。
表2.4异常类型
编号
类型
优先级
描述
0
-
-
复位时载入向量表的第一项作为主堆栈栈顶地址。
1
复位
-3
复位。
2
NMI
-2
不可屏蔽中断(来自外部NMI输入脚)。
3
硬故障
-1
当故障由于优先级或者是可配置的故障处理程序被禁止的原因而无法激活时,所有类型故障都会以硬故障的方式激活。
4
存储器管理
可编程
MPU不匹配,包括访问冲突和不匹配。
5
总线故障
可编程
预取指故障、存储器访问故障和其它地址/存储器相关的故障。
6
用法故障
可编程
由于程序错误导致的异常,通常是使用一条无效指令,或都是非法的状态转换。
7-10
保留
-
保留
11
SVCall
可编程
执行SVC指令的系统服务调用。
12
调试监视器
可编程
调试监视器(断点,数据观察点,或是外部调试请求)
13
保留
-
14
PendSV
可编程
系统服务的可触发(pendable)请求。
15
SysTick
可编程
系统节拍定时器。
表2.5中断类型
编号
类型
优先级
描述
16
IRQ#0
可编程
外设中断#0
17
IRQ#1
可编程
外设中断#1
J
J
255
IRQ#239
可编程
外设中断#239
2.5.2优先级
Cortex-M3的异常功能非常强大,机制非常灵活,异常可以通过占先、末尾连锁和迟来等处理来降低中断的延迟。
优先级决定了处理器何时以及怎样处理异常。
Cortex-M3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占,绝大多
数芯片都会精简设计,实际中支持的优先级数会更少,如8级、16级、32级等,通常的做法是裁掉表
达优先级的几个低端有效位(防止优先级反转),以减少优先级的级数。
比如Luminary的芯片采用8
级优先级。
Cortex-M3中NVIC支持由软件指定的可配置的优先级(称为软件优先级),其寄存器地址为:
0xE000_E400-0xE000_E4EF通过对中断优先级寄存器的8位PRI_N区执行写操作,来将中断的优先级
指定为0-255。
硬件优级随着中断中的增加而降低。
0优先级最高,255优先级最低。
指定软件优先级
后,硬件优先级无效。
例如:
如果将INTISR[0]指定为优先级1,INTISR[31]指定为优先级0,则INTISR[0]的优先级比INTISR[31]低。
为了对具有大量中断的系统加强优先级控制,Cortex-M3支持优先级分组,通过NVIC控制,设置为
占先优先级和次优先级。
可通过对应用程序中断及复位控制寄存器(AIRCR地址为:
0xE000_ED00)的
[10:
8]位进行设置。
如果有多个激活异常共用相同的组优先级,则使用次优先级区来决定同组中的异常优
先级,这就是同组内的次优先级。
如表2.6应用程序中断及复位控制寄存器,表2.7为占先优先级和次优
级的关系。
表2.6应用程序中断及复位控制寄存器(AIRCR,地址:
QxEQQQEDQQ)
位段
名称
类型
复位值
描述
[31:
16]
VECTKEY
RW
-
访问钥匙:
任何对该寄存器的写操作,都必须同时把0X05FA写入此段,否则写操作被忽略。
若读取此半字,则读回值为0XFA05。
15
ENDIANESS
R
-
指示端设置。
1:
大端,0:
小端。
[10:
8]
PRIGROUP
R/W
Q
优先级分组
2
SYSRESETREQ
W
-
请求芯片控制逻辑产生一次复位
1
VECTCLRACTIVE
W
-
清零所有异常的活动状态信息。
通常只在调试时用,或都在OS从错误中恢复时用。
0
VECTRESET
W
-
复位Coretex-M3微控制器内核。
表2.7抢占优先级和次优先级分组位置的关系
分组位置
表达抢占优先级的位段
表达
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARMCortexM3 内核 结构