赞
踩
cortex-m 处理器可以对32位存储器进行寻址,因此存储器空间能够达到4GB。存储器空间是统一,这也意味着指令和数据共用相同的地址空间。根据架构定义,4GB的存储器空间被分为了多个区域。另外,cortex-M3和cortex-M4处理器的存储器系统支持多个特性:
①多个总线接口,指令和数据可以同时访问(哈佛总线架构)
②基于AMBA(高级微控制器总线架构)的总线接口设计,实际上也是一种片上总线标准:用于存储器和系统总线流水线操作的AHB(AMBA高性能总线)Lite协议,以及用于和调试部件通信的APB(高级外设总线)协议。
③同时支持小端和大端的存储器系统。
④支持非对齐数据传输
⑤支持排他传输(用于具有嵌入式OS或RTOS的系统的信号量操作)
⑥可位寻址的存储器空间(位段)
⑦不同存储器区域的存储器属性和访问权限
⑧可选的存储器保护单元(MPU)。若MPU存在,则可以在运行时设置存储器属性和访问权限配置。
在4GB可寻址的存储器空间中,有些部分被指定为处理器中的内部外设,如NVIC何调试部件等。这些内部部件的存储器位置是固定的,另外存储器空间在架构上被划分为如下图所示的多个存储器区域,这种处理使得:
处理器设计支持不同种类的存储器和设备
系统可以达到更优的性能
尽管预定义的存储器映射是固定的,架构仍然具有高度的灵活性,芯片设计者可以在他们的产品中加入具有差异化的不同存储器外设。
区域 | 地址范围 | 描述 |
---|---|---|
代码 | 0x00000000 ---- 0x1FFF FFFF | 512MB的存储器空间,主要用于程序代码,包括作为程序存储器一部分的默认向量表,该区域也允许数据访问 |
SRAM | 0X20000000 —0X3FFFFFFF | SRAM区域位于存储器空间中的下一个512MB,主要用于连接SRAM,其大都为片上SRAM,不过对存储器的类型没有什么限制。若支持可选的位段特性,则SRAM区域的第一个1M可位寻址,还可以在这个区域中执行程序代码。 |
外设 | 0x40000000 — 0x5FFFFFFF | 外设存储器区域的大小同样为512MB,而且多数用于片上外设。和SRAM区域类似,若支持可选的位段特性,则外设区域的第一个1MB是可位寻址的。 |
RAM | 0x60000000 — 0x9FFFFFFF | RAM区域包括两个512MB存储器区域(总共1GB),用于片外存储器等其他RAM,且可存放程序代码和数据 |
设备 | 0xA0000000—0xDFFFFFFF | 设备区域包括两个512MB存储器空间(总共1GB),用于片外外设等其他存储器 |
系统 | 0xE0000000 — 0XFFFFFFFF | 系统区域可分为几个部分:①内部私有外设总线(PPB),0XE0000000 ----0XE003FFFF PPB用于访问NVIC 、SysTick、MPU等系统部件,以及Cortex-M3/M4内的调试部件。多数情况下,该存储器空间只能由运行在特权状态的程序代码访问。 ②外部私有外设总线(PPB)0XE0040000 ----0XE00FFFFF 另外一个PPB区域可用于其他的可选调试部件,芯片供应商也可以增加自己的调试或其他特定部件。该存储器空间只能由运行在特权状态的程序代码访问。需要注意的是,该总线上调试部件的基地址可能会被芯片设计者修改。③供应商定义区域 0xE0100000 — 0XFFFFFFFF 剩下的存储器空间用于供应商定义的部件,多数情况下是用不上的 |
尽管可以将程序存放在SRAM和RAM区域并执行,处理器设计在进行这种操作时效果并非最优的,在取每个指令时还需要一个额外的周期。因此,在通过系统总线执行程序代码时性能会稍微低一些。程序不允许在外设、设备和系统存储器区域中执行。
存储器映射中存在多个内置部件,其具体功能描述如下:
部件 | 描述 |
---|---|
NVIC | 嵌套向量中断控制器 异常(包括中断)处理的内置中断控制器 |
MPU | 存储器保护单元 可选的可编程单元,用于设置各存储器区域的存储器访问权限和存储器访问属性(特性或行为),有些CORTEX-M3/M4微控制器中可能会没有MPU |
SysTick | 系统节拍定时器 24位定时器,主要用于产生周期性的OS中断。若未使用OS,还可被应用程序代码使用 |
SCB | 系统控制块 用于控制处理器行为的一组寄存器,并可提供状态信息 |
FPU | 浮点单元 这里存在多个寄存器,用于控制浮点单元的行为,并可提供状态信息。FPU仅在cortex-m4中存在 |
FPB | Flash 补丁和断点单元 用于调试操作,其中包括最多8个比较器,每个比较器都可被配置为产生硬件断点事件。例如,在执行断点地址处的指令时,它还可以替换原先的指令,因此可为固定的程序实现补丁机制 |
DWT | 数据监视点和跟踪单元 用于调试和跟踪操作,其中包括最多4个比较器,每个比较器都可被配置为产生数据监视点时间,如在特定的存储器地址区域被软件访问时。它还可以产生数据跟踪包,供调试器使用以观察监控的存储器位置 |
ITM | 指令跟踪宏单元 用于调试和跟踪的部件。软件可以利用它产生可被跟踪接口捕获的数据跟踪。它还可以在跟踪系统中生成时间戳包 |
ETM | 嵌入式跟踪宏单元 产生调试软件可用的指令跟踪的部件 |
TPIU | 跟踪端口接口单元 该部件可以将跟踪包从跟踪源转换到跟踪接口协议,这样可以用最少的引脚捕获跟踪的数据 |
ROM表 | ROM表 调试工具用的简单查找表,表示调试和跟踪部件的地址,以便调试工具识别出系统中可用的调试部件。它还提供了用于系统识别的ID寄存器 |
cortex-m 处理器提供了基于AMBA的通用总线接口。AMBA支持多种总线协议,对于Cortex-M3和Cortex-M4处理器,主要的总线接口使用AHB Lite协议,而APB协议则用作私有外设总线(PPB),它主要用于调试部件。基于APB的其他总线部分则可以利用其他的总线桥部件添加到系统总线上。为了提高性能,CODE存储器区域已经将总线接口从系统总线中独立出来,如下图所示,这样数据访问和取指可以并行执行。
这种分离的总线结构还会加快中断响应,这是因为在中断处理期间,栈访问和读取程序映像中的向量表可以同时执行。
可以在处理器的总线接口中插入等待状态,因此,高速运行的cortex-M处理器可以访问速度较低的存储器或外设。总线接口还支持错误响应。例如,若产生了错误,当处理器访问未在合法存储器区域内的地址时,总线系统会对处理器返回错误响应,这样会触发错误异常,随后可由运行在处理器上的软件报告这一情况或对其进行处理。
在简单的微处理器设计中,程序存储器一般会被连接到I-CODE 和D-CODE总线,而SRAM和外设则会被连到系统总线。cortex-m3或cortex-m4的一种简单设计如下图所示:
多数外设通常会被连接到独立的外设总线段,对于许多现有的cortex-m3 和cortex-m4产品,可以在设计中找到多个外设总线段。按照这种方式,每个总线都可以运行在不同的速度下以节省功耗。有些情况下,这样还可以带来更大的系统带宽(例如,外设系统有时需要支持以太网的DMA访问和高速USB)。
由于存储器系统为32位的(至少从编程模型的角度来看是这样的),大小为32位或16位可以是对齐也可以是不对齐的。对齐传输的意思是地址值为大小(以字节为单位)的整数倍。如字大小的对齐传输可以执行的地址为0x00000000、0x00000004、…0x00001000等;半字大小的对齐传输可以执行的地址则为0x00000000、0x00000002、…0x00001000等。对齐和非对齐传输的实例如下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。