• 沒有找到結果。

Flash 存储器组

在文檔中 1.1 嵌入式系统 (頁 169-175)

第5章 LPC2000系列ARM硬件结构

1. Flash 存储器组

两个Flash 存储器组实现了并行访问并消除了连续访问时的延迟。

Flash 编程功能不受存储器加速器模块的控制,而是作为一个独立的功能进行处理。

“Boot block”扇区包含作为应用程序的一部分调用的 Flash 编程算法(即 IAP 代码)和一个可 对Flash 存储器进行串行编程的装载程序(即 ISP 代码)。

Flash 存储器的布线使其每个扇区同时存在于两个组当中,这样扇区擦除操作可同时对 两个组执行。实际上,两个组的实体对于编程功能是透明的。

预取指缓冲区 分支跟踪缓冲区 Flash 数据缓冲区

Flash 存储器 128 位

预取指

MAM 模块 读取指令 读取指令 读取数据

ARM 局部总线

128 位 分支捕获

128 位

取数据 组选择

- - 160 Flash ARM 局部总线

存储器地址

存储器组 0

组选择

存储器数据 总线接口

Flash 存储器组 1

图 5.20 存储器加速器模块的简化框图 2. 指令锁存和数据锁存

代码和数据的访问由存储器加速器模块分别进行处理。每个Flash 组都由两套 128 位指 令锁存和12 位比较地址锁存。其中一套称为分支跟踪缓冲区,用于保存最近一次指令丢失 以来的数据和比较地址。另一套称为预取指缓冲区,用于保存预取指的数据和比较地址。每 个指令锁存保存4 个代码字(4 条 ARM 指令或 8 条 Thumb 指令)。

与之相似,在数据访问中使用了一个128 位数据锁存和 13 位数据地址锁存。两个 Flash 组共用这一套锁存。对数据锁存中没有的数据进行访问会导致读取Flash 的 4 个数据字,它 们由数据锁存所捕获。使用数据锁存加速了连续数据的访问,但对于随机数据访问几乎没什 么效果。

5.5.3 MAM 的操作模式

MAM 定义了 3 种操作模式,您可以在性能和可预测性之间进行选择:

MAM 关闭。所有存储器请求都会导致 Flash 的读操作(表 5.32、表 5.33 的注 2)。

无指令预取指。

MAM 部分使能。如果数据可用,则从保持锁存区执行连续的指令访问。指令预取 指使能。非连续的指令访问启动Flash 读操作(表 5.32、表 5.33 的注 2)。这意味 着所有的转移指令都会导致对存储器的取指。由于缓冲的数据访问时序很难预测并 且非常依赖于所处的状况,因此所有数据操作都会导致Flash 读操作。

MAM 完全使能。任何存储器请求(代码或数据),如果其值已经包含在其中一个 保持锁存当中,那么从缓冲区执行该代码或数据的访问。指令预取指使能。Flash 读操作用于指令的预取指和当前缓冲区所没有的代码或数据的访问。

表 5.32 MAM 响应的不同类型的程序访问 MAM 模式 程序存储器请求类型

0 1 2

连续访问,数据位于MAM 锁存当中 启动取指2 使用锁存的数据1 使用锁存的数据1

连续访问,数据不在MAM 锁存当中 启动取指 启动取指1 启动取指1

非连续访问,数据位于MAM 锁存当中 启动取指2 启动取指1,2 使用锁存的数据1

非连续访问,数据不在MAM 锁存当中 启动取指 启动取指1 启动取指1

- - 161

表 5.33 MAM 响应的不同类型的数据和 DMA 访问 MAM 模式 数据存储器请求类型

0 1 2 连续访问,数据位于MAM 锁存当中 启动取指2 启动取指2 使用锁存的数据

连续访问,数据不在MAM 锁存当中 启动取指 启动取指 启动取指

非连续访问,数据位于MAM 锁存当中 启动取指2 启动取指2 使用锁存的数据

非连续访问,数据不在MAM 锁存当中 启动取指 启动取指 启动取指

1. 指令预取指在模式1 和 2 中使能。

2. 只要锁存的数据可用,MAM 则使用锁存的数据,但模仿 Flash 读操作的时序。这样虽然使用相 同的执行时序,但却降低了功耗。将MAMTIM 中的取指时间设置为 1 个时钟可关闭 MAM。

5.5.4 MAM 配置

在复位后,MAM 默认为禁止状态。软件可以随时将存储器访问加速打开或关闭。这样 就可使大多数应用程序以最高速度运行,而某些要求更精确定时的功能可以较慢但更可预测 的速度运行。

5.5.5 寄存器描述 寄存器汇总

MAM 模块寄存器汇总见表 5.34。

表 5.34 MAM 模块寄存器汇总

名称 描述 访问 复位值* 地址

MAMCR 存储器加速器模块控制寄存器。决定 MAM 的操作模式。

也就是说MAM 性能增强的程度,见表 5.35。 R/W 0 0xE01FC000 MAMTIM 存储器加速器定时控制。决定Flash 存储器取指所使用的时

钟个数(1 到 7 个处理器时钟)。 R/W 0x07 0xE01FC004

* 复位值仅指已使用位中保存的数据,不包括保留位的内容。

MAM 控制寄存器(MAMCR - 0xE01FC000)

两个配置位选择MAM 的 3 种操作模式,见表 5.35。在复位后,MAM 功能被禁止。改 变MAM 操作模式会导致 MAM 所有的保持锁存内容无效,因此需要执行新的 Flash 读操作。

表 5.35 MAM 控制寄存器

MAMCR 功能 描述 复位值

1:0 MAM 模式控制

这两个位决定MAM 的操作模式:

00-MAM 功能被禁止 01-MAM 功能部分使能 10-MAM 功能完全使能 11-保留

0

7:2 保留 保留,用户软件不要向其写入1。从保留位读出的值未被定义。 NA

MAM 定时寄存器(MAMTIM - 0xE01FC004)

MAM 定时寄存器决定使用多少个 cclk 周期访问 Flash 存储器,见表 5.36。这样可调整 MAM 时序使其匹配处理器操作频率。Flash 访问时间可以从 1 到 7 个时钟。单个时钟的 Flash 访问实际上关闭了MAM。这种情况下可以选择 MAM 模式对功耗进行优化。

- - 162

表 5.36 MAM 定时寄存器

MAMTIM 功能 描述 复位值

2:0 MAM 取指周期

这几个位决定MAM Flash 取指操作的时间:

000=0,保留

001=1,MAM 取指周期为 1 个处理器时钟(cclk)。

010=2,MAM 取指周期为 2 个处理器时钟(cclk)。

011=3,MAM 取指周期为 3 个处理器时钟(cclk)。

100=4,MAM 取指周期为 4 个处理器时钟(cclk)。

101=5,MAM 取指周期为 5 个处理器时钟(cclk)。

110=6,MAM 取指周期为 6 个处理器时钟(cclk)。

111=7,MAM 取指周期为 7 个处理器时钟(cclk)。

警告:不正确的设定会导致器件的错误操作。

0x07

7:3 保留 保留,用户软件不要向其写入1。从保留位读出的值未被定义。 NA 5.5.6 MAM 使用注意事项

MAM 定时值问题

当改变MAM 定时值时,必须先通过向 MAMCR 写入 0 来关闭 MAM,然后将新值写 入MAMTIM。最后,将需要的操作模式的对应值(1 或 2)写入 MAMCR,再次打开 MAM。

对于低于20MHz 的系统时钟,MAMTIM 设定为 001。对于 20MHz 到 40MHz 之间的系 统时钟,建议将Flash 访问时间设定为 2cclk,而在高于 40MHz 的系统时钟下,建议使用 3cclk。

Flash 编程问题

在编程和擦除操作过程中不允许访问Flash 存储器。如果在 Flash 模块忙时存储器请求 访问Flash 地址,MAM 就会强制 CPU 等待(这通过声明 ARM7TDMI-S 局部总线信号 CLKEN 来实现)。在某些情况下,代码执行的延迟会导致看门狗超时。用户必须注意到这种可能性,

并采取措施来确保在编程或擦除Flash 存储器时不会出现非预期的看门狗复位,从而导致系 统故障。

为了防止从Flash 存储器中读取无效的数据,MAM 使锁存在 Flash 编程或擦除操作的 开始自动失效。在Flash 操作结束后,任何对 Flash 地址的读操作将启动新的取指操作。

5.5.7 启动代码相关部分

LPC2100、LPC2200 的启动代码中,会根据 Fcclk 的大小来自动设置 MAM,如程序清 单5.10 所示(在 target.c 文件中)。由于 LPC2210 没有片内 FLASH,MAM 设置无效。

如程序清单5.10 (1),首先要将 MAM 功能禁止,然后根据 Fcclk 的大小来设置 MAM 定时寄存器(这是通过条件编译实现,Fcclk 的定义在 config.h 文件中),最后再使能 MAM(程 序清单5.10 (5))。

程序清单 5.10 TargetResetInit ()—MAM 初始化 void TargetResetInit(void)

{ …

/* 设置存储器加速模块 */

MAMCR = 0; (1)

#if Fcclk < 20000000

MAMTIM = 1; (2)

#else

- - 163

只有LPC2210、LPC2212 和 LPC2214 含有该模块。

5.6.1 特性

支持静态存储器映射器件,包括 RAM、ROM、Flash、Burst ROM 和一些外部 I/O 器件。 器组,每个存储器组都支持SRAM、ROM、Flash EPROM、Burst ROM 存储器或一些外部 I/O 器件,EMC 与外部存储器连接示意图见图 5.21。每个存储器组的总线宽度为 8、16 或

AMBA AHB Bank0

Bank1

- - 164

LPC2200 系列微控制器的引脚地址输出线是 A[23:0],其中地址位 A[25:24]用于 4 个存 储器组的译码。4 个存储器组的有效区域位于外部存储器的起始部分,地址如表 5.37 所示。

在引脚 BOOT1:0 的状态控制下,Bank 0 可用于引导程序运行。

表 5.37 外部存储器组的地址范围

Bank 地址范围 配置寄存器

0 8000 0000-80FF FFFF BCFG0 1 8100 0000-81FF FFFF BCFG1 2 8200 0000-82FF FFFF BCFG2 3 8300 0000-83FF FFFF BCFG3

Bank0~Bank3 的片选信号分别为 CS0~CS3,如果片外存储器或 I/O 器件是通过 CS0 进行片选,或者由 CS0 与地址线进行译码来片选,则此片外存储器或 I/O 器件属于 Bank0 组,地址0x80000000~0x80FFFFFF。

5.6.3 引脚描述

外部存储器控制器引脚描述见表5.38。这些引脚是与 P1、P2 和 P3 口 GPIO 功能复用,

所以在使用外部总线前首先要正确配置 PINSEL2 寄存器(可通过硬件上对引脚 BOOT1:0 设 定,复位时微处理器自动初始化 PINSEL2;或者软件上直接初始化 PINSEL2,这只适用于 片内FLASH 引导程序运行的系统中)。

表 5.38 外部存储器控制器引脚描述 引脚名称 类型 引脚描述

D[31:0] 输入/输出 外部存储器数据线 A[23:0] 输出 外部存储器地址线

OE 输出 输出使能信号,低有效

BLS[3:0] 输出 字节定位选择信号,低有效

WE 输出 写使能信号,低有效

CS[3:0] 输出 芯片选择信号,低有效

5.6.4 寄存器描述 寄存器总汇

外部存储器控制器包含4 个寄存器,如表 5.39 所示。

表 5.39 外部存储器控制器寄存器

名称 描述 访问 复位值 地址

BCFG0 存储器组0 的配置寄存器 /写 0x2000 FBEF 0xFFE00000 BCFG1 存储器组1 的配置寄存器 /写 0x2000 FBEF 0xFFE00004 BCFG2 存储器组2 的配置寄存器 /写 0x1000 FBEF 0xFFE00008 BCFG3 存储器组3 的配置寄存器 /写 0x0000 FBEF 0xFFE0000C 注:由于 Bank 0 可用于引导程序运行,所以 BCFG0 的复位值与引脚 BOOT1:0 的设定有关,见表 5.41。

每个寄存器为对应的存储器组配置了以下选项:

- - 165

在文檔中 1.1 嵌入式系统 (頁 169-175)