ARMCortexM3内核结构Word格式文档下载.docx

上传人:b****8 文档编号:22265886 上传时间:2023-02-03 格式:DOCX 页数:61 大小:56.57KB
下载 相关 举报
ARMCortexM3内核结构Word格式文档下载.docx_第1页
第1页 / 共61页
ARMCortexM3内核结构Word格式文档下载.docx_第2页
第2页 / 共61页
ARMCortexM3内核结构Word格式文档下载.docx_第3页
第3页 / 共61页
ARMCortexM3内核结构Word格式文档下载.docx_第4页
第4页 / 共61页
ARMCortexM3内核结构Word格式文档下载.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

ARMCortexM3内核结构Word格式文档下载.docx

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

ARMCortexM3内核结构Word格式文档下载.docx

专用外设总线(内部)AHBAP

APB

ROM表

总线矩阵

Icode总线Dcode总线系统总线

系统总线(AHB)

静态RAM外部RAM外部

控制器设备

AHBtoAPB总线

Flash存储器

SRAM可

选配

外部RAM

I/O

外设总线

UARTPWMTimer

图2、1CortexM3内核方框图

1、处理器内核

CortexM3处理器内核采用ARMv7M架构,其主要特性如下:

●Thumb2指令集架构(ISA)得子集,包含所有基本得16位与32位Thumb2指令;

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

●带分支预测得三级流水线;

●32位单周期乘法;

●硬件除法;

●Thumb状态与调试状态;

●处理模式与线程模式;

●ISR得低延迟进入与退出;

●可中断可继续(interruptiblecontinued)得LDM/STM、PUSH/POP;

●支持ARMv6类型BE8/LE;

●支持ARMv6非对齐访问。

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

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

在CortexM微控制器此功能非常强大。

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(如果存在)得CortexM3内核跟踪数据与片外跟踪端口分析仪之间得桥接。

10、SW/JTAGDP

CortexM3处理器可配置为具有SWDP或JTAGDP调试端口得接口,或两者都有。

这两个调试端口提供对系统中包括处理器寄存器在内得所有寄存器与存储器得调试访问。

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通用寄存器R0R15

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所示。

已使用

上次压入得数据

未用

0x00000000

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

IFThen位。

它们就是ifThen指令得执行状态位。

包含ifThen模块得指令数目与它们得执行条件

用于指示处理器当前就是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处理器操作模式

ARMCortexM3支持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处理器模式转换图

把代码按特权级与用户级分开处理,有利于使CortexM3得架构更加稳定可靠。

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

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

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

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

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

如前所述,特权等级与堆栈指针得选择均由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存储器映射

CortexM3采用了固定得存储映射结构,如图2、8所示。

CortexM3得地址空间就是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

图2、8CortexM3存储器映射图

片上外设对应512MB得空间,芯片上所有与外围设备相关得寄存器都位于该区域。

这个区中也有一条32MB得位带别名,以便于快捷地访问外设寄存器,用法与内部SRAM区中得位带相同。

例如,可以方便地访问各种控制位与状态位。

要注意得就是,外设区内不允许执行指令。

通常半导体厂商就就是修改此区域得片上外设,来达到各具特色得、个性化得设备。

还有两个1GB得范围,分别用于连接外部RAM与外部设备,它们之中没有位带。

两者得区别在于外部RAM区允许执行指令,而外部设备区则不允许。

最后还剩下0、5GB得隐秘地带,包括了系统级组件,内部私有外设总线,外部私有外设总线,以及由提供者定义得系统外设。

私有外设总线有两条:

AHB私有外设总线,只用于CM3内部得AHB外设,它们就是:

NVIC,FPB,DWT与ITM。

APB私有外设总线,既用于CM3内部得APB设备,也用于外部设备(这里得“外部”就是对内核而言)。

CortexM3允许器件制造商再添加一些片上APB外设到APB私有总线上,它们通过APB接口来访问。

NVIC所处得区域叫做“系统控制空间(SCS)”,在SCS里得除了NVIC外,还有SysTick、MPU以及代码调试控制所用得寄存器。

最后,未用得提供商指定区也通过系统总线来访问,但就是不允许在其中执行指令。

2、4、2位带操作

在CotexM3存储器映射中包括两个位操作区。

分别位于SRAM与片上外设存储区得最低1MB空间中。

这两个位带中得地址除了可以像普通得RAM一样使用外,它们还都有自己得“位带别名区”,位带别名区把每个比特膨胀成一个32位得字形成位地址。

当您通过位带别名区访问这些字时,就可以达到访问原始比特得目得,其对应关系如图2、8所。

位地址与位别名对应关系统如下:

对于SRAM位带区得某个位:

Aliasaddr=0x0+((A-0x0)⨯8+n)⨯4

=0x22000000+(A-0x20000000)⨯32+n⨯4

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

=0x42000000+(A-0x40000000)⨯32+n⨯4

在上述表达式中,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异常

ARMCortexM3中异常涉及异常得类型、优先级、向量表等,本节并以Luminary系列微控制器为例说明异常得具体行为。

2、5、1异常类型

在CortexM3中有一个与内核紧耦合部件叫嵌套向量中断控制器(NVIC,NestedVectoredInterruptController),定义了16种系统异常与240路外设中断。

通常芯片设计者可自由设计片上外

设,因此具体得片上外设中断都不会用到多达240路。

如表2、4所示系统异常类型,表2、5所示为外设中断类型。

CortexM3中目前只有11种系统异常可用分别就是:

系统复位、NMI(不可屏蔽中断)、硬件故障、存储器管理、总线故障、用法故障、SVCall(软件中断)、调试监视器中断

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

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1