1.63k likes | 1.75k Views
第 5 章 LPC2000 系列 ARM 硬件结构. 第 5 章 目录. 1. 简介 2. 引脚配置 3. 存储器寻址 4. 系统控制模块 5. 存储器加速模块 6. 外部存储器控制器 7. 引脚连接模块 8. 向量中断控制器 9.GPIO. 10.UART0 11.UART1 12.I 2 C 接口 13.SPI 接口 14. 定时器 0/1 15. 脉宽调制器( PWM ) 16.A/D 转换器 17. 实时时钟 18. 看门狗. 第 5 章 目录. 1. 简介 2. 引脚配置 3. 存储器寻址 4. 系统控制模块
E N D
第5章 LPC2000系列ARM 硬件结构
第5章 目录 • 1.简介 • 2.引脚配置 • 3.存储器寻址 • 4.系统控制模块 • 5.存储器加速模块 • 6.外部存储器控制器 • 7.引脚连接模块 • 8. 向量中断控制器 • 9.GPIO • 10.UART0 • 11.UART1 • 12.I2C接口 • 13.SPI接口 • 14.定时器0/1 • 15.脉宽调制器(PWM) • 16.A/D转换器 • 17.实时时钟 • 18.看门狗
第5章 目录 • 1.简介 • 2.引脚配置 • 3.存储器寻址 • 4.系统控制模块 • 5.存储器加速模块 • 6.外部存储器控制器 • 7.引脚连接模块 • 8. 向量中断控制器 • 9.GPIO • 10.UART0 • 11.UART1 • 12.I2C接口 • 13.SPI接口 • 14.定时器0/1 • 15.脉宽调制器(PWM) • 16.A/D转换器 • 17.实时时钟 • 18.看门狗
5.1 简介 • LPC2000系列微控制器概述 LPC2000系列微控制器基于ARM7TDMI-S CPU内核。支持ARM和Thumb指令集,芯片内集成丰富外设,而且具有非常低的功率消耗。使该系列微控制器特别适用于工业控制、医疗系统、访问控制和POS机等场合。
ARM7TDMI-S CPU 系统功能 ARM7 局部总线 AHB总线 SRAM VIC Flash AHB To VPB 桥 EMC 外部中断 I2C串行接口 TIMER0/1 SPI串行接口 ADC UART0 & 1 通用I/O CAN PWM0 看门狗定时器 实时时钟 系统控制 LPC2000系列微控制器包含四大部分: • ARM7TDMI-S CPU • 芯片内部框图 • ARM7局部总线及相关部件 • AHB高性能总线及相关部件 • VLSI外设总线及相关部件
ARM7TDMI-S CPU 系统功能 ARM7 局部总线 AHB总线 SRAM VIC Flash AHB To VPB 桥 EMC 外部中断 I2C串行接口 外部中断 I2C串行接口 TIMER0/1 SPI串行接口 TIMER0/1 SPI串行接口 ADC UART0 & 1 ADC UART0 & 1 VIC 通用I/O CAN 通用I/O CAN EMC PWM0 看门狗定时器 PWM0 看门狗定时器 实时时钟 系统控制 实时时钟 系统控制 • LPC2000系列微控制器将ARM7TDMI-S配置为小端模式(Little-endian)。 ARM7TDMI-S CPU • 芯片内部框图 • AHB外设分配了2M字节的地址范围,它位于4G字节ARM寻址空间的最顶端。每个AHB外设都分配了16KB的地址空间。 AHB To VPB 桥 • LPC2000系列微控制器的外设功能(除中断控制器)都连接到VPB总线。AHB到VPB的桥将VPB总线与AHB总线相连。VPB外设也分配了2M字节的地址范围,从3.5GB地址点开始。每个VPB外设都分配了16KB的地址空间。
ARM7TDMI-S CPU 系统功能 ARM7 局部总线 AHB总线 SRAM VIC Flash AHB To VPB 桥 EMC SRAM 外部中断 I2C串行接口 Flash TIMER0/1 SPI串行接口 ADC UART0 & 1 通用I/O CAN PWM0 看门狗定时器 实时时钟 系统控制 • 内部存储器包括无等待SRAM和Flash; 系统功能 • 芯片内部各单元简介 • 系统功能包括维持芯片工作的一些基本功能,如系统时钟、复位等; VIC EMC • 向量中断控制器(VIC)可以减少中断的响应时间,最多可以管理32个中断请求; I2C串行接口 • 外部存储器控制器(EMC)支持4个BANK的外部SRAM或Flash,每个BANK最多16MB; • I2C串行接口为标准的I2C总线接口,支持最高速度400kb;
ARM7TDMI-S CPU 系统功能 ARM7 局部总线 AHB总线 SRAM VIC Flash AHB To VPB 桥 EMC 外部中断 I2C串行接口 TIMER0/1 SPI串行接口 ADC UART0 & 1 通用I/O CAN PWM0 看门狗定时器 实时时钟 系统控制 • 具有两个完全独立的SPI控制器,遵循SPI规范,可配置为SPI主机或从机; • 芯片内部各单元简介 • 具有两个UART接口,均包含16字节的接收/发送FIFO,内置波特率发生器。其中UART1具有调制解调器接口功能; • 在LPC2119/2129/2290/2292等芯片中包含CAN总线接口; SPI串行接口 UART0 & 1 • 看门狗定时器带有内部分频器,可以方便设置溢出时间,在软件使能看门狗后只有复位可以禁止(具有调试模式); CAN 看门狗定时器
ARM7TDMI-S CPU 系统功能 ARM7 局部总线 AHB总线 SRAM VIC Flash AHB To VPB 桥 EMC 外部中断 I2C串行接口 TIMER0/1 SPI串行接口 ADC UART0 & 1 通用I/O CAN PWM0 看门狗定时器 实时时钟 系统控制 • 系统控制模块包括一些与其它外设无关的功能,如功率控制等; • 芯片内部各单元简介 • 外部中断有4路多引脚输入,可用于CPU掉电唤醒; • 定时器0/1为两个独立的带可编程32位预分频器的32位定时器/计数器,具有捕获和匹配输出功能; 外部中断 TIMER0/1 ADC • 具有4/8路10位ADC,可以设置为多路循环采样模式。10位转换时间最短为2.44us; 系统控制
ARM7TDMI-S CPU 系统功能 ARM7 局部总线 AHB总线 SRAM VIC Flash AHB To VPB 桥 EMC 外部中断 I2C串行接口 TIMER0/1 SPI串行接口 ADC UART0 & 1 通用I/O CAN PWM0 看门狗定时器 实时时钟 系统控制 • 不同封装的芯片具有数目不等的IO口,它们可以承受5V电压。每个IO口可以独立设置为输入/输出模式,在作为输出模式时可以分别置位或清零; • 芯片内部各单元简介 • 脉宽调制器可以灵活设置,以适应不同的场合。可以设置为单边沿或双边缘输出方式,可以灵活的设置频率和占空比; • 实时时钟具有可编程的积存时钟分频器,以适应不同的晶振频率。带日历和时钟功能,提供秒、分、时、日、月、年和星期,同时具有非常的功耗。 通用I/O PWM0 实时时钟
第5章 目录 • 1.简介 • 2.引脚配置 • 3.存储器寻址 • 4.系统控制模块 • 5.存储器加速模块 • 6.外部存储器控制器 • 7.引脚连接模块 • 8. 向量中断控制器 • 9.GPIO • 10.UART0 • 11.UART1 • 12.I2C接口 • 13.SPI接口 • 14.定时器0/1 • 15.脉宽调制器(PWM) • 16.A/D转换器 • 17.实时时钟 • 18.看门狗
5.2 引脚配置 • LPC2000系列芯片外形 LPC2114/2124 LPC2210/2212/2214
GPIO P0.0 TXD0 PWM1输出 5.2 引脚配置 • 引脚功能选择使用示例 LPC2000系列微控制器的引脚一般是多个功能复用,但是同一引脚在同一 引脚在同一时刻只能使用其中一个功能,这可以通过设置PINSELx寄存器来选择,详细介绍见“引脚连接模块”小节。 通过PINSEL0控制引脚功能
第5章 目录 • 1.简介 • 2.引脚配置 • 3.存储器寻址 • 4.系统控制模块 • 5.存储器加速模块 • 6.外部存储器控制器 • 7.引脚连接模块 • 8. 向量中断控制器 • 9.GPIO • 10.UART0 • 11.UART1 • 12.I2C接口 • 13.SPI接口 • 14.定时器0/1 • 15.脉宽调制器(PWM) • 16.A/D转换器 • 17.实时时钟 • 18.看门狗
小节目录 • 存储器分布 • 各存储器操作方法 • 存储器映射 • 预取指中止和数据中止 • 异常向量表
小节目录 • 存储器分布 • 各存储器操作方法 • 存储器映射 • 预取指中止和数据中止 • 异常向量表
0xFFFFFFFF 外部存储器 0x80000000 Boot Block 0x7FFFE000 内部SRAM 0x40000000 内部Flash 0x00000000 5.3 存储器寻址 • 一个具体应用可能存在的物理存储器 地址空间 片外存储器 片内存储器
16K 16K 16K 256K 128K 片内Flash 片内RAM 5.3 存储器寻址 • 不同芯片内部存储器分布 0x40001FFF 0x40000000 0x0003FFFF 0x0001FFFF 0x00000000 LPC2210 LPC2114/2212 LPC2124/2214
小节目录 • 存储器分布 • 各存储器操作方法 • 存储器映射 • 预取指中止和数据中止 • 异常向量表
5.3 存储器寻址 • 片内Flash编程方法: 1. 通过内置JTAG接口; 2. 通过在系统编程(ISP),使用UART0通信; 3. 通过在应用编程(IAP); 串口 JTAG
5.3 存储器寻址 • 片外Flash编程方法(LPC2200): 在CPU上运行一个装载程序(Loader,一般由用户编写),该程序通过串口接收要烧写的数据,然后擦除编程Flash。 Loder 程序 外部 Flash 串口
5.3 存储器寻址 • 片内SRAM的写操作 SRAM控制器包含一个回写缓冲区,它总是保存着软件发送到SRAM的最后一个字数据。该数据只有在软件请求下一次写操作时才写入SRAM。如果发生芯片复位,实际的SRAM内容将不会反映最近一次的写操作。 ? A B 写入A 写入B 写入A 写入地址 ? A 回写缓冲区 内部SRAM
小节目录 • 存储器分布 • 各存储器操作方法 • 存储器映射 • 预取指中止和数据中止 • 异常向量表
5.3存储器寻址 • 存储器映射基本概念 ARM处理器产生的地址叫虚拟地址,把这个虚拟地址按照某种规则转换到另一个物理地址去的方法称为地址映射。这个物理地址表示了被访问的存储器的位置。它是一个地址范围,该范围内可以写入程序代码。 通过地址映射的方法将各存储器分配到特定的地址范围后,这时用户所看见的存储器分布为存储器映射。
5.3存储器寻址 • 芯片复位后用户看见的地址空间 0xFFFFFFFF 2MB AHB 外设 0xF0000000 2MB VPB 外设 0xE0000000 保留给外部储器使用 0x80000000 8KB BootBlock 保留给片内存储器使用 16KB SRAM 0x40000000 保留给片内存储器使用 256KB Flash(LPC2124/2214) 0x00020000 128KB Flash(LPC2114/2212) 0x00000000 地址空间
5.3存储器寻址 • AHB和VPB AHB(先进的高性能总线)和VPB(VLSI外设总线)外设区域都为2M字节,可各分配128个外设。每个外设空间的规格都为16K字节,这样就简化了每个外设的地址译码。 注意:AHB和VPB外设区域中不管是字还是半字,都是一次性访问。例如不可能对一个字寄存器的最高字节执行单独的读或写操作
4.0GB 0xFFE00000 AHB 外设 4.0GB-2MB 0xFFE00000 保留 3.5GB+2MB 0xE0000000 VPB 外设 VPB 外设 3.5GB 0xE0000000 AHB 外设 地址空间 5.3存储器寻址 • 外设存储器映射 均为128×16KB(2MB)范围
向量中断控制器 AHB 外设#127 0xFFFFF000 0xFFFFC000 AHB 外设#126 0xFFFF8000 AHB 外设#125 0xFFFF4000 … AHB 外设#1 0xFFE04000 AHB 外设#0 0xFFE00000 地址空间 5.3存储器寻址 • AHB外设映射
VPB外设#127 系统控制模块 0xE01FC000 … UART 0 VPB 外设#3 0xE000C000 定时器1 VPB 外设#2 0xE0008000 VPB 外设#1 定时器0 0xE0004000 看门狗定时器 VPB 外设#0 0xE0000000 地址空间 5.3存储器寻址 • VPB外设映射
AHB & VPB Boot Block SRAM Flash 5.3存储器寻址 • Boot lock的映射地址安排 为了兼容将来的器件,整个Boot Block被映射到片内存储器空间的顶端。所以将来的芯片内置不同的RAM和FALSH都不会影响Boot Block的位置。 映射位置固定在内部存储器顶端 0x80000000 SRAM RAM和Flash 的变化不会影响BootBlock的位置 Flash 地址空间
5.3存储器寻址 • 存储器重新映射 存储器重新映射是将复位后用户所见的存储器中部分区域,再次映射到其它的地址上。 对于Philips的LPC系列ARM微控制器,存储器重新映射区域一共为64字节,分别为异常向量区(32字节)和紧随其后的32字节。存储器重新映射的方法允许在不同模式下处理中断,重新映射的存储器区域在地址0x00000000~0x0000003F处。存储器重新映射的控制见“存储器映射控制”小节。
5.3存储器寻址 • 使用存储器重新映射的原因 • 使Flash存储器中的FIQ处理程序不必考虑因为重新映射所导致的存储器边界问题 • 用来处理代码空间中段边界仲裁的SRAM和Boot Block向量的使用大大减少 • 为超过单字转移指令范围的跳转提供空间来保存常量
小节目录 • 存储器分布 • 各存储器操作方法 • 存储器映射 • 预取指中止和数据中止 • 异常向量表
5.3存储器寻址 • 预取指中止和数据中止异常 如果试图访问一个保留地址或未分配区域的地址,ARM处理器将产生预取指中止或数据中止异常。
AHB VPB Boot Block SRAM Flash 地址空间 5.3存储器寻址 • 预取指中止和数据中止异常 这些区域分别为: 1.特定的ARM器件所没有的存储器映射区域; 2. AHB外设空间中未分配的区域; 3. VPB外设空间中未分配的区域。
5.3存储器寻址 • 预取指中止和数据中止异常 注意: 只有在试图执行从非法地址取指的指令时,ARM才会将预取指中止标志与相关的指令(没有意义的指令)一起保存到流水线并对中止进行处理。当代码在非常靠近存储器边界执行时,防止了由预取指所导致的意外中止。
存储器无效区域 指令C 取指 取指 指令C 指令B 译码 译码 指令B 指令A 执行 执行 指令A 5.3存储器寻址 • 预取指中止和数据中止异常举例 存储器 指令流水线 程序 存储器 第N次取指
存储器无效区域 指令C 取指 指令C 取指 指令B 译码 译码 指令B 指令A 执行 指令A 执行 无效指令 指令C 指令B 5.3存储器寻址 • 预取指中止和数据中止异常举例 存储器 指令流水线 程序 存储器 第N+1次取指
存储器无效区域 指令C 取指 指令C 取指 指令B 译码 译码 指令B 指令A 执行 指令A 执行 无效指令 无效指令 指令C 无效指令 指令B 指令C 5.3存储器寻址 • 预取指中止和数据中止异常举例 存储器 指令流水线 程序 存储器 第N+2次取指
存储器无效区域 指令C 取指 指令C 取指 指令B 译码 译码 指令B 指令A 执行 执行 指令A 无效指令 无效指令 无效指令 指令C 无效指令 无效指令 指令B 指令C 无效指令 5.3存储器寻址 • 预取指中止和数据中止异常举例 存储器 指令流水线 程序 存储器 第N+3次取指,此时流水线的执行级执行了无效指令,发生预取指中止。如果指令C为跳转指令则可以避免预取指中止的发生。
小节目录 • 存储器分布 • 各存储器操作方法 • 存储器映射 • 预取指中止和数据中止 • 异常向量表
5.3存储器寻址 • 异常向量表 对于每一个异常事件,都有一个与之相对应的处理程序,它们是关联在一起的,并以一张一维表的格式存储在存储器的固定单元中。这张指定了各异常中断及其处理程序的对应关系的表,称为异常向量表。
地址 异常 0x0000 0000 复位 0x0000 0004 未定义指令 0x0000 0008 软件中断 0x0000 000C 预取指中止(从存储器取指出错) 0x0000 0010 数据中止(访问存储器数据出错) 0x0000 0014 保留 * 0x0000 0018 IRQ 0x0000 001C FIQ 5.3存储器寻址 • 异常向量表 各异常向量的固定位置 该位置被Boot装载程序用作有效用户程序的检测标志。通过定义此保留值,使向量表所有数据32位累加和为0,芯片复位后才能脱机运行用户程序。
5.3存储器寻址 • 位于启动代码中的异常向量表 • 什么是启动代码? • 一般在32位ARM应用系统中,大多数采用C语言进行软件编程。但是在运行应用代码前需要进行系统初始化。 • 常用一个汇编文件作启动代码,它可以实现异常向量表定义、堆栈初始化、系统变量初始化、中断系统初始化、I/O初始化、外围部件初始化、地址重映射等操作。
异常向量表 CODE32 AREA vectors,CODE,READONLY ENTRY Reset LDR PC, ResetAddr LDR PC, UndefinedAddr . . . DCD 0xb9205f80 LDR PC, [PC, #-0xff0] LDR PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined . . . Nouse DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Handler • 位于启动代码中的异常向量表 前32字节为异常入口 后32字节为跳转地址
异常向量表 CODE32 AREA vectors,CODE,READONLY ENTRY Reset LDR PC, ResetAddr LDR PC, UndefinedAddr . . . DCD 0xb9205f80 LDR PC, [PC, #-0xff0] LDR PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined . . . Nouse DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Handler • 位于启动代码中的异常向量表 例如:发生未定义异常时 1.程序计数器(PC)指向0x00000004; 装入 2.执行当前的指令,将Undefined地址值装入PC,实现至未定义异常处理程序的跳转。
异常向量表 CODE32 AREA vectors,CODE,READONLY ENTRY Reset LDR PC, ResetAddr LDR PC, UndefinedAddr . . . DCD 0xb9205f80 LDR PC, [PC, #-0xff0] LDR PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined . . . Nouse DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Handler • 位于启动代码中的异常向量表 注意:异常向量表中程序跳转使用LDR指令,而没有使用B指令。 B ResetAddr 原因: 1.LDR指令可以全地址范围跳转,而B指令只能在前后32MB范围内跳转; 2.芯片具有Remap功能。当向量表位于内部RAM或外部存储器中,用B指令不能跳转到正确的位置。
第5章 目录 • 1.简介 • 2.引脚配置 • 3.存储器寻址 • 4.系统控制模块 • 5.存储器加速模块 • 6.外部存储器控制器 • 7.引脚连接模块 • 8. 向量中断控制器 • 9.GPIO • 10.UART0 • 11.UART1 • 12.I2C接口 • 13.SPI接口 • 14.定时器0/1 • 15.脉宽调制器(PWM) • 16.A/D转换器 • 17.实时时钟 • 18.看门狗
5.4 系统控制模块小节目录 • 系统控制模块概述 • 系统时钟 • 复位 • 外部中断 • 存储器映射控制 • 功率控制 • 唤醒定时器