• 沒有找到結果。

嵌入式计算机系统

N/A
N/A
Protected

Academic year: 2022

Share "嵌入式计算机系统"

Copied!
128
0
0

加載中.... (立即查看全文)

全文

(1)

嵌入式计算机系统

Lecture #4

ARM 7 重要硬件结构

内容来自于《ARM嵌入式系统基础教程》及其配套课件

(2)

4.1 LPC2000系列简介

LPC2000系列微控制器基于ARM7TDMI-S CPU内 核。支持ARM和Thumb指令集,芯片内集成丰富外设,

而且具有非常低的功率消耗。使该系列微控制器特别适

用于工业控制、医疗系统、访问控制和POS机等场合。

•  简介

(3)

4.1 LPC2100/2200系列简介

•  器件信息

器件 引脚数 片内RAM 片内Flash 10位AD通道数 备注 LPC2114 64 16KB 128KB 4 LPC2124 64 16KB 256KB 4 LPC2210 144 16KB 8

带外部 存储器接口 LPC2220 144 64KB 8

LPC2212 144 16KB 128KB 8 LPC2214 144 16KB 256KB 8

关于LPC2000其它器件的介绍请登录www.zlgmcu.com

“LPC2000系列ARM”专栏

(4)

ARM7TDMI-S CPU

AHB To

VPB桥 EMC

VIC

I2C串行接口 SPI串行接口 UART 0&1

看门狗定时器 系统控制 外部中断

TIMER0/1 ADC

通用I/O

PWM0

实时时钟 SRAM Flash

AHB总线 ARM7 局部总线

系统功能

VPB总线

•  芯片内部结构

LPC2000系列微控制器包 4大部分:

支持仿真的ARM7TDMI-S CPU

1

与片内存储器控制器接口 ARM7局部总线

2

与中断控制器接口的AMB A高性能总线(AHB)

3

连接片内外设功能的VLSI 外设总线(VPB)

4

(5)

•  1.片内存储器

•  2.片外存储器

•  3.存储器映射

•  4.预取指中止和数据中止异常

•  5.存储器重映射及引导块

•  6.启动代码相关部分

4.2 存储器寻址

(6)

4.2.1 片内存储器

LPC2000系列中除了LPC2210/2220/2290外,其 它的ARM微处理器内部都带有容量不等的Flash,这为 ARM芯片的单片应用带来可能。

片内Flash通过128位宽度的总线与ARM内核相连,

具有很高的速度,加上特有的存储器加速功能,因此可 以将程序直接放在Flash上运行。

•  片内FLASH程序存储器

(7)

4.2.1 片内存储器

•  片内Flash编程方法

1. 使用JTAG仿真/调试器,通过芯片的JTAG接口下载程序;

2. 使用在系统编程技术(即ISP),通过UART0接口下载程 序;

3.使用在应用编程技术(即IAP),在用户程序运行时 对Flash进行擦除和/或编程操作,实现数据的存储和固 件的现场升级。

ARM7 处理器核

外设

控制器 RAM

Boot Block FLASH JTAG

UART0

串口 并口

JTAG

JTAG

UART0

(8)

4.2.1 片内存储器

•  片内

Flash

编程方法

2. 使用在系统编程技术(即ISP),通过UART0接口下载程 序;

3. 使用在应用编程技术(即IAP),在用户程序运行时对 Flash进行擦除和/或编程操作,实现数据的存储和固件的现 场升级。

1. 使用JTAG仿真/调试器,通过芯片的JTAG接口下载 程序;

(9)

4.2.1 片内存储器

LPC2000系列微控制器的片内RAM为静态RAM (SRAM),它们可用作代码和/或数据的存储。

SRAM支持8位、16位和32位的读写访问。

•  片内静态RAM

(10)

4.2.2 片外存储器

•  概述

在CPU外部扩展连接的存储器芯片称为片外存储器,

这些器件通常都具有数据线、地址线和控制线等。主要 器件有ROM、FLASH、SRAM等。

Bank0 Bank1 Bank2 Bank3

LPC2200

每个Bank

寻址空间:16M字节;

数据宽度:8/16/32位。

(11)

4.2.2 片外存储器

•  片外Flash编程方法

Flash的擦写操作需要配合⼀一段符合Flash编程时序 的代码,这段代码称为装载程序,⼀一般由用户编写。

程序代码(源) 程序代码(目标)

Loader

目标板 CPU

BUS

Flash 串口

下载用户代码时,首先得在CPU内运行装载程序,

通过它把从串口(或其它接口)接收的代码写到片外 Flash中。

(12)

•  概述

4.2.3 存储器映射

ARM芯片可以存在片内和片外存储器,这些存储 器本身不具有地址信息,它们在芯片中的地址是由芯 片厂家或用户分配的,那么给物理存储器分配逻辑地 址的过程称为存储器映射。通过这些逻辑地址就可以 访问到相应存储器的物理存储单元。

(13)

0x0000 0000 2.0GB

1.0GB

0.0GB 3.0GB 3.5GB 4.0GB 3.75GB

0x0002 0000 0x0004 0000 0x4000 0000 0x4000 4000 0x7FFF E000 0x8000 0000 0x8100 0000 0x8200 0000 0x8300 0000 0x8400 0000 0xC000 0000 0xE000 0000 0xF000 0000 0xFFFF FFFF

•  系统存储器映射

4.2.3 存储器映射

256KB 片内非失忆性存 储器(LPC2124/2214)

2MB AHB外设

128KB 片内非失忆性存 储器(LPC2114/2212)

16KB 片内静态RAM 8KB Boot Block(片 内ROM存储器重映射)

2MB VPB外设

16MB Bank0 保留

保留给片内RAM存储器

保留给片内FLASH存储器 16MB Bank1

16MB Bank2 16MB Bank3

目标板

BUS FLASH

AHB外设

FLASH RAM

Boot Block

VPB外设 ARM7 处理器核

AHB To VPB桥

保留给片外存储器

•  用户所见存储器的分布

(14)

4.2.3 存储器映射

•  AHB和VPB

AHB(先进的高性能总线)和VPB(VLSI外设 总线)外设区域都为2M字节,可各分配128个外设。

每个外设空间的规格都为16K字节,这样就简化了每 个外设的地址译码。

注意

:外设寄存器的地址都是字对齐。

AHB 和 VPB外设区域中不管是字还是半字,都是⼀一次性访 问。例如不可能对⼀一个字寄存器的最高字节执行单 独的读或写操作。

(15)

•  外设存储器映射

4.2.3 存储器映射

注:AHB和VPB均 为128x16kB(2MB) 范围。

0x0000 0000 2.0GB

1.0GB

0.0GB 3.0GB 3.5GB

0x0002 0000 0x0004 0000 0x4000 0000 0x4000 4000 0x7FFF E000 0x8000 0000 0x8100 0000 0x8200 0000 0x8300 0000 0x8400 0000 0xC000 0000 0xE000 0000

256KB 片内非失忆性存 储器(LPC2124/2214)

128KB 片内非失忆性存 储器(LPC2114/2212)

16KB 片内静态RAM 8KB Boot Block(片 内ROM存储器重映射)

16MB Bank0

保留给片内RAM存储器

保留给片内FLASH存储器 16MB Bank1

16MB Bank2 16MB Bank3

保留给片外存储器

4.0GB

3.75GB 0xF000 0000

0xFFFF FFFF

2MB AHB外设 2MB VPB外设

保留

0xE000 0000 3.5GB

4.0GB-2MB

保留

4.0GB

0xFFE0 0000

AHB外设

0xF000 0000 3.75GB

0xFFFF FFFF

3.5GB 3.5GB+2MB

VPB外设 保留

0xE000 0000 0xE020 0000

(16)

•  AHB外设映射

4.2.3 存储器映射

4.0GB-2MB

保留

保留

0xE000 0000 3.75GB

3.5GB 3.5GB+2MB

VPB外设

0xE020 0000 0xF000 0000 0xFFE0 0000 4.0GB

AHB外设

0xFFFF FFFF 0xFFE0 0000 4.0GB-2MB

0xFFE00000 0xFFE04000 0xFFFF8000 0xFFFFC000

向量中断控制器

0xFFFFF000 0xFFFFFFFF

(AHB外设 #1- AHB外设 #125) 未使用

(AHB外设#0) 未使用

(AHB外设#126) 未使用

外部总线控制器

:只有

LPC2200系列 微处理器有外 部总线控制器

(17)

•  VPB外设映射

4.2.3 存储器映射

4.0GB-2MB

保留

保留

3.75GB

3.5GB+2MB 4.0GB

AHB外设

0xFFFF FFFF 0xFFE0 0000

0xF000 0000

0xE020 0000 3.5GB

VPB外设

0xE000 0000

3.5GB+2MB 0xE020 0000

……

系统控制模块 (VPB外设#127)

10位A/D

(VPB外设#13)

看门狗定时器 (VPB外设#0) TIMER0 (VPB外设#1)

0xE000 0000 0xE000 4000 0xE000 8000 0xE003 4000 0xE003 8000 0xE01F C000

0xE01F FFFF

0xE005 C000

I2C1

(VPB外设#23)

……

未使用

……

未使用 SSP

(VPB外设#26)

……

未使用 0xE006 C000

0xE006 8000

0xE006 0000

(18)

Flash SRAM Boot Block VPB

AHB

EX-Memory

部分器件没有

0xFFFF FFFF

0x0000 0000 0x4000 0000 0x8000 0000 0xE000 0000

4.2.4 预取指中止和数据中止异常

•  概述

如果试图访问⼀一个保留区域地址或未分配区域地 址,ARM处理器将产生预取指中止或数据中止异常。

未定义

2 区域

保留区域

1

a b c d

(19)

4.2.4 预取指中止和数据中止异常

•  保留地址区域

Flash SRAM Boot Block VPB

AHB

EX-Memory

a b c d

片内非易失性存储器与片内SRAM之间 保留给片内存储器的地址空间。

a

片内静态RAM与外部存储器之间保留 给片内存储器的地址空间。

b

外部存储器区域中无法通过外部存储 器控制器(EMC)来访问的地址空间。

c

AHB和VPB空间的保留区域。 d

(20)

4.2.4 预取指中止和数据中止异常

向量中断控制器

(AHB外设 #1- AHB外设 #125) 未使用

(AHB外设#0) 未使用

(AHB外设#126) 未使用

外部总线控制器

……

(VPB外设#14- VPB外设#126

#23,#26除外) 未使用

系统控制模块 (VPB外设#127)

10位A/D

(VPB外设#13)

看门狗定时器 (VPB外设#0) TIMER0 (VPB外设#1)

AHB外设空间中未 分配区域

VPB外设空间中未 分配区域

•  未分配地址区域

(21)

4.2.5 存储器重映射及引导块

•  存储器重映射

将已经过映射的存储器再次映射的过程称为存储 器重映射,它使同⼀一物理存储单元出现多个不同的逻 辑地址。这些存储单元主要包括引导块“Boot Block”和 用于保存异常向量表的少量存储单元。

Addr1

程序所见存储器

...

Addr2 Addr1

存储器管理部件

0x1234 0x1234

实际物理存储器

0x1234

注意:存储器重映射并不是对映射单元的内容进 行了复制,而只是将多个地址指向了同⼀一个存储单元,

这种效果是通过芯片内部的“存储器管理部件”实现的。

实际物理存储单元通过 存储器管理部件进行存储器 映射,获得逻辑地址Addr1。

1

实际物理存储单元通过 存储器管理部件进行存储器 重映射,获得逻辑地址 Addr2。此时,逻辑地址 Addr1和Addr2可以访问同一 实际物理存储单元。

2

(22)

4.2.5 存储器重映射及引导块

•  引导块及其重映射

引导块(Boot Block

)是芯片设计厂家在

LPC2000 系列ARM内部固化的⼀一段代码,用户无法修改或删除。

这段代码在芯片复位后被首先运行,其功能主要是:

•  判断运行哪个存储器上的程序;

•  检查用户代码是否有效;

•  判断芯片是否被加密;

•  芯片的在应用编程(IAP)以及在系统编程功能(ISP)。

注意

:部分器件内部虽然没有用户

Flash空间(比如 LPC2210/2220/2290),但它们仍然存在Boot Block,并且 复位后会被首先运行。

(23)

4.2.5 存储器重映射及引导块

•  引导块在存储器中的状态

LPC2200系列芯片的Boot Block为8KB大小,它们 占用了用户的Flash空间。

248KB 用户Flash

0x00000000 0x0003FFFF

Boot Block (8KB)

片内

256KB Flash

LPC2124/2214)

存储器空间

120KB 用户Flash

0x00000000 0x0001FFFF

Boot Block(8KB)

片内

128KB Flash

LPC2114/2212)

存储器空间

LPC2130系列芯片的Boot Block为12KB大小,除 了LPC2138占用用户的Flash空间外,该系列中其它的 芯片不占用用户Flash空间。

用户Flash

(32/64/128/256KB) 0x00000000 0x0007D000

Boot Block(12KB)

LPC2131/2/4/6)

存储器空间

不被Boot Block占用

用户Flash (500KB)

0x00000000

Boot Block(12KB)

片内

512KB Flash

LPC2138)

存储器空间

0x0007D000

(24)

Boot Block 重新映射

Boot Block 重新映射

4.2.5 存储器重映射及引导块

保留于片内Flash VPH和AHB外设

保留于片内SRAM 16KB 片内SRAM

248KB 用户Flash

0x00000000 0x0003FFFF 0x40000000 0x40003FFF 0xE0000000 0xFFFFFFFF

0x80000000

保留于片外存储器

Boot Block

片内

256KB Flash

LPC2124/2214)

LPC2114/2212)

保留于片内Flash VPH和AHB外设

保留于片内SRAM 16KB 片内SRAM

120KB 用户Flash

0x00000000 0x0001FFFF 0x40000000 0x40003FFF 0xE0000000 0xFFFFFFFF

0x80000000

保留于片外存储器

Boot Block

片内

128KB Flash

Boot Block Boot Block

•  引导块(Boot Block)的重映射

(25)

异常向量表位于存储器映射的0x0000〜~0x001C地 址空间,定义了8个异常向量,每个异常向量占⼀一个字。

通常在每个异常入口放置⼀一条ARM 跳转指令,其跳转 目标地址放在0x001D〜~0x0003F地址空间,即异常服务 函数的入口地址。

所以⼀一个异常向量表实际包含了8个字的异常入口 和8个字的跳转目标地址,占用了16个字(64字节)的 存储单元。

4.2.5 存储器重映射及引导块

•  异常向量表概述

(26)

4.2.5 存储器重映射及引导块

•  ARM异常入口

地址 异常

0x0000 0000 复位

0x0000 0004 未定义指令 0x0000 0008 软件中断

0x0000 000C 预取指中止(从存储器读取指令出错)

0x0000 0010 数据中止(访问存储器数据出错)

0x0000 0014 保留 * 0x0000 0018 IRQ 0x0000 001C FIQ

该位置被Boot装载程序用作有效用户程序的检 测标志。通过定义此保留值,使向量表所有数据32 位累加和为0,芯片复位后才能脱机运行用户程序。

(27)

4.2.5 存储器重映射及引导块

•  异常向量表的重映射

异常向量表可以来自四个不同的区域:Boot Block

片内Flash

、片内

RAM和外部存储器。微控制器可以执 行这些存储器中的代码。

除了片内Flash的向量表位于0x0000〜~0x003F地 址上,其他存储器的向量表都不位于这个地址。为了 能让ARM内核通过访问0x0000〜~0x003F地址访问到其 他存储区域的向量表,这样向量表必须进行重映射。

注意

:除了

“用户片内Flash 模式”外,其它模式下 都无法访问片内Flash的0x0000〜~0x003F区域。

(28)

•  来自不同区域的异常向量表

0x0000 0000 0x0000 003F 0x4000 0000 0x4000 003F 0x7FFF E000

保留给片内SRAM

保留给片内Flash 保留给片外存储器

0xFFFF FFFF

保留

0xE000 0000

0x7FFF E03F 0x8000 0000 0x8000 003F

片内Flash 片内SRAM Boot Block

外部存储器 AHB外设 VPB外设

异常向量表 异常向量表 异常向量表 异常向量表

异常向量表 地址

重映射

复位后,首先运行Boot Block程序,需将Boot Block内 0x7FFF E000〜~0x7FFF E03F 的异常向量表重映射到0x0000

〜~0x003F地址以允许处理异常 并在Boot装载过程中使用中断。

此时无需进行Flash向量表 的重映射,其向量表本身就处 于0x0000〜~0x003F地址空间。

异常向量表 异常向量表

再根据MEMMAP寄存器的 设置运行 片内Flash代码。 片内片外存储器代码。RAM代码。

此时需将片内RAM0x4000 0000〜~0x4000 003F的向量表 重映射到0x0000〜~0x003F地 址空间。

此时需将外部存储器

0x8000 0000〜~0x8000 003F 的向量表重映射到0x0000〜~

0x003F地址空间。

地址 重映射

地址 重映射

(29)

4.3 向量中断控制器

•  概述

ARM7TDMI内核具有两个中断输入,分别为 IRQ中断和FIQ中断。向量中断控制器(VIC)负责 管理芯片的中断源,最多可以管理32个中断输入请 求。

CPU 内核 ARM7TDMI-S

(30)

4.3 向量中断控制器

•  程序状态寄存器CPSR与VIC的关系

ARM内核通过CPSR来监视和控制内部的操作,

CPSR中的“I”位和“F”位分别用来控制IRQ模式和FIQ 模式的使能。

CPU ARM7TDMI-S

VIC

IRQ

FIQ

CPSR[ 7 ](I)

CPSR[ 6 ](F)

(31)

4.3 向量中断控制器

•  程序状态寄存器CPSR与VIC的关系

Ø  当I = 1时,禁止IRQ中断

CPU ARM7TDMI-S

VIC

IRQ

FIQ

CPSR[ 7 ](I)

CPSR[ 6 ](F)

Ø  当I = 0时,使能IRQ中断

CPU ARM7TDMI-S

VIC

IRQ

FIQ

CPSR[ 7 ](I)

CPSR[ 6 ](F)

(32)

4.3 向量中断控制器

•  程序状态寄存器CPSR与VIC的关系

Ø  当F = 1时,禁止FIQ中断

CPU ARM7TDMI-S

VIC

IRQ

FIQ

CPSR[ 7 ](I)

CPSR[ 6 ](F)

Ø  当F = 0时,使能FIQ中断

CPU ARM7TDMI-S

VIC

IRQ

FIQ

CPSR[ 7 ](I)

CPSR[ 6 ](F)

(33)

4.3 向量中断控制器

•  中断分类

中断输入请求可以在VIC中被设置为以下三类:

§ 

FIQ中断:具有最高优先级;

§ 

向量IRQ中断:具有中等优先级;

§ 

非向量IRQ中断:具有最低优先级;

ARM7 TDMI VIC

向量IRQ

非向量IRQ FIQ

IRQ

FIQ

(34)

4.3 向量中断控制器

•  FIQ中断硬件处理流程

将当前的程序状态寄存器的内容备份 即,SPSR_fiq = CPSR

处理器切换到FIQ模式

禁止IRQ和FIQ中断,即,I = F = 1 保存返回地址

LR_fiq = PC

设置FIQ异常入口地址 PC = 0x1C

发生FIQ异常事件

说明:ARM7不支持FIQ中断嵌套

(35)

4.3 向量中断控制器

•  IRQ中断相应流程

将当前的程序状态寄存器的内容备份 即,SPSR_irq = CPSR

处理器切换到IRQ模式

禁止IRQ中断,即,I = 1 保存返回地址

LR_irq = PC

设置IRQ异常入口地址 PC = 0x18

发生IRQ异常事件

说明:ARM7不支持IRQ中断嵌套

(36)

向量 IRQ0使 能

中断 源

向量IRQ0控制寄存器 VICVectCntl0

向量地址0寄存器 VICVectAddr0

默认向量地址寄存器 VICDefVectAddr

向量

IRQ15使 能

中断 源

向量IRQ15控制寄存器 VICVectCntl15

向量地址15寄存器 VICVectAddr15

DefIRQ IRQ0

IRQ15 VectAddr0

VectAddr15

DefVectAddr

向量地址选择

向量地址寄存器 VICVectAddr

IRQ0

IRQ15

DefIRQ

IRQ中断信号 向量IRQ0

向量IRQ15

非向量IRQ

IRQ中断状态寄存器 VICIRQStatus

FIQ 中断 信号 中断选择寄存器

VICIntSelect 中断使能寄存器

VICIntEnable

中断使能清零寄存器 VICIntEnClr

中断源 [31:0]

软件中断使能寄存器 VICSoftInt

软件中断清零寄存器 VICSoftIntClear

FIQ中断状态寄存器 VICFIQStatus 中断状态寄存器

VICRawIntr IRQ

FIQ

(37)

中断选择寄存器 VICIntSelect 中断使能寄存器

VICIntEnable

中断使能清零寄存器 VICIntEnClr

中断源 [31:0]

软件中断使能寄存器 VICSoftInt

软件中断清零寄存器

VICSoftIntClear 中断状态寄存器

VICRawIntr IRQ

FIQ

名称 描述 访问 复位值 地址

VICIntEnable 中断使能寄存器

控制32个中断请求(包括软件中断)的使能 R/W 0 0xFFFF F010 VICIntEnClr 中断使能清零寄存器

将中断使能寄存器中的一个或多个位清零 W 0 0xFFFF F014 VICIntSelect 中断选择寄存器

将32个中断请求的每个中断分配为FIQ或IRQ R/W 0 0xFFFF F00C VICSoftInt 软件中断寄存器

控制对应通道产生软件中断 R/W 0 0xFFFF F018 VICSoftIntClear 软件中断清零寄存器

禁止对应通道的软件中断 W 0 0xFFFF F01C

•  寄存器描述-控制寄存器

(38)

•  控制寄存器功能描述

4.3 向量中断控制器

控制寄存器 功能描述

VICIntEnable

使能(禁止)中断源产生中断 VICIntEnClr

VICIntSelect 中断类型选择:FIQ & IRQ VICSoftInt

软件中断设置寄存器 VICSoftIntClear

FIQ中断

向量IRQ中断 非向量IRQ中断 中断源0

中断源1

……

中断源31

VIC 32个 中断输入 进行分配

(39)

向量 IRQ0使 能

中断 源

向量IRQ0控制寄存器 VICVectCntl0

向量地址0寄存器 VICVectAddr0

默认向量地址寄存器 VICDefVectAddr

向量

IRQ15使 能

中断 源

向量IRQ15控制寄存器 VICVectCntl15

向量地址15寄存器 VICVectAddr15

向量地址寄存器 VICVectAddr

•  寄存器描述-参数设置寄存器

名称 描述 复位置 地址

VICVectCntl0

VICVectCntl15

向量控制0寄存器

向量控制15寄存器

0 0xFFFF F200

0xFFFF F23C VICVectAddr0

VICVectAddr15

向量地址0寄存器

向量地址15寄存器

0 0xFFFF F100

0xFFFF F13C VICDefVectAddr 默认向量地址寄存器 0 0xFFFF F034 VICVectAddr 向量地址寄存器 0 0xFFFF F030

(40)

•  IRQ中断特点

4.3 向量中断控制器

特点 区别

向量 IRQ

l  支持16个向量IRQ中断;

l  16个优先级;

l  每个优先级指定一个服务程序入口地址。

能为每个向量IRQ中断源 设置服务程序地址。

非向量 IRQ

l  支持1个非向量IRQ中断;

l  所有非向量IRQ的入口地址都相同。

所有的非向量IRQ中断都 共用一个相同的服务程 序入口地址。

(41)

•  IRQ中断相关寄存器

4.3 向量中断控制器

寄存器名称 功能

VICVectCntl0~15 为中断源分配向量IRQ中断的优先级。

VICVectAddr0~15 为该中断优先级设置服务程序入口地址。

VICDefVectAddr 设置非向量中断服务程序的入口地址。

注意:如果将同⼀一个中断源分配给多个使能的向 量IRQ中断,那么该中断源发生中断时,会使用最高 优先级(最低编号)的寄存器设置。

(42)

•  产生中断后的服务程序地址

4.3 向量中断控制器

向量IRQ中断 发生向量IRQ中断后,VIC将对应的向量地址寄 存器中的数据存入VICVectAddr寄存器中。

非向量IRQ中断 发生非向量IRQ中断后,VIC将默认向量地址寄 存器中的数据存入VICVectAddr寄存器中

(43)

IRQ中断状态寄存器 VICIRQStatus

中断选择寄存器 VICIntSelect 中断使能寄存器

VICIntEnable

中断使能清零寄存器 VICIntEnClr

中断源 [31:0]

软件中断使能寄存器 VICSoftInt

软件中断清零寄存器 VICSoftIntClear

FIQ中断状态寄存器 VICFIQStatus 中断状态寄存器

VICRawIntr IRQ

FIQ

•  寄存器描述-状态寄存器

名称 描述 访问 复位值 地址

VICIRQStatus IRQ状态寄存器

该寄存器读出定义为IRQ并使能的中断的状态 RO 0 0xFFFF F000 VICFIQStatus FIQ状态请求

该寄存器读出定义为FIQ并使能的中断的状态 RO 0 0xFFFF F004 VICRawIntr

所有中断的状态寄存器 该寄存器

读出32个中断请求/软件中断的状态,不管中 断是否使能或分类

RO 0 0xFFFF F008

注意:读取VICRawIntr寄存器将得到所有32个中断请 求和软件中断的状态,它不管中断是否使能或分类 。

(44)

•  保护使能寄存器

4.3 向量中断控制器

保护使能寄存器(VICProtection ):

[31:1] 0

功能 当该位为1时,只能在特权模式下访问VIC寄存器。

在某些场合可能需要禁止在用户模式下访问 VIC寄存器,以提高软件的安全等级。

(45)

•  FIQ中断处理

4.3 向量中断控制器

SPSR_fiq = CPSR 1

2 CPSR = nzcvqIFt_fiq 3 LR_fiq = PC

4 PC = 0x1C

硬件处理 软件处理

中断服务程序 1

设置返回地址 2

恢复程序状态寄存器CPSR 3

SUBS PC, LR, #4

(46)

•  IRQ中断处理

4.3 向量中断控制器

硬件处理

SPSR_irq = CPSR 1

2 CPSR = nzcvqIft_irq

3 VICVectAddr = VICVectAddrn 4 LR_irq = PC

5 PC = 0x18

软件处理

执行中断服务程序 2

设置返回地址 3

恢复程序状态寄存器CPSR 4

获取中断服务程序地址 1

(47)

•  IRQ中断处理

4.3 向量中断控制器

SPSR_irq = CPSR 1

2 CPSR = nzcvqIft_irq

3 VICVectAddr = VICVectAddrn 4 LR_irq = PC

硬件处理

5 PC = 0x18

软件处理

执行中断服务程序 2

设置返回地址 3

恢复程序状态寄存器CPSR 4

PC [VICVectAddr]

1

(48)

•  IRQ中断处理

4.3 向量中断控制器

SUBS PC, LR, #4

SPSR_irq = CPSR 1

2 CPSR = nzcvqIft_irq

3 VICVectAddr = VICVectAddrn 4 LR_irq = PC

硬件处理

5 PC = 0x18

软件处理

执行中断服务程序 2

设置返回地址 3

恢复程序状态寄存器CPSR 4

LDR PC, [PC, #-0xff0]

1

(49)

•  IRQ中断的设计实例

将定时器0中断分配为向量IRQ通道0,中断服务程 序地址设置为Timer0_ISR。

C代码:

步骤:

IRQ通道0控制寄存器 VICVectCntl0

31:6 5 4:0 0 1 0x04

向量IRQ通道0控制寄存器位分配 数值 IRQ通道0向量地址寄存器

VICVectAddr0

定时器0中断服务程序地址 Timer0_ISR

中断使能寄存器

VICIntEnable 中断通道#4对应位,置“1”

中断选择寄存器 VICIntSelect

中断通道4分配为IRQ中断

(定时器0位于中断通道#4) VICIntSelect = 0x00000000;

VICVectAddr0 = (int)Timer0_ISR;

VICVectCntl0 = (0x20 | 4);

VICIntEnable = (1 << 4);

(50)

IRQ_Eint0 ???

VICVectAddr0 VICVectAddr IRQ_Eint0

•  图示IRQ中断的发生过程

0x00000000

0xFFFFFFFF

用户程序

中断服务程序 异常向量表 1.正在执行用户程序;

2.外部中断0发生中断;

3.VIC硬件将中断服务程序地址

装入VICVectAddr寄存器;

4.程序跳转至异常向量表中IRQ 入口

0x0018

处;

5.执行指令跳转至VICVectAddr 寄存器中的中断服务地址;

6.中断服务程序执行完毕,返回 被中断的用户程序继续执行被中 断的代码。

LDR PC, [PC, #-0xff0]

(51)

•  图示IRQ中断的发生过程

0x0000 0000

0xFFFF FFFF

用户程序

中断服务程序 异常向量表

IRQ_Eint0 ???

VICVectAddr0 VICVectAddr IRQ_Eint0

LDR PC, [PC, #-0xff0]

注意:

任何IRQ中断产生之后,

微控制器跳转到地址0x18执行 代码,该地址处的指令为:

LDR PC, [PC, #-0xff0]

在执行该指令时,PC指向当前 指令后的第2条指令,即地址 0x20。

该指令将内存地址:

0x20-0xFF0 = 0xFFFFF030

处的内容存入PC,该地址正是 VICVectAddr寄存器的地址。

所以⼀一条ARM指令即可实 现程序向中断服务程序的跳转。

(52)

•  使用VIC的注意要点

4.3 向量中断控制器

Ø 

如果在片内RAM中调试程序,并使用了中断,那么必 须将存储器映射控制设置为内部RAM模式;

Ø 

将多个中断源设置为FIQ,将增加中断响应延时,所 以建议FIQ中断只有⼀一个中断源;

Ø 

ADS1.2规定在定义中断服务函数时必须加入关键 字“__irq”,保证函数返回时会切换处理器模式;

Ø 

在退出中断服务程序时要清零相应外设的中断标志,

以及VICVectAddr寄存器,为响应下次中断作好准备

(53)

•  VIC相关启动代码分析

...

/* 初始化VIC */

VICIntEnClr = 0xffffffff;

VICVectAddr = 0;

VICIntSelect = 0;

...

在LPC2100、LPC2200的 启动代码中包含有VIC初始化程 序,默认是禁止所有中断。

TargetResetInit函数:

InitStack ...

MSR CPSR_c,#0xdf LDR SP,=StackUsr MOV PC,R0

在LPC2100、 LPC2200的 启动代码中默认是关闭IRQ和 FIQ中断的。如果用户需要使用 这两个中断,则要设置CPSR寄 存器的I位或F位,这需要在特权 模式下处理。最简单的方法是在 启动代码中设置(修改0xdf值)。

处理器各模式堆栈设置:

(54)

•  VIC相关启动代码分析

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

异常向量表:

§ 

⼀一旦产生IRQ中断,微控 制器切换到IRQ模式,并跳 转到向量表0x0018地址执 行指令。

§ 

⼀一旦产生FIQ中断,微控 制器切换到FIQ模式,并跳 转到向量表0x001C地址执 行指令,然后跳转到

FIQ_Handler代码段。

(55)

4.4 外部中断输入

概述

LPC2000系列ARM具有4路外部中断,可以设置为2种类型:

Ÿ  边沿触发:

Ø  上升沿触发 Ø  下降沿触发

•  电平触发:

Ø  高电平触发 Ø  低电平触发

(56)

中断信号 下降沿触发

4.4 外部中断输入

•  边沿触发中断

下降沿触发类型中断的请求和清除时序。

T 1

T2

T1时刻,中断信号有下降沿产生,中断控制器向 CPU发出中断请求。

T2时刻,CPU执行完成中断控制器的中断服务程序,1

清除中断,中断信号回复到高电平。

2

(57)

中断信号 低电平触发

4.4 外部中断输入

•  电平触发中断

低电平触发类型中断的请求和清除时序。

T 1

T3

T1时刻,中断信号开始由高电平转为低电平。 1

T2时刻,中断控制器确认中断信号是低电平后,将 向CUP发出中断请求。

2

T2

T3时刻,CPU执行完成中断控制器的中断服务程序,

清除中断,中断信号回复到高电平。

3

(58)

中断源1 (WDT) ...

中断源14 (EINT0) 中断源15 (EINT1) ...

中断源17 (EINT3)

ARM 处理器核

IRQ

FIQ

4.4 外部中断输入

•  外部中断源

LPC2000系列微控制器几乎所有的外设部件都可 以产生中断。其中外部中断含有4个独立的中断输入。

(59)

系统控制模块功能汇总

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

EXTINT 外部中断标志寄存器 R/W 0 0xE01FC140 EXTWAKE 外部中断唤醒寄存器 R/W 0 0xE01FC144 EXTMODE 外部中断方式寄存器 R/W 0 0xE01FC148 EXTPOLAR 外部中断极性寄存器 R/W 0 0xE01FC14C

•  寄存器汇总

(60)

管脚

连接控制

外部中断 极性控制

外部中断 方式控制

掉电

唤醒控制

中断标志

PINSELx

EXTPOLAR EXTMODE

EXTINT EXTWAKE

CPU

其它部件

1 2

3

4

4.4 外部中断输入

•  寄存器汇总

可以通过设置PINSELx寄存器选择对应引脚为外部中 断输入引脚。

可以通过设置EXTPOLAR和EXTMODE确定外部中1

断的触发信号。

可以控制把CPU从掉电模式唤醒。 2 3

有效中断信号设置中断标志。 4

(61)

外部中断 极性控制

外部中断 方式控制

掉电

唤醒控制

中断标志

EXTPOLAR EXTMODE

EXTINT EXTWAKE

管脚

连接控制

PINSELx

CPU

其它部件

•  寄存器汇总

中断相关寄存器

EXTINT —— EINT0

7 : 4 0

EINT1 1

EINT2 2

EINT3 3

若引脚上出现了符合要求的信号,EXTINT寄存器中对应的中断标志 将被置位。向该寄存器的EINT0〜~EINT3位写入1,可将其清零。

外部中断标志寄存器(EXTINT):

注意:在电平触发方式下,清除中断标志只有在引脚处于无效状态时才可 实现。比如设置为低电平中断,则只有在中断引脚恢复为高电平后才能清 除中断标志。

设置该寄存器允许相应的外部中断将处理器从掉电模式唤醒。实现掉 电唤醒不需要在向量中断控制器(VIC)中使能相应的中断。该寄存器的 低四位(EXTWAKE[3:0])分别对应外部中断3〜~0。

外部中断唤醒寄存器(EXTWAKE):

控制寄存器

EXTWAKE —— EXTWAKE0

7 : 4 0

EXTWAKE1 1

EXTWAKE2 2

EXTWAKE3 3

外部中断方式控制寄存器(EXTMODE):

该寄存器控制着外部中断输入信号的有效触发方式,低四位分别对应 外部中断3〜~0。对应位为0时,电平触发外部中断;对应位为1时,边 沿触发外部中断。

控制寄存器

EXTMODE —— EXTMODE0

7 : 4 0

EXTMODE1 1

EXTMODE2 2

EXTMODE3 3

外部中断极性控制寄存器(EXTPOLAR):

电平触发方式下:对应位为0时,低电平触发外部中断;对应位为1时,

高电平触发外部中断。边沿触发方式下:对应位为0时,下降沿触发外部中 断;对应位为1时,上升沿触发中断。

控制寄存器

EXTPOLAR —— EXTPOLAR0

7 : 4 0

EXTPOLAR1 1

EXTPOLAR2 2

EXTPOLAR3 3

设置说明

相应位设置值

信号波形 极性控制寄存器

(EXTPOLAR)

方式控制寄存器

(EXTMODE)

低电平触发 0(低) 0(电平)

高电平触发 1(高) 0(电平)

下降沿触发 0(下降) 1(边沿)

上升沿触发 1(上升) 1(边沿)

中断信号波形与设置方式

(62)

4.4 外部中断输入

•  外部中断引脚设置

LPC2000系列芯片中,外部中断输入功能的引脚 绝大多数同时还作为通信上的⼀一个功能引脚,这样处理 器可以通过外部中断唤醒,之后引脚设为通讯端口。

外部中断名称 引脚名 该引脚其它功能

外部中断0(EINT0) P0.1 RXD0

P0.16

外部中断1(EINT1) P0.3 SDA0

P0.14 DCD

外部中断2(EINT2) P0.7 SSEL0

P0.15 RI

外部中断3(EINT3)

P0.9 RXD1

P0.20 SSEL1

P0.30

LPC2000系列芯片允许多个引脚同时作为⼀一个外 部中断的输入引脚。根据其方式位和极性位的不同,

外部中断逻辑处理如下:

§ 

低电平触发方式:作为EINT功能的全部引脚的状态相 与后作为输入信号;

§ 

高电平触发方式:作为EINT功能的全部引脚的状态相 或后作为输入信号;

§ 

边沿触发方式:只使用GPIO端口号最低的那个引脚,

并且与极性设置无关。

在实际应用中的注意点:

§ 

如果要产生外部中断,除了引脚连接模块的设置,还 需设置VIC模块,否则外部中断只能反映在EXTINT寄 存器中;

§ 

要使器件进入掉电模式并通过外部中断唤醒,软件应 该正确设置引脚的外部中断功能,再进入掉电模式 。

(63)

4.4 外部中断输入

•  外部中断与VIC的关系

通道14 EINT0

向量IRQ通道0

向量IRQ通道15

非向量IRQ通道 VICIntSelect[14]

VICIntEnable[14]

IRQ FIQ

VICVectAddr0 VICVectCntl0 VICVectAddr15 VICVectCntl15 VICDefVectAddr IRQ

通道 分配

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

外部中断0位于VIC通道14,中断使能寄存器 VICIntEnable[14]用来控制通道14的使能:

当VICIntEnable[14] = 0时,通道14中断禁止

(64)

4.4 外部中断输入

•  外部中断与VIC的关系

通道14 EINT0

向量IRQ通道0

向量IRQ通道15

非向量IRQ通道 VICIntSelect[14]

VICIntEnable[14]

IRQ FIQ

VICVectAddr0 VICVectCntl0 VICVectAddr15 VICVectCntl15 VICDefVectAddr IRQ

通道 分配

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

外部中断0位于VIC通道14,中断使能寄存器 VICIntEnable[14]用来控制通道14的使能:

当VICIntEnable[14] = 0时,通道14中断禁止 当VICIntEnable[14] = 1时,通道14中断使能

(65)

通道14 EINT0

向量IRQ通道0

向量IRQ通道15

非向量IRQ通道 VICIntSelect[14]

VICIntEnable[14]

IRQ FIQ

VICVectAddr0 VICVectCntl0 VICVectAddr15 VICVectCntl15 VICDefVectAddr IRQ

通道 分配

4.4 外部中断输入

•  外部中断与VIC的关系

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

外部中断0位于VIC通道14,中断选择寄存器VICIntSelect[14]

用来选择通道14的中断类型:

当VICIntSelect[14] = 0时,通道14分配为IRQ中断

(66)

4.4 外部中断输入

•  外部中断与VIC的关系

通道14 EINT0

向量IRQ通道0

向量IRQ通道15

非向量IRQ通道 VICIntSelect[14]

VICIntEnable[14]

IRQ FIQ

VICVectAddr0 VICVectCntl0 VICVectAddr15 VICVectCntl15 VICDefVectAddr IRQ

通道 分配

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

外部中断0位于VIC通道14,中断选择寄存器VICIntSelect[14]

用来选择通道14的中断类型:

当VICIntSelect[14] = 0时,通道14分配为IRQ中断 当VICIntSelect[14] = 1时,通道14分配为FIQ中断

(67)

4.4 外部中断输入

•  外部中断的设置

LPC2000系列ARM的电平中断可以设置为电平中断和 边沿中断。

Ø  当EXTMODE[0] = 0时

,外部中断

0设置为电平触发

Ø  当EXTMODE[0] = 1时,外部中断0设置为边沿触发。

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

低电平

高电平 EINT0

EXTMODE[0] = 0 0

EXTPOLAR[0]

高电平中断 低电平中断

上升沿中断 下降沿中断 边沿

中断

VIC

0 0

1

1 0

1

电平 中断

(68)

4.4 外部中断输入

•  外部中断的设置

LPC2000系列ARM的电平中断可以设置为电平中断和 边沿中断。

Ø  当EXTMODE[0] = 0时,外部中断0设置为电平触发。

Ø  当EXTMODE[0] = 1时

,外部中断

0设置为边沿触发

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

EINT0

EXTMODE[0] = 1 0

EXTPOLAR[0]

高电平中断 低电平中断

上升沿中断 下降沿中断 电平

中断

VIC

0 0 1

1 0

1 下降沿

上升沿 边沿

中断

(69)

4.4 外部中断输入

•  电平中断设置

低电平

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

LPC2000系列ARM的电平中断可以设置为高电平触发和 低电平触发。

Ø  当

EXTPOLAR[0] = 0时 ,外部中断

0设置为低电平触发

Ø  当EXTPOLAR[0] = 1时,外部中断0设置为高电平触发。

EINT0

EXTMODE[0] = 0 0

EXTPOLAR[0] = 0

高电平中断 低电平中断

上升沿中断 下降沿中断 电平

中断 边沿 中断

VIC

0 0

1

1 0

1

(70)

4.4 外部中断输入

•  电平中断设置

EINT0

EXTMODE[0] = 0 0

EXTPOLAR[0] = 1

高电平中断 低电平中断

上升沿中断 下降沿中断 电平

中断 边沿 中断

VIC

0 0

1

1 0

1

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

LPC2000系列ARM的电平中断可以设置为高电平触发和 低电平触发。

Ø  当EXTPOLAR[0] = 0时,外部中断0设置为低电平触发。

Ø  当EXTPOLAR[0] = 1时

,外部中断

0设置为高电平触发

高电平

(71)

4.4 外部中断输入

•  边沿中断设置

EINT0

EXTMODE[0] = 1 0

EXTPOLAR[0] = 0

高电平中断 低电平中断

上升沿中断 下降沿中断 电平

中断 边沿 中断

VIC

0 0

1

1 0

1

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

LPC2000系列ARM的边沿中断可以设置为上升沿触发和 下降沿触发。

Ø  当

EXTPOLAR[0] = 0时 ,外部中断

0设置为下降沿触发

Ø  当EXTPOLAR[0] = 1时,外部中断0设置为上升沿触发。

下降沿

(72)

4.4 外部中断输入

•  边沿中断设置

EINT0

EXTMODE[0] = 0 0

EXTPOLAR[0] = 1

高电平中断 低电平中断

上升沿中断 下降沿中断 电平

中断 边沿 中断

VIC

0 0

1

1 0

1

注意:这里仅以EINT0为例来进行讲解,EINT1~EINT3与之类似,此处不再重复。

LPC2000系列ARM的边沿中断可以设置为上升沿触发和 下降沿触发。

Ø  当EXTPOLAR[0] = 0时,外部中断0设置为下降沿触发。

Ø  当EXTPOLAR[0] = 1时

,外部中断

0设置为上升沿触发

上升沿

(73)

4.4 外部中断输入

•  外部中断的设置——中断标志

EXTINT[0]

EXTINT[1]

EXTINT[2]

EXTINT[3]

触发外部中断0

触发外部中断1

触发外部中断2

触发外部中断3

外部中断标志寄存器 EXTINT

注意:外部中断标志写“1”清零。

(74)

4.4 外部中断输入

•  外部中断应用示例

初始化EINT0为电平中断:

初始化EINT0为下降沿中断:

清除所有外部中断标志:

PINSEL1 = (PINSEL1&0xFFFFFFFC) | 0x01;

EXTMODE = EXTMODE & 0x0E;

EXTINT = 0x0F;

PINSEL1 = (PINSEL1&0xFFFFFFFC) | 0x01;

EXTMODE = EXTMODE | 0x01;

EXTPOLAR = EXTPOLAR & 0x0E;

(75)

4.5 定时器0 、 1

•  特性

§ 

32位可编程预分频器;

§ 

4路捕获通道;

§ 

4个匹配寄存器;

§ 

4个匹配输出通道。

(76)

预分频器(PR、PC)

定时器、计数器(TC)

PCLK 使能

0x0000 0000

定时器控制寄存器

TCR)

复位

捕获寄存器0(CR0)

捕获寄存器1(CR1)

捕获寄存器2(CR2)

捕获寄存器3(CR3)

捕获控制寄存器(CCR)

捕获功能 匹配功能

匹配控制寄存器(MCR)

MAT[3:0] CAP[3:0]

中断标志寄存器(IR)

匹配寄存器0(MR0)

匹配寄存器1(MR1)

匹配寄存器2(MR2)

匹配寄存器3(MR3)

外部匹配寄存器(EMR)

• 定时器结构图

參考文獻

相關文件

電腦內部是使⽤用位元 (Bit) 這個基本單位來表⽰示資料 並儲存於記憶單元 (記憶體) 或輔助記憶單元 (硬碟) 中。.. 每個位元只可以表⽰示

然而 ISDS 机制在实践中一些问题不断暴露出来,多数学者认为 ISDS

一个妇女看到三位老人还没吃饭,想请他们到家中吃饭。老人们说: “我们 分别是财富、成功和爱。我们不可以一起进去。 ”妇女回到家中告诉丈夫,丈夫

衡量一个地区或一个国家水资源的丰歉 程度的指标:

一般说来, 对于一个区间上单调的函数的 图形都存在一个需要判别弧段位于相应的弦线

后来,人们发明了一种采摘柑橘的 机器,它能够在人的操作下利用吸管快

穿插课文之中、形 式多种多样的活动使 我们所学的知识与技 能得到即时的巩固、应 用和内化,它是我们主 动建构知识、拓展能

验,通过灵敏电流计指针摆动的幅度可以大致判断感应电动势的 大小;也可用 DIS 实验室装置(图 1-29 )进行实验。 你还可以选择 其他的实验装置,或对图 1-27