MAXQ构架上闪存和SRAM存储器的分配
MAXQ架构是一种基于标准Harvard结构、功能强大的单周期RISC微控制器,程序和数据存储总线相互独立。这种组织形式要求每个存储器具有专用总线(图1),所以可同时读取指令和操作数。由于不存在单条数据总线的冲突问题,MAXQ指令的执行时间仅需要单个周期。
图1. Harvard结构
每个MAXQ器件采用以下存储器类型:
闪存
SRAM
固定用途ROM
MAXQ器件也可从闪存、固定用途ROM或SRAM执行程序代码。从某个存储器段执行程序代码时,其它两个存储器段可作为数据存储器(更多详细信息,请参阅从闪存执行程序和执行固定用途ROM函数部分)。这是因为程序和数据存储器总线不能同时存取同一存储器段。
有人可能认为采用Harvard结构的MAXQ微控制器也不能在非易失闪存中储存数据。然而,MAXQ器件内嵌固定用途ROM函数,允许读、写非易失闪存数据。
从闪存执行程序
MAXQ器件中,从闪存执行应用程序时,数据存储器为SRAM (读和写)和固定用途ROM (只读)。从闪存执行代码时,数据存储器映射请参见表1,存储器映射参见图2。
SRAM数据存储器在存储器映射中位于地址0x0000至0x07FF (字节寻址模式下)或地址0x0000至0x03FF (字寻址模式下)。
固定用途ROM在存储器映射中位于地址0x8000至0x9FFFh (字节模式)或地址0x8000至0x8FFF (字寻址模式下)。
表1. 从闪存执行应用代码时的数据存储器映射 | ||||
Addressing Mode | SRAM | Utility ROM | ||
Start Address | End Address | Start Address | End Address | |
Byte Mode | 0x0000 | 0x07FF | 0x8000 | 0x9FFF |
Word Mode | 0x0000 | 0x03FF | 0x8000 | 0x8FFF |
图2. 从闪存执行应用代码时的存储器映射
执行固定用途ROM函数
执行固定用途ROM函数时,数据存储器为SRAM (读和写)和闪存(读和写)。从闪存执行应用程序且变量或数据对象位于闪存时,可通过固定用途ROM函数读或写这些变量或数据对象。通过跳转至执行固定用途ROM函数,即可将闪存作为数据进行存取。从固定用途ROM执行代码时,数据存储器映射请参见表2,存储器映射参见图3。
SRAM数据存储器在存储器映射中位于地址0x0000至0x07FF (字节寻址模式下)或地址0x0000至0x03FF (字寻址模式下)。
字节寻址模式下,CDA0 = 0时,闪存的低半部分在存储器映射中位于地址0x8000至0xFFFFh;CDA0 = 1时,闪存的高半部分在存储器映射中位于地址0x8000至0xFFFFh。字寻址模式下,闪存在存储器映射中位于地址0x8000至0xFFFF。
表2. 执行固定用途ROM函数时的数据存储器映射 | ||||||||
Addressing Mode | SRAM |
Flash Memory Lower Half (CDA0 = 0) |
Flash Memory Upper Half (CDA0 = 1) |
Flash Memory | ||||
Start Address | End Address | Start Address | End Address | Start Address | End Address | Start Address | End Address | |
Byte Mode | 0x0000 | 0x07FF | 0x8000 | 0xFFFF | 0x8000 | 0xFFFF | — | — |
Word Mode | 0x0000 | 0x03FF | — | — | — | — | 0x8000 | 0xFFFF |
图3. 执行固定用途ROM函数时的存储器映射
闪存和SRAM中的存储器分配
IAR嵌入式工作台IDE用于编程基于MAXQ核的微控制器。IAR™ C编译器(用于MAXQ微控制器)提供用于定义闪存或SRAM位置中数据对象或变量的选项。编译器具有特殊关键词pragma location和pragma required;通过使用关键词,可将存储器分配给绝对地址的数据对象或变量。必须用IAR关键词__no_init或const (标准C关键词)声明这些变量或数据对象。请参见下文中__no_init、const、pragma location和pragma required的关键词说明。
关键词说明
pragma location
#pragma location用于定义绝对地址的单个全局或静态变量或数据对象。变量或数据对象必须声明为__no_init或const。这对于必须位于固定地址的个体数据对象非常有用,例如变量、带有外部或内部接口的数据对象或增加的硬件表项。
pragma required
#pragma required确保链接输出中包括某个符号所需的另一个符号。该指令必须放在紧邻第二个符号的前边。如果符号在应用中不可见,使用该指令。例如,如果仅通过某个变量所在的段对其进行间接引用,必须使用#pragma required。
- 基于浮栅技术的闪存(09-18)
- 新型混合光驱 (ODD) 的闪存解决方案(10-03)
- 应用于闪存微控制器的“新闪存”架构技术(10-17)
- 四种闪存设计优劣点分析(05-18)
- 三星48层3D V-NAND闪存技术揭秘(06-13)
- ClearNAND闪存改善系统设计(02-20)