第5章 LPC2000系列ARM硬件结构
2. 片内静态 RAM
5.3.2 片外存储器
LPC2114/2124 不具备外部存储器接口,所以扩展片外存储器只能通过 I/O 口模拟总线 操作,或者使用I2C、SPI 接口连接。
LPC2210/2212/2214 具备外部存储器接口,通过外部存储器控制器(EMC)可以扩展 4 个 Bank 的 存 储 器 组 (Bank0 ~ Bank3) , 每 个 存 储 器 组 的 空 间 大 小 为 16M 字 节 。 LPC2210/2212/2214 的 EMC 符合 ARM 公司的 PL090 标准,总线宽度可设置为 8 位、16 位、
32 位,通常使用 16 位总线宽度的存储器具有较高的性价比。
对于外扩的SRAM 存储器,使用 ARM 的 LDR/STR 指令即可进行数据的读写操作;而 对于外扩的FLASH(NOR 型),可以使用 LDR 指令读取数据,但是不能使用 STR 指令直 接写数据,而是根据FLASH 芯片写操作时序进行控制,实现 FLASH 的擦除编程。如果需 要将程序代码烧写到扩展的FLASH,则需要动行一个装载程序(Loder 程序,一般由用户自 行编写),这个程序的功能是通过串口接收要烧写的数据,然后擦除编程 FLASH,连接示意 图如图5.4 所示。
图 5.4 片外 FLASH 存储器 Loader 示意图 5.3.3 存储器映射
LPC2114/2124/2210/2212/2214 包含几个不同的存储器组,见图 5.5~图 5.8。图 5.5 所示 为复位后从用户角度所看到的整个地址空间映射。中断向量支持地址的重新映射,详见第 5.3.5 小节。
PC JTAG
ARM 板 Loder 程序 RS232
扩 展 的 FLASH data
- - 128 AHB 外设
VPB外设 4.0 GB
3.75 GB
3.5 GB
3.0 GB
2.0 GB
1.0 GB
0.0 GB
(LPC2114/2124)
0x0000 0000 0xFFFF FFFF
0x8000 0000 0xC000 0000 0xE000 0000 0xF000 0000
0x4000 1FFF 0x4000 0000
Boot Block
0x0002 0000 0x0001 FFFF 0x0004 0000 0x0003 FFFF 保留给外部存储器
保留给片内存储器
16 kB片内静态RAM
256 kB片内非易失性存储器
128 kB片内非易失性存储器
(从片内Flash存储器重新映射)
(LPC2212/2214)
图 5.5 系统存储器映射
图5.6~图 5.8 显示了从不同角度所观察到的外设地址空间。AHB 和 VPB 外设区域都 为2M 字节,可各自分配最多 128 个外设。每个外设空间的规格都为 16k 字节,这样就简化 了每个外设的地址译码。所有外设寄存器不管规格大小,都按照字地址进行分配(32 位边 界)。这样就不再需要使用字节定位的硬件来进行小边界的字节(8 位)或半字(16 位)访 问。不管字还是半字寄存器都是一次性访问,例如,不可能对一个字寄存器的最高字节执行 单独的读或写操作。
- - 129 4.0 GB
0xFFFF FFFF
3.75 GB
0xE000 0000 0xFFE0 0000 0xFFDF FFFF
3.5 GB
0xF000 0000 0xEFFF FFFF
0xE020 0000 0xE01F FFFF 4.0 GB - 2 MB
3.5 GB + 2 MB
AHB 外设
保留
保留
VPB 外设
注:
-AHB 部分是 128×16kB 的范围(共 2MB)。
-VPB 部分是 128×16kB 的范围(共 2MB)。
图 5.6 外设存储器映射
- - 130
0xFFE0 0000 0xFFFF C000
0xFFFF 8000
0xFFFF 4000
0xFFFF 0000
0xFFE0 8000
0xFFE0 4000 0xFFE0 C000 0xFFE1 0000
0xFFFF F000 (4G - 4K) 向量中断控制器
(AHB 外设 #126)
(AHB 外设 #125)
(AHB 外设 #124)
(AHB 外设 # 3)
(AHB 外设 # 2)
(AHB 外设 # 1)
(AHB 外设 # 0)
图 5.7 AHB 外设映射
- - 131
特定的 ARM 器件所没有的存储器映射区域。对于 LPC2114/2124/2210/2212/2214,
它们是:
——片内非易失性存储器与片内SRAM 之间的地址空间,在图 5.5 和图 5.9 中标为
- - 132
“保留给片内存储器”。对于无Flash 的器件来说,它们是地址范围从 0x00000000 到0x3FFFFFFF。对于 128kB Flash 器件来说,它们是 0x00020000 到 0x3FFFFFFF 的存储器地址空间;而对于256kB Flash 器件来说,它们是 0x00040000 到 0x3FFF FFFF 的存储器地址空间。
——片内静态RAM 与外部存储器之间的地址空间,在图 5.5 中标为“保留给片内 存储器”。地址范围从0x40003FFF 到 0x7FFFDFFF。
——外部存储器,但由LPC2210/2212/2214 中 EMC 提供的除外。
——AHB 和 VPB 空间的保留区域,见图 5.6。
未分配的 AHB 外设空间,见图 5.7。
未分配的 VPB 外设空间,见图 5.8。
对于这些区域,对数据的访问和对指令的取指都会产生异常。此外,对 AHB 或 VPB 外设地址执行任何指令取指都会导致产生预取指中止异常。
在现有的VPB 外设地址空间内,对未定义地址的访问不会产生数据中止异常。每个外 设内的地址译码被限制为外设内部需要判别的已定义寄存器。例如,对地址 0xE000D000
(UART0 空间内一个未定义的地址)的访问可能导致对定义在地址 0xE000C000 处的寄存 器进行访问。一个外设内的这样一种地址混淆在LPC2114/2124/2210/2212/2214 文档中没有 定义,并且它也不是一个被LPC2114/2124/2210/2212/2214 支持的特性。
需要注意的是,只有在试图执行从非法地址取指的指令时,ARM 才会将预取指中止标 志与相关的指令(没有意义的指令)一起保存到流水线并对中止进行处理。当代码在非常靠 近存储器边界执行时,这样防止了由预取指所导致的意外中止。
5.3.5 存储器重映射及引导块 1. 存储器映射概念和操作模式
LPC2114/2124/2210/2212/2214 的存储器映射的基本概念是:每个存储器组在存储器映 射中都有一个“物理上的”位置。它是一个地址范围,该范围内可写入程序代码。每一个存 储器空间的容量都永久固定在同一个位置,这样就不需要将代码设计成在不同地址范围内运 行。
由于ARM7 处理器上的中断向量位置(地址 0x00000000~0x0000001C,见表 5.4),Boot Block 和 SRAM 空间的一小部分需要重新映射来实现在不同操作模式下对中断的使用,见表 5.5。中断的重新映射通过存储器映射控制特性来实现。
表 5.4 ARM 异常向量位置
地址 异常
0x0000 0000 复位 0x0000 0004 未定义指令 0x0000 0008 软件中断
0x0000 000C 预取指中止(从存储器取指出错)
0x0000 0010 数据中止(访问存储器数据出错)
0x0000 0014 保留 * 0x0000 0018 IRQ 0x0000 001C FIQ
*: 在 ARM 文档中标识为保留,该位置被 Boot 装载程序用作有效的用户程序关键字。通过定义此保留 字的值(使用 DCD 指令定义),使向量表所有数据 32 位累加和为零(0x00000000~0x0000001C 的 8 个字 的机器码累加),才能脱机运行用户程序,这是 LPC2114/2124/2212/2214 的特性。
- - 133
表 5.5 LPC2114/2124/2210/2212/2214 存储器映射模式
模式 激活 用途
Boot 装载程
序模式 由任何复位硬件激活 在任何复位后都会执行Boot 装载程序。Boot Block 中断向量映射 到存储器的底部以允许处理异常并在Boot 装载过程中使用中断。
用 户 Flash
模式 由Boot 代码软件激活
当在存储器中识别了一个有效的用户程序标识并且Boot 装载操作 未被执行时,由Boot 装载程序启动。中断向量没有重新映射,它 位于Flash 存储器的底部。
用 户 RAM
模式 由用户程序软件激活 由用户程序激活。中断向量重新映射到静态RAM 的底部。
用户外部模 式
复位时BOOT1:0 不为 11 时激活
当一个或两个BOOT 引脚在 RESET 低电平结束时为低时由 Boot 装载程序激活。中断向量从外部存储器映射的底部重新映射。
注:该模式只适用于LPC2210/2212/2214!
对于LPC2210/2212/2214,当RESET为低时,BOOT1:0 脚的状态控制着引导和初始操作。
如果引脚悬空,引脚的内部上拉可保证它的高电平状态。设计者可通过连接一些弱下拉电阻
(4.7kΩ)或晶体管(RESET为低时可驱动为低电平)到 BOOT1:0 脚来选择引导方式,如 表5.6 所示。
表 5.6 BOOT1:0 的引导控制
P2.27/D27/BOOT1 P2.26/D26/BOOT0 引导方式
0 0 CS0 控制的 8 位存储器
0 1 CS0 控制的 16 位存储器
1 0 CS0 控制的 32 位存储器
1 1 内部 Flash 存储器