ARMCortexM3内核结构Word格式.docx

上传人:b****4 文档编号:7355220 上传时间:2023-05-08 格式:DOCX 页数:72 大小:56.40KB
下载 相关 举报
ARMCortexM3内核结构Word格式.docx_第1页
第1页 / 共72页
ARMCortexM3内核结构Word格式.docx_第2页
第2页 / 共72页
ARMCortexM3内核结构Word格式.docx_第3页
第3页 / 共72页
ARMCortexM3内核结构Word格式.docx_第4页
第4页 / 共72页
ARMCortexM3内核结构Word格式.docx_第5页
第5页 / 共72页
ARMCortexM3内核结构Word格式.docx_第6页
第6页 / 共72页
ARMCortexM3内核结构Word格式.docx_第7页
第7页 / 共72页
ARMCortexM3内核结构Word格式.docx_第8页
第8页 / 共72页
ARMCortexM3内核结构Word格式.docx_第9页
第9页 / 共72页
ARMCortexM3内核结构Word格式.docx_第10页
第10页 / 共72页
ARMCortexM3内核结构Word格式.docx_第11页
第11页 / 共72页
ARMCortexM3内核结构Word格式.docx_第12页
第12页 / 共72页
ARMCortexM3内核结构Word格式.docx_第13页
第13页 / 共72页
ARMCortexM3内核结构Word格式.docx_第14页
第14页 / 共72页
ARMCortexM3内核结构Word格式.docx_第15页
第15页 / 共72页
ARMCortexM3内核结构Word格式.docx_第16页
第16页 / 共72页
ARMCortexM3内核结构Word格式.docx_第17页
第17页 / 共72页
ARMCortexM3内核结构Word格式.docx_第18页
第18页 / 共72页
ARMCortexM3内核结构Word格式.docx_第19页
第19页 / 共72页
ARMCortexM3内核结构Word格式.docx_第20页
第20页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

ARMCortexM3内核结构Word格式.docx

《ARMCortexM3内核结构Word格式.docx》由会员分享,可在线阅读,更多相关《ARMCortexM3内核结构Word格式.docx(72页珍藏版)》请在冰点文库上搜索。

ARMCortexM3内核结构Word格式.docx

SW-DPJTAG-DP

专用外设总线(部)AHB-AP

APB

ROM表

总线矩阵

I-code总线D-code总线系统总线

系统总线(AHB)

静态RAM外部RAM外部

控制器设备

AHBtoAPB总线

Flash存储器

SRAM可

选配

外部RAM

I/O

外设总线

UARTPWMTimer

图2.1Cortex-M3核方框图

1.处理器核

Cortex-M3处理器核采用ARMv7-M架构,其主要特性如下:

Thumb-2指令集架构(ISA)的子集,包含所有基本的16位和32位Thumb-2指令;

哈佛处理器架构,在加载/存储数据的同时能够执行指令取指;

带分支预测的三级流水线;

32位单周期乘法;

硬件除法;

Thumb状态和调试状态;

处理模式和线程模式;

ISR的低延迟进入和退出;

●可中断-可继续(interruptible-continued)的LDM/STM、PUSH/POP;

●支持ARMv6类型BE8/LE;

支持ARMv6非对齐访问。

2.NVIC(嵌套向量中断控制器)

NVIC与处理器核是紧密耦合的,这样可实现快速、低延迟的异常处理。

在Cortex-M微控制器此功能非常强大。

3.总线矩阵

总线矩阵用来将处理器和调试接口与外部总线相连。

处理器包含4个总线接口:

ICode存储器接口:

从Code存储器空间(0x0000000–0x1FFFFFFF)的取指都在这条32位AHBLite总线上执行。

DCode存储器接口:

对Code存储器空间(0x0000000–0x1FFFFFFF)进行数据和调试访问都在这条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是一个应用导向(applicationdriven)的跟踪源,支持对应用事件的跟踪和printf类型的调试。

7.MPU

存储器保护单元(MPU)是用来保护存储器的一个元件。

处理器支持标准的ARMv7“受保护的存储器系统结构”(PMSA)模型。

如果希望向处理器提供存储器保护,则可以使用可选的MPU;

MPU对访问允许和存储器属性进行检验。

它包含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个通用寄存器R0~R15和7个特殊功能寄存器。

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13(SP)

R14(LR)

R15(PC)

低寄存器

通用寄存器

寄存器

殊状态寄存器功

能中断屏蔽

寄寄存器存

器控制寄存器

xPSR

PRIMASK

FAULTMASK

BASEPRI

CONTROL

MSPPSP

图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。

执行:

PUSHR0

此时MSP指向:

0x2000_0008执行示意如图2.3所示。

RAMRAM

0x2000_000CMSP

向下生

0x2000_0008

长MSP

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:

20

19:

16

15:

10

9

8

7

6

5

4:

APSR

N

Z

C

V

Q

IPSR

中断编号

EPSR

ICI/IT

T

xPSR寄存器的各位的功能如表2.2:

表2.2xPSR寄存器各位功能

名称

定义

负数或小于标志:

1:

结果为负数或小于;

0结果为正数或大于

零标志:

结果为0;

0:

结果为非0

进位/借位标志:

进位或借位;

0没有进位或借位

溢出标志:

溢出;

没有溢出

粘着饱和标志:

已饱和;

没有饱和

IT

IF-Then位。

它们是if-Then指令的执行状态位。

包含if-Then模块的指令数目和它们的执行条件

用于指示处理器当前是ARM状态还是Thumb状态

12

ICI

可中断-可继续的指令位:

如果在执行LDM或STM操作时产生一次中断,则LDM或STM操作暂停,该位来保存该操作中下一个寄存器操作数的编号,在中断响应之后,处理器返回由该位指向的寄存器并恢复操作。

8:

ISR

占先异常的编号

中断屏蔽寄存器:

分为三组,分别是PRIMASK、FAULTMASK、BASEPRI。

PRIMASK为片上外设总中断开关,该寄存器只有位0有效,当该位为0是响应所有外设中断;

当该

位为1时屏蔽所有片上外设中断。

FAULTMASK寄存器管理系统错误的总开关,该寄存器中有位0有效,当该位为0时,响应所有的异

常;

为1屏蔽所有的异常。

BASEPRI寄存器用来屏蔽优先级等于和小于某一个中断数值的寄存器。

控制寄存器:

CONTROL有两个作用,其一用于定义处理器特权级别,其二用于选择堆栈指针,如表3.3所示。

表2.3CONTROL寄存器

功能

CONTROL[1]

堆栈指针选择

选择主堆栈指针MSP

选择进程堆栈指针PSP

CONTROL[0]

特权级

用户级

CONTROL[0]:

异常情况下,处理器总是处于特权模式,CONTROL[0]位总是为0;

在线程模式情况下

(非异常情况),处理器可以工作在特权级也可工作在用户级,该位可为0或1。

特权级下所有的资源都可以访问,而用户级下被限制的资源不能访问,比如MPU被限制的资源。

CONTROL[1]:

为0时,只使用MSP,此时用户程序和异常共享同一个堆栈,处理器复位后默认的也是该模式。

为1时,用户应用程序使用进程堆栈PSP,而中断任然得使用主堆栈MSP。

这种双堆栈机制,特别适合在带有OS(操作系统)的环境下使用,只要OS核在特权级下执行,而用户应用程序在用户模式下执行,就可很好的将代码隔离互不影响。

2.3处理器操作模式

ARMCortex-M3支持2个模式和两个特权等级。

如图2.4所示,在嵌入式系统应用程序中,程序代码涉及异常服务程序代码和非异常服务程序代码,这些代码可以工作在处理器特权级也可以工作在用户级级,但有区别。

当处理器处在线程模式下时,既可以使用特权级,也可以使用用户级;

另一方面,handler模式总是特权级的。

在复位后,处理器进入线程模式+特权级。

特权级用户级

Handler模式

错误的用法

线程模式

异常handler的代码主应用程序的代码

图2.4操作模式和特权等级

在线程模式+用户级下,对系统控制空间(SCS,0xE000E000~0xE000EFFF,包括NVIC、SysTick、MPU以及代码调试控制所用的寄存器)的访问将被禁止。

除此之外,还禁止使用MRS/MSR访问,除了APSR之外的特殊功能寄存器。

如果操作,则对于访问特殊功能寄存器的,访问操作被忽略;

而对于访问SCS空间的,将产生错误。

在特权级下不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后,系统将回到产生异常时所处的级别,同时特权级也可通过置位CONTROL[0]来进入用户级。

用户级下的代码不能再试图修改CONTROL[0]来回到特权级。

它必须通过一个异常handler,来修改CONTROL[0],才能在返回到线程模式后进入特权级。

如图2.5所示。

特权级handler

模式CONTROL[0]=1

异常服务例程

CONTROL[0]=0

特权级线启动程模式代码

用户级线程模式

异常异常

用户用户

程序程序

特权级的线程

图2.5处理器模式转换图

把代码按特权级和用户级分开处理,有利于使Cortex-M3的架构更加稳定可靠。

例如,当某个用户程序代码出问题时,可防止处理器对系统造成更大的危害,因为用户级的代码是禁止写特殊功能寄存器和NVIC中寄存器的。

另外,如果还配有MPU,保护力度就更大,甚至可以阻止用户代码访问不属于它的存区域。

在引入了嵌入式实时操作系统中,为了避免系统堆栈因应用程序的错误使用而毁坏,我们可以给应用程序专门配一个堆栈,不让它共享操作系统核的堆栈。

在这个管理制度下,运行在线程模式的用户代码使用PSP,而异常服务例程则使用MSP。

这两个堆栈指针的切换是智能全自动的,在异常服务的始末由Cortex-M3硬件处理。

如前所述,特权等级和堆栈指针的选择均由CONTROL负责。

当CONTROL[0]=0,在异常处理的始末,只发生了处理器模式的转换,如图2.6所示。

若CONTROL[0]=1(线程模式+用户级),则在中断响应的始末,处理器模式和特权等级都要发生变

化,如图2.7所示。

CONTROL[0]只有在特权级下才能访问。

用户级的程序如想进入特权级,通常都是使用一条“系

统服务呼叫指令(SVC)”来触发“SVC异常”,该异常的服务例程可以视具体情况而修改CONTROL[0]。

中断事件

中断服务程序

中断返回

主程序

入栈出栈

线程模式

(特权级)

Handler模式

图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地址围,而位带别名区里面的每个字对应位带区的一个比特。

位带操作只适用于数据访问,不适用于取指。

通过位带的功能,可以把多个布尔型数据打包在单一的字中,却依然可以从位带别名区中,像访问普通存一样地使用它们。

位带别名区中的访问操作是原子的,消灭了传统的“读-改-写”三步。

0xE00FFFFF

0xE00FF000

0xE0042000

0xE0041000

0xE0040000

0xE003FFFF

0xE000F000

0xE000E000

0xE0003000

0xE0002000

0xE0001000

0xE0000000

0x43FFFFFF

0x42000000

0x41FFFFFF

0x40100000

0x40000000

0x23FFFFFF

0x22000000

0x21FFFFFF

0x20100000

0x20000000

0xFFFFFFFF

0xE0100000

0xDFFFFFFF

0xA0000000

0x9FFFFFFF

0x60000000

0x5FFFFFFF

0x3FFFFFFF

0x1FFFFFFF

0x00000000

图2.8Cortex-M3存储器映射图

片上外设对应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((A0x20000000)8n)4

0x22000000(A0x20000000)32n4

对于片上外设位带区的某个位:

Aliasaddr0x42000000((A0x40000000)8n)4

0x42000000(A0x40000000)32n4

在上述表达式中,A表示要操作的位所在的字节地址,n(0≤n≤7)表示位序号。

0x23FFFFFC0x23FFFFF80x23FFFFF40x23FFFFF00x23FFFFEC0x23FFFFE80x23FFFFE40x23FFFFE0

位带别名区(共32MB)

0x2200001C0x220000180x220000140x220000100x2200000C0x220000080x220000040x22000000

76543210765432107654321076543210

0x200FFFFF

0x200FFFFE

0x200FFFFD

0x200FFFFC

SRAM位带区(共1MB)

0x20000003

0x20000002

0x20000001

2.9位操作对应关系图

举例:

将地址0x20000000的第2位置1。

通过上述计算关系,可计算出位带别名为0x22000008。

如程序清单L2.1所示。

程序清单L2.1SRAM位操作实例

LDRR0,=0x22000008

LDRR1,=0x01STRR1,[R0]

将片上外设I/O端口的A口的第0位(也即PORTA0)为输出,其A口的方向寄存器地址为0x40004400,

设置1作为输出,可根据上述关系计算出位带别名为0x42088000。

如程序清单L2.2所示。

程序清单L2.2片上外设位操作实例

LDRR0,=0x42088000LDRR1,=0x01

STRR1,[R0]

采用大端格式时,对位邦定别名区的访问必须以字节方式,否则访问不可预知。

2.5异常

ARMCortex-M3中异常涉及异常的类型、优先级、向量表等,本节并以Luminar

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2