ETC LPC2131

广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
请注意:LPC2134 没有 AD1 功能,本文章中有关 LPC2134 AD1 功能的内容请
不要理会,更不要在您设计中使用此功能。
LPC2131/2132/2138 使用指南
1. 简介
概述
LPC2131/2132/2138 是基于一个支持实时仿真和嵌入式跟踪的 32/16 位 ARM7TDMI-STM CPU 的微控制
器,并带有 32kB、64kB、512 kB 的嵌入的高速 Flash 存储器。128 位宽度的存储器接口和独特的加速结构
使 32 位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用 16 位 Thumb®模式将代码
规模降低超过 30%,而性能的损失却很小。
较小的封装和极低的功耗使 LPC2131/2132/2138 可理想地用于小型系统中,如访问控制和 POS 机。宽
范围的串行通信接口和片内 8/16/32kB 的 SRAM 使 LPC2131/2132/2138 非常适用于通信网关、协议转换器、
软 modem、声音辨别和低端成像,为它们提供巨大的缓冲区空间和强大的处理功能。多个 32 位定时器、1
个或 2 个 10 位 8 路 ADC、10 位 DAC、PWM 通道和 47 个 GPIO 以及多达 9 个边沿或电平触发的外部中断
使它们特别适用于工业控制和医疗系统。
特性
小型 LQFP64 封装的 16/32 位 ARM7TDMI-S 微控制器。
8/16/32kB 片内静态 RAM。
片内 Boot 装载软件实现在系统/在应用中编程(ISP/IAP)。扇区擦除或整片擦除的时间为 400ms,
1ms 可编程 256 字节。
EmbeddedICE®RT 和嵌入式跟踪接口可实时调试(利用片内 RealMonitor 软件)和高速跟踪执行
代码。
1 个(LPC2132/2132)或 2 个(LPC2138)8 路 10 位 A/D 转换器共包含 16 个模拟输入,每个通
道的转换时间低至 2.44us。
1 个 10 位 D/A 转换器,可提供不同的模拟输出(LPC2132/2138)。
2 个 32 位定时器/计数器(带 4 路捕获和 4 路比较通道)、PWM 单元(6 路输出)和看门狗。
实时时钟具有独立的电源和时钟源,在节电模式下极大地降低了功耗。
多个串行接口,包括 2 个 16C550 工业标准 UART、2 个高速 I2C 接口(400 kbit/s)、SPITM 和 SSP
(具有缓冲功能,数据长度可变)
。
向量中断控制器。可配置优先级和向量地址。
多达 47 个 5V 的通用 I/O 口(LQFP64 封装)。
9 个边沿或电平触发的外部中断引脚。
通过片内 PLL 可实现最大为 60MHz 的 CPU 操作频率,PLL 的稳定时间为 100us。
片内晶振频率范围:1~30 MHz。
2 个低功耗模式:空闲和掉电。
可通过个别使能/禁止外部功能和降低外部时钟来优化功耗。
通过外部中断将处理器从掉电模式中唤醒。
单个电源供电,含有上电复位(POR)和掉电检测(BOD)电路:
-CPU 操作电压范围:3.0~3.6 V (3.3 V+/- 10%),I/O 口可承受 5V 的最大电压。
1
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
应用
工业控制
医疗系统
访问控制
POS 机
通信网关
嵌入式软 moderm
一般性应用
器件信息
表1
LPC2131/2132/2138 器件信息
器件
管脚数
片内 RAM
片内 FLASH
10 位 A/D 通道数
10 位 D/A 通道数
注
LPC2131
64
8kB
32kB
8
-
-
LPC2132
64
16 kB
64 kB
8
-
-
LPC2138
64
32 kB
512 kB
16
1
-
结构概述
LPC2131/2132/2138 包含一个支持仿真的 ARM7TDMI-S CPU、与片内存储器控制器接口的 ARM7 局部
总线、与中断控制器接口的 AMBA 高性能总线(AHB)和连接片内外设功能的 VLSI 外设总线(VPB,ARM
AMBA 总线的兼容超集)。LPC2131/2132/2138 将 ARM7TDMI-S 配置为小端(little-endian)字节顺序。
AHB 外设分配了 2M 字节的地址范围,它位于 4G 字节 ARM 存储器空间的最顶端。每个 AHB 外设都
分配了 16k 字节的地址空间。LPC2131/2132/2138 的外设功能(中断控制器除外)都连接到 VPB 总线。AHB
到 VPB 的桥将 VPB 总线与 AHB 总线相连。VPB 外设也分配了 2M 字节的地址范围,从 3.5GB 地址点开
始。每个 VPB 外设在 VPB 地址空间内都分配了 16k 字节地址空间。
片内外设与器件管脚的连接由管脚连接模块控制。该模块必须由软件进行控制以符合外设功能与管脚
在特定应用中的需求。
ARM7TDMI-S 处理器
ARM7TDMI-S 是通用的 32 位微处理器,它具有高性能和低功耗的特性。ARM 结构是基于精简指令集
计算机(RISC)原理而设计的。指令集和相关的译码机制比复杂指令集计算机要简单得多。这样使用一个小
的、廉价的处理器核就可实现很高的指令吞吐量和实时的中断响应。
由于使用了流水线技术,处理和存储系统的所有部分都可连续工作。通常在执行一条指令的同时对下
一条指令进行译码,并将第三条指令从存储器中取出。
ARM7TDMI-S 处理器使用了一个被称为 THUMB 的独特结构化策略,它非常适用于那些对存储器有限
制或者需要较高代码密度的大批量产品的应用。
在 THUMB 后面一个关键的概念是“超精简指令集”
。基本上,ARM7TDMI-S 处理器具有两个指令集:
标准 32 位 ARM 指令集
16 位 THUMB 指令集
THUMB 指令集的 16 位指令长度使其可以达到标准 ARM 代码两倍的密度,却仍然保持 ARM 的大多
数性能上的优势,这些优势是使用 16 位寄存器的 16 位处理器所不具备的。因为 THUMB 代码和 ARM 代
码一样,在相同的 32 位寄存器上进行操作。
THUMB 代码仅为 ARM 代码规模的 65%,但其性能却相当于连接到 16 位存储器系统的相同 ARM 处
理器性能的 160%。
关于 ARM7TDMI-S 处理器的详细内容请参阅 ARM 官方网站上的 ARM7TDMI-S 数据手册。
2
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
片内 FLASH 程序存储器
LPC2131/2132/2138 分别含有 32kB、64kB 和 512kB 的 FLASH 存储器系统。该存储器可用作代码和数
据的存储。对 FLASH 存储器的编程可通过几种方法来实现:通过内置的串行 JTAG 接口,通过在系统编程
(ISP)和 UART0,或通过在应用编程(IAP)。使用在应用编程的应用程序也可以在应用程序运行时对
FLAH 进 行 擦 除 和 / 或 编 程 , 这 样 就 为 数 据 存 储 和 现 场 固 件 的 升 级 都 带 来 了 极 大 的 灵 活 性 。 如 果
LPC2131/2132/2138 使用了片内引导装载程序(bootloader),32/64/512kB 的 Flash 存储器就可用来存放用
户代码。
LPC2131/2132/2138 的 Flash 存储器至少可擦除/编程 10,000 次,保存数据的时间长达 10 年。
片内静态 RAM
片内静态 RAM(SRAM) 可用作代码和/或数据的存储,支持 8 位、16 位和 32 位的访问。
LPC2131/2132/2138 含有 8/16/32kB 的静态 RAM。
LPC2131/2132/2138 SRAM 是一个字节寻址的存储器。对存储器进行字和半字访问时将忽略地址对准,
访问被寻址的自然对准值(因此,对存储器进行字访问时将忽略地址位 0 和 1,半字访问时将忽略地址位 0)。
因此,有效的读写操作要求半字数据访问的地址线 0 为 0(地址以 0、2、4、6、8、A、C 和 E 结尾),字
数据访问的地址线 0 和 1 都为 0(地址以 0、4、8 和 C 结尾)。该原则同样用于片外和片内存储器。
SRAM 控制器包含一个回写缓冲区,它用于防止 CPU 在连续的写操作时停止运行。回写缓冲区总是保
存着软件发送到 SRAM 的最后一个字节。该数据只有在软件请求下一次写操作时才写入 SRAM(数据只有
在软件执行另外一次写操作时被写入 SRAM)。如果发生芯片复位,实际的 SRAM 内容将不会反映最近一
次的写请求(即:在一次“热”芯片复位后,SRAM 不会反映最后一次写入的内容)。任何在复位后检查
SRAM 内容的程序都必须注意这一点。通过对一个单元执行两次相同的写操作可保证复位后数据的写入。
或者,也可通过在进入空闲或掉电模式前执行虚写(dummy write)操作来保证最后的数据在复位后被真正
写入到 SRAM。
3
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
功能框图
测试/调试接口
PLL
ARM7TDMI-S
系统时钟
AHB 桥
内部Flash 控制器
8/16/32 kB
SRAM
32/64/512 kB
FLASH
向量中断控制器
AMBA AH B
(先进的高性能总线)
ARM7 局部总线
内部SRAM 控制器
系统功能
AHB
译码器
AHB 到 VPB
桥
VPB
分频器
VPB ( VLSI
外围总线)
EI NT3:0
8 x CAP0
8 x MA T
I2C 串行
接口0和1
外部中断
捕获/比较
( w/外部时钟)
定时器0&1
AD0.7:0
SP I 和 SSP
串行接口
AD1.7:02
UART 0 & 1
Aout3
D/A 转换器 2
实时时钟
P0 .31:0
P1.31:1 6, 1:0 2
通用I/O口
PWM6:1
PWM 0
与 GPIO 共用。
2
仅适用于 LPC2138。
3
仅 LPC2132/2138。
DSR1 2,CTS12,RTS12
DTR12, DC D1 2,RI1 2
RT XC1
RT XC2
Vbat
看门狗定时器
系统控制
图1
2.
SCK0 ,1
MOSI0,1
MISO0,1
SSEL 0,1
Tx D0,1
RxD0,1
A/D 转换器
0 和1 2
1
SCL 0,1
SDA0 ,1
LPC2131/2132/2138 方框图
LPC2131/2132/2138 存储器寻址
存储器映射
LPC2131/2132/2138 包含几个不同的存储器组,见以下各图。图 2 所示为复位后从用户角度所看到的整
个地址空间映射。中断向量支持地址的重新映射,详见后面的章节。
4
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
4.0 GB
AHB 外设
http://www.zlgmcu.com
0xFFFF FF FF
0xF0 00 000 0
3.75 GB
VPB 外设
0xE00 0 0000
3.5 GB
0xC000 0000
3.0 GB
保留地址空间
2.0 GB
0x8000 000 0
Bo ot Bl ock
(从片内Flash 存储器重新映射)
保留地址空间
32 kB 片内静态RAM (LPC2138 )
16 kB 片内静态RAM (LPC2132 )
8 kB 片内静态RAM (LPC2131 )
1.0 GB
0x40 00 8000
0x4000 7FF F
0x4000 400 0
0x4000 3FFF
0x4000 20 00
0x4000 1FFF
0x4000 0000
保留地址空间
512 kB 片内非易失性存储器(LPC2138 )
64 kB 片内非易失性存储器(LPC2132 )
32 kB 片内非易失性存储器(LPC2131 )
0x0008 000 0
0x0007 FF FF
0x0001 000 0
0x0000 FFFF
0x0000 8000
0x0000 7 FFF
0x0000 000 0
0.0 GB
图2
系统存储器映射
5
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
4.0 GB
Fax: 38730925
http://www.zlgmcu.com
0xFFFF FFFF
AHB 外设
4.0 GB - 2 MB
0xFFE0 0000
0xFFDF FFFF
保留
0xF000 0000
0xEFFF FFFF
3.75 GB
保留
0xE020 0000
0xE01F FFFF
3.5 GB + 2 MB
VPB 外设
0xE000 0000
3.5 GB
注:
-AHB 部分是 128×16kB 的范围(共 2MB)。
-VPB 部分是 128×16kB 的范围(共 2MB)。
图3
外设存储器映射
图 3~5 显示了从不同角度所观察到的外设地址空间。AHB 和 VPB 外设区域都为 2M 字节,可各自分
配最多 128 个外设。每个外设空间的规格都为 16k 字节。这样可简化每个外设的地址译码。所有外设寄存
器不管规格大小,都按照字地址进行分配(32 位边界)。这样就不再需要使用字节定位的硬件来进行小边
界的字节(8 位)或半字(16 位)访问。不管字还是半字寄存器都是一次性访问。例如,不可能对一个字
寄存器的最高字节执行单独的读或写操作。
6
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
向量中断控制器
Fax: 38730925
0xFFFF F000 (4G - 4K)
0xFFFF C000
(AHB 外设 #126)
0xFFFF 8000
(AHB 外设 #125)
0xFFFF 4000
(AHB 外设 #124)
0xFFFF 0000
0xFFE1 0000
(AHB 外设 # 3)
0xFFE0 C000
(AHB 外设 # 2)
0xFFE0 8000
(AHB 外设 # 1)
0xFFE0 4000
(AHB 外设 # 0)
0xFFE0 0000
图4
http://www.zlgmcu.com
AHB 外设映射
7
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
系统控制模块
(VPB外设#127)
Fax: 38730925
http://www.zlgmcu.com
0xE01F FFFF
0xE01F C000
(VPB外设#28-126)
未使用
0xE007 0000
DAC
(VPB外设#27)
SSP
(VPB外设#26)
未使用
(VPB外设#25)
10 位 AD1 (LPC2138)
(VPB外设#24)
I2 C1
(VPB外设#23)
未使用
(VPB外设#14-22)
10 位 AD0
(VPB外设#13)
未使用
(VPB外设#12)
管脚连接模块
(VPB外设#11)
GPIO
(VPB外设#10)
RTC
(VPB外设#9)
SPI0
(VPB外设#8)
I2C0
(VPB外设#7)
未使用
(VPB外设#6)
PWM
(VPB外设#5)
UART1
(VPB外设#4)
UART0
(VPB外设#3)
TIMER1
(VPB外设#2)
TIMER0
(VPB外设#1)
看门狗定时器
(VPB外设#0)
0xE006 C000
0xE006 8000
0xE006 4000
0xE006 0000
0xE005 C000
0xE003 8000
0xE003 4000
0xE003 0000
0xE002 C000
0xE002 8000
0xE002 4000
0xE002 0000
0xE001 C000
0xE001 8000
0xE001 4000
0xE001 0000
0xE000 C000
0xE000 8000
0xE000 4000
0xE000 0000
图 5 VPB 外设映射
LPC2131/2132/2138 存储器重新映射和 BOOT BLOCK
存储器映射概念和操作模式
LPC2131/2132/2138 的基本的概念是:每个存储器组在存储器映射中都有一个“物理上的”位置。它是
一个地址范围,该范围内可写入程序代码。每一个存储器空间的容量都永久固定在同一个位置,这样就不
需要将代码设计成在不同地址范围内运行。
8
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
由于 ARM7 处理器上的中断向量位置(地址 0x0000 0000~0x0000 001C,见表 2),Boot Block 和 SRAM
空间的一小部分需要重新映射来实现在不同操作模式下对中断的使用,见表 3。中断的重新映射通过存储
器映射控制特性来实现,详见系统控制模块一节。
表2
ARM 异常向量位置
地址
异常
0x0000 0000
复位
0x0000 0004
未定义指令
0x0000 0008
软件中断
0x0000 000C
预取指中止(从存储器取指出错)
0x0000 0010
数据中止(数据访问存储器出错)
0x0000 0014
保留 *
0x0000 0018
IRQ
0x0000 001C
FIQ
*
在 ARM 文档中标识为保留,该位置被 Boot 装载程序用作有效的用户程序关键字。详见 Flash 存储
器系统和编程的相关内容。
表3
LPC2131/2132/2138 存储器映射模式
模式
激活
用途
Boot 装载程序
由任何复位硬件激活
在任何复位后都会执行 Boot 装载程序。Boot Block 中断向量映射
模式
到存储器的底部以允许处理异常并在 Boot 装载过程中使用中断。
用户 Flash 模式
由 Boot 代码软件激活 当在存储器中识别了一个有效的用户程序标识并且 Boot 装载操
作未被执行时,由 Boot 装载程序启动。中断向量没有重新映射,
它位于 Flash 存储器的底部。
用户 RAM 模式 由用户程序软件激活
由用户程序激活。中断向量重新映射到静态 RAM 的底部。
存储器的重新映射
为了与将来器件相兼容,整个 Boot Block 都被映射到片内存储器空间的顶端。在这种方式下,使用较
大或较小的 Flash 模块都不需要改变 Boot Block(需要改变 Boot 装载程序自身的代码)的位置或改变 Boot
Block 中断向量的映射。除了中断向量之外的存储器空间都保持固定的位置。图 6 所示为使用上述定义的模
式映射的片内存储器。
存储器重新映射的部分允许在不同模式下处理中断,它包括中断向量区(32 字节)和额外的 32 字节,
一共是 64 字节。重新映射的代码位置与地址 0x0000 0000~0x0000 003F 重叠。一个位于 Flash 存储器中的
典型用户程序可以将整个 FIQ 处理程序放置在地址 0x0000 001C 而不需要考虑存储器的边界。包含在
SRAM、外部存储器和 Boot Block 中的向量必须包含跳转到实际中断处理程序的分支或者其它执行跳转到
中断处理程序的转移指令。
选择这种配置有三个原因:
1.
使 Flash 存储器中的 FIQ 处理程序不必考虑因为重新映射所导致的存储器边界问题。
2.
用来处理代码空间中段边界仲裁的 SRAM 和 Boot Block 向量的使用大大减少。
3.
为超过单字转移指令范围的跳转提供空间来保存常量
重新映射的存储器组,包括 Boot Block 和中断向量,除了重新映射的地址外,仍然继续出现在它们最
初的位置。
有关重新映射及其举例详见系统控制模块。
9
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
12K 字节 Boot Block
2.0 GB
http://www.zlgmcu.com
0x8000 0000
0x7FFF FFFF
(从Flash存储器顶端重新映射)
(Boot Block 中断向量)
2.0 GB - 8K
保留地址空间
0x4000 8000
0x4000 7FFF
32 kB 片内 SRAM
1.0 GB
(SRAM中断向量)
0x4000 0000
0x3FFF FFFF
保留地址空间
(12k字节 Boot Block重新映射到更高的地址范围)
0x0008 0000
0x0007 FFFF
512字节Flash 存储器
0.0 GB
有效的中断向量( Flash,SRAM或Boot Block)
0x0000 0000
注:存储器组并不是按比例绘制的。
图 6 显示已重新映射和可重新映射区域的低存储器空间(带 512kB Flash 的 LPC2138)
预取指中止和数据中止异常
如果试图访问一个保留地址或未分配区域的地址,LPC2131/2132/2138 将产生适当的总线周期中止异
常。这些区域包括:
特定的 ARM 器件所没有的存储器映射区域。对于 LPC2131/2132/2138,它们是:
-片内非易失性存储器与片内 SRAM 之间的地址空间,在图 2 和图 6 中标为“保留地址空间”
。
对于 32kB Flash 器件来说,它们是 0x0000 8000 到 0x3FFF FFFF 的存储器地址空间;对于 64kB
Flash 器件来说,它们是 0x0001 0000 到 0x3FFF FFFF 的存储器地址空间;而对于 512kB Flash
10
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
器件来说,它们是 0x0008 0000 到 0x3FFF FFFF 的存储器地址空间。
-片内静态 RAM 与外部存储器之间的地址空间,在图 2 中标为“保留地址空间”
。对于 8kB SRAM
器件,地址范围从 0x4000 1FFF 到 0x7FFF DFFF;对于 16kB SRAM 器件,地址范围从 0x4000
3FFF 到 0x7FFF DFFF;而对于 32kB SRAM 器件,它们从 0x4000 7FFF 到 0x7FFF D000。整个
地址空间范围是 0x4000 3FFF 到 0x7FFF D000。
-AHB 和 VPB 空间的保留区域,见图 3。
未分配的 AHB 外设空间,见图 4。
未分配的 VPB 外设空间,见图 5。
对于这些区域,对数据的访问和对指令的取指都会产生异常。此外,对 AHB 或 VPB 外设地址执行任
何指令取指都会导致产生预取指中止异常。
在现有的 VPB 外设地址空间内,对未定义地址的访问不会产生数据中止异常。每个外设内的地址译码
被限制为外设内部需要判别的已定义寄存器。例如,对地址 0xE000D000(UART0 空间内一个未定义的地
址)的访问可能导致对定义在地址 0xE000C000 处的寄存器进行访问。一个外设内的这样一种地址混淆在
LPC2131/2132/2138 文档中没有定义,并且它也不是一个被 LPC2131/2132/2138 支持的特性。
需要注意的是,只有在试图执行从非法地址取指的指令时,ARM 才会将预取指中止标志与相关的指令
(没有意义的指令)一起保存到流水线并对中止进行处理。当代码在非常靠近存储器边界执行时,这样防
止了由预取指所导致的意外中止。
3.
系统控制模块
系统控制模块功能汇总
系统控制模块包括几个系统特性和控制寄存器,这些寄存器具有众多与特定外设器件无关的功能。它
们包括:
晶体振荡器
外部中断输入
存储器映射控制
PLL
功率控制
复位
VPB 分频器
唤醒定时器
每种类型的功能都有其自身的寄存器,不需要的位则定义为保留位。为了满足将来扩展的需要,无关
的功能不共用相同的寄存器地址。
管脚描述
表 4 所示为系统控制模块功能相关的管脚。
表4
管脚汇总
管脚名称
管脚方向
管脚描述
X1
输入
晶振输入-振荡器和内部时钟发生器电路的输入
X2
输出
晶振输出-振荡器放大器的输出
外部中断输入 0-低有效的通用中断输入。该管脚可用于将处理器从空
EINT0
输入
闲或掉电模式中唤醒。
P0.1 和 P0.16 可用作 EINT0 功能。
11
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
续上表
管脚名称
管脚方向
管脚描述
外部中断输入 1-见上面的 EINT0 描述。
P0.3 和 P0.14 可用作 EINT1 功能。
EINT1
输入
复位后管脚 P0.14 上立即出现的低电平被看作是一个启动 ISP 命令处理
器的外部硬件请求。有关 ISP 和串行 Boot Loader 的详细情况见“Flash
存储器系统和编程”一章。
EINT2
输入
EINT3
输入
RESET
输入
外部中断输入 2-见上面的 EINT0 描述。
P0.7 和 P0.15 可用作 EINT2 功能。
外部中断输入 3-见上面的 EINT0 描述。
P0.9, P0.20 和 P0.30 可用作 EINT3 功能。
外部复位输入-该管脚上的低电平将芯片复位,使 I/O 口和外设恢复其
默认状态,并使处理器从地址 0 开始执行程序。
寄存器描述
所有寄存器不管规格大小都以字地址作为边界。这些寄存器的详细信息见相关功能的描述。
表5
系统控制寄存器汇总
名称
描述
访问
复位值*
地址
EXTINT
外部中断标志寄存器
R/W
0
0xE01FC140
EXTWAKE
外部中断唤醒寄存器
R/W
0
0xE01FC144
EXTMODE
外部中断方式寄存器
R/W
0
0xE01FC148
EXTPOLAR
外部中断极性寄存器
R/W
0
0xE01FC14C
存储器映射控制
R/W
0
0xE01FC040
PLLCON
PLL 控制寄存器
R/W
0
0xE01FC080
PLLCFG
PLL 配置寄存器
R/W
0
0xE01FC084
PLLSTAT
PLL 状态寄存器
RO
0
0xE01FC088
PLLFEED
PLL 馈送寄存器
WO
NA
0xE01FC08C
PCON
功率控制寄存器
R/W
0
0xE01FC0C0
PCONP
外设功率控制
R/W
0x3BE
0xE01FC0C4
VPB 分频器控制
R/W
0
0xE01FC100
复位源识别寄存器
R/W
0
0xE01FC180
代码安全保护寄存器
RO
0
0xE01FC184
外部中断
存储器映射控制
MEMMAP
锁相环
功率控制
VPB 分频器
VPBDIV
复位
RSID
代码安全/调试
CSPR
*
复位值仅指已使用位中保存的数据,不包括保留位的内容。
晶体振荡器
当 1MHz ~ 50MHz 频 率 范 围 内 的 一 个 占 空 比 因 数 为 50-50 的 信 号 从 XTAL1 脚 输 入 到
12
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
LPC2131/2132/2138 时,微控制器的内部振荡电路支持 1MHz~30MHz 的外部晶体。如果片内 PLL 系统或
引导装载程序被使用,输入时钟频率将被限制到 10MHz~25MHz。
振荡器输出频率称为 FOSC,为了便于频率等式的书写及本文档的描述,ARM 处理器时钟频率称为 cclk。
FOSC 和 cclk 的值相同,除非 PLL 运行连接。详见 PLL 一节。
LPC2131/2132/2138 的振荡器可工作在两种模式下:从属模式和振荡模式。
从属模式下,输入时钟信号与一个 100pF(图 7 Cc)相连,其幅值不少于 200mVrms。X2 管脚不连接。
如果选择从属模式,Fosc 信号(占空因数为 50-50)的频率被限制在 1MHz~50MHz。
振荡模式中使用的外部元件和模型见图 7 中的 b 和 c 图以及表 6。由于片内集成了反馈电阻,只需在
。图 7 中
外部连接一个晶体和电容 Cx1、Cx2 就可形成基本模式的振荡(基本频率用 L、CL 和 Rs 来表示)
c 图的电容 Cp 是并联封装电容,其值不能大于 7pF。参数 Fc、CL、Rs 和 Cp 都由晶体制造商提供。
如果器件振荡器工作在振荡模式,Fosc 时钟限制在 1MHz~30MHz。
LPC2131/2132/2138
X1
LPC2131/2132/2138
X2
X1
X2
L
<=>
CC
CL
Clock
CX1
a)
Xtal
RS
CX2
b)
CP
c)
图 7 振荡器模式和模型:a)从属模式,b)振荡模式,c)外部晶体模型(用来评估 CX1/X2 的值)
表6
振荡模式下 CX1/X2 的建议取值(晶体和外部元件参数)
基本振荡频率 Fc
晶体负载电容 CL
最大晶体串联电阻 Rs
外部负载
电容 Cx1,Cx2
1~5MHz
5~10MHz
10~15MHz
15~20MHz
20~25MHz
25~30MHz
10pF
n.a.
n.a.
20pF
n.a.
n.a.
30pF
<300Ω
58pF,58pF
10pF
<300Ω
18pF,18pF
20pF
<300Ω
38pF,38pF
30pF
<300Ω
58pF,58pF
10pF
<300Ω
18pF,18pF
20pF
<220Ω
38pF,38pF
30pF
<140Ω
58pF,58pF
10pF
<220Ω
18pF,18pF
20pF
<140Ω
38pF,38pF
30pF
<80Ω
58pF,58pF
10pF
<160Ω
18pF,18pF
20pF
<90Ω
38pF,38pF
30pF
<50Ω
58pF,58pF
10pF
<130Ω
18pF,18pF
20pF
<50Ω
38pF,38pF
30pF
n.a.
n.a.
13
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
f OSC 选择
True
使用了片内PLL?
False
True
通过ISP下载初始代码?
False
使用外部晶振?
True
False
min fOSC = 10 MHz
max fOSC = 25 MHz
min fOSC = 1 MHz
max fOSC = 50 MHz
(图7,模式a和/或b)
(图7,模式a)
min fOSC = 1 MHz
max fOSC = 30 MHz
(图7,模式b)
图 8 Fosc 的选择
外部中断输入
LPC2131/2132/2138 含有 4 个外部中断输入(作为可选的管脚功能)
。外部中断输入可用于将处理器从
掉电模式唤醒。
寄存器描述
外部中断功能具有 4 个相关的寄存器。EXTINT 寄存器包含中断标志。EXTWAKEUP 寄存器包含使能
唤醒位,可使能独立的外部中断输入将 LPC2131/2132/2138 从掉电模式唤醒。EXTMODE 和 EXTPOLAR
寄存器用来指定管脚使用电平或边沿激活方式。
表 7 外部中断寄存器
地址
名称
0xE01FC140
EXTINT
0xE01FC144
EXTWAKE
0xE01FC148
EXTMODE
0xE01FC14C
EXTPOLAR
描述
访问
外部中断标志寄存器包含 ENIT0,EINT1 和 EINT2 的中断标
志。见表 8。
外部中断唤醒寄存器包含 3 个用于控制外部中断是否将处
理器从掉电模式唤醒的使能位,见表 9。
外部中断方式寄存器控制每个管脚的边沿或电平激活。
R/W
R/W
R/W
外部中断极性寄存器控制由每个管脚的哪种电平或边沿来
R/W
产生中断。
外部中断标志寄存器(EXTINT - 0xE01FC140)
当一个管脚选择使用外部中断功能时,对应在 EXTPOLAR 和 EXTMODE 寄存器中的位选择的电平或
边沿将置位 EXTINT 寄存器中的中断标志。这样来向 VIC 提出中断请求,如果管脚中断使能,则产生中断。
通过向 EXTINT 寄存器的位 EINT0~位 EINT3 写入 1 来将其清零。电平激活方式下,该操作只有在管
脚处于无效状态时才有效。
一旦 EINT0~EINT3 中的一位被置位并开始执行相应的代码(处理唤醒和/或外部中断)
,该位必须清
零。否则 EINT 管脚刚触发的事件以后将不会被识别。
例如,如果外部中断 0 管脚的低电平将系统从掉电模式唤醒,为了将来还能进入掉电模式,唤醒后的
程序必须将 EINT0 位复位。如果 EINT0 位仍保持置位状态,后来的唤醒掉电模式的任何操作都将失败。外
部中断也不例外。
有关掉电模式的详细信息见后面章节的描述。
14
广州周立功单片机发展有限公司 Tel: (020)38730976
表8
38730977
Fax: 38730925
http://www.zlgmcu.com
外部中断标志寄存器(EXTINT- 0xE01FC140)
功能
EXTINT
描述
复位值
电平激活方式下,如果管脚的 EINT0 功能被选用且管脚处于有效状态时,
该位置位;边沿激活方式下,如果管脚的 EINT0 功能被选用且管脚上出
现所选极性,该位置位。
0
EINT0
0
有 2 个 I/O 口可选择用作 EINT0 功能(见
“管脚配置”
中有关 P0.1 和 P0.16
的描述)
。
该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。
电平激活方式下,如果管脚的 EINT1 功能被选用且管脚处于有效状态时,
该位置位;边沿激活方式下,如果管脚的 EINT1 功能被选用且管脚上出
现所选极性,该位置位。
1
EINT1
0
有 2 个 I/O 口可选择用作 EINT1 功能(见
“管脚配置”
中有关 P0.3 和 P0.14
的描述)
。
该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。
电平激活方式下,如果管脚的 EINT2 功能被选用且管脚处于有效状态时,
该位置位;边沿激活方式下,如果管脚的 EINT2 功能被选用且管脚上出
现所选极性,该位置位。
2
EINT2
0
有 2 个 I/O 口可选择用作 EINT2 功能(见
“管脚配置”
中有关 P0.7 和 P0.15
的描述)
。
该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。
电平激活方式下,如果管脚的 EINT3 功能被选用且管脚处于有效状态时,
该位置位;边沿激活方式下,如果管脚的 EINT3 功能被选用且管脚上出
现所选极性,该位置位。
3
EINT3
0
有 3 个 I/O 口可选择用作 EINT3 功能 (见“管脚配置”中有关 P0.9, P0.20
和 P0.30 的描述)
。
该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。
保留
7:4
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
中断唤醒寄存器(INTWAKE - 0xE01FC144)
EXTWAKE 寄存器中的使能位允许外部中断将处理器从掉电模式唤醒。相关的 EINTn 功能必须映射到
管脚才能实现掉电唤醒。但中断并不必要为了实现唤醒操作而在向量中断控制器中被使能。这样做的好处
是允许外部中断输入将处理器从掉电模式唤醒,但不产生中断(只是简单地恢复操作)
,或者在掉电模式下
使能中断而不会将处理器唤醒(这样,当应用中并不需要唤醒特性时,也不必关闭中断)
。
表9
外部中断唤醒寄存器(INTWAKE – 0xE01FC144)
INTWAKE
功能
描述
0
EXTWAKE0
该位为 1 时,使能 EINT0 将处理器从掉电模式唤醒。
0
1
EXTWAKE1
该位为 1 时,使能 EINT1 将处理器从掉电模式唤醒。
0
2
EXTWAKE2
该位为 1 时,使能 EINT2 将处理器从掉电模式唤醒。
0
3
EXTWAKE3
该位为 1 时,使能 EINT3 将处理器从掉电模式唤醒。
0
13:4
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
14
BODWAKE
该位为 1 时,BOD 中断产生时可将处理器从掉电模式唤醒。
15
RTCWAKE
该位为 1 时,RTC 中断产生时可将处理器从掉电模式唤醒。
15
复位值
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
外部中断方式寄存器(EXTMODE – 0xE01FC148)
EXTMODE 寄存器中的位用来选择每个 EINT 脚是电平或边沿激活。只有选择用作 EINT 功能(见管
脚连接模块一章)并已通过 VICIntEnable(见向量中断控制器(VIC)一章)使能的管脚才能产生外部中断
功能的中断(当然,如果管脚选择用作其它功能,则产生其它功能的中断)
。
注:当某个中断在 VICIntEnable 中被禁能时,软件应该只改变 EXTMODE 寄存器中相应位的值。中断
重新使能前,软件向 EXTINT 写入 1 来清除 EXTINT 位,EXTINT 位可通过改变激活方式来置位。
表 10
外部中断方式寄存器(EXTMODE – 0xE01FC148)
EXTMODE
功能
0
EXTMODE0
描述
复位值
该位为 0 时,EINT0 使用电平激活;该位为 1 时,EINT0 使用边
0
沿激活。
1
EXTMODE1
该位为 0 时,EINT1 使用电平激活;该位为 1 时,EINT1 使用边
0
沿激活。
2
EXTMODE2
该位为 0 时,EINT2 使用电平激活;该位为 1 时,EINT2 使用边
0
沿激活。
3
EXTMODE3
该位为 0 时,EINT3 使用电平激活;该位为 1 时,EINT3 使用边
0
沿激活。
保留
7:4
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
外部中断极性寄存器(EXTPOLAR – 0xE01FC14C)
在电平激活方式中,EXTPOLAR 寄存器用来选择相应管脚是高电平或低电平有效。在边沿激活方式中,
EXTPOLAR 寄存器用来选择管脚上升沿或下降沿有效。只有选择用作 EINT 功能(见管脚连接模块一章)
并已通过 VICIntEnable(见向量中断控制器(VIC)一章)使能的管脚才能产生外部中断功能的中断(当然,
如果管脚选择用作其它功能,则产生其它功能的中断)
。
注:当某个中断在 VICIntEnable 中被禁能时,软件应该只改变 EXTPOLAR 寄存器中相应位的值。中
断重新使能前,软件向 EXTINT 写入 1 来清除 EXTINT 位,EXTINT 位可通过改变中断极性来置位。
表 11
外部中断极性寄存器(EXTPOLAR – 0xE01FC14C)
EXTPOLAR
功能
0
EXTPOLAR0
描述
复位值
该位为 0 时,EINT0 低电平或下降沿有效(由 EXTMODE0 决
0
定)
。
该位为 1 时,EINT0 高电平或上升沿有效(由 EXTMODE0 决
定)
1
EXTPOLAR1
该位为 0 时,EINT1 低电平或下降沿有效(由 EXTMODE1 决
0
定)
。
该位为 1 时,EINT1 高电平或上升沿有效(由 EXTMODE1 决
定)
。
2
EXTPOLAR2
该位为 0 时,EINT2 低电平或下降沿有效(由 EXTMODE2 决
0
定)
。
该位为 1 时,EINT2 高电平或上升沿有效(由 EXTMODE2 决
定)
。
3
EXTPOLAR3
该位为 0 时,EINT3 低电平或下降沿有效(由 EXTMODE3 决
0
定)
。
该位为 1 时,EINT3 高电平或上升沿有效(由 EXTMODE3 决
定)
。
7:4
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
16
NA
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
多个外部中断管脚
通过软件可选择使用管脚选择寄存器中 EINT3:0 的多个管脚,见管脚连接模块一章的描述。每个
EINT3:0 的外部中断逻辑从管脚的接收装置中接收与之相连的所有管脚的状态和信号(用来指示管脚是否
。当多个管脚根据其方式位和极性位的不同进行选择时,由外部中断逻辑来处理:
选用 EINT 功能)
低有效电平激活方式中,选用 EINT 功能的全部管脚的状态都连接到一个正逻辑与门。
高有效电平激活方式中,选用 EINT 功能的全部管脚的状态都连接到一个正逻辑或门。
边沿激活方式中,使用 GPIO 端口号最低的管脚,与管脚的极性无关。
(边沿激活方式中选择使
用多个 EINT 管脚被看作编程出错。
)
外部中断逻辑获取的是 EINTi 信号,见下面的逻辑原理图(图 9)
。
当多个 EINT 管脚逻辑或时,可在中断服务程序中通过 IO0PIN 和 IO1PIN 寄存器从 GPIO 端口读出管
脚状态来判断产生中断的管脚。
唤醒使能
(EXTWAKE的一位)
VPB 总线数据
D
干扰滤波
EINTi
EXTWAKE的VPB读
EINTi到
唤醒定时器
(图11)
Q
pclk
中断标志
(EXINT的一位)
EXTPOLARi
1
D
S
S
Q
R
R
EXTMODEi
S
Q
Q
到 VIC
R
EXINT的VPB读
pclk
pclk
复位
向EXTINTi写1
图 9 外部中断逻辑
存储器映射控制
存储器映射控制用于改变从地址 0x00000000 开始的中断向量的映射。这允许运行在不同存储器空间中
的代码对中断进行控制。
存储器映射控制寄存器(MEMMAP – 0xE01FC040)
表 12 MEMMAP 寄存器
地址
名称
0xE01FC040
MEMMAP
表 13
描述
访问
存储器映射控制。选择从 Flash Boot Block、用户 Flash 或 RAM
中读取 ARM 中断向量。
R/W
存储器映射控制寄存器(MEMMAP – 0xE01FC040)
MEMMAP
功能
描述
复位值
00: Boot 装载程序模式。中断向量从 Boot Block 重新映射。
01: 用户 Flash 模式。中断向量不重新映射,它位于 Flash 中。
1:0
MAP1:0
10: 用户 RAM 模式。中断向量从静态 RAM 重新映射。
0
11: 保留。不使用该选项。
警告:不正确的设定会导致器件的错误操作。
7:2
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
17
NA
广州周立功单片机发展有限公司 Tel: (020)38730976
*
38730977
Fax: 38730925
http://www.zlgmcu.com
LPC2131/2132/2138 的 MAP 位的硬件复位值为 00。Boot 装载程序会将用户看到的复位值更改,该
程序总是在复位后立即运行。用户文档将反映这一区别。
存储器映射控制的使用注意事项
存储器映射控制只从处理 ARM 异常(中断)必需的 3 个数据源(每个 64 字节)中选择一个使用。
例如,每当产生一个软件中断请求,ARM 内核就从 0x0000 0008 处取出 32 位数据(见表 2,
“ARM 异
常向量位置”
)。这就意味着当 MEMMAP[1:0]=10(用户 RAM 模式)时,从 0x0000 0008 的读数/取指是对
0x4000 0008 单元进行操作。当 MEMMAP[1:0]=00(Boot 装载程序模式)时,从 0x0000 0008 的读数/取指
(Boot Block 从片内 ROM 存储器重新映射)
。如果 MEMMAP[1:0]=11
是对 0x7FFF E008 单元的数据进行操作
(用户外部存储器模式)
,从地址为 0x8000 0008 的片外存储器中读取数据。
PLL(锁相环)
PLL 接受的输入时钟频率范围为 10MHz~25MHz。输入频率通过一个电流控制振荡器(CCO)倍增到
范 围 10MHz~60MHz 。 倍 频 器 可 以 是 从 1 到 32 的 整 数 ( 实 际 上 , 由 于 CPU 最 高 频 率 的 限 制 ,
LPC2131/2132/2138 的倍频值不能高于 6)
。CCO 的操作频率范围为 156MHz~320MHz,因此在环中有一个
额外的分频器在 PLL 提供所需要的输出频率时使 CCO 保持在频率范围内。输出分频器可设置为 2,4,8
或 16 分频。由于输出分频器的最小值为 2,它保证了 PLL 输出有 50%的占空比。图 10 为 PLL 的方框图。
PLL 的激活由 PLLCON 寄存器控制。PLL 倍频器和分频器的值由 PLLCFG 寄存器控制。为了防止 PLL
参数发生意外改变或 PLL 失效,对这两个寄存器进行了保护。当 PLL 提供芯片时钟时,由于芯片的所有操
作,包括看门狗定时器在内都依赖于它,因此 PLL 设置的意外改变将导致 CPU 执行不期望的动作。对它
们的保护由一个类似于操作看门狗定时器的代码序列来实现。详情请参阅 PLLFEED 寄存器的描述。
PLL 在芯片复位和进入掉电模式时被关闭并旁路。PLL 只能通过软件使能。程序必须在配置并激活 PLL
后等待其锁定,然后作为时钟源连接到 PLL。
寄存器描述
PLL 由表 14 所示的寄存器进行控制。
警告:PLL 值的不正确设定会导致芯片的错误操作。
表 14 PLL 寄存器
地址
名称
0xE01FC080
PLLCON
0xE01FC084
PLLCFG
描述
访问
PLL 控制寄存器。最新的 PLL 控制位的保持寄存器。写入该寄
存器的值在有效的 PLL 馈送序列执行之前不起作用。
PLL 配置寄存器。最新的 PLL 配置值的保持寄存器。写入该寄
存器的值在有效的 PLL 馈送序列执行之前不起作用。
R/W
R/W
PLL 状态寄存器。PLL 控制和配置信息的读回寄存器。如果曾对
0xE01FC088
PLLSTAT
PLLCON 或 PLLCFG 执行了写操作,但没有产生 PLL 馈送序列,
这些值将不会反映 PLL 的当前状态。读取该寄存器提供了控制
RO
PLL 和 PLL 状态的真实值。
PLL 馈送寄存器。该寄存器使能装载 PLL 控制和配置信息,该
0xE01FC08C
PLLFEED
配置信息从 PLLCON 和 PLLCFG 寄存器装入实际影响 PLL 操作
的映像寄存器。
18
WO
广州周立功单片机发展有限公司 Tel: (020)38730976
PLLC
PLLE
38730977
Fax: 38730925
http://www.zlgmcu.com
时钟同步
Direct
0
PSEL[1:0]
pd
pd
旁路
0
1
FOSC
相位频率
检测器
PLOCK
FCCO
CCO
cd
0
/2P
0
0
1
cclk
1
pd
cd
fout
M分频
msel<4:0>
MSEL[4:0]
图 10 PLL 方框图
PLL 控制寄存器(PLLCON – 0xE01FC080)
PLLCON 寄存器包含使能和连接 PLL 的位,使能 PLL 锁定到当前倍频器和分频器值的设定频率上。
连接 PLL 将使处理器和所有片内功能都根据 PLL 输出时钟来运行。对 PLLCON 的更改只有在对 PLLFEED
寄存器执行了正确的 PLL 馈送序列后才生效(见 PLL 馈送寄存器(PLLFEED - 0xE01FC08C)一节的描述)
。
表 15 PLL 控制寄存器(PLLCON – 0xE01FC080)
PLLCON
功能
描述
复位值
PLL 使能。当该位为 1 并且在有效的 PLL 馈送之后,该位将
0
PLLE
激活 PLL 并允许其锁定到指定的频率。见表 17 的 PLLSTAT
0
寄存器。
PLL 连接。当 PLLC 和 PLLE 都为 1 并且在有效的 PLL 馈送
1
PLLC
后,将 PLL 作为时钟源连接到 LPC2131/2132/2138。否则,
LPC2131/2132/2138 直接使用振荡器时钟。
见表 17 的 PLLSTAT
0
寄存器描述。
7:2
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
PLL 在作为时钟源之前必须进行设置、使能并锁定。将振荡器时钟切换到 PLL 输出或反过来操作时,
内部电路对操作进行同步以确保不会产生干扰。硬件不能确保 PLL 在连接之前锁定或在 PLL 在失去锁定时
自动断开连接。在 PLL 失去锁定的情况下,振荡器很可能已经变得不稳定,这样断开 PLL 也挽救不了这种
状况。
PLL 配置寄存器(PLLCFG – 0xE01FC084)
PLLCFG 寄存器包含 PLL 倍频器和分频器值。在执行正确的 PLL 馈送序列之前改变 PLLCFG 寄存器
的值不会生效(见 PLL 馈送寄存器(PLLFEED – 0xE01FC08C)的描述。PLL 频率和倍频器以及分频器值
的计算详见 PLL 频率计算一节。
19
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 16 PLL 配置寄存器(PLLCFG – 0xE01FC084)
PLLCFG
功能
4:0
MSEL4:0
描述
复位值
PLL 倍频器值。在 PLL 频率计算中其值为 M。
0
注:有关 MSEL4:0 值的正确选取见“PLL 频率计算”
。
6:5
PSEL1:0
PLL 分频器值。在 PLL 频率计算中其值为 P。
0
注:有关 PSEL1:0 值的正确选取见“PLL 频率计算”
。
保留
7
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
PLL 状态寄存器(PLLSTAT - 0xE01FC088)
从只读 PLLSTAT 寄存器读出的是正在使用的真实 PLL 参数和状态。PLLSTAT 可能与 PLLCON 和
PLLCFG 中的值不同,这是因为没有执行正确的 PLL 馈送序列,这两个寄存器中的值并未生效。详见 PLL
馈送寄存器(PLLFEED – 0xE01FC08C)寄存器的描述。
表 17 PLL 状态寄存器(PLLSTAT – 0xE01FC088)
PLLSTAT
功能
描述
复位值
4:0
MSEL4:0
读出的 PLL 倍增器值。这是 PLL 当前使用的值。
0
6:5
PSEL1:0
读出的 PLL 分频器值。这是 PLL 当前使用的值。
0
7
保留
8
PLLE
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
读出的 PLL 使能位。当该位为 1 时,PLL 处于激活状态;为
0 时,PLL 关闭。当进入掉电模式时,该位自动清零。
NA
0
读出的 PLL 连接位。当 PLLC 和 PLLE 都为 1 时,PLL 作为
9
PLLC
时钟源连接到 LPC2131/2132/2138;当 PLLC 或 PLLE 位为 0
时,PLL 被旁路,LPC2131/2132/2138 直接使用振荡器时钟。
0
当进入掉电模式时,该位自动清零。
10
PLOCK
15:11
保留
反映 PLL 的锁定状态。为 0 时,PLL 未锁定;为 1 时,PLL
锁定到指定的频率。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
NA
PLL 中断
PLLSTAT 寄存器中的 PLOCK 位连接到中断控制器。这样可使用软件打开 PLL 并连接到其它功能,不
需要等待 PLL 锁定。当发生中断时(PLOCK=1)
,可以连接 PLL 并禁止中断。
PLL 模式
PLLE 和 PLLC 的组合见表 18。
表 18 PLL 控制位组合
PLL 功能
PLLC
PLLE
0
0
PLL 被关闭并断开连接。系统使用未更改的时钟输入。
0
1
PLL 被激活但是尚未连接。PLL 可在 PLOCK 置位后连接。
1
0
与 00 组合相同。这样消除了 PLL 已连接但没有使能的可能性。
1
1
PLL 已使能并连接到处理器作为系统时钟源。
PLL 馈送寄存器(PLLFEED – 0xE01FC08C)
必须将正确的馈送序列写入 PLLFEED 寄存器才能使 PLLCON 和 PLLCFG 寄存器的更改生效。馈送序
列如下:
1.
将值 0xAA 写入 PLLFEED
20
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
将值 0x55 写入 PLLFEED。
2.
这两个写操作的顺序必须正确,而且必须是连续的 VPB 总线周期。后面一个要求表明在执行 PLL 馈
送操作时必须禁止中断。不管是写入的值不正确还是没有满足前两个条件,对 PLLCON 或 PLLCFG 寄存器
的更改都不会生效。
表 19 PLL 馈送寄存器(PLLFEED – 0xE01FC08C)
PLLFEED
功能
7:0
PLLFEED
描述
复位值
PLL 馈送序列必须写入该寄存器才能使 PLL 配置和控制寄存
器的更改生效。
未定义
PLL 和掉电模式
掉电模式会自动关闭并断开 PLL。从掉电模式唤醒不会自动恢复 PLL 的设定,PLL 的恢复必须由软件
来完成。通常,一个将 PLL 激活并等待锁定,然后将 PLL 连接的子程序可以在任何中断服务程序的开始调
用。有一点非常重要,那就是不要试图在掉电唤醒之后简单地执行馈送序列来重新启动 PLL。这会在 PLL
锁定建立之前同时使能并连接 PLL。
PLL 频率计算
PLL 等式使用下列参数:
FOSC
晶振频率
FCCO
PLL 电流控制振荡器的频率
cclk
PLL 输出频率(也是处理器的时钟频率)
M
PLLCFG 寄存器中 MSEL 位的倍增器值
P
PLLCFG 寄存器中 PSEL 位的分频器值
PLL 输出频率(当 PLL 激活并连接时)由下式得到:
cclk = M * FOSC
或
cclk = FCCO / (2*P)
CCO 频率可由下式得到:
FCCO = cclk * 2 * P 或
FCCO = FOSC * M * 2 * P
PLL 输入和设定必须满足下面的条件:
FOSC 的范围:10MHz~25MHz
cclk 的范围:10MHz~Fmax(LPC2131/2132/2138 的最大允许频率)
FCCO 的范围:156MHz~320MHz
确定 PLL 设定的过程
如果一个特定的应用使用 PLL,它的配置必须依照下面的原则:
1.
选择处理器的操作频率(cclk)
。这可以根据处理器的整体要求、UART 波特率的支持等因素来决
。
定。记住外围器件的时钟频率可以低于处理器频率(见 VPB 分频器描述)
2.
选择振荡器频率(FOSC)
。cclk 一定是 FOSC 的整数(非小数)倍。
3.
计算 M 值以配置 MSEL 位。M = cclk/FOSC,M 的取值范围为 1~32。写入 MSEL 位的值为 M-1(见
表 21)。
4.
选择 P 值以配置 PSEL 位,使 FCCO 在定义的频率限制范围内,FCCO 可通过前面的等式计算。P 必
须是 1, 2, 4 或 8 其中的一个。写入 PSEL 位的值 00 表示 P=1;01 表示 P=2;10 表示 P=4;11 表
示 P=8 (见表 20)。
21
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 20 PLL 分频器值
PSEL 位 PLLCFG[6:5]
P值
00
1
01
2
10
4
11
8
表 21 PLL 倍增器值
MSEL 位 PLLCFG[4:0]
M值
00000
1
00001
2
00010
3
00011
4
...
...
11110
31
11111
32
PLL 举例
例如系统要求 Fosc=10MHz,cclk=60MHz。
根据这些要求,可得出 M=cclk/Fosc=60MHz/10MHz=6。因此,M-1=5 写入 PLLCFG4:0。
P 值可由 P=Fcco/(cclk*2)得出,Fcco 必须在 156MHz~320MHz 内。假设 Fcco 取最低频率 156MHz,则
P=156MHz/(2*60MHz)=1.3。Fcco 取最高频率可得出 P=2.67。因此,同时满足 Fcco 最低和最高频率要求
的 P 值只能为 2,见表 20。所以,PLLCFG=6:5=1。
功率控制
LPC2131/2132/2138 支持两种节电模式:空闲模式和掉电模式。在空闲模式下,指令的执行被挂起直到
发生复位或中断为止。外设功能在空闲模式下继续保持并可产生中断使处理器恢复运行。空闲模式使处理
器、存储器系统和相关控制器以及内部总线不再消耗功率。
在掉电模式下,振荡器关闭,这样芯片没有任何内部时钟。处理器状态和寄存器、外设寄存器以及内
部 SRAM 值在掉电模式下被保持。芯片管脚的逻辑电平保持静态。复位或特定的不需要时钟仍能工作的中
断可终止掉电模式并使芯片恢复正常运行。由于掉电模式使芯片所有的动态操作都挂起,因此芯片的功耗
降低到几乎为零。
掉电和空闲模式的进入必须与程序的执行同步进行。通过中断唤醒掉电模式不会使指令丢失、不完整
或重复。从掉电模式唤醒将在唤醒定时器一节中作进一步讨论。
外设的功率控制特性允许独立关闭应用中不需要的外设,这样进一步降低了功耗。
寄存器描述
功率控制功能包含两个寄存器,如表 22 所示。更详细的内容见后面的描述。
表 29
功率控制 寄存器
地址
名称
0xE01FC0C0
PCON
0xE01FC0C4
PCONP
描述
访问
功率控制寄存器。该寄存器包含 LPC2131/2132/2138 两种节电模
式的控制位。见表 23。
R/W
外设功率控制寄存器。该寄存器包含使能和禁止单个外设功能的
控制位。该寄存器可使未被使用的外设不消耗功率。
22
R/W
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
功率控制寄存器(PCON – 0xE01FC0C0)
PCON 寄存器包含两个位。置位其中一个位,将会进入掉电或空闲模式。如果两位都置位,则进入掉
电模式。
表 23
功率控制寄存器(PCON – 0xE01FC0C0)
功能
PCON
描述
复位值
空闲模式-当该位置位时,处理器时钟停止,但外围功能保持
0
工作状态。外设或外部中断源所产生的任何中断都会使处理器
IDL
0
恢复运行。
掉电模式-当该位置位时,振荡器和所有片内时钟都停止。外
1
部中断所产生的唤醒条件可使振荡器重新启动并使 PD 位清
PD
0
零,处理器恢复运行。
当 PD 为 1 PDBOD 位为 0 时,掉电模式下掉电检测继续运行,
以致它的复位使 LPC2131/2132/2138 退出掉电模式(见注释)
。
2
PDBOD
当 PD 和 PDBOD 都为 1 时,掉电模式中 BOD 电路禁能以节
省功耗。当 PD 为 0 时, PDBOD 的状态对上述操作不会产生
影响。
保留
7:3
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
注:由于直到唤醒定时器允许主振荡器恢复稳定运行后才能执行操作,因此不能保证操作在 Vdd 降到低于
BOD 阈值之前(这个条件将阻止操作的执行)恢复。如果操作确实恢复了,也不能保证在低 BOD 阈值终
止 操 作 之 前 LPC2131/2132/2138 的 操 作 可 以 持 续 多 长 时 间 。 这 些 都 取 决 于 Vdd 下 降 的 幅 度 。
LPC2131/2132/2138 附近的高去耦电容(Vdd 和地之间)可以使情况得以改善,使得软件可能在掉电模式下
实现所需的操作。
外设功率控制寄存器(PCONP – 0xE01FC0C4)
PCONP 寄存器允许将所选的外设功能关闭以实现节电的目的。这可通过关断特定外围模块的时钟源来
实现。有少数外设功能不能被关闭(看门狗定时器、GPIO、管脚连接模块和系统控制模块)。某些外设,
特别是包含模拟功能的外设,它们的操作无需时钟。这些外设包含独立的禁能控制位,通过它们来关闭电
路以降低功耗。PCONP 中的每个位都控制一个外设。每个位所对应的外设编号见 LPC2131/2132/2138 存储
器寻址部分的 VPB 外设映射一节。
表 24
LPC2131/2132/2138 的外设功率控制寄存器(PCONP – 0Xe01FC0C4)
PCONP
功能
描述
0
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
1
PCTIM0
该位为 1 时,定时器 0 使能。为 0 时,定时器 0 被关闭以实现节电。
1
2
PCTIM1
该位为 1 时,定时器 1 使能。为 0 时,定时器 1 被关闭以实现节电。
1
3
PCURT0
该位为 1 时,UART0 使能。为 0 时,UART0 被关闭以实现节电。
1
4
PCURT1
该位为 1 时,UART1 使能。为 0 时,UART1 被关闭以实现节电。
1
5
PCPWM0 该位为 1 时,PWM0 使能。为 0 时,PWM0 被关闭以实现节电。
6
保留
复位值
用户软件不要向其写入 1。从保留位读出的值未被定义。
2
2
1
0
7
PCI2C0
该位为 1 时,I C0 接口使能。为 0 时,I C0 接口被关闭以实现节电。
1
8
PCSPI0
该位为 1 时,SPI0 接口使能。为 0 时,SPI0 接口被关闭以实现节电。
1
9
PCRTC
该位为 1 时,RTC 使能。为 0 时,RTC 被关闭以实现节电。
1
10
PCSPI1
该位为 1 时,SSP 接口使能。为 0 时,SSP 接口被关闭以实现节电。
1
11
保留
用户软件写入 0 来实现节电。
1
23
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
续上表
PCONP
功能
12
PCAD0
描述
复位值
该位为 1 时,A/D 转换器 0 使能。为 0 时,A/D 0 被关闭以实现节能。清
1
零该位前先清零 AD0CR 寄存器的 PDN 位,该位应当在置位 PDN 前被置
位。
18:13
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
2
2
0
19
PCI2C1
该位为 1 时,I C1 接口使能。为 0 时,I C1 接口被关闭以实现节电。
1
20
PCAD1
该位为 1 时,A/D 转换器 1 使能。为 0 时,A/D 1 被关闭以实现节能。清
1
零该位前先清零 AD0CR 寄存器的 PDN 位,该位应当在置位 PDN 前被置
位。
31:21
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
功率控制注意事项
复位后,PCONP 的值设置成使能所有接口和外围功能(受 PCONP 控制的)
。除了对外围功能相关的
寄存器进行配置外,用户应用程序不要访问 PCONP 寄存器以便启动使用片内的任何外围功能。
在需要控制功率的系统中,只要将应用中用到的外围功能的对应在 PCONP 寄存器的位置 1,寄存器的
其它“保留”位或当前无需使用的外围功能对应在寄存器中的位都必须清零。
复位
LPC2131/2132/2138 有两个复位源: RESET 管脚和看门狗复位。 RESET 管脚为施密特触发输入管脚,
带有一个额外的干扰滤波器。任何复位源提供的芯片复位都会启动唤醒定时器(详见唤醒定时器的描述)
,
复位将保持有效直至外部复位撤除,振荡器开始运行。当计数达到一个固定个数的时钟时,片内电路完成
其初始化。复位、振荡器以及唤醒定时器之间的关系见图 11。
复位干扰滤波器使处理器可以忽略非常短的外部复位脉冲并决定 RESET 保证芯片复位所必须保持的
最短时间。 RESET 一旦有效,只有当晶振运行稳定并且 LPC2131/2132/2138 的 X1 脚上出现适当的信号时
才能撤除。如果晶振子系统使用的是外部晶体,上电后 RESET 脚的信号必须保持 10ms。对于晶振已经稳
定运行且 X1 脚上已出现稳定信号时出现的复位, RESET 脚的信号只需保持 300ns。
当内部复位撤除时,处理器从地址 0 开始运行,此处为从 Boot Block 映射的复位向量。此时所有的处
理器和外设寄存器都恢复为默认状态。
外部复位和内部复位有一些小的区别。外部复位使特定管脚的值被锁存以实现配置。外部电路无法确
定内部复位什么时候发生进而对特定管脚的值进行配置,因此那些锁存在内部复位过程中不会重新装载。
在外部复位时对管脚 P1.20/TRACESYNC,P1.26/RTCK(见管脚配置和管脚连接模块)进行检测以实现不同
的目的。当复位后执行引导装载程序时,片内引导装载程序将对 P0.14 进行检测(见 Flash 存储器系统和编
程)。
芯片复位可以发生在 Flash 编程或擦除操作过程中。Flash 存储器会中断正在进行的操作并使 CPU 复位
延迟到内部 Flash 高电压降低后才完成。
24
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
外部复位
复位片内电路
C
Q
S
看门狗复位
复位PCON.PD
掉电
唤醒定时器
计数 2n
Start
EINT0唤醒
EINT1唤醒
EINT2唤醒
EINT3唤醒
C
Q
振荡器输出
(FOSC)
S
PCON PD位
的VPB读
从 VPB写“1”
复位
FOSC
到
PLL
图 11 包括唤醒定时器的复位方框图
复位源识别寄存器(RSIR – 0xE01FC180)
每个复位源都在该寄存器中对应一位。置位这些位中的任何一个将使其读出时为 0。4 个复位源相互之
间的关系见下表的描述。
表 25
复位源识别寄存器(RSIR – 0xE01FC180)
RSIR
功能
描述
复位值
0
POR
POR 信号有效时该位置位,并清除 RSIR 寄存器的其它位。但是如
见文中
果 POR 信号撤销后另一个复位信号(如外部复位)仍然保持有效
描述
时,则这个复位信号对应的位置位。POR 位不受其它任何其它复位
源的影响。
1
EXTR
RESET 信号有效时该位置位。该位由 POR 来清除,但不受 WDT
或 BOD 复位的影响。
2
WDTR
当看门狗定时器溢出和看门狗方式寄存器的 WDTRESET 位为 1
时,该位置位。该位可被其它任何一个复位源清除。
3
BODR
当 3.3V 的电源降到低于 2.6V 时该位置位。如果电压继续下降到
POR 有效电平(通常为 1V)时,该位清零,但如果电压恢复时不
能到达这个电平时,该位仍然为 1。该位不受外部复位和看门狗复
位的影响。
7:4
保留
保留。用户软件不要向其写入 1。从保留位读出的值未被定义。
0
VPB 分频器
VPB 分频器决定处理器时钟(cclk)与外设器件所使用的时钟(pclk)之间的关系。VPB 分频器有两
个用途。第一个是通过 VPB 总线为外设提供所需的 pclk 时钟以便外设以为满足 ARM 处理器而调整的速度
下工作。为了实现此目的,VPB 总线可以降低到 1/2 或 1/4 处理器时钟速率。由于 VPB 总线必须在上电后
正常工作(并且如果由于 VPB 分频器控制器位于 VPB 总线上而使上电时 VPB 总线不工作,其时序就不能
改变)
,VPB 总线在复位后默认的状态是以 1/4 速度运行。VPB 分频器的第二个用途是在应用不需要任何
外设全速运行时使功耗降低。
VPB 分频器与振荡器和处理器时钟的连接见图 12。由于 VPB 分频器连接到 PLL 输出,PLL 在空闲模
。
式下保持有效(如果 PLL 处于运行状态)
25
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
VPBDIV 寄存器(VPBDIV - 0xE01FC100)
VPB 分频器寄存器包含两个位,可以设定 3 个分频值,详见表 27。
表 26 VPBDIV 寄存器映射
地址
名称
0xE01FC100
VPBDIV
描述
访问
控制 VPB 时钟速率与处理器时钟之间的关系
R/W
表 27 VPBDIV 寄存器(VPBDIV - 0xE01FC100)
VPBDIV
功能
1:0
VPBDIV
描述
复位值
VPB 时钟速率如下:
0
00:VPB 总线时钟为处理器时钟的 1/4。
01:VPB 总线时钟与处理器时钟相同。
10:VPB 总线时钟为处理器时钟的 1/2。
11:保留。将该值写入 VPBDIV 寄存器无效(保留原来的设定)
。
保留
7:2
晶振或外部时钟源
(Fosc)
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
处理器时钟
(cclk)
PLL
VPB 分频器
VPB 时钟
(pclk)
图 12 VPB 分频器连接
唤醒定时器
唤醒定时器的用途是确保振荡器和芯片所需要的其它模拟功能在处理器开始执行指令之前能够正确工
作。这在上电、所有类型的复位以及任何原因所导致上述功能关闭时非常重要。由于振荡器和其它功能在
掉电模式下关闭,使处理器从掉电模式中唤醒都必须使用唤醒定时器。
唤醒定时器通过检测晶振是否能可靠地开始代码的执行来对其进行监视。当给芯片加电或某个事件使
芯片退出掉电模式,振荡器需要一段时间来产生足够振幅的信号驱动时钟逻辑。时间的长度取决于许多因
素,包括 Vdd 的上升速率(上电时)
、晶振的类型及其电气特性(如果使用石英晶振)
、任何其它外部电路
(例如电容)和振荡器在现有环境下自身的特性。
一旦检测到一个时钟,唤醒定时器则对 4096 个时钟计数,这段时间可使片内电路进行初始化。当片内
电路初始化完毕时,如果外部复位已撤除,处理器开始执行指令。当系统使用外部时钟源(与晶振连接的
管脚相反)时,需要考虑的振荡器的启动延时可能很短甚至没有。唤醒定时器的设计确保了芯片所需要的
任何其它功能在程序运行之前都能够进行操作。
任何复位、外部中断 EINT3:0 和 RTC 中断(如果 RTC 工作在其自身的 RTCX1-2 管脚的振荡器下)都
可使 LPC2131/2132/2138 退出掉电模式。如果一个中断使能产生唤醒并且所选中断事件出现,那么必须启
动振荡器唤醒。实际的中断(如果有)在唤醒定时器停止后产生,由向量中断控制器进行处理。
但是,LPC2131/2132/2138 的复用管脚(见管脚配置和管脚连接模块)允许其它外设起作用,使器件退
出掉电模式。下面的管脚功能对允许 UART0 或 1、SPI0 或 1、I2C 相关事件来产生中断:RxD0/EINT0、
SDA/EINT1、SSEL0/EINT2、RxD1/EINT3、DCD1/EINT1、RI1/EINT2、SSEL1/EINT3。
要使器件进入掉电模式并允许总线或管脚上的一个或多个事件能使其恢复正常操作,软件应该对管脚
的外部中断功能重新编程,选择中断合适的方式和极性以及掉电模式。唤醒时软件应恢复管脚复用的外围
26
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
功能。
上述的所有总线或管脚活动都是低电平有效。如果软件要使器件退出掉电模式来响应多个管脚共用的
同一个 EINTi 通道的事件,中断通道必须编程设定为低电平激活方式,因为只有在电平方式中通道才能使
信号逻辑或来唤醒器件。
这种方法的唯一缺陷就是振荡器的重新启动会阻止 LPC2131/2132/2138 对总线或管脚上唤醒事件的捕
获。空闲模式比掉电模式更适用于器件,使器件能及时地捕获和响应外部活动。
总之,LPC2131/2132/2138 唤醒定时器根据晶振执行最短时间的复位,它在从掉电模式中唤醒或任何复
位产生时激活。
掉电检测
LPC2131/2132/2138 包含一个 Vdd 管脚电压的 2 级检测。如果 Vdd 电压低于 2.9V,掉电检测器(BOD)
;
向向量中断控制器声明一个中断。该信号可通过中断使能寄存器(VICIntEnable – 0xFFFFF010,读/写)
或者,也可由软件通过读所有中断状态寄存器(VICRawIntr – 0xFFFFF008,只读)检测信号来使能。
当 V3 管脚的电压低于 2.6V 时,这个第二级的低电压检测将产生复位,禁能 LPC2131/2132/2138。该
复位可以防止 Flash 的内容发生改变,因为低电压下芯片的各种功能部件的操作都将变得不可靠。BOD 电
路将使电压降低到 1V 以下来维持复位,这个电压下上电复位电路也可保持复位。
2.9V 和 2.6V 阈值都有滞后。正常工作时,这个滞后可使 2.9V 的检测能产生可靠的中断或使正常反复
执行的事件能检测到掉电条件。
但是,当掉电检测使能使得 LPC2131/2132/2138 退出掉电模式时(器件本身的操作也不能得到保证),
电源电压可能在唤醒定时器完成延时前已经从瞬时变化中恢复。这时,BOD 产生的结果是:功能部件唤醒
并在设置好掉电模式后继续工作、不产生任何中断、RISR 寄存器的 BOD 位清零。由于所有其它唤醒条件
,因此,这种没有任何原因的唤醒,可以确定是已
都有一个保存的标志位(见 EXTINT 寄存器和 RTC ILR)
经结束的掉电唤醒。
代码安全和调试
开发应用中非常需要 LPC2131/2132/2138 的调试和跟踪功能。在一个应用后面的使用过程中,保护应
用代码以防对手或竞争者盗用变得更加重要。LPC2131/2132/2138 下述特性允许应用控制代码是否被调试或
被保护以防盗用。
有关代码读保护的详细信息请参考 Flash 存储器系统和编程一章。
4. 存储器加速模块(MAM)
简介
当 LPC2131/2132/2138 运行 Flash 存储器的代码时,器件内部的 MAM 模块极大地提高了 ARM 处理器
的性能,只需要使用一个简单的 Flash 组就可实现。
操作
存储器加速模块(MAM)将需要的下一个 ARM 指令锁存以防止 CPU 取指暂停。与以前的其它器件
使用 2 个 Flash 组相比,LPC2131/2132/2138 只使用一组 Flash 存储器。Flash 组包含预取指缓冲区(3 个 128
位的缓冲区)
、分支跟踪缓冲区和数据缓冲区。当预取指缓冲区和分支跟踪缓冲区不能满足一次指令取指的
需要,并且此行的预取指还没有启动时,ARM 在启动 128 位行的取指时暂停。如果预取指已经启动但还未
完成,则 ARM 暂停的时间会更短一些。预取指在 Flash 结束前面的访问后立即启动,除非被数据访问终止。
预取指行被 Flash 模块锁存,但 MAM 不能在预取指缓冲区中捕获该行,直到 ARM 内核给出预取指开始的
地址。如果内核给出的地址与预取指地址不同,则预取指行丢弃。
27
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
每个预取指缓冲区和分支跟踪缓冲区包含 4 个 32 位 ARM 指令或 8 个 16 位 Thumb 指令。在连续执行
代码时,通常预取指缓冲区包含当前指令和含有该指令的整个 Flash 行。
MAM 利用 LPROT[0]行来区分指令和数据访问。代码和数据访问分别使用独立的 128 位缓冲区。每 4
个连续 32 位代码中的 3 个代码或数据访问都在缓冲区中完成,无需访问 Flash(每 8 个连续 16 位代码中的
7 个,每 16 个连续字节访问中的 15 个)
。第 4 个(第 8 个,第 16 个)连续数据的访问必须访问 Flash,终
止正在执行的任何预取指。Flash 数据访问结束后,重新启动被终止的正在执行的预取指。
Flash 读操作时序的编程和描述见本节后面的内容。
这样,当 CPU 时钟周期大于或等于 1/4 的 Flash 访问时间时,连续指令的执行不会影响代码取指。其
,在 ARM 代码中,利用 ARM 指令(不是 Thumb)的条
中用于程序分支的平均时间相对较短(少于 25﹪)
件执行特性,这个时间会变得最短。这种条件执行通常用来防止不必要的较短的前向分支。
分支和其它程序流的变化导致前面所讲述的连续指令取指出现中断。分支跟踪缓冲区捕获发生非连续
中断的行。如果相同的分支再次出现,则从分支跟踪缓冲区内取出下条指令。当分支超出了预取指和分支
跟踪缓冲区内容时,需要终止几个时钟来装载分支跟踪缓冲区。这样,不会再出现指令取指延时,直到一
个新的和不同的分支出现。
存储器加速器模块
存储器加速器模块分成以下几个功能块:
1 个 Flash 地址锁存和 1 个增量器功能用于预取指地址。
1 个 128 位的预取指缓冲区及其相关的地址锁存和比较器。
1 个 128 位的分支跟踪缓冲区及其相关的地址锁存和比较器。
1 个 128 位的数据缓冲区及其相关的地址锁存和比较器。
控制逻辑
等待逻辑
图 13 所示为存储器加速器模块数据通路的一个简化框图。
在下面的描述中,
“取指”一词表示 ARM 发出的一个直接的 Flash 读请求。
“预取指”一词表示对当前
处理器取指地址之后的地址执行 Flash 读操作。
Flash 存储器组
LPC2131/2132/2138 MAM 含有一个 Flash 存储器组。
Flash 编程功能不受 MAM 的控制,而是作为一个独立的功能进行处理。
“boot block”扇区包含作为应
用程序的一部分调用的 Flash 编程算法和一个可对 Flash 存储器进行串行编程的装载程序。
存储器地址
ARM 局部总线
Flash 存储器组
总线
接口
缓冲区
存储器数据
图 13 存储器加速器模块的简化框图
指令锁存和数据锁存
代码和数据的访问由存储器加速器模块分别进行处理。每个缓冲区(预取指、分支跟踪和数据缓冲区)
28
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
都由 1 套 128 位锁存、15 位地址锁存和 15 位比较器。每个 128 位锁存保存 4 个代码字(4 条 ARM 指令或
8 条 Thumb 指令)
。每个缓冲区还有 32 个 4:1 多路复用器,用来从 128 位行中选择所需的字。
对数据锁存中没有的数据进行访问会导致读取 Flash 的 4 个数据字,它们由数据锁存所捕获。使用数
据锁存加速了连续数据的访问,但对于随机数据访问几乎没什么影响。
Flash 编程问题
由于在编程和擦除操作过程中不允许访问 Flash 存储器,那么如果在 Flash 模块忙时存储器请求访问
Flash 地址,MAM 就必须强制 CPU 等待(这通过声明 ARM7TDMI-S 局部总线信号 CLKEN 来实现)。在
某些情况下,代码执行的延迟会导致看门狗超时。用户必须注意到这种可能性并采取措施来确保不会在编
程或擦除 Flash 存储器时出现非预期的看门狗复位而导致系统故障。
为了防止从 Flash 存储器中读取无效的数据,LPC2131/2132/2138 MAM 使锁存在 Flash 编程或擦除操
作的开始自动失效。在 Flash 操作结束后,任何对 Flash 地址的读操作将启动新的取指。
存储器加速器模块的操作模式
MAM 定义了 3 种操作模式,可以在性能和可预测性之间进行选择:
0)MAM 关闭。所有存储器请求都会导致 Flash 的读操作(见下面的注 2)
。无指令预取指。
1)MAM 部分使能。如果数据可用,则从保持锁存区执行连续的指令访问。指令预取指使能。非连续
。这意味着所有的转移指令都会导致对存储器的取指。
的指令访问启动 Flash 读操作(见下面的注 2)
由于缓冲的数据访问时序很难预测并且非常依赖于所处的状况,因此所有数据操作都会导致 Flash
读操作。
2)MAM 完全使能。任何存储器请求(代码或数据),如果其值已经包含在其中一个保持锁存当中,
那么从缓冲区执行该代码或数据的访问。指令预取指使能。Flash 读操作用于指令的预取指和当前缓
冲区所没有的代码或数据的访问。
表 28 MAM 响应的不同类型的程序访问
MAM 模式
程序存储器请求类型
0
1
2
2
使用锁存的数据
1
使用锁存的数据 1
连续访问,数据位于 MAM 锁存当中
启动取指
连续访问,数据不在 MAM 锁存当中
启动取指
启动取指 1
启动取指 1
非连续访问,数据位于 MAM 锁存当中
启动取指 2
启动取指 1,2
使用锁存的数据 1
非连续访问,数据不在 MAM 锁存当中
启动取指
启动取指 1
启动取指 1
表 29 MAM 响应的不同类型的数据和 DMA 访问
MAM 模式
数据存储器请求类型
0
1
2
连续访问,数据位于 MAM 锁存当中
启动取指
连续访问,数据不在 MAM 锁存当中
启动取指
2
非连续访问,数据位于 MAM 锁存当中
启动取指
非连续访问,数据不在 MAM 锁存当中
启动取指
启动取指
2
2
启动取指
启动取指
2
启动取指
使用锁存的数据
启动取指
使用锁存的数据
启动取指
1.
指令预取指在模式 1 和 2 中使能。
2.
只要锁存的数据可用,MAM 则使用锁存的数据,但模仿 Flash 读操作的时序。这样虽然使用相
同的执行时序,但却降低了功耗。将 MAMTIM 中的取指时间设置为 1 个时钟可关闭 MAM。
MAM 配置
在复位后,MAM 默认为禁止状态。软件可以随时将存储器访问加速打开或关闭。这样就可使大多数
29
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
应用程序以最高速度运行,而某些要求更精确定时的功能可以较慢但更可预测的速度运行。
寄存器描述
所有寄存器不管规格如何,都以字地址为边界。详细的寄存器内容见各个功能的描述。
表 30
名称
系统控制寄存器汇总
描述
访问
复位值*
地址
R/W
0
0xE01FC000
R/W
0x07
0xE01FC004
MAM
MAMCR
MAMTIM
存储器加速器模块控制寄存器。决定 MAM 的操作模式。
也就是说 MAM 性能增强的程度,见表 31。
存储器加速器定时控制。决定 Flash 存储器取指所使用的
时钟个数(1 到 7 个处理器时钟)。
* 复位值仅指已使用位中保存的数据,不包括保留位的内容。
MAM 控制寄存器(MAMCR – 0xE01FC000)
两个配置位选择 MAM 的 3 种操作模式,见表 31。在复位后,MAM 功能被禁止。改变 MAM 操作模
式会导致 MAM 所有的保持锁存内容无效,因此需要执行新的 Flash 读操作。
表 31 MAM 控制寄存器(MAMCR – 0xE01FC000)
MAMCR
功能
描述
复位值
这两个位决定 MAM 的操作模式:
00-MAM 功能被禁止
1:0
MAM 模式控制 01-MAM 功能部分使能
0
10-MAM 功能完全使能
11-保留
7:2
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
MAM 定时寄存器(MAMTIM – 0xE01FC004)
MAM 定时寄存器决定使用多少个 cclk 周期访问 Flash 存储器。这样可调整 MAM 时序使其匹配处理器
操作频率。Flash 访问时间可以从 1 到 7 个时钟。单个时钟的 Flash 访问实际上关闭了 MAM。这种情况下
可以选择 MAM 模式对功耗进行优化。
30
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 32 MAM 定时寄存器(MAMTIM – 0xE01FC004)
MAMTIM
功能
描述
复位值
这几个位决定 MAM Flash 取指操作的时间:
000=0-保留
001=1-一段时间内只有 1 个处理器时钟(cclk)用于 MAM 取
指。
010=2-一段时间内只有 2 个处理器时钟(cclk)用于 MAM 取
指。
011=3-一段时间内只有 3 个处理器时钟(cclk)用于 MAM 取
指。
2:0
MAM 取指周期 100=4-一段时间内只有 4 个处理器时钟(cclk)用于 MAM 取
0x07
指。
101=5-一段时间内只有 5 个处理器时钟(cclk)用于 MAM 取
指。
110=6-一段时间内只有 6 个处理器时钟(cclk)用于 MAM 取
指。
111=7-一段时间内只有 7 个处理器时钟(cclk)用于 MAM 取
指。
警告:不正确的设定会导致器件的错误操作。
7:3
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
MAM 使用注意事项
当改变 MAM 定时值时,必须先通过向 MAMCR 写入 0 来关闭 MAM,然后将新值写入 MAMTIM。
最后,将需要的操作模式的对应值(1 或 2)写入 MAMCR,再次打开 MAM。
对于低于 20MHz 的系统时钟,MAMTIM 设定为 001。对于 20MHz 到 40MHz 之间的系统时钟,建议
将 Flash 访问时间设定为 2cclk,而在高于 40MHz 的系统时钟下,建议使用 3cclk。
向量中断控制器(VIC)
5.
特性
ARM PrimeCell TM 向量中断控制器
32 个中断请求输入
16 个向量 IRQ 中断
16 个优先级,可动态分配给中断请求
软件中断产生
描述
向量中断控制器(VIC)具有 32 个中断请求输入,可将其编程分为 3 类:FIQ、向量 IRQ 和非向量 IRQ。
可编程分配机制意味着不同外设的中断优先级可以动态分配并调整。
快速中断请求(FIQ)要求具有最高优先级。如果分配给 FIQ 的请求多于 1 个,VIC 将中断请求“相
或”后向 ARM 处理器产生 FIQ 信号。当只有一个中断被分配为 FIQ 时可实现最短的 FIQ 等待时间,因为
FIQ 服务程序只要简单地启动器件的处理就可以了。但如果分配给 FIQ 级的中断多于 1 个,FIQ 服务程序
从 VIC 中读出一个字来识别产生中断请求的 FIQ 中断源是哪一个。
向量 IRQ 具有中等优先级。该级别可分配 32 个请求中的 16 个。32 个请求中的任意一个都可分配到
31
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
16 个向量 IRQ slot 中的任意一个,其中 slot0 具有最高优先级,而 slot15 则为最低优先级。
非向量 IRQ 的优先级最低。
VIC 将所有向量和非向量 IRQ“相或”向 ARM 处理器产生 IRQ 信号。IRQ 服务程序可通过读取 VIC
的一个寄存器立即启动并跳转到相应地址。如果有任意一个向量 IRQ 发出请求,VIC 则提供最高优先级请
求 IRQ 服务程序的地址,否则提供所默认程序的地址。该默认程序由所有非向量 IRQ 共用。默认程序可读
取另一个 VIC 寄存器以确定哪个 IRQ 被激活。
VIC 中所有的寄存器都为字寄存器。不支持字节和半字的读和写操作。
关于向量中断控制器的其它信息请参阅 ARM PrimeCell TM 向量中断控制器(PL190)的相关文档。
寄存器描述
VIC 所包含的寄存器如表 33 所示。详细内容见后面的描述。
表 33 VIC 寄存器映射
名称
VICIRQStatus
VICFIQStatus
VICRawIntr
VICIntSelect
VICIntEnable
描述
该寄存器读出定义为 IRQ 并使能的
IRQ 状态寄存器。
中断的状态。
FIQ 状态请求。该寄存器读出定义为 FIQ 并使能的中
断的状态。
所有中断的状态寄存器。该寄存器读出 32 个中断请
求/软件中断的状态,不管中断是否使能或分类。
中断选择寄存器。该寄存器将 32 个中断请求的每个
都分配为 FIQ 或 IRQ。
中断使能寄存器。该寄存器控制将 32 个中断请求和
软件中断中的哪些使能为 FIQ 或 IRQ。
访问
复位值*
地址
RO
0
0xFFFF F000
RO
0
0xFFFF F004
RO
0
0xFFFF F008
R/W
0
0xFFFF F00C
R/W
0
0xFFFF F010
W
0
0xFFFF F014
R/W
0
0xFFFF F018
W
0
0xFFFF F01C
R/W
0
0xFFFF F020
R/W
0
0xFFFF F030
R/W
0
0xFFFF F034
R/W
0
0xFFFF F100
中断使能清零寄存器。该寄存器允许软件将中断使能
VICIntEnClr
VICSoftInt
寄存器中的一个或多个位清零。
软件中断寄存器。该寄存器的内容与 32 个不同外设
的中断请求“相或”
。
软件中断清零寄存器。该寄存器允许软件将软件中断
VICSoftIntClear
寄存器中的一个或多个位清零。
保护使能寄存器。该寄存器允许特权模式下运行的软
VICProtection
VICVectAddr
VICDefVectAddr
VICVectAddr0
件对 VIC 寄存器进行有限的访问。
向量地址寄存器。当发生一个 IRQ 中断时,IRQ 服务
程序可读出该寄存器并跳转到读出的地址。
默认向量地址寄存器。该寄存器保存了非向量 IRQ
的中断服务程序(ISR)地址。
向量地址 0 寄存器。向量地址寄存器 0-15 保存了 16
个向量 IRQ slot 的中断服务程序地址。
VICVectAddr1
向量地址 1 寄存器
R/W
0
0xFFFF F104
VICVectAddr2
向量地址 2 寄存器
R/W
0
0xFFFF F108
VICVectAddr3
向量地址 3 寄存器
R/W
0
0xFFFF F10C
VICVectAddr4
向量地址 4 寄存器
R/W
0
0xFFFF F110
VICVectAddr5
向量地址 5 寄存器
R/W
0
0xFFFF F114
VICVectAddr6
向量地址 6 寄存器
R/W
0
0xFFFF F118
VICVectAddr7
向量地址 7 寄存器
R/W
0
0xFFFF F11C
32
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
续上表
名称
描述
访问
复位值*
地址
VICVectAddr8
向量地址 8 寄存器
R/W
0
0xFFFF F120
VICVectAddr9
向量地址 9 寄存器
R/W
0
0xFFFF F124
VICVectAddr10 向量地址 10 寄存器
R/W
0
0xFFFF F128
VICVectAddr11 向量地址 11 寄存器
R/W
0
0xFFFF F12C
VICVectAddr12 向量地址 12 寄存器
R/W
0
0xFFFF F130
VICVectAddr13 向量地址 13 寄存器
R/W
0
0xFFFF F134
VICVectAddr14 向量地址 14 寄存器
R/W
0
0xFFFF F138
VICVectAddr15 向量地址 15 寄存器
R/W
0
0xFFFF F13C
R/W
0
0xFFFF F200
向量控制 0 寄存器。向量控制寄存器 0-15 分别控制
VICVectCntl0
16 个向量 IRQ slot 中的一个。Slot0 优先级最高,而
Slot15 优先级最低。
VICVectCntl1
向量控制 1 寄存器
R/W
0
0xFFFF F204
VICVectCntl2
向量控制 2 寄存器
R/W
0
0xFFFF F208
VICVectCntl3
向量控制 3 寄存器
R/W
0
0xFFFF F20C
VICVectCntl4
向量控制 4 寄存器
R/W
0
0xFFFF F210
VICVectCntl5
向量控制 5 寄存器
R/W
0
0xFFFF F214
VICVectCntl6
向量控制 6 寄存器
R/W
0
0xFFFF F218
VICVectCntl7
向量控制 7 寄存器
R/W
0
0xFFFF F21C
VICVectCntl8
向量控制 8 寄存器
R/W
0
0xFFFF F220
VICVectCntl9
向量控制 9 寄存器
R/W
0
0xFFFF F224
VICVectCntl10
向量控制 10 寄存器
R/W
0
0xFFFF F228
VICVectCntl11
向量控制 11 寄存器
R/W
0
0xFFFF F22C
VICVectCntl12
向量控制 12 寄存器
R/W
0
0xFFFF F230
VICVectCntl13
向量控制 13 寄存器
R/W
0
0xFFFF F234
VICVectCntl14
向量控制 14 寄存器
R/W
0
0xFFFF F238
VICVectCntl15
向量控制 15 寄存器
R/W
0
0xFFFF F23C
*
复位值仅指已使用位中保存的数据,不包括保留位的内容。
VIC 寄存器
这一节按照 VIC 逻辑中的使用顺序对 VIC 寄存器进行描述,该顺序为从那些与中断请求输入最密切的
寄存器到那些由软件所使用的最抽象的寄存器。对大多数人来说,这也是在学习 VIC 时读取寄存器的最佳
顺序。
软件中断寄存器(VICSoftInt - 0xFFFFF018,读/写)
在执行任何逻辑之前,将该寄存器的内容与 32 个不同外设的中断请求相或。
表 34
软件中断寄存器(VICSoftInt - 0xFFFFF018,读/写)
VICSoftInt 功能
31:0
复位值
1:强制产生与该位相关的中断请求。
0:不强制产生中断请求。向 VICSoftInt 写入 0 无效,见 VICSoftIntClear。
33
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
软件中断清零寄存器(VICSoftIntClear - 0xFFFFF01C,只写)
该寄存器在不需读取软件中断寄存器的情况下,可用软件清零软件中断寄存器中的一个或多个位。
表 35
软件中断清零寄存器(VICSoftIntClear - 0xFFFFF01C,只写)
VICSoftIntClear 功能
31:0
复位值
1:写入 1 清零软件中断寄存器的相应位,并解除强制的中断请求。
0:写入 0 不会影响 VICSoftInt 中的相应位。
0
所有中断状态寄存器(VICRawIntr - 0xFFFFF008,只读)
该寄存器读取所有 32 个中断请求和软件中断的状态,不管中断是否使能或分类。
表 36
所有中断状态寄存器(VICRawIntr - 0xFFFFF008,只读)
VICRawIntr 功能
31:0
复位值
1:对应位的中断请求或软件中断声明。
0:对应位的中断请求或软件中断未声明。
0
中断使能寄存器(VICIntEnable - 0xFFFFF010,读/写)
该寄存器使能分配为 FIQ 或 IRQ 的中断请求或软件中断。
表 37
中断使能寄存器(VICIntEnable - 0xFFFFF010,读/写)
VICIntEnable 功能
复位值
当读取该寄存器时,1 表示中断请求使能为 FIQ 或 IRQ。
31:0
当写该寄存器时,1 使能中断请求或软件中断分配为 FIQ 或 IRQ,0 无效。见
0
VICIntEnClear 寄存器(表 38)
,给出了中断禁止的方法。
中断使能清零寄存器(VICIntEnClear - 0xFFFFF014,只写)
该寄存器在不需要读取中断使能寄存器的情况下,可用软件清零其中的一个或多个位。
表 38
中断使能清零寄存器(VICIntEnClear - 0xFFFFF014,只写)
VICIntEnClr 功能
31:0
复位值
1:写入 1 清零中断使能寄存器中的对应位并禁止对应的中断请求。
0:写入 0 不影响中断使能寄存器中的位。
0
中断选择寄存器(VICIntSelect - 0xFFFFF00C,读/写)
该寄存器将 32 个中断请求分别分配为 FIQ 或 IRQ。
表 39
中断选择寄存器(VICIntSelect - 0xFFFFF00C,读/写)
VICIntSelect 功能
31:0
复位值
1:对应的中断请求分配为 FIQ。
0
0:对应的中断请求分配为 IRQ。
IRQ 状态寄存器(VICIRQStatus - 0xFFFFF000,只读)
该寄存器读取使能并分配为 IRQ 的中断请求的状态,它不对向量和非向量 IRQ 进行区分。
表 40
IRQ 状态寄存器(VICIRQStatus - 0xFFFFF000,只读)
VICIRQStatus 功能
31:0
复位值
1:对应位的中断请求使能并分配为 IRQ 并且声明。
0
FIQ 状态寄存器(VICFIQStatus - 0xFFFFF004,只读)
该寄存器读取使能并分配为 FIQ 的中断请求的状态。如果有超过一个请求分配为 FIQ,FIQ 服务程序
34
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
可读取该寄存器来确定是哪一个(几个)请求被激活。
表 41 FIQ 状态寄存器(VICFIQStatus - 0xFFFFF004,只读)
VICFIQStatus 功能
31:0
复位值
1:对应位的中断请求使能并分配为 FIQ 并且声明。
0
向量控制寄存器 0-15(VICVectCnt l0-15 - 0xFFFFF200-23C,读/写)
每一个寄存器控制 16 个向量 IRQ slot 中的一个。Slot0 优先级最高,Slot15 优先级最低。在 VICVectCntl
寄存器中禁止一个向量 IRQ slot 不会禁止中断本身,中断只是变为非向量的形式。
表 42
向量控制寄存器(VICVectCntl0-15 - 0xFFFFF200-23C,读/写)
VICVectCntl0-15 功能
5
复位值
1:向量 IRQ 使能,当分配的中断请求或软件中断使能,被分配为 IRQ 并声
明时,可产生一个唯一的 ISR 地址。
0
分配给此向量 IRQ slot 的中断请求或软件中断的编号。作为一个良好的编程
4:0
习惯,不要将把相同的中断编号分配给多于一个使能的向量 IRQ slot。但如
果这样做了,当中断请求或软件中断使能,被分配为 IRQ 并声明时,会使用
0
最低编号的 slot。
向量地址寄存器 0-15(VICVectAddr0-15 - 0xFFFFF100-13C,读/写)
这些寄存器保存 16 个向量 IRQ slot 中断服务程序的地址。
表 43
向量地址寄存器(VICVectAddr0-15 - 0xFFFFF100-13C,读/写)
VICVectAddr0-15 功能
复位值
当一个或多个中断请求或软件分配为向量 IRQ slot 的中断请求使能,分配为
31:0
IRQ 并声明时,IRQ 服务程序读取向量地址寄存器(VICVectAddr)时会得
0
到最高优先级 slot 寄存器的值。
默认向量地址寄存器(VICDefVectAddr - 0xFFFFF034,读/写)
这些寄存器保存非向量 IRQ 中断服务程序(ISR)的地址。
表 44
默认向量地址寄存器(VICDefVectAddr - 0xFFFFF034,读/写)
VICDefVectAddr 功能
31:0
复位值
当一个 IRQ 服务程序读取向量地址寄存器(VICVectAddr)
,并且没有 IRQ slot
响应时,则返回该寄存器中的地址。
0
向量地址寄存器(VICVectAddr - 0xFFFFF030,读/写)
当发生一个 IRQ 中断时。IRQ 服务程序可读取该寄存器并跳转到读出的地址。
表 45
向量地址寄存器(VICVectAddr - 0xFFFFF030,读/写)
VICVectAddr 功能
复位值
当任何分配给向量 IRQ slot 的中断请求或软件中断使能,分配为 IRQ 并声明时,
读取该寄存器将返回最高优先级 slot(最低编号)在向量地址寄存器中的地址。
31:0
否则返回默认向量地址寄存器中的地址。
由于写入该寄存器的设置值并不能在将来读出,因此,该寄存器应该在 ISR 快
结束时写入,以便更新优先级硬件。
保护使能寄存器(VICProtection - 0xFFFFF020,读/写)
运行在用户模式下的软件使用该 1 位寄存器来控制对 VIC 寄存器的访问。
35
0
广州周立功单片机发展有限公司 Tel: (020)38730976
表 46
38730977
Fax: 38730925
http://www.zlgmcu.com
保护使能寄存器(VICProtection - 0xFFFFF020,读/写)
VICProtection 功能
复位值
1:VIC 寄存器只能在特权模式下访问。
0
0
0:VIC 寄存器可在用户模式或特权模式下访问。
中断源
表 47 列出了每一个外设功能的中断源。每个外围设备都有一条中断线连接到向量中断控制器,但有些
可能拥有几个内部中断标志。单个中断标志也有可能代表一个以上的中断。
表 47
连接到向量中断控制器的中断源
模块
标志
VIC 通道#
看门狗中断(WDINT)
0
保留给软件中断
1
ARM 内核
EmbeddedICE, DbgCommRx
2
ARM 内核
EmbeddedICE, DbgCommTx
3
WDT
-
定时器 0
定时器 1
匹配 0-3(MR0, MR1, MR2, MR3)
捕获 0-3(CR0, CR1, CR2, CR3)
匹配 0-3(MR0, MR1, MR2, MR3)
捕获 0-3(CR0, CR1, CR2, CR3)
4
5
Rx 线状态(RLS)
UART0
发送保持寄存器空(THRE)
6
Rx 数据可用(RDA)
字符超时指示(CTI)
Rx 线状态(RLS)
发送保持寄存器空(THRE)
UART1
Rx 数据可用(RDA)
7
字符超时指示(CTI)
Modem 状态中断(MSI)1
PWM0
2
I C0
SPI0
匹配 0-6(MR0, MR1, MR2, MR3, MR4, MR5, MR6)
8
SI(状态改变)
9
SPI 中断标志(SPIF)
10
模式错误(MODF)
Tx FIFO 至少一半为空(TXRIS)
SPI1
(SSP)
Rx FIFO 至少一半为满(RXRIS)
接收超时条件(RTRIS)
11
接收溢出(RORRIS)
PLL
RTC
系统控制
A/D0
PLL 锁定(PLOCK)
12
计数器增加(RTCCIF)
13
报警(RTCALF)
外部中断 0(EINT0)
14
外部中断 1(EINT1)
15
外部中断 2(EINT2)
16
外部中断 3(EINT3)
17
A/D 转换器 0
18
36
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
续上表
模块
标志
2
1
VIC 通道#
I C1
SI(状态改变)
19
BOD
掉电检测
20
A/D1
A/D 转换器 1
21
仅适用于 LPC2138
nVICFIQIN
中断请求, 屏蔽和选择
非向量 FIQ 中断逻辑
SoftIntClear
[31:0]
IntEnableClear
[31:0]
SoftInt
[31:0]
IntEnable
[31:0]
nVICFIQ
FIQStatus
[31:0]
VICINT
SOURCE
[31:0]
FIQStatus
[31:0]
IRQStatus
[31:0]
RawInterrupt
[31:0]
向量中断 0
非向量 IRQ 中断逻辑
IRQStatus
[31:0]
IntSelect
[31:0]
优先级 0
VectorCntl[5:0]
向量中断 1
VectorAddr
[31:0]
优先级 1
硬件
优先级
逻辑
IRQ
VectAddr0[31:0]
VectIRQ1
VectAddr1[31:0]
优先级 14
nVICIRQ
最高优先级中断
的地址选择
VectorAddr
[31:0]
优先级 2
向量中断 15
NonVectIRQ
中断优先级逻辑
VectIRQ0
Source Enable
IRQ
VectIRQ15
VectAddr15[31:0]
VICVECT
ADDROUT
[31:0]
Default
VectorAddr
[31:0]
优先级 15
nVICIRQIN
VICVECTADDRIN[31:0]
图 14 向量中断控制器方框图
伪中断
由于异步中断处理的原因,伪中断可能出现在基于 ARM7TDMI 的微控制器-LPC2131/2132/2138 中。
中断处理的异步特性来源于内核和 VIC 的相互作用。如果在内核检测到中断和内核真正开始处理中断的过
程中 VIC 的状态发生改变,则产生中断的异步特性。
应用中可能经过以下步骤:
1)
VIC 判断是否有 IRQ 中断并向内核发送 IRQ 信号。
2)
内核保存 IRQ 状态。
3)
执行流水线的多个周期的处理。
4)
内核从 VIC 中装入 IRQ 地址。
另外,VIC 的状态可能在第 3 步就发生了变化。例如,VIC 的变化使得触发从第 1 步开始的时序的中
断不再是挂起中断,在运行的代码中禁止。此时,VIC 不能清除地识别产生中断请求的中断,最后只能返
37
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
回到 VicDefVectAddr (0xFFFF F034)默认中断。
这一系列的情况可通过下面两种方法来防止:
1. 编写应用程序来防止伪中断的产生。仅仅简单地对 VIC 状态进行监控还不够,因为当干扰出现在电平激
活方式的中断上也可能产生伪中断。
2. 应当正确设置和检测 VIC 默认处理器。
伪中断的详述和个案
本节的详细内容请登陆 ARM 官方网站( http://www.arm.com )。 FAQ 的“技术支持”链接为:
http://www.arm.com/support/faqip/3677.html。
当被禁能的中断产生时将出现怎样的情况?
应用范围:ARM7TDMI
如果在执行禁能中断指令时内核接收到中断请求,ARM7 系列器件仍然响应中断。这种情况出现在 IRQ
和 FIQ 中断中。
例如,假设正在执行下面的代码:
MRS
r0, cpsr
ORR
r0, r0, # I_Bit : OR : F_Bit
MSR
cpsr_c, r0
;禁止 IRQ 和 FIQ 中断
如果在执行 MSR 指令时接收到 IRQ 中断,则执行以下操作:
保存 IRQ 中断
执行 MSR cpsr , r0 指令来完成 CPSR 中 I 位和 F 位的设置
响应 IRQ 中断,因为 CPSR 的 I 位被置位前内核将对中断异常进行处理
CPSR(I 位和 F 位已被置位)的内容移入 SPSR_irq
这就意味着,在 IRQ 中断服务程序的入口,人们可以看到 IRQ 中断被处理的异常效果,SPSR 的 I 位
被置位。在上面的例子中,CPSR 和 SPSR 的 F 位都置位。表明在 IRQ 服务程序的入口处 FIQ 被禁止,FIQ
将一直被禁止直到重新被使能。FIQ 不能通过 IRQ 返回来自动重新使能。
尽管上例中的 IRQ 和 FIQ 中断都被禁止,但是如果两个中断类型中只有一种被禁止,出现的情况也与
之类似。执行完禁止 IRQ 的 MSR 指令后内核才对 IRQ 进行处理,这通常不会产生任何问题,因为只有中
断正好在一个周期之前到达才会被处理。当中断程序通过下面的指令返回时:
SUBS
pc , lr , #4
SPSR_IRQ 的值恢复到 CPSR。这时,CPSR 的 I 位和 F 位将被置位,所有中断禁能。
但是,这样会造成以下情况:
情况 1:调用一个特定程序,该程序可以是 IRQ 处理程序或普通程序。之后,系统必须保证 IRQ 在调
用程序之前被禁能。程序利用这个限制条件来决定调用方式(通过监测 SPSR 的 I 位状态)
,并使用合适的
指令返回。如果程序在执行禁能 IRQ 的 MSR 指令的过程中接收到 IRQ 时进入,置位 SPSR 的 I 位。因此,
程序不可能通过 IRQ 来进入。
情况 2:FIQ 和 IRQ 通过同一条写 CPSR 的指令来禁止。这时,如果在写 CPSR 过程中接收到 IRQ,
FIQ 将在执行 IRQ 处理程序时被禁止。这种情况不会出现在不允许 FIQ 禁能多个周期的系统中。
解决方案:这里推荐了 3 种解决方案。哪一种方案最合适取决于特定的系统要求。
方案 1:在中断服务程序之前增加类似于下面的代码:
SUB
lr , lr , #4
;调整 LR,指向返回
STMFD
sp! , {… , lr}
;指定使用的寄存器
MRS
lr , SPSR
;当中断禁止时,判断是否有中断产生
TST
lr , # I_Bit
;
38
广州周立功单片机发展有限公司 Tel: (020)38730976
LDMNEFD
sp! , {… , pc}^
38730977
Fax: 38730925
http://www.zlgmcu.com
;如果有中断产生,立即返回。
;由于该中断并未被响应,因此仍保持代处理状态,
;它将在下次使能时再被重新处理。
;以下为中断程序
这部分代码用于在写 CPSR 来禁止 IRQ 过程中检测 IRQ 中断的产生。如果检测到 IRQ,程序立即返回,
,也禁止后面的 IRQ。
从而使得 IRQ 不被响应(清除)
FIQ 处理程序也可使用类似的代码来解决情况 1。
由于该方案解决了上述的两种情况,因此推荐用户使用。但是,对于情况 2 的处理,该方案确实将 FIQ
禁止的最大时间延长了几个周期。
方案 2:分别使用两条写 CPSR 的指令来禁能 IRQ 和 FIQ
MRS
r0 , cpsr
ORR
r0 , r0 , # I_Bit
MSR
cpsr_c , r0
ORR
r0 , r0 , # F_Bit
MSR
cpsr_c , r0
;禁止 IRQ
;禁止 FIQ
当 FIQ 的禁能最长时间受到严格限制时,这是最好的一个方案(它根本不会延长 FIQ 的禁能时间)。
但是,该方案并不能解决情况 1,要解决情况 1,还必须在每条禁能 IRQ 和 FIQ 的指令前同时添加一些其
它指令。
方案 3:在 IRQ 处理程序的开始重新使能 FIQ。CPSR 的 C 的所有的位必须是可知的,最有效的方法
就是向 CPSR_c 写入一个立即数,例如:
MSR
cpsr_c , # I_Bit : OR : irq_MODE
;IRQ 应该禁能
;FIQ 使能
;ARM 状态,IRQ 模式
本方案只需要修改 IRQ 处理程序便可实现,它使得 FIQ 的重新使能比方案 1 更快。但是,当系统要求
IRQ 使能时 FIQ 不能禁能时,不能使用本方案。本方案不能解决情况 1。
VIC 使用事项
如果在片内 RAM 当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到片内地
址 0x0。这样做是因为所有的异常向量都位于地址 0x0 及以上。通过将寄存器 MEMMAP(位于系统控制模
块当中)配置为用户 RAM 模式来实现这一点。用户代码被连接以便使中断向量表 (IVT)装载到 0x4000
0000。
虽然可以选择多个中断源(通过 VICIntSelect)来产生 FIQ 请求,但是只有一个专门的中断服务程序来
服务响应所有可用/出现的 FIQ 请求。因此,如果分配为 FIQ 的中断多于一个,FIQ 中断服务程序就必须读
取 VICFIQStatus 的内容来决定如何处理中断请求。不过我们还是建议只将一个中断分配为 FIQ。多个 FIQ
中断源会增加中断延迟。
在中断服务程序执行完毕后,对外设中断标志的清零将会对 VIC 寄存器(VICRawlntr, VICFIQStatus
和 VICIRQStatus )当中的对应位产生影响。另外,为了能够服务下次中断,必须在中断返回之前对
VICVectAddr 寄存器执行写操作。该写操作将清零内部中断优先级硬件当中对应的中断标志。
通常要禁止 VIC 中断,必须清零 VICIntEnClr 寄存器中的对应位,该操作使 VICIntEnable 寄存器的对
应位清零。这同样应用于 VICSoftInt 和 VICSoftIntClear,VICSoftIntClear 将会使 VICSoftInt 中的对应位清
零。例如,如果 VICSoftInt=0x0000 0005 并且 bit0 必须清零,那么 VICSoftIntClear=0x0000 0001 可实现该
操 作 。 通 过 写 VICSoftIntClear 来 执 行 对 VICSoftInt 当 中 相 同 位 的 新 的 清 零 操 作 之 前 , 必 须 执 行
39
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
VICSoftIntClear=0x0000 0000。因此向 VICSoftIntClear 寄存器任何位写入 1 对目标寄存器都是一次有效。
如果看门狗只在溢出或无效喂狗时产生中断,那么无法清除中断。唯一的方法是通过 VICIntEnClr 禁
止 VIC 中断来实现中断返回。
举例:
假设 UART0 和 SPI0 产生中断请求,它们被分配为向量 IRQ(UART0 的优先级高于 SPI0)
,而 UART1
2
和 I C 产生非向量 IRQ,下面就是 VIC 一种可能的设定:
VICIntSelect = 0x0000 0000
(SPI0, I2C, UART1 和 UART0 为 IRQ => bit10, bit9, bit7 和 bit6=0)
VICIntEnable = 0x0000 06C0
(SPI0, I2C, UART1 和 UART0 中断使能 => bit10, bit9, bit 7 和 bit6=1)
VICDefVectAddr = 0x…
(保存服务非向量 IRQ 的程序地址 (即,UART1 和 I2C 的起始地址))
VICVectAddr0 = 0x…
(保存 UART0 IRQ 服务程序的起始地址)
VICVectAddr1 = 0x…
(保存 SPI0 IRQ 服务程序的起始地址)
VICVectCntl0 = 0x0000 0026
(VIC 通道号为 6(UART0)的中断源使能为优先级 0(最高级))
VICVectCntl1 = 0x0000 002A
(VIC 通道号为 10(SPI0)中断源使能为优先级 1)
2
在任何 IRQ 请求(SPI0, I C, UART0 或 UART1)产生之后,微控制器跳转到地址 0x00000018 执行代
码。对于向量和非向量 IRQ,可在地址 0x18 放入下面指令:
LDR
pc, [ pc, #-0xFF0 ]
该指令将 VICVectAddr 寄存器中保存的地址装入 PC。
一旦产生 UART0 请求,VICVectAddr 和 VICVectAddr0 相同。如果产生 SPI0 请求,中断服务程序的地
址保存在 VICVectAddr1 中。如果 UART0 和 SPI0 都没有产生 IRQ 请求,而 UART1 和/或 I2C 产生请求,
那么 VICVectAddr 的内容与 VICDefVectAddr 相同。
6.
管脚配置
LPC2131/2132/2138 的管脚分布
P0.21/PWM5/AD1.6 1/CAP1.3 1
48
P1 .20/TRACESYNC
P0 .22/AD1.71/CAP0.0/MAT0.0 2
47
P0.17/ CA P1.2/SCK 1/MAT1.2
RT XC1 3
46
P0.16/ EINT0/MAT0.2/CAP0.2
P1 .19/TRACEPKT 3 4
45
P0.15/ RI11/EINT2/AD1.5 1
RT XC2 5
44
P1 .21/PIPESTAT 0
VSS 6
43
VDD
VDDA 7
42
VSS
P1 .18/TRACEPKT 2 8
41
P0 .14/DCD1 1/EINT1/SDA1
P0.25/AD0.4/Aout2 9
40
P1 .22/PIPESTAT 1
P0 .26/AD0.5 10
39
P0 .13/DTR1 1/MAT1 .1/AD1 .41
P0 .27/AD0.0/CAP0 .1/MAT0 .1 11
38
P0.12/ DSR11/MAT1 .0/AD1.31
P1 .17/TRACEPKT 1 12
37
P0 .11/CT S1 1/CAP1.1/SCL1
P0 .28/AD0.1/CAP0 .2/MAT0 .2 13
36
P1 .23/PIPESTAT 2
P0 .29/AD0.2/CAP0 .3/MAT0 .3 14
35
P0 .10/RT S1 /CAP1.0/AD1 .21
P0.30/AD0.3/EI NT3 /CAP0 .0 15
34
P0.9/RxD1 /PWM6/EINT 3
P1 .16/TRACEPKT 0 16
33
P0.8/TxD1/ PWM4/AD1.1 1
(1)
仅适用 LPC2138。
(2)
仅适用 LPC2132/2138。
图 15
LPC2131/2132/2138 的 64 脚封装
40
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
LPC2131/2132/2138 的管脚描述
LPC2131/2132/2138 的管脚描述及其主要功能见下表。
表 48
LPC2131/2132/2138 的管脚描述
管脚
LQFP64
名称
管脚#
P0.0~P0.7
类型
描述
I/O
P0 口:P0 口是一个 32 位双向 I/O 口,每位的方向可单独控制。P0 口
共有 31 个管脚,可用作通用双向数字 I/O 口,但 P0.31 是一个仅为输
出口。P0 口的功能取决于管脚连接模块的管脚功能选择。
P0.24 脚未用。
注:除用作 A/D 输入的管脚外,所有 P0 管脚最大可承受 5V 的电压。
如果未使用 A/D 转换器, A/D 输入可用作可承受 5V 电压的数字 I/O
口。见“A/D 转换器”
。
19
O
P0.0
O
21
22
I
PWM1
P0.1
27
RxD0
UART0 发送输出端。
脉宽调制器输出 1。
UART0 接收输入端。
O
PWM3
脉宽调制器输出 3。
I
EINT0
外部中断 0 输入。
SCL0
I2C0 时钟输入/输出。
开漏输出(符合 I2C 规范)。
I/O
P0.2
I
26
TxD0
I/O
CAP0.0
P0.3
SDA0
定时器 0 的捕获输入通道 0。
I2C0 数据输入/输出。
开漏输出(符合 I2C 规范)。
O
MAT0.0
定时器 0 的匹配输出通道 0。
I
EINT1
外部中断 1 输入。
SCK0
SPI0 的串行时钟。SPI 时钟从主机输出,从机
I/O
P0.4
输入。
I
CAP0.1
I
AD0.6
定时器 0 的捕获输入通道 1。
A/D 转换器 0 输入 6。该模拟输入总是连接到
相应的管脚。
29
I/O
P0.5
MISO0
SPI0 主机输入从机输出端。从机到主机的数
据传输。
O
MAT0.1
I
AD0.7
定时器 0 的匹配输出通道 1。
A/D 转换器 0 输入 7。该模拟输入总是连接到
相应的管脚。
30
I/O
P0.6
MOSI0
SPI0 主机输出从机输入端。主机到从机的数
据传输。
I
CAP0.2
I
AD1.0
定时器 0 的捕获输入通道 2。
A/D 转换器 1 输入 0。该模拟输入总是连接到
。
相应的管脚(仅用于 LPC2138)
31
SSEL0
SPI0 从机选择。选择 SPI 接口用作从机。
O
PWM2
脉宽调制器输出 2。
I
EINT2
外部中断 2 输入。
I
P0.7
41
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
续上表
管脚
LQFP64
名称
管脚#
P0.8~P0.17
33
类型
O
描述
P0.8
TxD1
UART1 发送输出端。
O
PWM4
脉宽调制器输出 4。
I
AD1.1
A/D 转换器 1 输入 1。该模拟输入总是连接到
。
相应的管脚(仅用于 LPC2138)
34
35
I
P0.9
RxD1
UART1 接收输入端。
O
PWM6
脉宽调制器输出 6。
I
EINT3
外部中断 3 输入。
RTS1
UART1 请求发送输出端(仅用于 LPC2138)。
O
P0.10
I
CAP1.0
I
AD1.2
定时器 1 的捕获输入通道 0。
A/D 转换器 1 输入 2。该模拟输入总是连接到
。
相应的管脚(仅用于 LPC2138)
37
38
I
P0.11
CTS1
UART1 清除发送输入端(仅用于 LPC2138)。
定时器 1 的捕获输入通道 1。
I
CAP1.1
I/O
SCL1
I2C1 时钟输入/输出。开漏输出(符合 I2C 规范)
DSR1
UART1 数据设置就绪端(仅用于 LPC2138)。
I
P0.12
O
MAT1.0
I
AD1.3
定时器 1 的匹配输出通道 0。
A/D 转换器 1 输入 3。该模拟输入总是连接到
。
相应的管脚(仅用于 LPC2138)
39
O
P0.13
DTR1
O
MAT1.1
I
AD1.4
UART1 数据终端就绪。
定时器 1 的匹配输出通道 1。
A/D 转换器 1 输入 4。该模拟输入总是连接到
。
相应的管脚(仅用于 LPC2138)
41
I
P0.14
DCD1
UART1 数 据 载 波 检 测 输 入 ( 仅 用 于
LPC2138)
。
I
EINT1
外部中断 1 输入。
I/O
SDA1
I2C1 数据输入/输出。开漏输出(符合 I2C 规范)
重点: RESET 为低时,P0.14 的低电平将强制片内引导装载程
序复位后控制器件的操作。
45
I
P0.15
RI1
UART1 铃响指示输入(仅用于 LPC2138)
。
I
EINT2
外部中断 2 输入。
I
AD1.5
A/D 转换器 1 输入 5。该模拟输入总是连接到
。
相应的管脚(仅用于 LPC2138)
46
47
EINT0
外部中断 0 输入。
O
MAT0.2
定时器 0 的匹配输出通道 2。
I
CAP0.2
定时器 0 的捕获输入通道 2。
CAP1.2
定时器 1 的捕获输入通道 2。
I
I
I/O
P0.16
P0.17
SCK1
SPI1 串行时钟。SPI 时钟从主机输出或输入到
从机。
O
MAT1.2
42
定时器 1 的匹配输出通道 2。
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
管脚
LQFP64
名称
P0.18~P0.30
管脚#
53
类型
I
描述
P0.18
I/O
CAP1.3
定时器 1 的捕获输入通道 3。
MISO1
SPI1 主机输入从机输出端。数据输入 SPI 主
机或从 SPI 从机输出。
O
54
O
P0.19
I/O
MAT1.3
定时器 1 的匹配输出通道 3。
MAT1.2
定时器 1 的匹配输出通道 2。
MOSI1
SPI1 主机输出从机输入端。数据从 SPI 主机
输出或输入 SPI 从机。
CAP1.2
定时器 1 的捕获输入通道 2。
MAT1.3
定时器 1 的匹配输出通道 3。
I
SSEL1
SPI1 从机选择。选择 SPI 接口用作从机。
I
EINT3
外部中断 3 输入。
PWM5
脉宽调制器输出 5。
I
AD1.6
A/D 转换器 1 输入 6(仅用于 LPC2138)
I
CAP1.3
I
55
1
2
O
O
I
P0.20
P0.21
P0.22
AD1.7
定时器 1 的捕获输入通道 3。
A/D 转换器 1 输入 7。该模拟输入总是连接到
相应的管脚(仅用于 LPC2138)
I
CAP0.0
定时器 0 的捕获输入通道 0。
O
MAT0.0
定时器 0 的匹配输出通道 0。
58
I/O
P0.23
9
I
P0.25
通用数字输入-输出管脚。
AD0.4
A/D 转换器 0 输入 4。该模拟输入总是连接到
相应的管脚。
O
10
I
P0.26
Aout
D/A 转换器输出。
(仅用于 LPC2132/2138)
AD0.5
A/D 转换器 0 输入 5。该模拟输入总是连接到
相应的管脚。
11
I
P0.27
AD0.0
A/D 转换器 0 输入 0。该模拟输入总是连接到
相应的管脚。
13
I
CAP0.1
定时器 0 的捕获输入通道 1。
O
MAT0.1
定时器 0 的匹配输出通道 1。
I
P0.28
AD0.1
A/D 转换器 0 输入 1。该模拟输入总是连接到
相应的管脚。
14
I
CAP0.2
定时器 0 的捕获输入通道 2。
O
MAT0.2
定时器 0 的匹配输出通道 2。
I
P0.29
AD0.2
A/D 转换器 0 输入 2。该模拟输入总是连接到
相应的管脚。
15
I
CAP0.3
定时器 0 的捕获输入通道 3。
O
MAT0.3
定时器 0 的匹配输出通道 3。
I
P0.30
AD0.3
A/D 转换器 0 输入 3。该模拟输入总是连接到
相应的管脚。
I
EINT3
外部中断 3 输入。
I
CAP0.0
定时器 0 的捕获输入通道 0。
43
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
管脚
LQFP64
名称
管脚#
P0.31
17
P1.0~P1.31
类型
O
I/O
描述
通用数字输出管脚。
P0.31
P1 口:P1 口是一个 32 位双向 I/O 口,每位的方向可单独控制。P1 口
的功能取决于管脚连接模块的管脚功能选择。
注:所有 P1 口是内置有上拉电阻的最大可承受 5V 电压的 I/O 口,用
作输入口时可通过上拉电阻将输入电平置高。
P1.0~P1.5 不可用。
16
O
P1.16
TRACEPKT0
跟踪包位 0。带内部上拉的标准 I/O 口。
12
O
P1.17
TRACEPKT1
跟踪包位 1。带内部上拉的标准 I/O 口。
8
O
P1.18
TRACEPKT2
跟踪包位 2。带内部上拉的标准 I/O 口。
4
O
P1.19
TRACEPKT3
跟踪包位 3。带内部上拉的标准 I/O 口。
48
O
P1.20
TRACESYNC
跟踪同步。带内部上拉的标准 I/O 口。
重点: RESET 为低时,P1.20 的低电平使 P1.25:16 复位后用作
跟踪端口。
44
O
P1.21
PIPESTAT0
流水线状态位 0。带内部上拉的标准 I/O 口。
40
O
P1.22
PIPESTAT1
流水线状态位 1。带内部上拉的标准 I/O 口。
36
O
P1.23
PIPESTAT2
流水线状态位 2。带内部上拉的标准 I/O 口。
32
O
P1.24
TRACECLK
跟踪时钟。带内部上拉的标准 I/O 口。
28
I
P1.25
EXTIN0
24
I/O
P1.26
RTCK
外部触发输入。带内部上拉的标准 I/O 口。
返回的测试时钟输出。它是加载在 JTAG 接口
的额外信号。辅助调试器与处理器频率的变
化同步。它是带内部上拉的双向管脚。
重点: RESET 为低时,P1.26 的低电平使 P1.31:26 复位后用作
一个调试端口。
RESET
64
O
P1.27
TDO
JTAG 接口的测试数据输出。
60
I
P1.28
TDI
JTAG 接口的测试数据输入。
56
I
P1.29
TCK
JTAG 接口的测试时钟。
52
I
P1.30
TMS
JTAG 接口的测试模式选择。
20
I
P1.31
TRST
JTAG 接口的测试复位。
57
I
外部复位输入:当该管脚为低电平时,器件复位,I/O 口和外围功能进
入默认状态,处理器从地址 0 开始执行程序。具有迟滞作用的 TTL 电
平,管脚可承受 5V 电压。
XTAL1
62
I
振荡器电路和内部时钟发生电路的输入。
XTAL2
61
O
振荡放大器的输出。
RTCX1
3
I
RTC 振荡器电路的输入。
RTCX2
5
O
RTC 振荡放大器的输出。
Vss
6,18,25,
I
地:0V 电压参考点。
I
模拟地:0V 电压参考点。它与 Vss 的电压相同,但为了降低噪声和出
42,50
VSSA
59
错几率,两者应当隔离。
44
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
续上表
管脚
LQFP64
名称
管脚#
VDD
23,43,
类型
描述
I
3.3V 端口电源:内核和 I/O 口的电源电压。
I
模拟 3.3V 端口电源:它与 V3 的电压相同,但为了降低噪声和出错几率,
51
VDDA
7
两者应当隔离。该电压为片内 PLL 供电。
Vref
63
I
A/D 转换器参考电压:它与 V3 的电压相同,但为了降低噪声和出错几
率,两者应当隔离。该管脚上的电平用作 A/D 和 D/A 转换的参考电压。
Vbat
49
I
RTC 电源管脚。该管脚上的 3.3V 电压为 RTC 供电。
管脚连接模块
7.
特性
可实现独立的管脚配置
应用
管脚连接模块的用途是将微控制器管脚配置为需要的功能。
描述
管脚连接模块可以使微控制器的所选管脚具有 1 个以上的功能。配置寄存器控制多路开关来连接管脚
与片内外设。
外设在激活和任何相关中断使能之前必须连接到适当的管脚。任何使能的外设功能如果没有映射到相
关的管脚,则被认为是无效的。
当管脚只选择一个功能时,其它功能无效。
上述规则唯一的例外是管脚用作 A/D 转换器输入时。不论管脚选择何种功能,它都仍可用作 A/D 输入,
A/D 输入可随时被读取,管脚的电压变化都从 A/D 的读取值中反映出来。但是,只有选择模拟输入功能,
才能读出有效的模拟值。也只有这种情况下,管脚和 A/D 模块之间的接口电路才有效。其它情况下,执行
数字功能所必需的数字逻辑部分将有效,从而影响 A/D 转换器的正确操作。
寄存器描述
管脚控制模块包含 2 个寄存器,见表 49。
表 49
名称
管脚控制模块寄存器映射
描述
访问
复位值
地址
PINSEL0
管脚功能选择寄存器 0
读/写
0x0000 0000
0xE002C000
PINSEL1
管脚功能选择寄存器 1
读/写
0x0000 0000
0xE002C004
PINSEL2
管脚功能选择寄存器 2
读/写
见表 52
0xE002C014
管脚功能选择寄存器 0(PINSEL0 - 0xE002C000)
PINSEL0 寄存器按照表 53 当中的设定来控制管脚的功能。IO0DIR 寄存器中的方向控制位只有在管脚
选择 GPIO 功能时才有效。对于其它功能,方向是自动控制的。
45
广州周立功单片机发展有限公司 Tel: (020)38730976
表 50
PINSEL0
38730977
Fax: 38730925
http://www.zlgmcu.com
管脚功能选择寄存器 0(PINSEL0 – 0xE002C000)
管脚名称
00
01
10
11
复位
值
1:0
P0.0
GPIO P0.0
TxD(UART0)
PWM1
保留
00
3:2
P0.1
GPIO P0.1
RxD(UART0)
5:4
P0.2
GPIO P0.2
PWM3
EINT0
00
2
捕获 0.0(TIMER0)
保留
00
2
SCL0(I C)
7:6
P0.3
GPIO P0.3
SDA0(I C)
匹配 0.0(TIMER0)
EINT1
00
9:8
P0.4
GPIO P0.4
SCK(SPI0)
捕获 0.1(TIMER0)
AD0.6
00
11:10
P0.5
GPIO P0.5
MISO(SPI0)
匹配 0.1(TIMER0)
AD0.7
00
13:12
P0.6
GPIO P0.6
MOSI(SPI0)
捕获 0.2(TIMER0)
AD1.0(LPC2138)
00
15:14
P0.7
GPIO P0.7
SSEL(SPI0)
PWM2
EINT2
00
17:16
P0.8
GPIO P0.8
TxD UART1
PWM4
AD1.1(LPC2138)
00
19:18
P0.9
GPIO P0.9
RxD(UART1)
PWM6
EINT3
00
21:20
P0.10
GPIO
RTS(UART1)
捕获 1.0(TIMER1)
AD1.2(LPC2138)
00
P0.10
(LPC2138)
GPIO
CTS(UART1)
捕获 1.1(TIMER1)
SCL1(I2C1)
00
P0.11
(LPC2138)
GPIO
DSR(UART1)
匹配 1.0(TIMER1)
AD1.3(LPC2138)
00
P0.12
(LPC2138)
GPIO
DTR(UART1)
匹配 1.1(TIMER1)
AD1.4(LPC2138)
00
P0.13
(LPC2138)
GPIO
CD(UART1)
EINT1
SDA1(I2C1)
00
P0.14
(LPC2138)
GPIO
RI(UART1)
EINT2
AD1.5(LPC2138)
00
P0.15
(LPC2138)
23:22
25:24
27:26
29:28
31:30
P0.11
P0.12
P0.13
P0.14
P0.15
管脚功能选择寄存器 1(PINSEL1 - 0xE002C004)
PINSEL1 寄存器按照下表中的设定来控制管脚的功能。IO0DIR 寄存器中的方向控制位只有在管脚选
择 GPIO 功能时才有效。对于其它功能,方向是自动控制的。
表 51
管脚功能选择寄存器 1(PINSEL1 - 0xE002C004)
PINSEL1
管脚名称
00
01
10
11
复位值
1:0
P0.16
GPIO
EINT0
匹配
捕获
00
0.2(TIMER0)
0.2(TIMER0)
SCK(SSP)
匹配
P0.16
3:2
5:4
7:6
9:8
11:10
P0.17
P0.18
P0.19
P0.20
P0.21
GPIO
捕获
P0.17
1.2(TIMER1)
GPIO
捕获
P0.18
1.3(TIMER1)
GPIO
匹配
P0.19
1.2(TIMER1)
GPIO
匹配
P0.20
1.3(TIMER1)
GPIO
PWM5
1.2(TIMER1)
MISO(SSP)
匹配
匹配
00
1.3(TIMER1)
SSEL(SSP)
EINT3
00
AD1.6(LPC2138)
捕获
00
1.3(TIMER1)
46
00
1.3(TIMER1)
MOSI(SSP)
P0.21
00
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
PINSEL1
管脚名称
00
01
10
11
复位值
13:12
P0.22
GPIO
AD1.7(LPC2138)
捕获
匹配
00
0.0(TIMER0)
0.0(TIMER0)
保留
保留
保留
00
P0.22
15:14
P0.23
GPIO
P0.23
17:16
P0.24
保留
保留
保留
保留
00
19:18
P0.25
GPIO
AD0.4
Aout(DAC)
保留
00
P0.25
21:20
P0.26
23:22
P0.27
(LPC2132/2138)
保留
GPIO
P0.28
GPIO
P0.29
GPIO
P0.30
GPIO
0.1(TIMER0)
0.1(TIMER0)
捕获
匹配
0.2(TIMER0)
0.2(TIMER0)
捕获
匹配
0.3(TIMER0)
0.3(TIMER0)
EINT3
捕获
AD0.2
P0.29
29:28
匹配
AD0.1
P0.28
27:26
捕获
AD0.0
P0.27
25:24
00
AD0.3
P0.30
31:30
P0.31
GPI P0.31
00
00
00
00
0.0(TIMER0)
保留
保留
保留
00
管脚功能选择寄存器 2(PINSEL2 - 0xE002C014)
PINSEL2 寄存器按照表 52 当中的设定来控制管脚的功能。IO1DIR 寄存器中的方向控制位只有在管脚
选择 GPIO 功能时才有效。对于其它功能,方向是自动控制的。
警告:使用读-修改-写的方法来访问 PINSEL2 寄存器。对位 0~2 和/或位 3 的意外写操作会造成调
试和/或跟踪功能的丢失!将位 4 或位 5 的值从 1 变为 0 可能会造成错误代码的执行。
表 52
管脚功能选择寄存器 2(PINSEL2 – 0xE002C014)
描述
PINSEL2
1:0
复位值
保留,用户软件不应向保留位写入 1。
NA
该位为 0 时,P1.36:26 用作 GPIO 管脚。该位为 1 时,P1.31:26 用作一个调
2
P1.26/RTCK
试端口。
该位为 0 时,P1:25:16 用作 GPIO 管脚。该位为 1 时,P1.25:16 用作一个跟
3
踪端口。
31:4
P1.20 /
TRACESYNC
保留,用户软件不应向保留位写入 1。
NA
管脚功能选择寄存器值
PINSEL 寄存器控制下表中器件管脚的功能。每一对寄存器位对应一个特定的器件管脚。
表 53
管脚功能选择寄存器位
PINSEL0 和 PINSLE1 的值
功能
0
0
首选(默认)功能,通常为 GPIO 口
0
1
第一可选功能
1
0
第二可选功能
1
1
保留
复位值
00
47
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
只有当管脚选择 GPIO 功能时,IO0DIR/IO1DIR 寄存器的方向控制位才有效。其它功能的方向是自动
控制的。每个派生器件通常具有不同的管脚配置,因此每个管脚可能有不同的功能。详见对应的器件手册。
8.
GPIO
特性
单个位的方向控制
单独控制输出的置位和清零
所有 I/O 口在复位后默认为输入
应用
通用 I/O 口
驱动 LED 或其它指示器
控制片外器件
检测数字输入
管脚描述
表 54 GPIO 管脚描述
管脚名称
P0.0 – P0.31
类型
描述
输入/输出 通用 I/O 口。实际可用的 GPIO 数量取决于可选功能的使用。
P1.16-P1.31
寄存器描述
LPC2131/2132/2138 有 2 个 32 位的通用 I/O 口。P0 口的 32 个管脚中共有 30 个输入/输出管脚,1 个管
脚仅用作输出。P1 口有多达 16 个管脚可用作 GPIO 功能。PORT0 和 PORT1 由 2 组 (4 个) 寄存器控制,
如表 55 所示。
表 55 GPIO 寄存器映射
通用名称
IOPIN
描述
访问
GPIO 管脚值寄存器。不管方向和模式如何设
只读
复位值
NA
PORT0
PORT1
地址&名称
地址&名称
0xE0028000 0xE0028010
定,管脚的当前状态都可从该寄存器中读出。
IOSET
GPIO 输出置位寄存器。该寄存器和 IOCLR 寄
IO0PIN
读/写
存器一起控制输出管脚的状态。写入 1 使对应
0x0000
IO1PIN
0xE0028004 0xE0028014
0000
IO0SET
IO1SET
管脚输出高电平。写入 0 无效。
IODIR
GPIO 方向控制寄存器。该寄存器单独控制每
读/写
个 I/O 口的方向。
IOCLR
0x0000
0xE0028008 0xE0028018
0000
GPIO 输出清零寄存器。该寄存器控制输出管
只写
脚的状态。写入 1 使对应管脚输出低电平并清
0x0000
IO0DIR
IO1DIR
0xE002800C 0xE002801C
0000
IO0CLR
IO1CLR
零 IOSET 寄存器中的对应位。写入 0 无效。
GPIO 管脚值寄存器(IO0PIN - 0xE0028000,IO1PIN – 0xE0028010)
该寄存器提供 GPIO 管脚的值。它反映了外部环境仅对 GPIO 管脚的影响。IOPIN 寄存器不能监测非
GPIO 的管脚配置,因此不能使用 IOPIN 寄存器来指示非 GPIO 配置管脚的活动。
当管脚只选择一个功能时,其它功能无效。
48
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
上述规则唯一的例外是管脚用作 A/D 转换器输入时。不论管脚选择何种功能,它都仍可用作 A/D 输入,
A/D 输入可随时被读取,管脚的电压变化都从 A/D 的读取值中反映出来。但是,只有选择模拟输入功能,
才能读出有效的模拟值。也只有这种情况下,管脚和 A/D 模块之间的接口电路才有效。其它情况下,执行
数字功能所必需的数字逻辑部分将有效,从而影响 A/D 转换器的正确操作。
表 56 GPIO 管脚值寄存器(IO0PIN - 0xE0028000,IO1PIN – 0xE0028010)
IOPIN
31:0
描述
复位值
GPIO 管脚值位。IO0PIN 的位 0 对应于 P0.0 ... 位 31 对应于 P0.31
未定义
GPIO 输出置位寄存器(IO0SET - 0xE0028004,IO1SET – 0xE0028014)
当管脚配置为 GPIO 输出模式时,可使用该寄存器从管脚输出高电平。写入 1 使对应管脚输出高电平。
写入 0 无效。如果一个管脚被配置为输入或第二功能,写 IOSET 无效。
读 IOSET 寄存器返回 GPIO 输出寄存器中的值。该值由前一次对 IOSET 和 IOCLR(或前面提到的
IOPIN)的写操作决定。该值不反映任何外部环境对 I/O 管脚的影响。
表 57 GPIO 输出置位寄存器(IO0SET - 0xE0028004,IO1SET – 0xE0028014)
描述
IOSET
31:0
输出值 SET 位。IO0SET 的位 0 对应于 P0.0 ... 位 31 对应于 P0.31
复位值
0
GPIO 输出清零寄存器(IO0CLR - 0xE002800C,IO1CLR – 0xE002801C)
当管脚配置为 GPIO 输出模式时,可使用该寄存器从管脚输出低电平。写入 1 使对应管脚输出低电平
并清零 IOSET 寄存器中相应的位。写入 0 无效。如果一个管脚被配置为输入或第二功能,写 IOCLR 无效。
表 58 GPIO 输出清零寄存器(IO0CLR - 0xE002800C,IO1CLR – 0xE002801C)
描述
IOCLR
31:0
输出值 CLEAR 位。IO0CLR 的位 0 对应于 P0.0 ... 位 31 对应于 P0.31。
复位值
0
GPIO 方向寄存器(IO0DIR - 0xE0028008,IO1DIR – 0xE0028018)
当管脚配置为 GPIO 模式时,可使用该寄存器控制管脚的方向。任意管脚的方向位的设置必须与管脚
功能一致。
表 59 GPIO 方向寄存器(IO0DIR - 0xE0028008,IO1DIR – 0xE0028018)
IODIR
描述
复位值
31:0
方向控制位(0=输入,1=输出)
。IO0DIR 的位 0 控制 P0.0 ... 位 31 控制 P0.31
0
GPIO 使用注意事项
例 1:顺序访问 IOSET 和 IOCLR 寄存器对同一个 GPIO 管脚/位的影响。
GPIO 管脚配置的输出状态由写入 IOSET 和 IOCLR 寄存器的值决定。IOSET/IOCLR 两者中后访问的
寄存器将决定管脚的最终输出状态。
代码如下:
IO0DIR = 0x0000 0080
; P0.7 配置用作输出
IO0CLR = 0x0000 0080
; P0.7 输出为低
IO0SET = 0x0000 0080
; P0.7 输出为高
IO0CLR = 0x0000 0080
; P0.7 输出为低
先将 P0.7 设置成输出(写 IO0DIR 寄存器)
;然后,P0.7 输出设为低电平(先写 IO0CLR 寄存器)
;接
;最后,写 IO0CLR 寄存器又将 P0.7 输出设置成低电平。
着,P0.7 管脚上出现短高电平脉冲(写 IO0SET)
49
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
例 2:使 GPIO 管脚上输出瞬时的 0 和 1
先写 IOSET 再写 IOCLR 寄存器可使管脚先输出 1 再输出 0。有的系统允许两个有效输出之间存在这段
。这可通过写端
延时时间。但某些应用要求一个 GPIO 口的一组管脚同时输出一个二进制数(0 和 1 混合)
口的 IOPIN 寄存器来实现。
下面的代码所实现的功能是:P0.[31:16]和 P0.[7:0]输出保持不变的同时将 P0.[15:8]设置成 0xA5,不管
P0.[15:8]之前是何值:
IO0PIN=(IO0PIN && # 0xFFFF00FF)‖# 0x0000A500
写 IOSET/IOCLR 和 IOPIN
写 IOSET/IOCLR 寄存器很容易使所选输出管脚的状态同时变为高/低电平。只有 IOSET/IOCLR 中被写
入 1 的位对应的管脚才能设置为高/低电平,写入 0 的位对应的管脚的状态不发生改变。但是,仅通过写
IOSET 或 IOCLR 寄存器是不可能使一个 GPIO 口同时输出包含 0 和 1 的任意二进制数。
写 IOPIN 寄存器使能并行 GPIO 输出所需的瞬时值。写入 IOPIN 寄存器的二进制数据将影响整个并行
口的所有输出配置管脚:IOPIN 的位为 0 时使管脚输出低电平,IOPIN 的位为 1 时使管脚输出高电平。为
了改变一组端口管脚的输出,必须将 IOPIN 读出的内容和一个值相与(该值使要改变的管脚对应的位用 0
来屏蔽,其它管脚对应的位为 1)
。最后,再将相与的结果和期望得到的管脚输出对应的二进制数相或并将
相或的结果存回 IOPIN 寄存器。上面例 2 的等式中实现的功能是 P0.15~P0.8 输出 0xA5,P0 口的其它位的
状态保持不变。
9.
UART0
特性
16 字节收发 FIFO
寄存器位置符合’550 工业标准
接收器 FIFO 触发点可为 1, 4, 8 和 14 字节
内置波特率发生器
LPC2132/2138 包含使能实现软件流控制的机制
管脚描述
表 60 UART0 管脚描述
管脚名称
类型
描述
RxD0
输入
串行输入
串行接收数据
TxD0
输出
串行输出
串行发送数据
寄存器描述
表 61 UART0 寄存器映射
名称
描述
U0RBR 接收缓冲
BIT7
MSB
BIT6
BIT5
BIT4
BIT3
读数据
BIT2
BIT1
BIT0
访问
复位值*
LSB
RO
未定义
地址
0xE000C000
DLAB=0
U0THR 发送保持
MSB
0xE000C000
写数据
LSB
WO
NA
DLAB=0
除数锁存
U0DLL
0xE000C000
MSB
LSB
LSB
R/W
0x01
DLAB=1
50
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
名称
描述
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
访问
复位值*
LSB
R/W
0
除数锁存
U0DLM
0xE000C004
MSB
MSB
U0IER 中断使能
U0IIR
中断 ID
DLAB=1
使 能 R x 使能 THRE 使能 Rx 数据
0
0
FIFO 使能
FIFO
U0FCR
设置
线控制
U0LSR
线状态
0
0
Rx 触发
控制
U0LCR
地址
DLAB
0
0
0
IIR3
线状态中断 中
IIR2
复位
奇偶
停止位
使能
个数
FE
PE
偶选择
间隔
定
TEMT
THRE
IIR1
DLAB=0
0x01
0xE000C008
WO
0
0xE000C008
字长度选择
R/W
0
0xE000C00C
OE
DR
RO
0x60
0xE000C014
LSB
R/W
0
0xE000C01C
R/W
0x80
0xE000C030
复位
IIR0
0
RO
Tx FIFO Rx FIFO
保留
奇偶固
断 可用中断
0xE000C004
R/W
FIFO
使能
Rx FIFO
错误
U0SCR 高速缓存
MSB
U0TER 发送使能
TxEn
BI
保留[6:0]
* 复位值仅指已使用位中保存的数据,不包括保留位的内容。
UART0 包含 10 个 8 位寄存器,见表 61。除数锁存访问位(DLAB)位于 U0LCR7,它使能对除数锁
存的访问。
UART0 接收器缓存寄存器(U0RBR - 0xE000C000,DLAB=0,只读)
U0RBR 是 UART0 Rx FIFO 的最高字节。它包含了最早接收到的字符,可通过总线接口读出。LSB
(bit0)代表最早接收到的数据位。如果接收到的字符小于 8 位,未使用的 MSB 填充为 0。
如果要访问 U0RBR,U0LCR 的除数锁存访问位(DLAB)必须为 0。U0RBR 为只读寄存器。
由于 PE、FE 和 BI 位与 RBR FIFO 顶端的字节相对应(即下次读 RBR 时读出的字节)
,因此,将接收
的字节及其状态位成对读出的正确方法是先读 U0LSR 寄存器的内容,再读 U0RBR 的字节。
表 62 UART0 接收器缓存寄存器(U0RBR - 0xE000C000,DLAB=0,只读)
U0RBR
7:0
功能
描述
复位值
接收器缓存 UART0 接收器缓存寄存器包含 UART0 Rx FIFO 中最早接收到的字节
未定义
UART0 发送器保持寄存器(U0THR - 0xE000C000,DLAB=0,只写)
U0THR 是 UART0 Tx FIFO 的最高字节。它包含了 Tx FIFO 中最新的字符,可通过总线接口写入。LSB
代表最先发送的位。
如果要访问 U0THR,U0LCR 的除数锁存访问位(DLAB)必须为 0。U0THR 为只写寄存器。
表 63 UART0 发送器保持寄存器(U0THR - 0xE000C000,DLAB=0,只写)
U0THR
功能
7:0
发送器保持
描述
写 UART0 发送器保持寄存器使数据保存到 UART0 发送 FIFO 当中。
当字节到达 FIFO 的最底部并且发送器就绪时,该字节将被发送。
复位值
N/A
UART0 除数锁存 LSB 寄存器(U0DLL - 0xE000C000,DLAB=1)
UART0 除数锁存 MSB 寄存器(U0DLM - 0xE000C004,DLAB=1)
UART0 除数锁存是 UART0 波特率发生器的一部分,它保存了用于产生波特率时钟的 VPB 时钟(pclk)
分频值,波特率时钟必须是波特率的 16 倍。U0DLL 和 U0DLM 寄存器一起构成一个 16 位除数,U0DLL
包含除数的低 8 位,U0DLM 包含除数的高 8 位。值’h0000 被看作是’h0001,因为除数是不允许为 0 的。当
51
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
访问 UART0 除数锁存寄存器时,U0LCR 中的除数锁存访问位(DLAB)必须为 1。
表 64 UART0 除数锁存 LSB 寄存器(U0DLL - 0xE000C000,DLAB=1)
U0DLL
功能
除数锁存
7:0
描述
复位值
UART0 除数锁存 LSB 寄存器与 U0DLM 寄存器一起决定 UART0 的波
LSB 寄存器 特率。
0x01
表 65 UART0 除数锁存 MSB 寄存器(U0DLM - 0xE000C004,DLAB=1)
U0DLM
功能
除数锁存
7:0
描述
复位值
UART0 除数锁存 MSB 寄存器与 U0DLL 寄存器一起决定 UART0 的波
MSB 寄存器 特率。
0
UART0 中断使能寄存器(U0IER - 0xE000C004,DLAB=0)
U0IER 用于使能 4 个 UART0 中断源。
表 66 UART0 中断使能寄存器(U0IER – 0xE000C004,DLAB=0)
U0IER
0
1
功能
RBR 中断
使能
THRE 中断
使能
描述
复位值
0:禁止 RDA 中断
1:使能 RDA 中断
0
U0IER0 使能 UART0 接收数据可用中断。
它还控制字符接收超时中断。
0:禁止 THRE 中断
1:使能 THRE 中断
0
U0IER1 使能 UART0 THRE 中断。该中断的状态可从 U0LSR5 读出。
0:禁止 Rx 线状态中断
2
Rx 线状态
1:使能 Rx 线状态中断
中断使能
U0IER2 使能 UART0 Rx 线状态中断。该中断的状态可从 U0LSR[4:1]
0
读出。
7:3
保留
保留,用户软件不要向保留位写入 1。从保留位读出的值未被定义。
NA
UART0 中断标识寄存器(U0IIR - 0xE000C008,只读)
U0IIR 提供状态代码用于指示一个挂起中断的中断源和优先级。在访问 U0IIR 过程中,中断被冻结。
如果在访问 U0IIR 时产生了中断,该中断被记录,下次 U0IIR 访问可读出。
表 67 UART0 中断标识寄存器(U0IIR - 0xE000C008,只读)
U0IIR
功能
描述
复位值
0:至少有 1 个中断被挂起
0
中断挂起
1:没有挂起的中断
1
U0IIR0 为低有效。挂起的中断可通过 U0IER3:1 确定。
011:1. 接收线状态(RLS)
010:2a. 接收数据可用(RDA)
3:1
中断标识
110:2b. 字符超时指示(CTI)
001:3. THRE 中断
0
U0IER3 指示对应于 UART0 Rx FIFO 的中断。
上面未列出的 U0IER3:1
的其它组合都为保留值(000, 100, 101, 111)
5:4
保留
7:6
FIFO 使能
保留,用户软件不要向保留位写入 1。从保留位读出的值未被定义。
这些位等效于 U0FCR0
NA
0
52
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
中断的处理见表 68。给定了 U0IIR[3:0]的状态,中断处理程序就能确定中断源以及如何清除激活的中
断。在退出中断服务程序之前,必须读取 U0IIR 来清除中断。
UART0 RLS 中断(U0IIR3:1=011)是最高优先级的中断。只要 UART0 Rx 输入产生 4 个错误条件(溢
、奇偶错误(PE)
、帧错误(FE)和间隔中断(BI)
)中的任意一个,该中断标志将置位。产
出错误(OE)
生该中断的 UART0 Rx 错误条件可通过查看 U0LSR4:1 得到。当读取 U0LSR 时清除中断。
UART0 RDA 中断(U0IIR3:1=010)与 CTI 中断(U0IIR3:1=110)共用第二优先级。当 UART0 Rx FIFO
到达 U0FCR7:6 所定义的触发点时,RDA 被激活。当 UART0 Rx FIFO 的深度低于触发点时,RDA 复位。
当 RDA 中断激活时,CPU 可读出由触发点所定义的数据块。
CTI 中断(U0IIR3:1=110)为第二优先级中断。当 UART0 Rx FIFO 包含至少 1 个字符并且在接收 3.5
到 4.5 字符的时间内没有发生 UART0 Rx FIFO 动作时,该中断置位。UART0 Rx FIFO 的任何动作(读或写
UART0 RSR)都将清除该中断。在接收到的信息不是触发值的倍数后,CTI 中断将会清空 UART0 RBR。
例如,如果一个外设想要发送一个 105 个字符的信息,而触发值为 10 个字符,那么前 100 个字符将使 CPU
接收 10 个 RDA 中断,而剩下的 5 个字符使 CPU 接收 1 到 5 个 CTI 中断(取决于服务程序)
。
表 68 UART0 中断处理
U0IIR[3:0] 优先级
0001
-
0110
最高
中断类型
无
中断源
无
-
Rx 线状态/错误 OE, PE, FE, 或 BI
U0LSR 读操作
Rx 数据可用或 FIFO 模式下(U0FCR0=1)到达触发
0100
第二
中断复位
Rx 数据可用
U0RBR 读或
UART0 FIFO 低
点
于触发值
Rx FIFO 包含至少 1 个字符并且在一段时间内无字
符输入或移出,该时间的长短取决于 FIFO 中的字符
1100
第二
字符超时指示 数以及(在 3.5 到 4.5 字符的时间内)设置的触发值。 U0RBR 读操作
实际的时间为:
[(字长度)×7-2]×8+[(触发值-字符数)×8+1]RCLK
THRE
0010
第三
U0IIR 读(如果
是中断源)或
THRE
THR 写操作
注:“0000”, “0011”, “0101”, “0111”, “1000”, “1001”, “1010”, “1011”, “1101”, “1110”, “1111”为保留值。
UART0 THRE 中断(U0IIR3:1=001)为第三优先级中断。当 UART0 THR FIFO 为空并且满足特定的初始
化条件时,该中断激活。这些初始化条件将使 UART0 THR FIFO 被数据填充,以免在系统启动时产生许多
THRE 中断。初始化条件在 THRE=1 时实现了一个字符的延时减去停止位并在上一次 THRE=1 事件之后没
有在 U0THR 中存在至少 2 个字符。在没有译码和服务 THRE 中断时,该延迟为 CPU 提供了将数据写入
U0THR 的时间。如果 UART0 THR FIFO 中曾经有两个或更多字符,而当前 U0THR 为空时,THRE 中断立
即设置。当发生 U0THR 写操作或 U0IIR 读操作并且 THRE 为最高优先级中断(U0IIR3:1=001)时,THRE
中断复位。
UART0 FIFO 控制寄存器(U0FCR - 0xE000C008)
U0FCR 控制 UART0 Rx 和 Tx FIFO 的操作。
表 69 UART0 FIFO 控制寄存器(U0FCR - 0xE000C008)
U0FCR
功能
描述
复位值
高电平使能对 UART0 Rx 和 Tx FIFO 以及 U0FCR7:1 的访问。该位必
0
FIFO 使能
须置位以实现正确的 UART0 操作。该位的任何变化都将使 UART0
FIFO 自动清空。
53
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
U0FCR
功能
描述
1
Rx FIFO 复位
2
Tx FIFO 复位
5:3
保留
复位值
写 1 到 U0FCR1 将清零 UART0 Rx FIFO 中的所有字节并复位指针逻
辑。该位自动清零。
写 1 到 U0FCR2 将清零 UART0 Tx FIFO 中的所有字节并复位指针逻
辑。该位自动清零。
保留,用户软件不要向保留位写入 1。从保留位读出的值未被定义。
0
0
NA
00:触发点 0(1 个字符或 0x01h)
01:触发点 1(4 个字符或 0x04h)
7:6
Rx 触发选择
10:触发点 2(8 个字符或 0x08h)
11:触发点 3(14 个字符或 0x0eh)
0
这两个位决定在激活中断之前,接收器 UART0 FIFO 必须写入多少个
字符。
UART0 线控制寄存器(U0LCR - 0xE000C00C)
U0LCR 决定发送和接收数据字符的格式。
表 70 UART0 线控制寄存器(U0LCR - 0xE000C00C)
U0LCR
功能
描述
复位值
00:5 位字符长度
1:0
字长度选择
01:6 位字符长度
0
10:7 位字符长度
11:8 位字符长度
2
停止位选择
3
奇偶使能
0:1 个停止位
1:2 个停止位(如果 U0LCR[1:0]=00 则为 1.5)
0:禁止奇偶产生和校验
0
0
1:使能奇偶产生和校验
00:奇数
5:4
奇偶选择
01:偶数
0
10:强制为“1”
,奇偶固定
11:强制为“0”
,奇偶固定
0:禁止间隔发送
6
间隔控制
1:使能间隔发送
0
当 U0LCR6 为高电平有效时,输出管脚 UART0 TxD 强制为逻辑 0。
7
除数锁存访问位
0:禁止访问除数锁存
0
1:使能访问除数锁存
UART0 线状态寄存器(U0LSR - 0xE000C014,只读)
U0LSR 为只读寄存器,它提供 UART0 Tx 和 Rx 模块的状态信息。
表 71 UART0 线状态寄存器(U0LSR – 0xE000C014,只读)
U0LSR
功能
接收器数据
0
就绪
(RDR)
描述
复位值
0:U0RBR 为空
1:U0RBR 包含有效数据
当 U0RBR 包含未读取的字符时,U0LSR0 置位;当 UART0 RBR FIFO 为
空时,U0LSR0 清零。
54
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
U0LSR
功能
描述
复位值
溢出错误条件在错误发生后立即设置。U0LSR 读操作清零 U0LSR1。当
0
0:溢出错误状态未激活
溢出错误
1
(OE)
1:溢出错误状态激活
UART0 RSR 已经有新的字符组合而 UART0 RBR FIFO 已满时,U0LSR1
置位。此时 UART0 RBR FIFO 不会被覆盖,UART0 RSR 中的字符将丢失。
0:奇偶错误状态未激活
奇偶错误
2
(PE)
1:奇偶错误状态激活
当接收字符的奇偶位处于错误状态时产生一个奇偶错误。U0LSR 读操作
0
清零 U0LSR2 位。奇偶错误检测时间取决于 U0FCR0。奇偶错误与 UART0
RBR FIFO 中顶部的字符相关。
0:帧错误状态未激活
1:帧错误状态激活
帧错误
3
(FE)
当接收字符的停止位为 0 时,产生帧错误。U0LSR 读操作清零 U0LSR3。
帧错误检测时间取决于 U0FCR0。帧错误与 UART0 RBR FIFO 中顶部的
0
字符相关。当检测到一个帧错误时,Rx 将尝试与数据重新同步并假设错
误的停止位实际是一个超前的起始位。但即使没有出现帧错误,它也不能
假设下一个接收到的字节是正确的。
0:间隔中断状态未激活
1:间隔中断状态激活
间隔中断
4
(BI)
在发送整个字符(起始位、数据、奇偶位和停止位)过程中 RxD0 如果都
保持逻辑 0,则产生间隔中断。当检测到间隔条件时,接收器立即进入空
0
闲状态直到 RxD0 变为全 1 状态。U0LSR 读操作清零该状态位。间隔检
测的时间取决于 U0FCR0。间隔中断与 UART0 RBR FIFO 中顶部的字符
相关。
发送器保持 0:U0THR 包含有效数据
5
寄存器空
1:U0THR 为空
1
(THRE) 当检测到 UART0 THR 空时,THRE 置位,U0THR 写操作清零该位。
0:U0THR 和/或 U0TSR 包含有效数据
发送器空
6
1:U0THR 和 U0TSR 为空
(TEMT) 当 U0THR 和 U0TSR 都为空时,TEMT 置位。当 U0TSR 或 U0THR 包含
1
有效数据时,TEMT 清零。
0:U0RBR 中没有 UART0 Rx 错误,或 U0FCR0=0
7
Rx FIFO 错
误(RXFE)
1:UART0 RBR 包含至少一个 UART0 Rx 错误
当一个带有 Rx 错误(例如帧错误、奇偶错误或间隔中断)的字符装入
0
U0RBR 时,U0LSR7 置位。当读取 U0LSR 寄存器并且 UART0 FIFO 中不
再有错误时,U0LSR7 清零。
UART0 高速缓存寄存器(U0SCR – 0xE000C01C)
在 UART0 操作时 U0SCR 无效。
用户可自由对该寄存器进行读或写。
不提供中断接口向主机指示 U0SCR
所发生的读或写操作。
55
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 72 UART0 高速缓存寄存器(U0SCR – 0xE000C01C)
U0SCR
功能
7:0
-
描述
复位值
一个可读可写的字节
0
UART0 波特率计算
例 1 :使用 UART0baudrate 公式,假设系统的 pclk = 20MHz ,如果 U0DL=130 ( U0DLM=0x00 和
U0DLL=0x82)
、DivAddVal=0 和 MulVal=1,则可得出 UART0 的 UART0baudrate=9615baud。
例 2 : 使 用 UART0baudrate 公 式 , 假 设 系 统的 pclk = 20MHz , 如 果 U0DL=93 ( U0DLM=0x00 和
U0DLL=0x5D)
、DivAddVal=2 和 MulVal=5,则可得出 UART0 的 UART0baudrate=9600baud。
表 73
外围时钟为 20MHz 时的波特率(pclk)
期望的波特率
U0DLM:U0DLL1)
50
25000
75
%error2)
期望的波特率
U0DLM:U0DLL1)
0.0000
4800
260
0.1600
16667
0.0020
7200
174
0.2240
110
11364
0.0032
9600
130
0.1600
134.5
9294
0.0034
19200
65
0.1600
150
8333
0.0040
38400
33
1.3760
300
4167
0.0080
56000
22
1.4400
600
2083
0.0160
57600
22
1.3760
1200
1042
0.0320
112000
11
1.4400
1800
694
0.0640
115200
11
1.3760
2000
625
0.0000
224000
6
7.5200
2400
521
0.0320
448000
3
7.5200
3600
347
0.0640
1)
这一行的值是 16 位{DLM:DLL}的等效十进制值。
2)
期望波特率和实际波特率的百分比误差。
%error2)
UART0 发送使能寄存器(U0TER – 0xE0010030)
LPC2132/2138 的 U0TER 使能实现软件流控制。当 TxEn=1 时,只要数据可用,UART0 发送器就将持
续发送数据。一旦 TxEn 变为 0,UART0 发送器立刻停止工作。
表 74 描述了如何利用 TxEn 位来实现软件流控制。
表 74 UART0 发送使能寄存器(U0TER – 0xE0010030)
U0TER
功能
描述
复位值
6:0
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
7
TxEn
该位为 1 时(复位后)
,一旦以前的数据都被发送后,写入 THR
0x01
的数据输出到 TxD 管脚。如果一个字符正在发送时该位清零,
则结束这个字符的发送,不再发送其它字符,直到该位重新置位。
换言之,该位为 0 将终止 THR 或 Tx FIFO 到发送移位寄存器的
字符传输。当接收到 XOFF 字符(DC3)时,软件(可实现软件
握手)将该位清零。当接收到 XON 字符(DC1)时,软件又能
将该位重新置位。
结构
UART0 的结构如下方框图所示。
VPB 接口提供 CPU 或主机与 UART0 之间的通信连接。
56
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
UART0 接收器模块 U0Rx 监视串行输入线 RxD0 的有效输入。UART0 Rx 移位寄存器(U0RSR)通过
RxD0 接收有效的字符。当 U0RSR 接收到一个有效字符后,它将该字符传送到 UART0 Rx 缓存寄存器 FIFO
中,等待 CPU 或主机通过主机接口进行访问。
UART0 发送器模块 U0Tx 接收 CPU 或主机写入的数据并将数据缓存到 UART0 Tx 保持寄存器 FIFO
(U0THR)中。UART0 Tx 移位寄存器(U0TSR)读取 U0THR 中的数据并将数据通过串行输出管脚 TxD0
发送。
UART0 波特率发生器模块 U0BRG 产生 UART0 Tx 模块所使用的定时。U0BRG 模块时钟源为 VPB 时
钟(pclk)
。主时钟与 U0DLL 和 U0DLM 寄存器所定义的除数相除得到 UART0 Tx 模块使用的时钟。该时
钟为 16 倍过采样时钟 NBAUDOUT。
中断接口包含寄存器 U0IER 和 U0IIR。中断接口接收几个由 U0Tx 和 U0Rx 模块发出的单时钟宽度的
使能信号。
U0Tx 和 U0Rx 的状态信息保存在 U0LSR 中。U0Tx 和 U0Rx 的控制信息保存在 U0LCR 中。
U0Tx
U0THR
NTXRDY
TxD0
U0TSR
U0BRG
U0DLL
NBAUDOUT
U0DLM
RCLK
U0Rx
中断
U0RBR
NRXRDY
U0RSR
RxD0
U0IER
U0INTR
U0IIR
U0FCR
U0LSR
U0SCR
U0LCR
LCR
PA[2:0]
PSEL
PSTB
PWRITE
VPB 接口
PD[7:0]
AR
MR
pclk
图 16
LPC2131/2132/2138 UART0 方框图
10. UART1
特性
UART1 与 UART0 相同,只是增加了一个调制解调器(modem)接口
16 字节接收和发送 FIFO
寄存器位置符合’550 工业标准
接收器 FIFO 触发点可为 1, 4, 8 和 14 字节
57
DDIS
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
内置波特率发生器
包含标准调制解调器接口信号(仅为 LPC2138)
LPC2131/2132/2138 UART1 包含使能实现软件或硬件流控制的机制
管脚描述
表 75 UART1 管脚描述
管脚名称
类型
RxD1
输入
串行输入
串行接收数据
TxD1
输出
串行输出
串行发送数据
输入
清零发送 有效低电平信号指示外部 modem 的接收是否已经准备就绪,UART1 数据
CTS1
(1)
描述
可通过 TxD1 发送。在 modem 接口的正常操作中(U1MCR4=0),该信号的补码保存在
U1MSR4 中。
状态改变信息保存在 U1MSR0 中,
如果第 4 优先级中断使能(U1IER3=1),
该信息将作为中断源。
DCD1
(1)
输入
数据载波检测 有效低信号指示外部 modem 是否已经与 UART1 建立了通信连接,可
以进行数据交换。在 modem 接口的正常操作中(U1MCR4=0),该信号的补码保存在
U1MSR7 中。
状态改变信息保存在 U1MSR3 中,
如果第 4 优先级中断使能(U1IER3=1),
该信息将作为中断源。
(1)
输入
DSR1
数据设备就绪 有效低电平指示外部 modem 是否准备建立与 UART1 的通信连接。在
modem 接口的正常操作中(U1MCR4=0),该信号的补码保存在 U1MSR5 中。状态改
变信息保存在 U1MSR1 中,如果第 4 优先级中断使能(U1IER3=1),该信息将作为中
断源。
DTR1
(1)
输出
数据终端就绪 有效低电平指示 UART1 准备建立与外部 modem 的连接。该信号的补
码保存在 U1MCR0 中。
(1)
输入
RI1
铃响指示 有效低电平指示 modem 检测到电话的响铃信号。在 modem 接口的正常操
作中(U1MCR4=0),该信号的补码保存在 U1MSR6 中。状态改变信息保存在 U1MSR2
中,如果第 4 优先级中断使能(U1IER3=1),该信息将作为中断源。
(1)
输出
RTS1
请求发送 有效低电平指示 UART1 打算向外部 modem 发送数据。该信号的补码保存
在 U1MCR1 中。
(1) 仅为 LPC2138。
寄存器描述
表 76 UART1 寄存器映射
名称
描述
BIT7
U1RBR
接收缓存
MSB
BIT6
BIT5
BIT4
BIT3
读数据
BIT2
BIT1
BIT0
LSB
访问 复位值*
RO
未定义
地址
0xE0010000
DLAB=0
U1THR
发送保持
MSB
0xE0010000
写数据
LSB
WO
NA
DLAB=0
除数锁存
U1DLL
0xE0010000
MSB
LSB
R/W
0
LSB
DLAB=1
除数锁存
U1DLM
0xE0010004
MSB
LSB
MSB
R/W
0
DLAB=1
58
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
BIT1
BIT0
访问 复位值*
使能
使能 Rx 数
接上表
名称
描述
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
Modem 状 使能 Rx
U1IER
中断使能
0
0
0
0
(1)
U1IIR
中断 ID
FIFO 使能
FIFO
U1FCR
Rx 触发
控制
U1LCR
线控制
U1MCR
Modem 控
DLAB
制
U1LSR
线状态
0
IIR3
中断
断
断
IIR2
IIR1
IIR0
Tx FIFO Rx FIFO
保留
-
复位
复位
0
DLAB=0
RO
0x01
0xE0010008
WO
0
0xE0010008
R/W
0
0xE001000C
FIFO
使能
设置
奇偶
偶
奇偶
停止位
间隔
固定
选择
使能
个数
0
0
0
0
RTS
DTR
R/W
0
0xE0010010
FE
PE
OE
DR
RO
0x60
0xE0010014
RO
0
0xE0010018
R/W
0
0xE001001C
R/W
0x80
0xE0010030
字长度选择
环路
0
(1)
0
0xE0010004
态,中断 线,状态 THRE 中 据,可用中 R/W
使能
地址
回送
Rx FIFO
错误
U1MSR(1) Modem 状态
DCD
U1SCR
高速缓存
MSB
U1TER
发送使能
TxEn
TEMT THRE
RI
DSR
BI
CTS Delta DCD 后沿 RI Delta DSR Delta CTS
LSB
保留[6:0]
* 复位值仅指已使用位中保存的数据,不包括保留位的内容。
* 仅为 LPC2138。
UART1 包含 14 个 8 位和 32 位的寄存器,见表 76。除数锁存访问位(DLAB)位于 U1LCR7,它使能
对除数锁存的访问。
UART1 接收器缓存寄存器(U1RBR - 0xE0010000,DLAB=0,只读)
U1RBR 是 UART1 Rx FIFO 的最高字节。
它包含了最早接收到的字符,
可通过总线接口读出。
LSB(bit0)
代表最早接收到的数据位。如果接收到的字符小于 8 位,未使用的 MSB 填充为 0。
如果要访问 U1RBR,U1LCR 的除数锁存访问位(DLAB)必须为 0。U1RBR 为只读寄存器。
由于 PE、FE 和 BI 位与 RBR FIFO 顶端的字节相对应(即下次读 RBR 时读出的字节)
,因此,将接收
的字节及其状态位成对读出的正确方法是先读 U1LSR,再读 U1RBR。
表 77 UART1 接收器缓存寄存器(U1RBR - 0xE0010000,DLAB=0,只读)
U1RBR
7:0
功能
描述
接收器缓存 接收器缓存寄存器包含 UART1 Rx FIFO 当中最早接收到的字节
复位值
未定义
UART1 发送器保持寄存器(U1THR - 0xE0010000,DLAB=0,只写)
U1THR 是 UART1 Tx FIFO 的最高字节。它包含了 Tx FIFO 中最新的字符,可通过总线接口写入。LSB
代表最先发送的位。
如果要访问 U1THR,U1LCR 的除数锁存访问位(DLAB)必须为 0。U1THR 为只写寄存器。
表 78 UART1 发送器保持寄存器(U1THR - 0xE0010000,DLAB=0,只写)
U1THR
7:0
功能
描述
复位值
发送保持寄 写发送器保持寄存器使数据保存到 UART1 发送 FIFO 当中。当字节
存器
到达 FIFO 的最底部并且发送器就绪时,该字节将被发送。
59
N/A
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
UART1 除数锁存 LSB 寄存器(U1DLL - 0xE0010000,DLAB=1)
UART1 除数锁存 MSB 寄存器(U1DLM - 0xE0010004,DLAB=1)
UART1 的除数锁存是波特率发生器的一部分,它保存了用于产生波特率时钟的 VPB 时钟(pclk)分频
值,波特率时钟必须是波特率的 16 倍。U1DLL 和 U1DLM 寄存器一起构成一个 16 位除数,U1DLL 包含
除数的低 8 位,U1DLM 包含除数的高 8 位。值’h0000 被看作是’h0001,因为除数是不允许为 0 的。当访问
UART1 除数锁存寄存器时,
U1LCR 的除数锁存访问位
(DLAB)
必须为 1。
如何选取合适的 U1DLL 和 U1DLM
值详见本章后面的内容。
表 79 UART1 除数锁存 LSB 寄存器(U1DLL - 0xE0010000,DLAB=1)
U1DLL
功能
除数锁存
7:0
描述
复位值
UART1 除数锁存 LSB 寄存器与 U1DLM 寄存器一起决定 UART1 的波
0x01
LSB 寄存器 特率。
表 80 UART1 除数锁存 MSB 寄存器(U1DLM - 0xE0010004,DLAB=1)
U1DLM
功能
除数锁存
7:0
描述
复位值
UART1 除数锁存 MSB 寄存器与 U1DLL 寄存器一起决定 UART1 的波
MSB 寄存器 特率。
0
UART1 中断使能寄存器(U1IER - 0xE0010004,DLAB=0)
U1IER 用于使能 4 个中断源。
表 81 UART1 中断使能寄存器(U1IER - 0xE0010004,DLAB=0)
U1IER
0
1
2
功能
RBR 中断
使能
THRE 中断
使能
Rx 线状态
中断使能
描述
复位值
0:禁止 RDA 中断
1:使能 RDA 中断
0
U1IER0 使能 UART1 的接收数据可用中断。它还控制着接收超时中断。
0:禁止 THRE 中断
1:使能 THRE 中断
0
U1IER1 使能 UART1 的 THRE 中断。该中断的状态可从 U1LSR5 读出。
0:禁止 Rx 线状态中断
1:使能 Rx 线状态中断
0
U1IER2 使能 UART1 Rx 线状态中断。
该中断的状态可从 U1LSR[4:1]读出。
Modem 状 0:禁止 Modem 中断
3
态中断使能 1:使能 Modem 中断
(1)
0
U1IER3 使能 modem 中断。中断的状态可从 U1MSR[3:0]读取。
(1)仅为 LPC2138。
UART1 中断标识寄存器(U1IIR - 0xE0010008,只读)
U1IIR 提供状态代码用于指示一个挂起中断的中断源和优先级。在访问 U1IIR 过程中,中断被冻结。
如果在访问 U1IIR 时产生了中断,该中断被记录,下次 U1IIR 访问可读出。
表 82 UART1 中断标识寄存器(U1IIR - 0xE0010008,只读)
U1IIR
功能
描述
复位值
0:至少有 1 个中断被挂起
0
中断挂起
1:没有挂起的中断
1
注意 U1IIR0 为低有效。挂起的中断可通过 U1IIR3:1 确定。
60
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
U1IIR
功能
描述
复位值
011:1. 接收线状态(RLS)
010:2a. 接收数据可用(RDA)
110:2b. 字符超时指示(CTI)
3:1
中断标识
001:3. THRE 中断
0
(1)
000:4. Modem 中断
U1IER3 指示对应于 UART1 Rx FIFO 和 modem 信号的中断。上面未列
出的 U1IER3:1 的其它组合都为保留值(100, 101, 111)
5:4
保留
7:6
FIFO 使能
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
这些位等效于 U1FCR0
0
(1)仅为 LPC2138。
中断的处理见表 83。给定了 U1IIR[3:0]的状态,中断处理程序就能确定中断源以及如何清除激活的中
断。在退出中断服务程序之前,必须读取 U1IIR 来清除中断。
UART1 RLS 中断(U1IIR3:1=011)是最高优先级的中断。只要 UART1 Rx 输入产生 4 个错误条件(溢
、奇偶错误(PE)
、帧错误(FE)和间隔中断(BI)
)中的任意一个,该中断标志将置位。产
出错误(OE)
生该中断的 UART1 Rx 错误条件可通过查看 U1LSR4:1 得到。当读取 U1LSR 时清除中断。
UART1 RDA 中断(U1IIR3:1=010)与 CTI 中断(U1IIR3:1=110)共用第二优先级。当 UART1 Rx FIFO
到达 U1FCR7:6 所定义的触发点时,RDA 被激活。当 UART1 Rx FIFO 的深度低于触发点时,RDA 复位。
当 RDA 中断激活时,CPU 可读出由触发点所定义的数据块。
CTI 中断(U1IIR3:1=110)为第二优先级中断。当 UART1 Rx FIFO 包含至少 1 个字符并且在接收 3.5
到 4.5 字符的时间内没有发生 UART1 Rx FIFO 动作时,产生该中断。UART1 Rx FIFO 的任何动作(读或写
UART1 RSR)都将清除该中断。当接收到的信息不是触发值的倍数时,CTI 中断将会清空 UART1 RBR。
例如,如果一个外设想要发送一个 105 个字符的信息,而触发值为 10 个字符,那么前 100 个字符将使 CPU
接收 10 个 RDA 中断,而剩下的 5 个字符使 CPU 接收 1 到 5 个 CTI 中断(取决于服务程序)
。
表 83 UART1 中断处理
U1IIR[3:0] 优先级
0001
-
0110
最高
0100
第二
中断类型
无
中断源
中断复位
无
-
Rx 线状态/错误 OE, PE, FE, 或 BI
U1LSR 读操作
Rx 数据可用
Rx 数据可用或 FIFO 模式下(FCR0=1)到达触发点
U1RBR 读或
FIFO 低于触发值
Rx FIFO 包含至少 1 个字符并且在一段时间内无字
符输入或移出,该时间的长短取决于 FIFO 中的字
1100
第二
字符超时指示 符数以及(在 3.5 到 4.5 字符的时间内)设置的触发 U1RBR 读操作
值。实际的时间为:
[(字长度)×7-2]×8+[(触发值-字符数)×8+1]RCLK
U1IIR 读 (如果
THRE
0010
第三
是中断源)或
THRE
THR 写操作
(1)
0000
第四
Modem 状态 CTS, DSR, RI 或 DCD
MSR 读操作
注:“0011”, “0101”, “0111”, “1000”, “1001”, “1010”, “1011”, “1101”, “1110”, “1111”为保留值。
(1) 仅为 LPC2138。
“0011”, “0101”, “0111”, “1000”, “1001”, “1010”, “1011”, “1101”, “1110”, “1111”为保留值。
61
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
UART1 THRE 中断(U1IIR3:1=001)为第三优先级中断。当 UART1 THR FIFO 为空并且满足特定的初始
化条件时,该中断激活。这些初始化条件将使 UART1 THR FIFO 被数据填充,以免在系统启动时产生许多
THRE 中断。初始化条件在 THRE=1 时实现了一个字符的延时减去停止位并在上一次 THRE=1 事件之后没
有在 U1THR 中存在至少 2 个字符。在没有译码和服务 THRE 中断时,该延迟为 CPU 提供了将数据写入
U1THR 的时间。如果 UART1 THR FIFO 中曾经有两个或更多字符,而当前 U1THR 为空时,THRE 中断立
即设置。当发生 U1THR 写操作或 U1IIR 读操作并且 THRE 为最高优先级中断(U1IIR3:1=001)时,THRE
中断复位。
Modem 中断(U1IIR3:1=000)仅用于 LPC2138。它是最低优先级中断,只要在 modem 输入管脚、DCD、
DSR 或 CTS 上发生任何状态变化,该中断就会激活。此外,modem 输入口 RI 上低到高电平的跳变会产生
一个 modem 中断。modem 中断源可通过检查 U1MSR3:0 得到。读取 U1MSR 将清除 modem 中断。
UART1 FIFO 控制寄存器(U1FCR - 0xE0010008)
U1FCR 控制 UART1 Rx 和 Tx FIFO 的操作。
表 84 UART1 FIFO 控制寄存器(U1FCR - 0xE0010008)
U1FCR
功能
描述
复位值
高电平使能对 UART1 Rx 和 Tx FIFO 以及 U1FCR7:1 的访问。该位必
0
FIFO 使能
须置位以实现正确的 UART1 操作。该位的任何变化都将使 UART1
0
FIFO 清空。
1
Rx FIFO 复位
2
Tx FIFO 复位
5:3
保留
该位置位会清零 UART1 Rx FIFO 中的所有字节并复位指针逻辑。该位
自动清零。
该位置位会清零 UART1 Tx FIFO 中的所有字节并复位指针逻辑。该位
自动清零。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
0
NA
00:触发点 0(1 个字符或 0x01h)
01:触发点 1(4 个字符或 0x04h)
7:6
Rx 触发选择
10:触发点 2(8 个字符或 0x08h)
0
11:触发点 3(14 个字符或 0x0eh)
这两个位决定在激活中断之前,UART1 FIFO 必须写入多少个字符。
UART1 线控制寄存器(U1LCR - 0xE001000C)
U1LCR 决定发送和接收数据字符的格式。
表 85 UART1 线控制寄存器(U1LCR - 0xE001000C)
U1LCR
功能
描述
复位值
00:5 位字符长度
1:0
字长度选择
01:6 位字符长度
0
10:7 位字符长度
11:8 位字符长度
2
停止位选择
3
奇偶使能
0:1 个停止位
1:2 个停止位(如果 U1LCR[1:0]=00 则为 1.5)
0:禁止奇偶产生和校验
1:使能奇偶产生和校验
62
0
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
U1LCR
功能
描述
复位值
00:奇数
5:4
奇偶选择
01:偶数
0
10:强制为 1
11:强制为 0
0:禁止间隔发送
6
间隔控制
1:使能间隔发送
0
当 U1LCR6=1 时,输出管脚 UART1 TxD 强制为逻辑 0。
7
除数锁存访问位
0:禁止访问除数锁存
0
1:使能访问除数锁存
UART1 Modem 控制寄存器(U1MCR - 0xE0010010)(仅为 LPC2138)
U1MCR 使能 modem 的回写模式并控制 modem 的输出信号。
表 86
UART1 Modem 控制寄存器(U1MCR - 0xE0010010)
(仅为 LPC2138)
U1MCR
功能
0
描述
复位值
DTR 控制
选择 modem 输出管脚 DTR。该位在回写模式激活时读出为 0。
0
1
RTS 控制
选择 modem 输出管脚 RTS。该位在回写模式激活时读出为 0。
0
2
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
3
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
0:禁止 modem 回写模式
1:使能 modem 回写模式
modem 回写模式提供了一个执行回写测试的诊断机制。发送器输出
的串行数据在内部连接到接收器的串行输入端。输入脚 RxD1 对回写
4
回写模式选择
4 个 modem 输入
(CTS,
模式无影响,
输出脚 TxD1 保持总为 1 的状态。
DSR, RI 和 DCD)与外部断开。从外部来看,modem 的输出端(RTS,
0
DTR)无效。在内部,4 个 modem 输出连接到 4 个 modem 输入。这
样连接的结果是 U1MSR 的高 4 位由 U1MCR 的低 4 位驱动,而不是
在正常模式下由 4 个 modem 输入驱动。这样在回写模式下,写
U1MCR 的低 4 位就可产生 modem 状态中断。
UART1 线状态寄存器(U1LSR – 0xE0010014,只读)
U1LSR 为只读寄存器,它提供 UART1 Tx 和 Rx 模块的状态信息。
表 87 UART1 线状态寄存器(U1LSR – 0xE0010014,只读)
U1LSR
功能
接收数据
0
就绪
(RDR)
描述
复位值
0:U1RBR 为空
1:U1RBR 包含有效数据
当 U1RBR 包含未读取的字符时,U1LSR0 置位;当 UART1 RBR FIFO 为
0
空时,U1LSR0 清零。
0:溢出错误状态未激活
溢出错误
1
(OE)
1:溢出错误状态激活
溢出错误条件在错误发生后立即设置。U1LSR 读操作清零 U1LSR1。当
UART1 RSR 已经有新的字符就绪而 UART1 RBR FIFO 已满时,U1LSR1
置位。此时 UART1 RBR FIFO 不会被覆盖,UART1 RSR 中的字符将丢失。
63
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
功能
U1LSR
描述
复位值
当接收字符的奇偶位处于错误状态时产生一个奇偶错误。U1LSR 读操作
0
0:奇偶错误状态未激活
奇偶错误
2
(PE)
1:奇偶错误状态激活
清零 U1LSR2 位。奇偶错误检测时间取决于 U1FCR0。奇偶错误与 UART1
RBR FIFO 中顶部的字符相关。
0:帧错误状态未激活
1:帧错误状态激活
3
帧错误
当接收字符的停止位为 0 时,产生帧错误。U1LSR 读操作清零 U1LSR3。
(FE)
帧错误检测时间取决于 U1FCR0。帧错误与 UART1 RBR FIFO 中顶部的
0
字符相关。当检测到一个帧错误时,Rx 将尝试与数据重新同步并假设错
误的停止位实际是一个超前的起始位。
0:间隔中断状态未激活
1:间隔中断状态激活
间隔中断
4
(BI)
在发送整个字符(起始位、数据、奇偶位和停止位)过程中 RxD1 如果都
保持逻辑 0,则产生间隔中断。当检测到间隔条件时,接收器立即进入空
0
闲状态直到 RxD1 变为全 1 状态。U1LSR 读操作清零该状态位。间隔检
测的时间取决于 U1FCR0。间隔中断与 UART1 RBR FIFO 中读出的字符
相关。
5
发送保持
0:U1THR 包含有效数据
寄存器空
1:U1THR 空
1
(THRE) 当检测到 U1THR 空时,THRE 置位,U1THR 写操作清零该位。
0:U1THR 和/或 U1TSR 包含有效数据
发送器空
6
1:U1THR 和 U1TSR 空
(TEMT) 当 THR 和 TSR 都为空时,TEMT 置位。当 U1TSR 或 U1THR 包含有效
1
数据时,TEMT 清零。
0:U1RBR 中没有 UART1 Rx 错误,或 U1FCR0=0
7
Rx FIFO 错
误(RXFE)
1:U1RBR 包含至少一个 UART1 Rx 错误
当一个带有 Rx 错误(例如帧错误、奇偶错误或间隔中断)的字符装入
0
U1RBR 时,U1LSR7 置位。当读取 U1LSR 寄存器并且 UART1 FIFO 中不
再有错误时,U1LSR7 清零。
UART1 Modem 状态寄存器(U1MSR - 0x0E0010018)(仅为 LPC2138)
U1MSR 是一个只读寄存器,它提供 modem 输入信号的状态信息。U1MSR3:0 在读取 U1MSR 时清零。
需要注意的是,modem 信号对 UART1 的操作没有直接影响,modem 信号的操作是通过软件来实现的。
表 88
U1MSR
UART1 Modem 状态寄存器位描述(U1MSR - 0x0xE0010018)(仅为 LPC2138)
功能
描述
复位值
0:没有检测到 modem 输入 CTS 上的状态变化
0
Delta CTS
1:检测到 modem 输入 CTS 上的状态变化
0
当输入 CTS 状态发生变化时,该位置位。读取 U1MSR 时清零。
0:没有检测到 modem 输入 DSR 上的状态变化
1
Delta DSR
1:检测到 modem 输入 DSR 上的状态变化
当输入 DSR 状态发生变化时,该位置位。读取 U1MSR 时清零。
64
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
U1MSR
功能
描述
复位值
0:没有检测到 modem 输入 RI 上的状态变化
后沿 RI
2
1:检测到 modem 输入 RI 上低到高的跳变
0
当输入 RI 发生低到高的跳变时,该位置位。读取 U1MSR 时清零。
0:没有检测到 modem 输入 DCD 上的状态变化
3
Delta DCD
1:检测到 modem 输入 DCD 上的状态变化
0
当输入 DCD 状态发生变化时,该位置位。读取 U1MSR 时清零。
清零发送状态
4
CTS
5
DSR
6
RI
7
DCD
输入信号 CTS 的补码。在回写模式下,该位连接到
0
U1MCR[1]。
数据设备就绪状态 输入信号 DSR 的补码。在回写模式下,该位连接
0
到 U1MCR[0]。
响铃指示状态
输入信号 RI 的补码。在回写模式下,该位连接到
0
U1MCR[2]。
数据载波检测状态 输入信号 DCD 的补码。在回写模式下,该位连接
0
到 U1MCR[3]。
UART1 高速缓存寄存器(U1SCR - 0xE001001C)
在 UART1 操作时 U1SCR 无效。
用户可自由对该寄存器进行读或写。
不提供中断接口向主机指示 U1SCR
所发生的读或写操作。
表 89 UART1 高速缓存寄存器(U1SCR - 0xE001001C)
U1SCR
功能
7:0
-
描述
复位值
一个可读可写的字节
0
UART1 波特率计算
例 1 :使用 UART1baudrate 公式,假设系统的 pclk = 20MHz ,如果 U1DL=130 ( U1DLM=0x00 和
U1DLL=0x82)
、DivAddVal=0 和 MulVal=1,则可得出 UART1 的 UART1baudrate=9615baud。
例 2 : 使 用 UART1baudrate 公 式 , 假 设 系 统的 pclk = 20MHz , 如 果 U1DL=93 ( U1DLM=0x00 和
U1DLL=0x5D)
、DivAddVal=2 和 MulVal=5,则可得出 UART1 的 UART1baudrate=9600baud。
表 90
外围时钟为 20MHz 时的波特率(pclk)
期望的波特率
U1DLM:U1DLL1)
50
25000
75
1)
%error2)
期望的波特率
U1DLM:U1DLL1)
0.0000
4800
260
0.1600
16667
0.0020
7200
174
0.2240
110
11364
0.0032
9600
130
0.1600
134.5
9294
0.0034
19200
65
0.1600
150
8333
0.0040
38400
33
1.3760
300
4167
0.0080
56000
22
1.4400
600
2083
0.0160
57600
22
1.3760
1200
1042
0.0320
112000
11
1.4400
1800
694
0.0640
115200
11
1.3760
2000
625
0.0000
224000
6
7.5200
2400
521
0.0320
448000
3
7.5200
3600
347
0.0640
这一行的值是 16 位{DLM:DLL}的等效十进制值。
65
%error2)
广州周立功单片机发展有限公司 Tel: (020)38730976
2)
38730977
Fax: 38730925
http://www.zlgmcu.com
期望波特率和实际波特率的百分比误差。
UART1 发送使能寄存器(U1TER – 0xE0010030)
LPC2131/2132/2138 的 UART1 使能实现软件和硬件流控制。当 TxEn=1 时,只要数据可用,UART1
发送器就将持续发送数据。一旦 TxEn 变为 0,UART1 发送器立刻停止工作。
表 91 UART1 发送使能寄存器(U1TER – 0xE0010030)
U1TER
功能
描述
复位值
6:0
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
7
TxEn
该位为 1(复位值)时,如果以前的数据都被发送后,写入 THR
0x01
的数据输出到 TxD 管脚。如果一个字符正在发送时该位清零,
则结束这个字符的发送,后面的字符也不再发送,直到该位重新
置位。换言之,该位为 0 将终止 THR 或 Tx FIFO 到发送移位寄
存器的字符传输。当检测到硬件握手 Tx- 允许信号( LPC2138:
CTS-其它的任何 GPIO/外部中断线)出错或利用软件握手接收到
一个 XOFF 字符(DC3)时,软件将该位清零。当检测到正确的
Tx-允许信号或接收到 XON 字符(DC1)时,软件又能将该位重
新置位。
结构
UART1 的结构如下方框图所示。
VPB 接口提供 CPU 或主机与 UART1 之间的通信连接。
UART1 接收器模块 U1Rx 监视串行输入线 RxD1 的有效输入。UART1 Rx 移位寄存器(U1RSR)通过
RxD1 接受有效的字符。当 U1RSR 接收到一个有效字符时,它将该字符传送到 UART1 Rx 缓存寄存器 FIFO
中,等待 CPU 或主机通过主机接口进行访问。
UART1 发送器模块 U1Tx 接受 CPU 或主机写入的数据并将数据缓存到 UART1 Tx 保持寄存器 FIFO
(U1THR)中。UART1 Tx 移位寄存器(U1TSR)读取 U1THR 中的数据并将数据通过串行输出管脚 TxD1 发
送。
UART1 波特率发生器模块 U1BRG 产生 UART1 Tx 模块所使用的定时。U1BRG 模块时钟源为 VPB 时
。主时钟与 U1DLL 和 U1DLM 寄存器所定义的除数相除得到 Tx 模块使用的时钟。该时钟为 16
钟(pclk)
倍过采样时钟 NBAUDOUT。
Modem 接口包含寄存器 U1MCR 和 U1MSR。该接口负责一个 modem 外设与 UART1 之间的握手。
中断接口包含寄存器 U1IER 和 U1IIR。中断接口接收几个由 U1Tx,U1Rx 和 modem 模块发出的单时
钟宽度的使能信号。
U1Tx 和 U1Rx 的状态信息保存在 U1LSR 中。U1Tx 和 U1Rx 的控制信息保存在 U1LCR 中。
66
广州周立功单片机发展有限公司 Tel: (020)38730976
CTS
38730977
MODEM
U1Tx
DSR
RI
Fax: 38730925
U1THR
http://www.zlgmcu.com
NTXRDY
TxD1
U1TSR
U1MSR
DCD
U1BRG
DTR
U1DLL
RTS
NBAUDOUT
U1MCR
U1DLM
RCLK
U1Rx
中断
U1RBR
U1INTR
U1RSR
NRXRDY
RxD1
U1IER
U1IIR
U1FCR
U1LSR
U1SCR
U1LCR
LCR
PA[2:0]
PSEL
PSTB
PWRITE
PD[7:0]
VPB 接口
DDIS
AR
MR
pclk
图 17 UART1 方框图
I2C 接口 I2C0 和 I2C1
11.
特性:
标准的 I2C 总线接口,可配置为主机,从机或主/从机
同时发送的主机之间进行仲裁,避免了总线数据的冲突
可编程时钟,实现了 I2C 传输速率的调节
主机从机之间双向数据传输
串行时钟同步使器件在一条串行总线上实现不同位速率的通信
串行时钟同步可作为握手机制使串行传输挂起和恢复
I2C 总线可用于测试和诊断
应用
与外部标准 I2C 部件接口,例如串行 RAM、LCD、音调发生器等等
描述
I2C 总线的典型配置如图 18 所示。根据方向位(R/W)状态的不同,I2C 总线上存在以下两种类型的数据
传输:
从主发送器向从接收器发送数据。主机发送的第一个字节是从机地址。接下来是数据字节流。从
机每接收一个字节返回一个应答位。
67
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
从发送器向主接收器发送数据。第一个字节(从地址)由主机发送。从机返回一个应答位。接下来
从机向主机发送数据字节。主机每接收一个字节返回一个应答位。接收完最后一个字节,主机返
回一个“非应答位”。主器件产生所有串行时钟脉冲和起始以及停止条件。出现停止条件或重复
的起始条件时传输结束。由于重复的起始条件同时是下一个串行发送的开始,因此 I2C 总线不会
被释放。
LPC2131/2132/2138 提供字节方式的 I2C 接口。它有 4 种操作模式:主发送器模式、主接收器模式、从
发送器模式和从接收器模式。
I2C 接口完全符合整个 I2C 规范,支持断开到 LPC2131/2132/2138 的连接而不影响同一 I2C 总线上的其
它器件(见“快速模式”标题下的“I2C 总线规范”描述,注意微控制器数据手册中的标题为“F/S 模式的
I2C 总线器件的 SDA 和 SCL I/O 特性”的表)
。此功能有时很有用,但它实际上限制了 I2C 接口不使用时相
同管脚的交替使用。当一个微控制器中包含多个 I2C 接口时该功能几乎不用。
上拉
电阻
上拉
电阻
SDA
I2C Bus
SCL
SDA
SCL
其它具有I2C接口
的器件
LPC2131/2132/2138
其它具有I2C接口
的器件
图 18 I2C 总线配置
管脚描述
表 92
I2C 管脚描述
管脚名称
类型
描述
SDA0, 1
输入/输出
I2C 串行数据
SCL0, 1
输入/输出
I2C 串行时钟
I2C 操作模式
在一个给定的应用中,I2C 模块可用作主机、从机或同时用作主机和从机。在从机模式中,I2C 硬件查
找其自身的从地址和通用调用地址。如果检测到其中的一个地址,则产生中断请求。如果处理器想成为总
线主机,在进入主机模式前硬件必须等到总线空闲,以便不中止从机操作。如果在主机模式中总线仲裁丢
失,则 I2C 模块立刻切换到从机模式并在相同的串行传输中检测自身的从机地址。
主发送器模式:
在该模式中,数据从主机发送到从机。在进入主发送器模式之前,I2CONSET 必须按照图 19 进行初始
化。必须置位 I2EN 来使能 I2C 功能。如果 AA 位为 0,而另一个器件成为总线的主控器时,I2C 将不会对
任何地址产生应答。也就是说它无法进入从模式。STA,STO 和 SI 必须设置为 0。向 I2CONCLR 寄存器中
的 SIC 位写入 1 可清零 SI。
68
广州周立功单片机发展有限公司 Tel: (020)38730976
I2CONSET
38730977
Fax: 38730925
http://www.zlgmcu.com
7
6
5
4
3
2
1
0
-
I2EN
STA
STO
SI
AA
-
-
-
1
0
0
0
0
-
-
图 19 主模式配置
第一个发送的字节包含接收器件的从地址(7 位)和数据方向位。在此模式下,数据方向位(R/W)应
当为 0 表示执行写操作。因此第一个发送的字节为从地址和写方向位。数据的发送每次为 8 位。每发送完
一个字节,都接收到一个应答位。起始和停止条件用于指示串行传输的起始和结束。
通过软件置位 STA 进入 I2C 主发送器模式。I2C 逻辑在总线空闲后立即发送一个起始条件。当发送完
起始条件后,SI 置位。此时 I2STAT 中的状态代码应当为 08H。该状态代码用于指向一个中断服务程序。
,然后清零 SI 位。向 I2CONCLR 寄存器中的 SIC
该中断程序将从地址和写方向位装入 I2DAT(数据寄存器)
位写入 1 可清零 SI。
当从地址和 R/W 位已发送且接收到应答位之后,SI 位再次置位,并且对于主模式,可能的状态代码为
18H,20H 或 38H,如果从模式使能(AA=1)
,可能的状态代码为 68H,78H 或 0B0H。每个状态代码对应
的执行动作如表 102 到表 105 所示。
从地址
S
R/W
数据
A
数据
A
A/A
P
传输的数据
(n个字节+应答)
"0" - 写
"1" - 读
A = 应答(SDA为低)
A = 非应答(SDA为高)
S = 起始条件
P = 停止条件
主机到从机
从机到主机
图 20 主发送器模式中的格式
主接收器模式
在主接收器模式中,数据字节接收自从发送器。传输的初始化与主发送器模式相同。发送完起始条件
后,中断服务程序必须将从地址和数据方向位装入 I2C 数据寄存器(I2DAT)
,然后清零 SI 位。在这种情况
下,数据方向位(R/W)应为 1 来指示一个读操作。
当从地址和方向位已发送且接收到应答位之后,SI 置位而状态寄存器将显示状态代码。对于主模式,可能
的状态代码为 40H,48H 或 38H,对于从模式,可能的状态代码为 68H,78H 或 B0H。详细内容请参考表
103。
S
从地址
A
R
数据
A
数据
传输的数据
n个字节+应答
"0" - 写
"1" - 读
A = 应答(SDA为低)
A = 非应答(SDA为高)
S =起始条件
P =停止条件
主机到从机
从机到主机
图 21 主接收器模式的格式
在一个重复的起始条件之后,I2C 可以切换到主发送器模式。
69
A
P
广州周立功单片机发展有限公司 Tel: (020)38730976
S
R
SLA
A
A
数据
数据
38730977
A
Fax: 38730925
RS
SLA
http://www.zlgmcu.com
W
A
数据
A
P
传输的数据
(n字节+应答)
A = 应答(SDA为低)
A = 非应答(SDA为高)
S = 起始条件
P = 停止条件
SLA = 从地址
主机到从机
从机到主机
图 22 在发送重复起始条件后,主接收器切换到主发送器
从接收器模式
在从接收器模式中,从主发送器接收数据字节。要初始化从接收器模式,用户应向从地址寄存器
(I2ADR)和 I2C 控制置位寄存器(I2CONSET)写入相应的值,如图 23 所示:
I2CONSET
7
6
5
4
3
2
1
0
-
I2EN
STA
STO
SI
AA
-
-
-
1
0
0
0
1
-
-
图 23 从模式配置
I2EN 必须置位以使能 I2C 功能。AA 位必须置位以使 I2C 应答自身的从地址或通用调用地址。STA,STO
和 SI 设置为 0。
当 I2ADR 和 I2CONSET 完成初始化时,I2C 一直等待到它被自身的从地址或通用地址(两者后面都紧
跟数据方向位)寻址为止。如果数据方向位为 0(W),I2C 将进入从接收器模式。如果数据方向位为 1(R),
I2C 将进入从发送器模式。在接收到地址和方向位后,SI 置位并可从状态寄存器(I2STAT)中读出有效的
状态代码。状态码及操作请参考表 104。
S
从地址
写
A
数据
A
数据
A /A
P/RS
传输的数据
n个字节+应答
"0" - 写
"1" - 读
A = 应答(SDA为低)
A = 非应答(SDA为高)
S =起始条件
P =停止条件
RS = 重复起始条件
主机到从机
从机到主机
图 24 从接收器模式的格式
从发送器模式
第一个字节的接收和处理与从接收器模式相同。但在该模式中,方向位将为 1 指示一个读操作。串行
数据通过 SDA 发送而串行时钟通过 SCL 输入。在串行传输的开始和结束对起始和停止条件进行识别。在
一个给定的应用中,I2C 可以为主模式也可以为从模式。在从模式中,I2C 硬件寻找它自身的从地址和通用
调用地址。如果检测到其中一个地址,将产生中断请求。当微控制器希望成为总线主机时,硬件在进入主
模式前一直等待,直到总线释放,这样就不会中断一个可能的从机动作。如果在主模式中总线仲裁丢失,
I2C 接口将立即切换到从模式并能在同一个串行传输中检测自身的从地址。
70
广州周立功单片机发展有限公司 Tel: (020)38730976
S
从地址
A
R
38730977
数据
Fax: 38730925
A
数据
http://www.zlgmcu.com
A
传输的数据
n 个字节 + 应答
"0" - 写
"1" - 读
A = 应答(SDA为低)
A = 非应答(SDA为高)
S =起始条件
P =停止条件
主机到从机
从机到主机
图 25 从发送器模式的格式
I2C 的实现和操作
图 26 所示为片内 I2C 总线接口的操作过程,下面分别对每个模块进行了描述。
输入滤波器和输出部分
输入信号与内部时钟同步,短于 3 个时钟的脉冲干扰可以滤除。
I2C 输出是一个特殊的端口,它是为了遵循 I2C 规范而设计的。
71
P
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
8
I2ADR
地址寄存器
输入
滤波器
比较器
输出
阶段
移位寄存器
SDA
ACK
I2DAT
8
SCL
位计数器/
仲裁&同步
逻辑
输入
滤波器
输出
阶段
pclk
时序和
控制逻辑
中断
串行时钟
发生器
I2CONSET
I2CONCLR
I2SCLH
I2SCLL
APB
总
线
控制寄存器和SCL占空比寄存器
16
状态总线
状态寄存器
状态译码器
I2STAT
图 26
8
I2C 总线串行接口方框图
地址寄存器,I2ADR
当器件编程用作从发送器或接收器时,该寄存器用来存放 I2C 模块响应的 7 位从地址(7 个最高位)。
LSB(GC)用来使能通用调用地址(00H)的识别。
比较器
比较器将接收到的 7 位从地址与其自身的从地址(I2ADR 的 7 个最高位)相比较。它还将首次接收到
的 8 位字节与通用调用地址(00H)相比较。如果任何一者相同,相应的状态位置位,产生中断请求。
72
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
移位寄存器,I2DAT
该 8 位寄存器用来存放要发送的一个字节的串行数据或刚接收到的一个字节。I2DAT 的数据总是从右
向左移动;最先发送 MSB(位 7),接收完一个字节后,接收到的数据的第一位放置到 I2DAT 的 MSB。当
数据正在移出时,总线上的数据同时移入;I2DAT 通常保存的是总线上的最后一个字节。因此,在仲裁丢
失时,主发送器到从接收器的转变和 I2DAT 中数据的更新同时进行。
仲裁和同步逻辑
在主发送器模式中,仲裁逻辑检查每个发送的逻辑 1 作为一个逻辑 1 真正出现在 I2C 总线上。如果总
线的另一个器件撤消了一个逻辑 1 并将 SDA 线拉低,仲裁丢失,则 I2C 模块立刻由主发送器变为从接收器。
I2C 模块继续输出时钟脉冲(在 SCL 上),直至发送完当前的串行字节。
”
仲裁也可能在主接收器模式中丢失。这种情况只在 I2C 模块正在向总线返回一个“非应答:(逻辑 1)
时出现。当总线的另一个器件将信号拉低时仲裁丢失。由于它只在串行字节结束时出现,因此 I2C 模块不
会再产生时钟脉冲。图 27 所示为仲裁过程。
(1)
(1)
(2)
1
2
3
(3)
SDA 线
SCL 线
4
8
9
ACK
1. 另一个器件发送相同的串行数据。
2. 另一个器件通过拉低 SDA 线撤消了该 I2C 主机发送的一个逻辑 1(虚线)
。仲裁丢失,I2C 进入从接收器模式。
3. 此时 I2C 处于从接收器模式,但仍产生时钟脉冲,直至发送完当前字节。I2C 将不为下个字节的传输产生时钟脉冲。一旦赢
得仲裁,SDA 上的数据传输由新的主机来启动。
图 27 仲裁过程
同步逻辑使得串行时钟发送器与另一个器件的 SCL 线上的时钟脉冲同步。如果 2 个或更多主器件产生
时钟脉冲,则高电平周期取决于产生最短高电平时间的器件;低电平周期取决于产生最长低电平时间的器
件。图 28 所示为同步过程。
SDA 线
(1)
(3)
(1)
SCL 线
(2)
高电平
周期
低电平周期
1.
另一个器件在 I2C 计时完一个完整的高电平时间之前拉低 SCL 线。其它器件决定了高电平(最短)的时间。
2.
另一个器件在 I2C 计时完一个完整的低电平时间并释放 SCL 之后继续拉低 SCL 线。I2C 时钟发生器被迫等待,直至 SCL
变高。其它器件决定了低电平(最长)的时间。
3.
SCL 线被释放,时钟发生器开始计时高电平时间。
图 28 串行时钟同步(图 14)
从机可以延长低电平时间来使总线主机减速。也可通过延长低电平时间来实现握手。延长低电平时间
的操作在每位或一个完整字节传输之后执行。I2C 模块将在发送或接收完一个字节且传输完应答位后延长
SCL 低电平时间。设置串行中断标志(SI)
,继续延长低电平时间,直至串行中断标志清除。
73
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
串行时钟发生器
当 I2C 模块在主发送器或主接收器模式时,该可编程时钟脉冲发生器提供 SCL 时钟脉冲。当 I2C 模块
处于从机模式时时钟发生器关闭。I2C 输出时钟频率和占空比可通过 I2C 时钟控制寄存器编程。详见 I2CSCLL
和 I2CSCLH 寄存器的描述。输出时钟脉冲使用编程设定的占空比,除非总线与上面描述的其它 SCL 时钟
源同步。
时序和控制
时序和控制逻辑产生串行字节处理的时序和控制信号。该逻辑模块具有为 I2DAT 中的数据提供移位脉
冲、使能比较器、产生和检测起始和停止条件、接收和发送应答位、控制主机和从机模式、中断请求逻辑
以及监控 I2C 总线状态等功能。
控制寄存器,I2CONSET 和 I2CONCLR
I2C 控制寄存器包含用于控制以下 I2C 模块功能的位:串行传输的启动和重启、串行传输的终止、位速
率、地址识别和应答。
I2CONSET 可作为 I2C 控制寄存器的内容被读出。写 I2CONSET 将置位 I2C 控制器寄存器中相应的被
写为 1 的位;相反,写 I2CONCLR 将清除 I2C 控制寄存器中相应的被写为 1 的位。
状态译码器和状态寄存器
状态译码器取出所有内部状态位并将它们压缩成一个 5 位的代码。该代码与每个 I2C 总线状态位一一对应。
5 位代码可用于产生向量地址,以便快速处理不同的服务程序。每个服务程序处理一个特定的总线状态。
如果 I2C 模块的所有四种模式都被使用,则有 26 种可能的总线状态。当串行中断标志置位(通过硬件)并
一直保持时,5 位状态代码锁存到状态寄存器的高 5 位,直至中断标志被软件清除。状态寄存器的低 3 位
总是为 0。如果状态代码用作服务程序的向量,则程序转移到 8 位地址指向的空间。大多数的服务程序不
会超过 8 字节(见本节的软件例程)。
寄存器描述
I2C 接口包含 7 个寄存器,如表 93 所示。
表 93
I2C 寄存器映射
名称
I2CONSET
描述
访问
2
I C 控制置位寄存器。当向该
读/置位
复位值
0x00
2
寄存器的某位写入 1 时,I C
I2C0 地址&
I2C1 地址&
名称
名称
0xE001C000
0xE005C000
I2C0CONSET
I2C1CONSET
0xE001C004
0xE005C004
I2C0STAT
I2C1STAT
0xE001C008
0xE005C008
I2C0DAT
I2C1DAT
控制寄存器中相应的位置位。
写入 0 时对 I2C 控制寄存器中
相应的位没有影响。
I2STAT
I2C 状态寄存器。在 I2C 操作
只读
0xF8
中,该寄存器提供详细的状态
码使软件确定需要进行的下
一步操作。
I2DAT
I2C 数据寄存器。在主/从机发
读/写
送模式下,将要发送的数据被
写入该寄存器。在主/从机接
收模式下,接收到的数据可从
该寄存器中读出。
74
0x00
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
名称
描述
访问
2
I C 从地址寄存器。包含从机
I2ADR
读/写
复位值
0x00
2
模式下 I C 接口操作的 7 位从
I2C0 地址&
I2C1 地址&
名称
名称
0xE001C00C
0xE005C00C
I2C0ADR
I2C1ADR
0xE001C010
0xE005C010
I2C0SCLH
I2C1SCLH
0xE001C014
0xE005C014
I2C0SCLL
I2C1SCLL
0xE001C018
0xE005C018
I2C0CONCLR
I2C1CONCLR
地址,不在主机模式下使用。
最低位决定从机是否响应通
用调用地址。
SCH 占空比寄存器高半字。确
I2SCLH
读/写
0x04
2
定 I C 时钟的高电平时间。
SCL 占空比寄存器低半字。确
I2SCLL
读/写
0x04
2
定 I C 时钟的低电平时间。
I2nSCLL 和 I2nSCLH 一起确
定 I2C 主机产生的时钟频率和
从机模式下使用的特定时间。
I2CONCLR
I2C 控制清零寄存器。当向该
只清零
NA
2
寄存器中的某位写入 1 时,I C
控制寄存器中相应的位被清
零。写 0 时对 I2C 控制寄存器
中相应的位没有影响。
I2C 控制置位寄存器(I2CONSET:I2C0 – I2C0CONSET: 0xE001C000; I2C1- I2C1CONSET: 0xE005C000)
I2CONSET 寄存器控制 I2CON 寄存器中位的置位,进而控制 I2C 接口的操作。向该寄存器的某位写入
1 将使 I2C 控制寄存器中相应的位置位。写 0 无影响。
表 94
I2C 控制置位寄存器(I2CONSET:12C0 – I2C0CONSET: 0xE001C000; I2C1- I2C1CONSET:
0xE005C000)
I2CONSET
功能
描述
0:1
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
2
AA
应答标志。见下文。
复位值
NA
0
2
I C 中断标志。见下文。
0
STO
停止标志。见下文。
0
STA
起始标志。见下文。
0
3
SI
4
5
2
6
I2EN
I C 接口使能。见下文。
7
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
NA
I2EN 为 I2C 接口使能。当该位置位时,使能 I2C 接口。该位通过置位 I2CONCLR 寄存器的 I2ENC 位
来清零。当 I2EN 位为 0 时,I2C 接口被禁止。
当 I2EN 为“0”时,SDA 和 SCL 输入信号被忽略,I2C 模块处于“不可寻址的”的从机状态,且 STO
位被强制为“0”。
I2EN 不能用于暂时释放 I2C 总线,当 I2EN 复位时,I2C 总线状态丢失。应使用 AA 标志来代替。
STA 为起始标志。当 STA=1 时,I2C 接口进入主模式并发送一个起始条件,如果已经处于主模式,则
发送一个重复起始条件。
当 STA=1 并且 I2C 接口还没进入主模式时,I2C 接口将进入主模式,检测总线并在总线空闲时产生一
75
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
个起始条件。如果总线忙,则等待一个停止条件(释放总线)并在延迟半个内部时钟发生器周期后发送一
个起始条件。当 I2C 接口已经处于主模式中并发送或接收了数据时,I2C 接口会发送一个重复的起始条件。
STA 可在任何时候置位,当 I2C 接口处于可寻址的从模式时,STA 也可以置位。
向 I2CONCLR 寄存器中的 STAC 位写入 1 使 STA 位清零。当 STA=0 时,不会产生起始或重复起始条
件。
当 STA 和 STO 都置位时,如果 I2C 接口处于主模式,I2C 接口将向总线发送一个停止条件,然后发送
一个起始条件。如果 I2C 接口处于从模式,则产生一个内部停止条件,但不发送到总线上。
STO 为停止标志。当 STO 为 1 时,在主模式中,向 I2C 总线发送一个停止条件或在从模式中使总线从
错误状态中恢复。当主模式中 STO=1 时,向总线发送停止条件。当总线检测到停止条件时,STO 自动清零。
在从模式中,置位 STO 位可从错误状态中恢复。这种情况下不向总线发送停止条件。硬件的表现就好
像是接收到一个停止条件并切换到不可寻址的从接收器模式。STO 标志由硬件自动清零。
SI 为 I2C 中断标志。当 I2C 状态改变时该位置位。但是,由于进入 F8 状态后中断服务程序无任何事情
需要处理,因此并不置位 SI。
当 SI 置位时,SCL 线串行时钟的低电平时间延长,且串行传输挂起。当 SCL 为高时,SI 标志的状态
不受影响。SI 必须通过软件复位,通过向 I2CONCLR 寄存器的 SIC 位写入 1 来实现。
AA 为声明应答标志。当该位置位时,SCL 线的应答时钟脉冲内出现下面的任意条件之一将产生一个
应答(SDA 上的低电平):
5.
接收到从地址寄存器中的地址。
6.
当 I2ADR 中的通用调用位(GC)置位时,接收到通用调用地址。
7.
当 I2C 接口处于主接收器模式时,接收到一个数据字节。
8.
当 I2C 接口处于可寻址的从接收器模式时,接收到一个数据字节。
向 I2CONCLR 寄存器中的 AAC 位写入 1 会使 AAC 位清零。当 AA 为零时,SCL 线的应答时钟脉冲内
出现下列情况将返回一个非应答信号(SDA 上的高电平):
9.
当 I2C 接口处于主接收器模式时,接收到一个数据字节。
10.
当 I2C 接口处于可寻址的从接收器模式时,接收到一个数据字节。
I2C 控制清零寄存器(I2CONCLR: I2C0 - I2C0CONCLR: 0xE001C018; I2C1-I2C1CONCLR:0xE005C018)
I2CONCLR 寄存器控制着 I2CON 寄存器中位的清零,进而控制 I2C 接口的操作。向该寄存器的某位写
入 1 将使 I2C 控制寄存器中相应的位清零。写入 0 无影响。
表 95
I2C 控制清零寄存器(I2CONCLR: I2C0 - I2C0CONCLR: 0xE001C018; I2C1 - I2C1CONCLR:
0xE005C018)
I2CONCLR
功能
描述
0:1
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
2
AAC
应答标志清零位。
0
2
复位值
3
SIC
I C 中断标志清零位。
0
4
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
5
STAC 起始标志清零位。
6
7
0
2
I2ENC I C 接口禁止位。
保留
0
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
AAC 应答标志清零位。向该位写入 1 清零 I2CONSET 寄存器中的 AA 位。写入 0 无效。
SIC 为 I2C 中断标志清零位。向该位写入 1 清零 I2CONSET 寄存器中的 SI 位。写入 0 无效。
76
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
STAC 为起始标志清零位。向该位写入 1 清零 I2CONSET 寄存器中的 STA 位。写入 0 无效。
I2ENC 为 I2C 接口禁止位。向该位写入 1 清零 I2CONSET 寄存器中的 I2EN 位。写入 0 无效。
I2C 状态寄存器(I2STAT: I2C0-I2C0STAT: 0xE001C004; I2C1-I2C1STAT: 0xE005C004)
每个 I2C 状态寄存器表示相应 I2C 接口的条件。I2C 状态寄存器为只读寄存器。
表 96
I2C 状态寄存器(I2STAT: I2C0-I2C0STAT: 0xE001C004; I2C1-I2C1STAT: 0xE005C004)
描述
I2STAT
2:0
7:3
复位值
这 3 个位总是为 0
0x00
2
这些位给出 I C 接口的真实状态位
0x1F
最低 3 位总是为 0。状态寄存器中的一个字节表示一个状态代码。一共有 26 种可能存在的状态代码。
当代码为 F8H 时,无可用的相关信息,SI 位不会置位。所有其它 25 种状态代码都对应一个已定义的 I2C
状态。当进入其中一种状态时,SI 位将置位。所有状态代码的描述见表 102 到表 105。
I2C 数据寄存器(I2DAT: I2C0-I2C0DAT: 0xE001C008; I2C1-I2C1DAT: 0xE005C008)
该寄存器包含要发送或刚接收的数据。当它没有处理字节的移位时,CPU 可对其进行读写。该寄存器
只能在 SI 置位时访问。在 SI 置位期间,I2DAT 中的数据保持稳定。I2DAT 中的数据移位总是从右至左进
行:第一个发送的位是 MSB(位 7),在接收字节时,第一个接收到的位存放在 I2DAT 的 MSB。
表 97
I2C 数据寄存器(I2DAT: I2C0-I2C0DAT: 0xE001C008; I2C1-I2C1DAT: 0xE005C008)
描述
I2DAT
7:0
复位值
该寄存器保留已经接收,或准备要发送的数据值
0
I2C 从地址寄存器(I2ADR:I2C0-I2C0DAT: 0xE001C00C; I2C1-I2C1DAT: 0xE005C00C)
该寄存器可读可写,但只能在 I2C 设置为从模式时才能使用。在主模式中,该寄存器无效。I2ADR 的
LSB 为通用调用位。当该位置位时,通用调用地址(00h)被识别。
表 98
I2C 从地址寄存器(I2ADR:I2C0-I2C0DAT: 0xE001C00C; I2C1-I2C1DAT: 0xE005C00C)
I2ADR
名称
0
GC
7:1
SLADR
描述
复位值
通用调用位
0
2
0
从模式的 I C 器件地址
I2C 时钟控制寄存器
I2C SCL 高电平占空比寄存器(I2SCLH: I2C0-I2C0SCLH: 0xE001C010; I2C1-I2C1SCLH: 0xE005C010)
I2C SCL 低电平占空比寄存器(I2SCLL: I2C0-I2C0SCLL: 0xE001C014; I2C1-I2C1SCLL: 0xE005C014)
软件必须通过对 I2SCLH 和 I2SCLL 寄存器进行设置来选择合适的数据速率和占空比。I2SCLH 定义 SCL
高电平所保持的 pclk 周期数,I2SCLL 定义 SCL 低电平的 pclk 周期数。频率由下面的公式得出:
位频率 = fCLK/ (I2SCLH + I2SCLL)
此处为 fCLK 为 pclk 频率。
表 99
I2C SCL 高电平占空比寄存器( I2SCLH: I2C0-I2C0SCLH: 0xE001C010; I2C1-I2C1SCLH:
0xE005C010)
描述
I20SCLH
15:0
复位值
SCL 高电平周期选择计数
0x 0004
77
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
I2C SCL 低电平占空比寄存器( I2SCLL: I2C0-I2C0SCLL: 0xE001C014; I2C1-I2C1SCLL:
表 100
0xE005C014)
描述
I20SCLL
复位值
SCL 低电平周期选择计数
15:0
0x 0004
I2SCLL 和 I2SCLH 的值不一定要相同。通过设定这两个寄存器可得到 SCL 的不同占空比。例如,I2C
总线规范定义数据传输速率为 400KHz 时不同的 I2SCLL 和 I2SCLH 值对应的 SCL 低电平和高电平时间。
但寄存器的值必须确保 I2C 数据通信速率在 0 到 400KHz 之间。每个寄存器的值都必须大于等于 4。表 101
给出了 pclk 频率一定时 I2C 总线速率和 I2SCLL 和 I2SCLH 的值的对应关系。
表 101
I2C 时钟速率的实例
fCCLK(MHz)一定时的位数据速率(KHz)
I2SCLL+
I2SCLH
1
5
10
16
20
40
60
80
8
125.0
-
-
-
-
-
-
-
10
100.0
-
-
-
-
-
-
-
25
40.0
200.0
400.0
-
-
-
-
-
50
20.0
100.0
200.0
320.0
400.0
-
-
-
100
10.0
50.0
100.0
160.0
200.0
400.0
-
-
160
6.25
31.25
62.5
100.0
125.0
250.0
375.0
-
200
5.0
25.0
50.0
80.0
100.0
200.0
300.0
400.0
400
2.5
12.5
25.0
40.0
50.0
100.0
150.0
200.0
800
1.25
6.25
12.5
20.0
25.0
50.0
75.0
100.0
I2C 操作模式的细节
4 种操作模式:
主发送器
主接收器
从接收器
从发送器
每种操作模式的数据传输如图 29-33 所示。图中含有以下缩写:
缩写
说明
S
起始条件
SLA
7 位从机地址
R
读数据位(SDA 为高电平)
W
写数据位(SDA 为低电平)
A
应答位(SDA 为低电平)
/A
非应答位(SDA 为高电平)
Data
P
8 位数据字节
停止条件
在图 29-33 中,圆圈用来指示串行中断标志何时被置位。圆圈中的数字表示的是 I2STAT 寄存器中的
状态代码。每当出现这些状态代码时,必须执行服务程序来继续或结束串行传输。由于串行传输被挂起,
这些服务程序并不重要,直至串行中断标志被软件清除。
当进入串行中断程序时,I2STAT 的状态代码用来指向跳转到的相应的服务程序。对于每个状态代码需
要的软件操作以及后面串行传输的详细情况见表 102-106。
78
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
主发送器模式
在主发送器模式下,数据字节发送到从接收器(见图 29)。在进入主发送器模式之前,I2CON 必须进
行如下初始化:
7
6
-
I2EN
-
1
I2CONSET
4
3
2
STO
SI
AA
0
0
X
5 0
STA0 -
1
-
I2C 的速率也必须在 I2SCLL 和 I2SCLH 寄存器中配置。I2EN 必须设置为逻辑 1 来使能 I2C 模块。如果
AA 位复位,当另一个器件变成总线主机时,I2C 模块将不会应答其自身的从机地址或通用调用地址。换句
话说,如果 AA 位复位,I2C 接口就不能进入从机模式。STA, STO 和 SI 必须复位。
可通过置位 STA 位进入主发送器模式。一旦总线空闲,I2C 逻辑将测试 I2C 总线并产生一个起始条件。
当 START 条件被发送时,串行中断标志(SI)置位,状态寄存器(I2STAT)中的状态代码变为 08H。中断
服务程序利用该状态代码进入相应的状态服务程序,将从机地址和数据方向位(SLA+W)装入 I2DAT。
I2CON 的 SI 位必须先复位,再继续串行传输。
当发送完从机地址和方向位且接收到一个应答位时,串行中断标志(SI)被重新置位,I2STAT 中可能是
一系列不同的状态代码。主机模式下为 18H, 20H 或 38H,从机模式(AA=逻辑 1)为 68H, 78H 或 B0H。每个
状态代码的相应操作详见表 102。在重复起始条件(状态 10H)后,I2C 模块通过将 SLA+R 装入 I2DAT 切
换为主接收器模式。
主接收器模式
在主接收器模式下,接收来自从发送器的数据字节(见图 30)。传输在主发送器模式中初始化。当发
送完起始条件后,中断服务程序必须向 I2DAT 装入 7 位从机地址和数据方向位(SLA+R)。必须先清除 I2CON
中的 SI 位,再继续执行串行传输。
当发送完从机地址和方向位且接收到一个应答位时,串行中断标志(SI)被重新置位,I2STAT 中可能是
一系列不同的状态代码。主机模式下为 40H, 48H 或 38H,从机模式(AA= 1)为 68H, 78H 或 B0H。每个状态
代码的相应操作详见表 103。在重复起始条件(状态 10H)后,I2C 模块通过将 SLA+W 装入 I2DAT 切换为
主接收器模式。
从接收器模式
在从接收器模式下,接收来自主发送器的数据字节(见图 31)。要初始化从接收器模式,I2ADR 和 I2CON
必须被装入以下内容:
7
6
5
4
3
2
1
0
I2ADR
GC
自身的从机地址
高 7 位是主机寻址时 I2C 模块响应的地址。如果 LSB(GC)被置位,I2C 模块将响应通用调用地址(00H);
否则忽略通用调用地址。
I2CONSET
2
7
6
5
4
3
2
1
-
I2EN
STA
STO
SI
AA
-
-
1
0
0
1
0 2
0
-
2
I C 总线的速率设置不影响从机模式下的 I C 模块。必须置位 I2EN 来使能 I C 模块。AA 位必须置位来
使能 I2C 模块应答其自身从机地址或通用调用地址。STA, STO 和 SI 必须被复位。
当 I2ADR 和 I2CON 完成初始化后,I2C 模块一直等待,直至被从机地址及其后面的数据方向位寻址,
79
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
该数据方向位必须为“0”(W),便于 I2C 模块工作在从接收器模式下。接收完其自身的从机地址和 W 位后,
串行中断标志(SI)置位,可从 I2STAT 中读出一个有效的状态代码。该状态代码用作状态服务程序的向量。
每个状态代码的相应操作见表 104。如果 I2C 模块工作在主机模式下时仲裁丢失,也可进入从接收器模式(见
状态 68H 和 78H)。
如果 AA 位在传输过程中复位,则在接收完下一个数据字节后 I2C 模块将向 SDA 返回一个非应答(逻
辑 1)。当 AA 复位时,I2C 模块不响应其自身的从机地址或通用调用地址。但是,I2C 总线仍被监控,而且,
地址识别可随时通过置位 AA 来恢复。这就意味着 AA 位可用来暂时将 I2C 模块从 I2C 总线上分离出来。
MT
成功发送到
从接收器
S
SL A
W
08H
A
Data
A
18H
P
28H
利用重复起始条件来
启动下次传输
S
SL A
W
10H
从机地址后接收到非应
答位
A
P
R
20H
到主接收
模式 entry = MR
A
一个数据字节后接收到
非应答
P
30H
A or
A
在传输从机地址或数据字
节过程中仲裁丢失
A or
A
继续其它主机
的传输
38H
A
仲裁丢失,用作从机时被寻址
38H
继续其它主机
的传输
68H 78H B0H
到从机模式中相应的状态
主机到从机
从机到主机
Data
n
A
数据字节及其相应的应答位
该数值(包含在I2STA中)对应一个定义的I2C总线状态
图 29 主发送器模式的格式和状态
80
继续其它主机
的传输
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
MR
成功接收从发
送器的数据
S
SL A
R
08H
A
Data
40H
A
Data
50H
A
P
58H
利用重复起始条件来启动
下次传输
S
SL A
R
10H
A
从机地址后接收到非应答
P
W
48H
到主发送器
模式,entry=TM
A or
A
在传输从机地址或应答位过程
中仲裁丢失
继续其它主机
的传输
38H
仲裁丢失,用作从机时被寻址
A
继续其它主机
的传输
到从机模式中相应的状态
主机到从机
从机到主机
n
A
数据字节及其相应的应答位
该数值(包含在I2DAT中)对应一个定义的I2C总线状态
图 30 主接收器模式的格式和状态
81
继续其它主机
的传输
38H
68H 78H B0H
Data
A
广州周立功单片机发展有限公司 Tel: (020)38730976
接收自身的从机地址
和一个或多个数据字节
全部产生应答
S
38730977
SL A
R
A
Fax: 38730925
Data
60H
A
http://www.zlgmcu.com
Data
80H
接收最后一个数据字节时
不产生应答
A
Po r S
80H
A0H
A
Po r S
88H
用作主机时仲裁丢失
用作从机时被寻址
A
68H
通用调用
接收通用调用地址和一个
或多个数据字节
A
数据
70H
A
Data
90H
不应答最后一个数据字节
A
Po r S
90H
A0H
A
Po r S
98H
用作主机时仲裁丢失,
用作从机时通过通用调用地址
被寻址
A
78H
从主机到从机
从从机到主机
数据
n
A
数据字节及其相应的应答位
该数值(包含在I2SAT中)对应一个定义的I2C总线状态
图 31 从接收器模式的格式和状态
82
广州周立功单片机发展有限公司 Tel: (020)38730976
接收自身的从机地址和
一个或多个数据字节
全部产生应答
S
38730977
SL A
R
Fax: 38730925
A
Da ta
A
A8H
用作主机时仲裁丢失
用作从机时被寻址
http://www.zlgmcu.com
Da ta
B8H
A
Po r S
C0H
A
B0H
发送最后一个数据字节。切换成
非寻址的从机(I2CON的AA位="0")
A
all o nes Po r S
C8H
从主机到从机
从从机到主机
Data
A
n
数据字节及其相应的应答位
该数值(包含在I2STA中)对应一个定义的I2C总线状态
图 32 从发送器模式的格式和状态
从发送器模式
在从发送器模式下,向主接收器发送数据字节(见图 32)。数据传输在从接收器模式下初始化。当 I2ADR
和 I2CON 完成初始化后,I2C 模块一直等待,直至被自身的从机地址及其后面的数据方向位寻址,该数据
方向位必须为“1”I,以便 I2C 模块工作在从发送器模式下。接收完其自身的从机地址和 R 位后,串行中
断标志(SI)置位,可从 I2STAT 中读出一个有效的状态代码。该状态代码用作状态服务程序的向量,每个状
态代码的相应操作见表 105。如果 I2C 模块工作在主机模式下时仲裁丢失,也可进入从发送器模式(见状态
B0H)。
如果 AA 位在传输过程中复位,则 I2C 模块将发送传输的最后一个字节并进入状态 C0H 或 C8H。I2C
模块切换为非寻址的从机模式,如果继续传输它将忽略主接收器。因此主接收器接收所有 1 作为串行数据。
当 AA 复位时,I2C 模块不响应其自身的从机地址或通用调用地址。但是,I2C 总线仍被监控,而且,地址
识别可随时通过置位 AA 来恢复。这就意味着 AA 位可用来暂时将 I2C 模块从 I2C 总线上分离出来。
表 102 主发送器模式
应用软件的响应
状态代码
2
I C 总线硬件状态
(I2STAT)
STA STO SI
08H
已发送起始条件
10H
已发送重复起始条件 装入 SLA+W 或
18H
装入 SLA+W
I2C 硬件执行的下一个动作
写 I2CON
读/写 I2DAT
AA
x
0
0
x
将发送 SLA+W,接收 ACK 位
X
0
0
X
同上;
装入 SLA+R
x
0
0
x
将发送 SLA+W,I2C 将切换到主接收器模式
已发送 SLA+W;
装入数据字节
0
0
0
x
将发送数据字节,接收 ACK 位
已接收 ACK
无 I2DAT 动作
1
0
0
x
将发送重复起始条件
无 I2DAT 动作
0
1
0
x
将发送停止条件;STO 标志将复位
无 I2DAT 动作
1
1
0
x
将发送停止条件,然后发送起始条件;STO 标志将复位
83
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
应用软件的响应
状态代码
读/写 I2DAT
2
I C 总线硬件状态
写 I2CON
S
I2C 硬件执行的下一个动作
S
(I2STAT)
A
T
T
A
O
SI
A
20H
28H
30H
已发送 SLA+W;
装入数据字节
0
0
0
x
将发送数据字节,接收 ACK 位
已接收非 ACK
无 I2DAT 动作
1
0
0
x
将发送重复起始条件
无 I2DAT 动作
0
1
0
x
将发送停止条件;STO 标志将复位
无 I2DAT 动作
1
1
0
x
将发送停止条件,然后发送起始条件;STO 标志将复位
已发送 I2DAT 中的数 装入数据字节
0
0
0
x
将发送数据字节,接收 ACK 位
据字节;已接收 ACK 无 I2DAT 动作
1
0
0
x
将发送重复起始条件
无 I2DAT 动作
0
1
0
x
将发送停止条件;STO 标志将复位
无 I2DAT 动作
1
1
0
x
将发送停止条件,然后发送起始条件;STO 标志将复位
已发送 I2DAT 中的数 装入数据字节
0
0
0
x
将发送数据字节,接收 ACK 位
据 字 节 ; 已 接 收 非 无 I2DAT 动作
1
0
0
x
将发送重复起始条件
无 I2DAT 动作
0
1
0
x
将发送停止条件;STO 标志将复位
无 I2DAT 动作
1
1
0
x
将发送停止条件,然后发送起始条件;STO 标志将复位
在 SLA+R/W 或数据 无 I2DAT 动作
0
0
0
x
I2C 总线将被释放;进入不可寻址从模式
字节中丢失仲裁
1
0
0
x
当总线变为空闲时发送起始条件
ACK
38H
无 I2DAT 动作
表 103 主接收器模式
应用软件的响应
状态代码
2
I C 总线硬件状态
(I2STAT)
I2C 硬件执行的下一个动作
写 I2CON
读/写 I2DAT
STA STO SI
AA
08H
已发送起始条件
装入 SLA+R
x
0
0
x
将发送 SLA+R,接收 ACK 位
10H
已发送重复起始条件 装入 SLA+R
x
0
0
x
同上
装入 SLA+W
x
0
0
x
将发送 SLA+W,I2C 将切换到 MST/TRX 模式
在非 ACK 位中丢失 无 I2DAT 动作
0
0
0
x
I2C 总线将被释放;I2C 将进入从模式
仲裁
无 I2DAT 动作
1
0
0
x
当总线恢复空闲后发送起始条件
已发送 SLA+R;已接 无 I2DAT 动作
0
0
0
0
将接收数据字节;返回非 ACK 位
收 ACK
无 I2DAT 动作
0
0
0
1
将接收数据字节;返回 ACK 位
已发送 SLA+R;已接 无 I2DAT 动作
1
0
0
x
将发送重复起始条件
收非 ACK
无 I2DAT 动作
0
1
0
x
将发送停止条件;STO 标志将复位
无 I2DAT 动作
1
1
0
x
将发送停止条件,然后发送起始条件;STO 标志将复位
已接收数据字节;已 读数据字节
0
0
0
0
将接收数据字节,返回非 ACK 位
返回 ACK
读数据字节
0
0
0
1
将接收数据字节;返回 ACK 位
已接收数据字节;已 读数据字节
1
0
0
x
将发送重复起始条件
返回非 ACK
读数据字节
0
1
0
x
将发送停止条件;STO 标志将复位
读数据字节
1
1
0
x
将发送停止条件,然后发送起始条件;STO 标志将复位
38H
40H
48H
50H
58H
84
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 104 从接收器模式
应用软件的响应
状态代码
2
I C 总线硬件状态
(I2STAT)
STA STO
60H
68H
I2C 硬件执行的下一个动作
写 I2CON
读/写 I2DAT
SI
AA
已接收自身 SLA+W; 无 I2DAT 动作
x
0
0
0
将接收数据字节并返回非 ACK 位
已返回 ACK
无 I2DAT 动作
x
0
0
1
将接收数据字节并返回 ACK 位
主控器 时在 SLA+R 无 I2DAT 动作
x
0
0
0
将接收数据字节并返回非 ACK 位
/W 中丢失仲裁;已接 无 I2DAT 动作
x
0
0
1
将接收数据字节并返回 ACK 位
已接收通用调用地址 无 I2DAT 动作
x
0
0
0
将接收数据字节并返回非 ACK 位
(00H);已返回 ACK
无 I2DAT 动作
x
0
0
1
将接收数据字节并返回 ACK 位
在 无 I2DAT 动作
x
0
0
0
将接收数据字节并返回非 ACK 位
SLA+R/W 中丢失仲 无 I2DAT 动作
x
0
0
1
将接收数据字节并返回 ACK 位
前一次寻址使用自身 读数据字节
x
0
0
0
将接收数据字节并返回非 ACK 位
从地址;已接收数据 读数据字节
x
0
0
1
将接收数据字节并返回 ACK 位
0
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调
收自身 SLA+W,已返
回 ACK
70H
78H
主
控
器
时
裁 ; 已接收通用调用
地址;已返回 ACK
80H
字节;已返回 ACK
88H
前一次寻址使用自身 读数据字节
用地址
SLA 地址;已接收数
据 字 节 ; 已 返 回 非 读数据字节
0
0
0
1
切换到不可寻址 SLV 模式;识别自身 SLA ;如果
I2ADR.0=1,将识别通用调用地址
ACK
读数据字节
1
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调
用地址;当总线空闲后发送起始条件
读数据字节
1
0
0
1
切换到不可寻址 SLV 模式;识别自身 SLA ;如果
I2ADR.0=1,将识别通用调用地址;当总线空闲后发送
起始条件
90H
前一次寻址使用通用 读数据字节
x
0
0
0
将接收数据字节并返回非 ACK 位
调用;已接收数据字 读数据字节
x
0
0
1
将接收数据字节并返回 ACK 位
0
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调
节;已返回 ACK
98H
前一次寻址使用通用 读数据字节
调用;已接收数据字
节;已返回非 ACK
用地址
读数据字节或
0
0
0
1
切换到不可寻址 SLV 模式;识别自身从地址;如果
I2ADR.0=1,将识别通用调用地址
读数据字节或
1
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调
用地址;当总线空闲后发送起始条件
读数据字节
1
0
0
1
切换到不可寻址 SLV 模式;识别自身从地址;如果
I2ADR.0=1,将识别通用调用地址;当总线空闲后发送
起始条件
85
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
应用软件的响应
状态代码
写 I2CON
读/写
I2C 总线硬件状态
(I2STAT)
I2DAT
ST
STA
SI
O
A0H
当使用 SLA/REC 或 无
I2DAT
0
I2C 硬件执行的下一个动作
A
0
A
0
0
用地址
SLA/TRX 静 态 寻 址 动作
时,接收到停止条件 无
或重复的起始条件
I2DAT
0
0
0
1
动作
无
切换到不可寻址 SLV 模式;识别自身从地址;如果
I2ADR.0=1,将识别通用调用地址
I2DAT
1
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调
用地址;当总线空闲后发送起始条件
动作
无
切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调
I2DAT
1
0
0
1
动作
切换到不可寻址 SLV 模式;识别自身从地址;如果
I2ADR.0≡1,将识别通用调用地址;当总线空闲后发送
起始条件
表 105 从发送器模式
应用软件的响应
状态代码
2
I C 总线硬件状态
(I2STAT)
STA STO SI
A8H
已接收自身 SLA+R ;已返回 装入数据字节或
AA
x
0
0
0
将发送最后的数据字节并接收 ACK 位
x
0
0
1
将发送数据字节并接收 ACK 位
主控器时在 SLA+R/W 中丢失 装入数据字节或
x
0
0
0
将发送最后的数据字节并接收 ACK 位
仲裁;已接收自身 SLA+R,已 装入数据字节
x
0
0
1
将发送数据字节并接收 ACK 位
已发送 I2DAT 中数据字节;已 装入数据字节或
x
0
0
0
将发送最后的数据字节并接收 ACK 位
返回 ACK
x
0
0
1
将发送数据字节并接收 ACK 位
0
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或
ACK
B0H
I2C 硬件执行的下一个动作
写 I2CON
读/写 I2DAT
装入数据字节
返回 ACK
B8H
C0H
装入数据字节
已发送 I2DAT 中数据字节;已 无 I2DAT 动作或
返回非 ACK
通用调用地址
无 I2DAT 动作或
0
0
0
1
切换到不可寻址 SLV 模式;识别自身从地址;
如果 I2ADR.0=1,将识别通用调用地址
无 I2DAT 动作或
1
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或
无 I2DAT 动作
1
0
0
1
切换到不可寻址 SLV 模式;识别自身从地址;
通用调用地址;当总线空闲后发送起始条件
如果 I2ADR.0=1,将识别通用调用地址;当总
线空闲后发送起始条件
C8H
已发送 I2DAT 中最后的数据字 无 I2DAT 动作或
0
0
0
0
节(AA=0);已接收 ACK
切换到不可寻址 SLV 模式;不识别自身 SLA 或
通用调用地址
无 I2DAT 动作或
0
0
0
1
切换到不可寻址 SLV 模式;识别自身从地址;
如果 I2ADR.0=1,将识别通用调用地址
无 I2DAT 动作或
1
0
0
0
切换到不可寻址 SLV 模式;不识别自身 SLA 或
通用调用地址;当总线空闲后发送起始条件
无 I2DAT 动作
1
0
0
1
切换到不可寻址 SLV 模式;识别自身从地址;
如果 I2ADR.0=1,将识别通用调用地址;当总
线空闲后发送起始条件
86
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
各种不同的状态
有 2 个 I2STAT 代码与定义的 I2C 硬件状态不对应(见表 106),下面将对这两种状态进行讨论:
I2STAT=F8H:
该状态码表示没有任何可用的相关信息,因为串行中断标志 SI 还没有被置位。这种情况在其它状态和
2
I C 模块还未开始执行串行传输之间出现。
I2STAT=00H:
该状态代码表示一个总线错误在 I2C 串行传输过程中出现。当起始或停止条件出现在格式帧的非法位
置上时产生总线错误。这些非法位置是指在串行传输过程中的地址字节、数据字节或应答位。当外部干扰
影响到内部 I2C 模块信号时也会产生总线错误。总线错误出现时 SI 置位。要从总线错误中恢复,STO 标志
必须置位,SI 必须被清除。这使得 I2C 模块进入“非寻址的”从机模式(已定义的状态)并清除 STO 标志
(I2CON 中的其它位不受影响)。SDA 和 SCL 线被释放(不发送停止条件)。
表 106 各种不同的状态
应用软件的响应
状态代码
2
I C 总线和硬件状态
(I2STAT)
STA STO SI
F8H
无可用的相关状态信息;SI=0 无 I2DAT 动作
00H
由于非法的起始或停止条件,在 无 I2DAT 动作
I2C 硬件执行的下一个动作
写 I2CON
读/写 I2DAT
AA
无 I2DAT 动作
0
1
0
x
等待或执行当前传输
只有 MST 或寻址的 SLV 模式中的内部硬件受影
MST 或选择的从机模式中出现
响。所有情况下,总线被释放、I2C 模块切换到
总线错误。当外部干扰使 I2C 模
非寻址的 SLV 模式。STO 复位。
块进入一个未定义的状态时也
出现 00H 状态。
一些特殊的情况:
I2C 硬件可以处理出现在串行传输过程中的以下特殊情况:
两个主机同时启动重复起始条件
在主发送器或主接收器模式下可能产生重复起始条件。如果此时另一个主机同时产生重复起始条件将
出现一种特殊情况(见图 33)。即使出现这种情况,任何一个主机都不会丢失仲裁,因为它们都发送相同
的数据。
如果 I2C 硬件在产生重复起始条件之前在 I2C 总线上检测到重复起始条件,它将释放总线,并且不产
生中断请求。如果另一个主机通过产生停止条件来释放总线,则 I2C 模块将发送一个正常的起始条件(状
态 08H)
,并开始启动重新尝试完整的串行数据传输。
仲裁丢失后的数据传输
仲裁可能在主发送器和主接收器模式中丢失(见图 27)。仲裁丢失通过 I2STAT 中的下列状态代码来指
示:38H, 68H, 78H 和 B0H(见图 29 和图 30)。
如果 I2CON 中的 STA 标志被服务这些状态的程序置位,则当总线再次空闲时,发送起始条件(状态
08H),不受 CPU 的影响,并开始启动重新尝试完整的串行数据传输。
强制访问 I2C 总线
在某些应用中,非控制源有可能造成总线挂起。在这些情况下,干扰、总线的暂时中断或 SDA 和 SCL
之间的暂时短路都会引发问题的产生。
87
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
如果非控制源产生一个多余的起始条件或屏蔽一个停止条件,则 I2C 总线一直处于忙状态。如果 STA
标志被设置且在相应的时间内未访问总线,那么有可能强制访问 I2C 总线。这可通过在 STA 标志仍被设置
时置位 STO 标志来实现。不发送停止条件。I2C 的硬件操作就好像是接收到停止条件一样,可以发送起始
条件。STO 标志通过硬件清除(见图 34)。
SCL 或 SDA 低电平妨碍 I2C 总线的操作
如果 SDA 或 SCL 被一个非控制源拉低,将出现 I2C 总线挂起。如果 SCL 线被总线上的器件妨碍(拉
低)
,则不能进行更进一步的串行传输,并且 I2C 硬件也无法解决此类问题。这时,问题必须由将 SCL 线
拉低的器件来解决。
如果 SDA 线被总线上的另一个器件妨碍(例如从机器件不能位同步),可通过向 SCL 线发送额外的时
钟脉冲来解决(见图 35)。STA 标志置位时 I2C 硬件发送额外的时钟脉冲,但不会产生起始条件,因为 I2C
总线空闲时 SDA 线被拉低。每当在 SCL 线上产生 2 个额外的时钟脉冲后,I2C 硬件就尝试产生一个起始条
件。当 SDA 线最终被释放时,发送正常的起始条件,进入 08H 状态,并继续串行传输。
当 SDA 被妨碍(拉低)时,若出现强制总线访问或重复起始条件,I2C 硬件执行如上所述的操作。每
一种情况下,成功发送起始条件后进入 08H 状态,继续进行正常的串行传输。注意 CPU 不参与此类总线
挂起问题的解决。
总线错误
当起始或停止条件出现在格式帧的非法位置上时出现总线错误。非法位置是指串行传输过程中的地址
字节、数据位或应答位。
当 I2C 硬件作为主机或被寻址的从机处理串行传输时,它仅对总线错误有反应。检测到总线错误时,
I2C 模块立即切换成非寻址的从机模式,释放 SDA 和 SCL 线,设置中断标志,并将 00H 装入状态寄存器。
该状态代码可用作状态服务程序的向量,尝试再次终止串行传输或仅从错误条件中恢复,如表 106 所示。
S
SL A
08H
W
A
数据
A
18H
继续其它主机的传输
S
28H
P
S
SL A
08H
其它主机更早发送重复起始条件
重复一次
图 33 两个主机同时发送重复起始条件
时间限制
ST A标志
ST O 标志
SDA 线
SCL 线
起始条件
2
图 34 强制访问忙 I C 总线
88
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
STA 标志
(2)
(1)
(3)
(1)
SDA 线
SCL 线
起始条件
1.
发送起始条件失败
2.
SDA 线释放
3.
成功发送起始条件;进入 08H 状态。
图 35 从 SDA 低电平造成的总线操作妨碍中恢复
I2C 状态服务程序
本节提供了不同 I2C 状态服务程序必须执行的操作,它们包括:
复位后 I2C 模块的初始化
I2C 中断服务
26 个状态服务程序支持 4 种 I2C 操作模式
初始化
在初始化示例中,I2C 模块可工作在主机和从机模式。每种模式下缓冲区都可用于发送和接收。初始化
程序执行以下功能:
I2ADR 装入器件自身的从机地址和通用调用位(GC)
I2C 中断使能,设置中断优先级位
从机模式通过同时设置 I2CON 寄存器中的 I2EN 和 AA 位来使能,串行时钟频率(主机模式)
由装入 I2CON 中 CR0 和 CR1 的值来定义。主机程序必须从主程序开始执行。
2
I C 硬件开始在 I2C 总线上检查自身的从机地址和通用调用位。一旦检测到通用调用或自身从地址,请
求中断,相应的状态信息装入 I2STAT。
I2C 中断服务
当进入 I2C 中断时,I2STAT 包含一个状态代码,用来识别要执行的 26 个状态服务中的一个。
状态服务程序
每个状态程序都是 I2C 中断程序的组成部分,分别用来处理 26 种状态。
实际应用中的状态服务
状态服务程序显示了响应 26 个 I2C 状态代码必须执行的典型操作。如果 4 种 I2C 操作模式中的一个或
多个未使用,则未使用的模式的相关的状态服务可被忽略,只要小心处理那些不会出现的状态即可。
在应用中,可能需要在 I2C 操作过程中执行一些超时处理,来限制不起作用的总线或丢失的服务程序。
软件举例
初始化程序
将 I2C 接口初始化用作从机和/或主机的例子。
11. 将自身的从机地址装入 I2ADR,使能通用调用识别(如果需要)。
12. 使能 I2C 中断。
89
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
13. 写 0x44 到 I2CONSET 来置位 I2EN 和 AA 位,
使能从机功能。对于主机功能,写 0x40 到 I2CONSET。
启动主机发送功能
通过建立缓冲区、指针和数据计数器来开始主机发送操作,然后启动。
14. 初始化主机数据计数器。
15. 建立数据将被发送到的从机地址,并且添加写位。
16. 写 0x20 到 I2CONSET 来置位 STA 位。
17. 在主机发送缓冲区内建立要发送的数据。
18. 初始化主机数据计数器来匹配正在发送的信息长度。
19. 退出。
启动主机接收功能
通过建立缓冲区、指针和数据计数器来开始主机接收操作,然后启动。
20. 初始化主机数据计数器。
21. 建立数据将被发送到的从机地址,并且添加读位。
22. 写 0x20 到 I2CONSET 来置位 STA 位。
23. 建立主机接收缓冲区。
24. 初始化主机数据计数器来匹配接收到的信息长度。
25. 退出。
I2C 中断程序
确定 I2C 状态和要使用的状态程序。
26. 从 I2STA 中读出 I2C 的状态。
27. 使用状态值跳转到 26 个可能状态程序中的一个。
非模式指定的状态
状态:00
总线错误。进入非寻址的从机模式并释放总线。
28. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。
29. 写 0x08 到 I2CONCLR 来清除 SI 标志。
30. 退出。
主机状态
状态 08 和状态 10 适用于主发送和主接收模式。R/W 位决定下一个状态是否在主发送模式或主接收模
式中。
状态:08
已发送起始条件。将发送从机地址+R/W 位和接收 ACK 位。
31. 向 I2DAT 写入从机地址和 R/W 位。
32. 写 0x04 到 I2CONSET 来置位 AA 位。
33. 写 0x08 到 I2CONCLR 来清除 SI 标志。
34. 建立主发送模式数据缓冲区。
35. 建立主接收模式数据缓冲区。
36. 初始化主机数据计数器。
90
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
37. 退出。
状态:10
已发送重复起始条件。将发送从机地址+R/W 位和接收 ACK 位。
38. 向 I2DAT 写入从机地址和 R/W 位。
39. 写 0x04 到 I2CONSET 来置位 AA 位。
40. 写 0x08 到 I2CONCLR 来清除 SI 标志。
41. 建立主发送模式数据缓冲区。
42. 建立主接收模式数据缓冲区。
43. 初始化主机数据计数器。
44. 退出。
主机发送器状态
状态:18
前面的状态是状态 8 或状态 10,已发送从机地址+写,已接收 ACK。将发送第一个数据字节和接收
ACK 位。
45. 将主机发送缓冲区的第一个数据字节装入 I2DAT。
46. 写 0x04 到 I2CONSET 来置位 AA 位。
47. 写 0x08 到 I2CONCLR 来清除 SI 标志。
48. 主机发送缓冲区指针加 1。
49. 退出。
状态:20
已发送从机地址+写,已接收到非应答。将发送停止条件。
50. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。
51. 写 0x08 到 I2CONCLR 来清除 SI 标志。
52. 退出。
状态:28
已发送数据,已接收 ACK。如果发送的数据是最后一个数据字节则发送一个停止条件,否则发送下一
个数据字节。
53. 主机数据计数器减 1,如果不是最后一个数据字节就跳到第 5 步。
54. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。
55. 写 0x08 到 I2CONCLR 来清除 SI 标志。
56. 退出。
57. 向 I2DAT 装入主机发送缓冲区的下一个数据字节。
58. 写 0x04 到 I2CONSET 来置位 AA 位。
59. 写 0x08 到 I2CONCLR 来清除 SI 标志。
60. 主机发送缓冲区指针加 1。
61. 退出。
状态:30
已发送数据,已接收到非应答。将发送停止条件。
62. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。
91
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
63. 写 0x08 到 I2CONCLR 来清除 SI 标志。
64. 退出。
状态:38
仲裁在传输从机地址+写或数据过程中已丢失。总线已被释放且进入非寻址的从机模式。当总线再次
空闲时将发送一个新的起始条件。
65. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。
66. 写 0x08 到 I2CONCLR 来清除 SI 标志。
67. 退出。
主机接收器状态
状态:40
前面的状态是状态 08 或状态 10,已发送从机地址+读,已接收到 ACK。将接收数据和返回 ACK。
68. 写 0x04 到 I2CONSET 来置位 AA 位。
69. 写 0x08 到 I2CONCLR 来清除 SI 标志。
70. 退出。
状态:48
已发送从机地址+读,已接收到非应答。将发送停止条件。
71. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。
72. 写 0x08 到 I2CONCLR 来清除 SI 标志。
73. 退出。
状态:50
已接收数据,已返回 ACK。将从 I2DAT 读取数据。将接收其它的数据。如果这是最后一个数据字节,
则将返回非应答,否则将返回 ACK。
74. 读取 I2DAT 中的数据字节,存放到主机接收缓冲区。
75. 主机数据计数器减 1,如果不是最后一个数据字节就跳到第 5 步。
76. 写 0x0C 到 I2CONCLR 来清除 SI 标志和 AA 位。
77. 退出。
78. 写 0x04 到 I2CONSET 来置位 AA 位。
79. 写 0x08 到 I2CONCLR 来清除 SI 标志。
80. 主机接收缓冲区指针加 1。
81. 退出。
状态:58
已接收到数据,已返回非应答。将从 I2DAT 中读取数据和发送停止条件。
82. 读取 I2DAT 中的数据字节,存放到主机接收缓冲区。
83. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。
84. 写 0x08 到 I2CONCLR 来清除 SI 标志。
85. 退出。
92
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
从机接收器状态
状态:60
已接收到自身从机地址+写和返回 ACK。将接收数据和返回 ACK。
86. 写 0x04 到 I2CONSET 来置位 AA 位。
87. 写 0x08 到 I2CONCLR 来清除 SI 标志。
88. 建立从接收模式数据缓冲区。
89. 初始化从机数据计数器。
90. 退出。
状态:68
用作总线主机时仲裁已在传输从机地址和 R/W 位时丢失。已接收到自身从机地址+写和返回 ACK。
将接收数据和返回 ACK。当总线再次空闲后置位 STA 来重新启动主机模式。
91. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。
92. 写 0x08 到 I2CONCLR 来清除 SI 标志。
93. 建立从接收模式数据缓冲区。
94. 初始化从机数据计数器。
95. 退出。
状态:70
已接收到通用调用位和返回 ACK。将接收数据和返回 ACK。
96. 写 0x04 到 I2CONSET 来置位 AA 位。
97. 写 0x08 到 I2CONCLR 来清除 SI 标志。
98. 建立从接收模式数据缓冲区。
99. 初始化从机数据计数器。
100. 退出。
状态:78
用作总线主机时仲裁已在传输从机地址+R/W 位时丢失。已接收到通用调用和返回 ACK。将接收数据
和返回 ACK。当总线再次空闲后置位 STA 来重新启动主机模式。
101. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。
102. 写 0x08 到 I2CONCLR 来清除 SI 标志。
103. 建立从接收模式数据缓冲区。
104. 初始化从机数据计数器。
105. 退出。
状态:80
以前用自身从机地址寻址。已接收到数据并返回 ACK。将读取其它的数据。
106. 读取 I2DAT 的数据字节,存放到从机接收缓冲区。
107. 从机数据计数器减 1,如果不是最后一个数据字节就跳到第 5 步。
108. 写 0x0C 到 I2CONCLR 来清除 SI 标志和 AA 位。
109. 退出。
110. 写 0x04 到 I2CONSET 来置位 AA 位。
111. 写 0x08 到 I2CONCLR 来清除 SI 标志。
112. 从机接收缓冲区指针加 1。
93
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
113. 退出。
状态:88
以前用自身从机地址寻址。已接收到数据并返回了非应答。接收到的数据将不保存。进入非寻址的从
机模式。
114. 写 0x04 到 I2CONSET 来置位 AA 位。
115. 写 0x08 到 I2CONCLR 来清除 SI 标志。
116. 退出。
状态:90
以前用通用调用寻址。已接收到数据和返回了 ACK。将保存接收到的数据。只有将要接收的第一个数
据字节带有 ACK,其它数据字节都是非应答。
117. 读取 I2DAT 的数据字节,存放到从机接收缓冲区。
118. 写 0x0C 到 I2CONCLR 来清除 SI 标志和 AA 位。
119. 退出。
状态:98
以前用通用调用寻址。已接收到数据和返回非应答。接收到的数据将不保存。进入非寻址的从机模式。
120. 写 0x04 到 I2CONSET 来置位 AA 位。
121. 写 0x08 到 I2CONCLR 来清除 SI 标志。
122. 退出。
状态:A0
接收到停止条件或重复起始条件,但仍作为从机寻址。将不保存数据。进入非寻址的从机模式。
123. 写 0x04 到 I2CONSET 来置位 AA 位。
124. 写 0x08 到 I2CONCLR 来清除 SI 标志。
125. 退出。
从机发送器状态
状态:A8
已接收到自身从机地址+读和返回 ACK。将发送数据和接收 ACK 位。
126. 将从机发送缓冲区的第一个数据字节装入 I2DAT。
127. 写 0x04 到 I2CONSET 来置位 AA 位。
128. 写 0x08 到 I2CONCLR 来清除 SI 标志。
129. 建立从发送模式数据缓冲区。
130. 从机发送缓冲区指针加 1。
131. 退出。
状态:B0
用作总线主机时仲裁已在传输从机地址和 R/W 位时丢失。已接收到自身从机地址+读和返回 ACK。
将发送数据和接收 ACK 位。当总线再次空闲后置位 STA 来重新启动主机模式。
132. 将从机发送缓冲区的第一个数据字节装入 I2DAT。
133. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。
134. 写 0x08 到 I2CONCLR 来清除 SI 标志。
94
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
135. 建立从发送模式数据缓冲区。
136. 从机发送缓冲区指针加 1。
137. 退出。
状态:B8
已发送数据和接收到 ACK。将发送数据和接收 ACK 位。
138. 将从机发送缓冲区的数据字节装入 I2DAT。
139. 写 0x04 到 I2CONSET 来置位 AA 位。
140. 写 0x08 到 I2CONCLR 来清除 SI 标志。
141. 从机发送缓冲区指针加 1。
142. 退出。
状态:C0
已发送数据,已接收到非应答。进入非寻址的从机模式。
143. 写 0x04 到 I2CONSET 来置位 AA 位。
144. 写 0x08 到 I2CONCLR 来清除 SI 标志。
145. 退出。
状态:C8
已发送最后一个数据字节和接收到 ACK。进入非寻址的从机模式。
146. 写 0x04 到 I2CONSET 来置位 AA 位。
147. 写 0x08 到 I2CONCLR 来清除 SI 标志。
148. 退出。
SPI 接口(SPI0)
12.
特性
单个完整和独立的 SPI 控制器
遵循串行外设接口(SPI)规范
同步、串行、全双工通信
组合的 SPI 主机和从机
最大数据位速率为输入时钟速率的 1/8
描述
SPI 概述
SPI0 是一个全双工的串行接口。它们设计成可以处理在一个给定总线上多个互连的主机和从机。在一
定数据传输过程中,接口上只能有一个主机和一个从机能够通信。在一次数据传输中,主机总是向从机发
送一个字节数据,而从机也总是向主机发送一个字节数据。
SPI 数据传输
图 36 所示为 SPI 的 4 种不同数据传输格式的时序。该时序图描述的是 8 位数据的传输。需要注意的是,
该时序图分成了 3 个水平的部分。第一部分描述 SCK 和 SSEL 信号。第二部分描述了 CPHA=0 时的 MOSI
和 MISO 信号。第三部分描述了 CPHA=1 时的 MOSI 和 MISO 信号。
在时序图的第一部分需要注意两点。第一,时序图包含了 CPOL 设置为 0 和 1 的情况。第二,SSEL
95
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
信号的激活和未激活。当 CPHA=1 时,SSEL 信号在数据传输之间时总是保持未激活状态。当 CPHA=0 时
则不能保证这一点(信号有可能保持激活状态)。
SCK (CPOL = 0)
SCK (CPOL = 1)
SSEL
CPHA = 0
Cycle # CPHA = 0
1
2
3
4
5
6
7
8
MOSI (CPHA = 0)
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
Bit 8
MISO (CPHA = 0)
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
Bit 8
CPHA = 1
Cycle # CPHA = 1
1
2
3
4
5
6
7
8
MOSI (CPHA = 1)
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
Bit 8
MISO (CPHA = 1)
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
Bit 8
图 36 SPI 数据传输格式(CPHA=0 和 CPHA=1)
数据和时钟的相位关系在表 107 中描述。该表汇集了下面情况下 CPOL 和 CPHA 的每一种设定:
当驱动第一个数据位时
当驱动所有其它数据位时
当采样数据时
表 107 SPI 数据和时钟的相位关系
CPOL 和 CPHA 的设定
驱动的第一个数据
驱动的其它数据
采样的数据
CPOL=0, CPHA=0
在第一个 SCK 上升沿之前
SCK 下降沿
SCK 上升沿
CPOL=0, CPHA=1
第一个 SCK 上升沿
SCK 上升沿
SCK 下降沿
CPOL=1, CPHA=0
在第一个 SCK 下降沿之前
SCK 上升沿
SCK 下降沿
CPOL=1, CPHA=1
第一个 SCK 下降沿
SCK 下降沿
SCK 上升沿
8 位传输起始和停止时间的定义取决于器件为主机还是从机,以及 CPHA 变量的设定。
当器件为主机时,传输的起始由包含发送数据字节的主机来指示。此时,主机可激活时钟并开始传输。
当传输的最后一个时钟周期结束时,传输结束。
当器件为从机并且 CPHA=0 时,传输在 SSEL 信号激活时开始,并在 SSEL 变为高电平时结束。当器
件为从机且 CPHA=1 时,如果该器件被选择,传输从第一个时钟沿开始,并在数据采样的最后一个时钟沿
结束。
SPI 外设描述
概述
有 4 个寄存器控制 SPI 外设。将在寄存器描述一节中详细讲述。
96
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
SPI 控制寄存器包含一些可编程位来控制 SPI 模块的功能。该寄存器必须在数据传输之前进行设定。
SPI 状态寄存器包含只读位,用于监视 SPI 接口的状态,包括一般性功能和异常状况。该寄存器的主要
用途是检测数据传输的完成,这通过 SPIF 位来实现。其它位用于指示异常状况。异常情况将在后面描述。
SPI 数据寄存器用于提供发送和接收的数据字节。串行数据实际的发送和接收通过 SPI 模块逻辑的内部
移位寄存器来实现。在发送时向 SPI 数据寄存器写入数据。数据寄存器和内部移位寄存器之间没有缓冲区。
写数据寄存器会使数据直接进入内部移位寄存器。因此数据只能在没有执行数据发送时写入该寄存器。读
数据带有缓冲区。当传输结束时,接收到的数据转移到一个单字节的数据缓冲区,下次传输时将其读出。
读 SPI 数据寄存器将返回读数据缓冲区的值。
当 SPI 模块处于主模式时,SPI 时钟计数器寄存器用于控制时钟速率。该寄存器必须在数据传输之前设
定。当 SPI 模块处于从模式时,该寄存器无效。
SPI 所使用的 I/O 口为标准 CMOS I/O 口。设计上没有实现开漏 SPI 选项。当器件设置为从机时,它的
I/O 口只有在被有效的 SSEL 信号选择时才有效。
主机操作
下面的步骤描述了 SPI 设置为主机时如何处理数据传输。该处理假设任何之前的数据传输已经结束。
1.
将 SPI 时钟计数寄存器设置为所需要的值。
2.
将 SPI 控制寄存器设置为所需要的设定。
3.
将要发送的数据写入 SPI 数据寄存器。此写操作启动 SPI 数据传输。
4.
等待 SPI 状态寄存器中的 SPIF 位置位。SPIF 位将在 SPI 数据传输的最后一个周期之后置位。
5.
读取 SPI 状态寄存器。
6.
从 SPI 数据寄存器中读出接收到的数据(可选)。
7.
如果有更多数据需要发送,则跳到第 3 步。
注:读或写 SPI 数据寄存器用来清零 SPIF 状态位。因此,如果不执行可选的 SPI 数据寄存器读操作,
则需要执行该寄存器的写操作以清零 SPIF 状态位。
从机操作
下面的步骤描述了 SPI 设置为从机时如何处理数据传输。该处理假设任何之前的数据传输已经结束。
要求驱动 SPI 逻辑的系统时钟速度至少 8 倍于 SPI。
1.
将 SPI 控制寄存器设置为所需要的设定。
2.
将要发送的数据写入 SPI 数据寄存器(可选)。注意这只能在从 SPI 传输没有进行时执行。
3.
等待 SPI 状态寄存器中的 SPIF 位置位。SPIF 位将在 SPI 数据传输的最后一个采样时钟沿后置位。
4.
读取 SPI 状态寄存器。
5.
从 SPI 数据寄存器中读出接收到的数据(可选)。
6.
如果有更多数据需要发送,则跳到第 2 步。
注:读或写 SPI 数据寄存器用来清零 SPIF 状态位。因此至少需要执行一个该寄存器的读或写操作来清
零 SPIF 状态位。
异常状况
读溢出-当 SPI 模块内部读缓冲区包含没有读出的数据,而新的传输已经完成,那么这时候就会发生
读溢出。SPIF 位置位表示读缓冲区包含了有效数据。当一次传输结束时,SPI 模块需要将接收到的数据移
到读缓冲区。如果 SPIF 位置位 (读缓冲区已满),新接收到的数据将会丢失,而状态寄存器的读溢出 (ROVR)
位将置位。
写冲突-我们在前面提到过,在 SPI 总线接口与内部移位寄存器之间没有写缓冲区。这样在 SPI 数据
传输过程当中不应向 SPI 数据寄存器写入数据。不能向 SPI 数据寄存器写入数据的时间从传输启动时开始,
97
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
直到 SPIF 置位时读取状态寄存器为止。如果在这段时间内写 SPI 数据寄存器,写入的数据将会丢失,状态
寄存器中的写冲突位(WCOL)置位。
模式错误-SSEL 信号在 SPI 模块为主机时必须无效。当 SPI 模块为主机时,如果 SSEL 信号被激活,
表示有另外一个主机将该器件选择为从机。这种状态称为模式错误。当检测到一个模式错误时,状态寄存
器的模式错误位(MODF)位置位,SPI 信号驱动器关闭,而 SPI 模式转换为从模式。
从机中止-如果 SSEL 信号在传输结束之前变为高电平,从传输将被认为中止。此时,正在处理的发
送或接收数据都将丢失,状态寄存器的从机中止(ABRT)位置位。
管脚描述
表 108 SPI 管脚描述
管脚名称
类型
输入/输
SCK0
出
描述
串行时钟 用于同步 SPI 接口间数据传输的时钟信号。该时钟总是由主机驱动并
且从机接收。时钟可编程为高有效或低有效。它只在数据传输时才被激活,其它
任何时候都处于非激活状态或三态。
从机选择 SPI 从机选择信号是一个低有效信号,用于指示被选择参与数据传输
的从机。每个从机都有各自特定的从机选择输入信号。在数据处理之前,SSEL
必须为低电平并在整个处理过程中保持低电平。如果在数据传输中 SSEL 信号变
为高电平,传输将被中止。这种情况下,从机返回到空闲状态并将任何接收到的
输入
SSEL0
数据丢弃。对于这样的异常没有其它的指示。该信号不直接由主机驱动。可通过
软件使用一个通用 I/O 口来驱动。
当 SPI0 接口仅用于主机模式下时,LPC2131/2132/2138(不像早期的 Philips ARM
器件)的 SSEL0 脚可用于不同的功能。例如,SSEL0 管脚可配置为一个输出数
字 GPIO 脚并用于选择一个 SPI0 从机。
输入/输
MISO0
MOSI0
出
主入从出 MISO 信号是一个单向的信号,它将数据从从机传输到主机。当器件
为从机时,串行数据从该端口输出。当器件为主机时,串行数据从该端口输入。
当从机没有被选择时,将该信号驱动为高阻态。
输入/输
主出从入 MOSI 信号是一个单向的信号,它将数据从主机传输到从机。当器件
出
为主机时,串行数据从该端口输出。当器件为从机时,串行数据从该端口输入。
寄存器描述
SPI 包含 5 个寄存器,见表 109。所有寄存器都可以字节、半字和字的形式访问。
表 109 SPI 寄存器映射
描述
名称
SPCR
SPSR
SPI 控制寄存器。该寄存器控制 SPI 的操作。
SPI 状态寄存器。该寄存器显示 SPI 的状态。
访问
复位值*
R/W
0
只读
0
SPI 数据寄存器。该双向寄存器为 SPI 提供发送和接收的数据。
SPDR
发送数据通过写该寄存器提供。SPI 接收的数据可从该寄存器读
出。
98
R/W
0
SPI0
地址&名称
0xE0020000
S0SPCR
0xE0020004
S0SPSR
0xE0020008
S0SPDR
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
描述
名称
SPCCR
SPINT
SPI 时钟计数寄存器。 该寄存器控制主机 SCK 的频率。
SPI 中断标志寄存器。该寄存器包含 SPI 接口的中断标志。
访问
复位值*
R/W
0
R/W
0
SPI0
地址&名称
0xE002000C
S0SPCCR
0xE002001C
S0SPINT
* 复位值仅指已使用位中保存的数据,不包括保留位的内容。
SPI 控制寄存器(S0SPCR - 0xE0020000)
SPCR 寄存器根据每个配置位的设定来控制 SPI 的操作。
表 110 SPI 控制寄存器(S0SPCR - 0xE0020000)
SPCR
功能
2:0
保留
描述
复位值
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
NA
时钟相位控制决定 SPI 传输时数据和时钟的关系并控制从机传输的起始
和结束。当该位为 1 时,数据在 SCK 的第二个时钟沿采样。当 SSEL 信
3
CPHA
号激活时,传输从第一个时钟沿开始并在最后一个采样时钟沿结束。
0
当该位为 0 时,数据在 SCK 的第一个时钟沿采样。传输从 SSEL 信号激
活时开始,并在 SSEL 信号无效时结束。
4
CPOL
时钟极性控制。当该位为 1 时,SCK 为低有效。为 0 时,SCK 为高有效。
0
5
MSTR
主模式选择。为 1 时,SPI 处于主模式。为 0 时,SPI 处于从模式。
0
6
LSBF
7
SPIE
LSBF 用来控制传输的每个字节的移动方向。为 1 时,SPI 数据传输 LSB
0
(位 0)在先。为 0 时,SPI 数据传输 MSB (位 7)在先。
SPI 中断使能。为 1 时,每次 SPIF 或 MODF 置位时都会产生硬件中断。
0
为 0 时,SPI 中断被禁止。
SPI 状态寄存器(S0SPSR - 0xE0020004)
SPSR 寄存器根据配置位的设定来控制 SPI 的操作。
表 111
SPI 状态寄存器(S0SPSR - 0xE0020004)
SPSR
功能
2:0
保留
3
ABRT
4
MODF
5
ROVR
6
WCOL
描述
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
从机中止。该位为 1 时表示发生了从机中止。当读取该寄存器时,该位清零。
模式错误。为 1 时表示发生了模式错误。先通过读取该寄存器清零 MODF 位,
再写 SPI 控制寄存器。
读溢出。为 1 时表示发生了读溢出。当读取该寄存器时,该位清零。
写冲突。为 1 时表示发生了写冲突。先通过读取该寄存器清零 WCOL 位,再
访问 SPI 数据寄存器。
复位值
NA
0
0
0
0
SPI 传输完成标志。为 1 时表示一次 SPI 数据传输完成。在主模式下,该位
在传输的最后一个周期置位。在从机模式下,该位在 SCK 的最后一个数据采
7
SPIF
样边沿置位。当第一次读取该寄存器时,该位清零。然后才能访问 SPI 数据
寄存器。
注:SPIF 不是 SPI 中断标志。中断标志位于 SPINT 寄存器中。
99
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
SPI 数据寄存器(S0SPDR - 0xE0020008)
双向数据寄存器为 SPI 提供数据的发送和接收。发送数据通过将数据写入该寄存器来实现。SPI 接收的
数据可从该寄存器中读出。处于主模式时,写该寄存器将启动 SPI 数据传输。从数据传输开始到 SPIF 状态
位置位并且还没有读取状态寄存器的这段时间内不能对该寄存器执行写操作。
表 112 SPI 数据寄存器(S0SPDR - 0xE0020008)
SPDR
功能
7:0
数据
描述
SPI 双向数据口
复位值
0
SPI 时钟计数寄存器(S0SPCCR - 0xE002000C)
该寄存器控制主机 SCK 的频率。寄存器指示构成一个 SPI 时钟的 pclk 周期的数据。该寄存器的值必须
为偶数。因此 bit0 必须为 0。该寄存器的值还必须大于等于 8。如果寄存器的值不符合上述条件,可能导致
产生不可预测的动作。
表 113 SPI 时钟计数寄存器(S0SPCCR - 0xE002000C)
SPCCR
功能
7:0
计数值
描述
SPI 时钟计数值设定
复位值
0
SPI 速率可以这样进行计算:PCLK 速率/SPCCR 值。pclk 速率为 CCLK/VPB 除数,由 VPBDIV 寄存
器的内容决定。
SPI 中断寄存器(S0SPINT - 0xE002001C)
该寄存器包含 SPI 接口的中断标志。
表 114 SPI 中断寄存器(S0SPINT - 0xE002001C)
SPINT
功能
描述
复位值
SPI 中断标志。由 SPI 接口置位以产生中断。向该位写入 1 清零。
0
SPI 中断
注:当 SPIE=1 并且 SPIF 和 WCOL 位中至少有一位为 1 时该位置位。
但是,只有当 SPI 中断位置位并且 SPI 中断在 VIC 中被使能,SPI 中断
0
才能由中断处理软件处理。
7:1
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
结构
SPI0 接口中的 SPI 方框图见图 37。
100
NA
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
MOSI_in
MOSI_out
MISO_in
MISO_out
SPI 移位寄存器
SPI 时钟发生器
& 检测器
SPI 中断
SCK_in
SCK_out
SS_in
SPI 寄存器接口
VPB 总线
SPI 状态控制
SCK_out_en
MOSI_out_en
MISO_out_en
输出使能逻辑
图 37 SPI 方框图
13. SSP 控制器(SPI1)
特性
兼容 Motorola SPI、4 线 TI SSI 和 National 半导体的 Microwire 总线
同步串行通信
主机或从机操作
8 帧收发 FIFO
每帧 4~16 位
描述
SSP 是一个同步串行接口控制器,可控制 SPI、4 线 SSI 或 Microwire 总线的操作。它可处理总线上多
个主机和从机的相互作用。在一定数据传输过程中,总线上只能有一个主机和一个从机进行通信。数据传
输原则上是全双工的,4~16 位帧的数据由主机发送到从机或由从机发送到主机。但实际上,大多数情况
下只有一个方向上的数据流包含有意义的数据。
管脚描述
表 115 SSP 管脚描述
管脚
类
接口管脚名称/功能
名称
型
SPI
SSI
Microwire
SCK1
I/O
SCK
CLK
SK
管脚描述
串行时钟。SCK/CLK/SK 是用来同步数据传输的时钟
信号。它由主机驱动,从机接收。当使用 SPI 接口时,
时钟可编程为高有效或低有效,否则,时钟总是高有
效。SCK1 的状态只能在数据传输过程中改变,在任何
其它时间里,SSP 使其保持无效状态或不驱动它(使其
处于高阻态)。
101
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
管脚
类
接口管脚名称/功能
管脚描述
名称
型
SPI
SSI
Microwire
SSEL1
I/O
SSEL
FS
CS
从机选择/帧同步/芯片选择。当 SSP 是总线主机时,它
在串行数据启动前或串行数据传输终止后立刻驱动该
信号来指示一次所选总线和模式的合适数据传输。当
SSP 是总线从机时,该信号用来根据使用的通信协议来
限制主机数据的去向。当只有一个总线主机和一个总
线从机时,主机的帧同步或从机选择信号直接与从机
相应的输入相连。当总线上有多个从机时,必须要进
一步限制这些从机的帧选择/从机选择输入,以防有一
次传输有多个从机响应。
MISO1
I/O
MISO
DR(M)
SI(M)
主机输入从机输出。MISO 信号使串行数据从从机传输
DX(S)
SO(S)
到主机。当 SSP 是从机时,串行数据从该信号输出。
当 SSP 是主机时,该信号输出串行数据的时钟。当 SSP
是从机且未被 SSEL 选择时,它将不驱动该信号(使其
处于高阻态)。
MOSI1
I/O
MOSI
DX(M)
SO(M)
主机输出从机输入。MOSI 信号使串行数据从主机传输
DR(S)
SI(S)
到从机。当 SSP 是主机时,串行数据从该信号输出。
当 SSP 是从机时,该信号输出串行数据的时钟。
Texas 仪器公司的同步串行数据帧格式
图 38 给出来 SSP 模块支持的 4 线 Texas 仪器公司同步串行数据帧的格式。
CLK
FS
DX/DR
MSB
LSB
4 to 16 bits
a) 单帧传输
CLK
FS
DX/DR
MSB
LSB
MSB
4 to 16 bits
LSB
4 to 16 bits
b) 连续/连续两帧的传输
图 38
Texas 仪器公司同步串行数据帧的格式:
a) 单帧传输
b) 连续/连续两帧的传输
假设器件在该模式下配置用作主机,当 SSP 处于空闲模式时,CLK 和 FS 强制为低,发送数据线 DX
102
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
为三态。只要发送 FIFO 的底端入口包含数据,FS 将在一个 CLK 周期内保持高电平。被发送的数据从发送
FIFO 传输到发送逻辑的串行移位寄存器。在 CLK 的下个上升沿,4~16 位数据帧的 MSB 从 DX 管脚移出。
同样地,接收到的 MSB 从片外串行从器件的 DR 管脚移入。
然后,SSP 和片外串行从器件在每个 CLK 的下降沿的控制下将每一个数据位送入相应的串行移位器。
LSB 被锁存后,接收到的数据在 CLK 的首个上升沿从串行移位器传递到接收 FIFO。
SPI 帧格式
SPI 接口是一个 4 线接口,它的 SSEL 信号用作从机选择。SPI 格式的主要特性是 SCK 信号的无效状
态和相位可通过 SSPCR0 控制寄存器的 CPOL 位和 CPHA 位来编程设定。
时钟极性(CPOL)
当 CPOL 时钟极性控制位为 0 时,它将在 SCK 管脚上产生一个稳定的低电平。如果 CPOL 时钟极性控
制位为 1,不发生数据传输时 CLK 管脚上将出现一个稳定的高电平。
时钟相位(CPHA)
CPHA 控制位用来选择捕获数据的时钟沿,这个边沿的状态允许改变。它将对第一个数据捕获沿出现
前由于允许或不允许的时钟跳变的出现而发送的第一个位产生最重大的影响。当 CPHA 相位控制位为 0 时,
数据在第 1 个时钟沿跳变时被捕获。如果 CPHA 相位控制位为 1,数据在第 2 个时钟沿跳变时被捕获。
CPOL=0, CPHA=0 时的 SPI 格式
CPOL=0,CPHA=0 时 SPI 格式的单帧传输和连续传输信号时序如图 39 所示。
SCK
SS
MOSI
MISO
MSB
LSB
MSB
LSB
Q
4 to 16 bits
a) CPOL=0和CPHA=0时Motorola 的SPI帧格式(单帧传输)
SCK
SS
MOSI
MISO
MSB
LSB
MSB
LSB
MSB
Q
LSB
MSB
LSB
4 to 16 bits
4 to 16 bits
b) CPOL=0和CPHA=0时Motorola的SPI帧格式(连续传输)
图 39 CPOL=0 和 CPHA=0 时的 SPI 格式 (a) 单帧 和 b) 连续传输)
这种配置在空闲期间:
CLK 信号强制为低
SSEL 强制为高
发送 MOSI/MISO 处于高阻态
103
Q
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据。这
就使得从机数据使能到主机的 MISO 输入线上。主机的 MOSI 被使能。
1/2 个 SCK 周期后,有效主机数据被传输到 MOSI 管脚。由于主机和从机数据都被设置,再过 1/2 个
SCK 周期后 SCK 主机时钟管脚将变高。
此时,数据在 SCK 信号的上升沿被捕获,保持到 SCK 的下降沿。
在发送单个字时,当数据字的每一位发送完后,最后一位被捕获后的一个 SCK 周期内,SSEL 返回到
空闲的高电平状态。
但是,在连续顺序的发送过程中,在每个数据字传输之间 SSEL 信号必须为高。这是因为当 CPHA 位
为逻辑 0 时,从机选择位冻结了串行外围寄存器中的数据,不允许改变。因此,在每次数据传输之间主器
件必须拉高从器件的 SSEL 管脚来使能串行外设数据的写操作。当连续传输结束后,最后一位被捕获后一
个 SCK 周期内,SSEL 返回到空闲状态。
CPOL=0,CPHA=1 时的 SPI 格式
CPOL=0,CPHA=1 时 SPI 格式的传输信号时序如图 40 所示,它包括单帧传输和连续传输两种方式。
SCK
SS
MOSI
MISO
Q
MSB
LSB
MSB
LSB
Q
4 to 16 bits
a) CPOL=0和CPHA=1时Motorola的SPI帧格式(单帧传输)
图 40 CPOL=0 和 CPHA=1 时的 SPI 帧格式
这种配置在空闲期间:
SCK 信号强制为低
SSEL 强制为高
发送 MOSI/MISO 管脚处于高阻态
如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据。主
机的 MOSI 管脚使能。再过 1/2 个 SCK 周期,主机和从机的有效数据都被使能输出到各自的发送线上。同
时,SCK 出现上升沿跳变。
然后,数据在 SCK 信号的下降沿被捕获并保持到 SCK 信号的上升沿。
在单个字的传输过程中,当所有位传输结束后,最后一位被捕获后一个 SCK 周期内,SSEL 线返回到
空闲的高电平状态。
对于连续的顺序传输,SSEL 在两个连续的数据字传输之间保持低电平,终止传输的方法与单个字传输
相同。
CPOL=1, CPHA=0 时的 SPI 格式
CPOL=1,CPHA=0 时 SPI 格式的单帧和连续传输信号时序如图 41 所示。
104
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
SCK
SS
M O SI
M SB
M IS O
LSB
MSB
LSB
Q
4 to 1 6 b i ts
a) CPOL=1和CPHA=0时Motorola的SPI帧格式(单帧传输)
SCK
SS
M SB
M O SI
M IS O
LSB
M SB
LSB
MSB
Q
LSB
M SB
LSB
Q
4 to 1 6 b i ts
4 to 1 6 b i ts
b) CPOL=1和CPHA=0时Motorola的SPI帧格式(连续传输)
图 41
CPOL=1 和 CPHA=0 时的 SPI 帧格式(a)单帧和 b) 连续传输)
这种配置在空闲期间:
SCK 信号强制为高
SSEL 强制为高
发送 MOSI/MISO 管脚处于高阻态
如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据,使
得从机数据立即传输到主机的 MISO 线上。主机的 MOSI 管脚被使能。
1/2 个 SCK 周期后,有效主机数据被传输到 MOSI。由于主机和从机数据都被设置,再过 1/2 个 SCK
周期后 SCK 主机时钟管脚将变高。这就意味着数据在 SCK 信号的下降沿被捕获,保持到 SCK 的上升沿。
在发送单个字时,当数据字的每一位发送完后,最后一位被捕获后一个 SCK 周期内,SSEL 返回到空
闲的高电平状态。
但是,在连续顺序的发送过程中,在每个数据字传输之间 SSEL 信号必须为高。这是因为当 CPHA 位
为逻辑 0 时,从机选择位冻结了串行外围寄存器中的数据,不允许改变。因此,在每次数据传输之间主器
件必须拉高从器件的 SSEL 管脚来使能串行外设数据的写操作。当连续传输结束后,最后一位被捕获后一
个 SCK 周期内,SSEL 返回到空闲状态。
CPOL=1,CPHA=1 时的 SPI 格式
CPOL=1,CPHA=1 时 SPI 格式的传输信号时序如图 42 所示,它包含单帧传输和连续传输两种方式。
SCK
SS
MOSI
MISO
Q
MSB
LSB
MSB
LSB
Q
4 to 16 bits
a) CPOL=1和CPHA=1时Motorola的SPI帧格式(单帧传输)
图 42
CPOL=1 和 CPHA=1 时的 SPI 帧格式
105
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
这种配置在空闲期间:
SCK 信号强制为高
SSEL 强制为高
发送 MOSI/MISO 管脚处于高阻态
如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据。主
机的 MOSI 管脚使能。再过 1/2 个 SCK 周期,主机和从机的有效数据都被使能输出到各自的发送线上。同
时,SCK 出现上升沿跳变。然后,数据在 SCK 信号的上升沿被捕获并保持到 SCK 信号的下降沿。
在单个字的传输过程中,当所有位传输结束后,最后一位被捕获后一个 CLK 周期内,SSEL 返回到空
闲的高电平状态。对于连续的顺序传输,SSEL 管脚仍然保持有效的低电平状态,最后一个字的最后一位捕
获结束后,它再返回到上述的空闲状态。总的说来,SSEL 管脚在两个连续的数据字传输之间保持低电平,
终止传输的方法与单个字传输相同。
半导体 Microwire 帧格式
图 43 所示为 Microwire 帧格式的单帧传输。图 44 所示为 Microwire 帧格式的连续帧传输。
SK
CS
SO
LSB
MSB
SI
8位控制
0 MSB
LSB
4~16位
输出数据
图 43
Microwire 帧格式(单帧传输)
Microwire 格式与 SPI 格式类似,但它的发送是半双工而非全双工模式,数据从主机传输到从机。每次
串行发送以 SSP 传输到片外从器件的一个 8 位控制字开始。在发送控制字的过程中,SSP 不接收数据。控
制字发送结束后,片外从器件对其进行译码,在 8 位控制信息的最后一位发送完一个串行时钟后,才响应
到来的所需数据。返回的数据长度为 4~16 位,使得总的数据帧长度在 13~25 位之间。
这种配置在空闲期间:
SK 信号强制为低
CS 强制为高
发送数据线 SO 可强制为低
发送过程由写入到发送 FIFO 的一个控制字节来触发。CS 的下降沿使发送 FIFO 底端入口的数据传输
到发送逻辑的串行移位寄存器,8 位控制帧的 MSB 移出到 SO 管脚。CS 在帧发送过程中保持低电平。SI
在帧发送过程中保持三态。
片外串行从器件在每个 SK 的上升沿将每个控制位锁存到串行移位器。当从器件完成最后一位的锁存
后,一个时钟等待周期内对控制字节进行译码,然后从器件通过将数据发回给 SSP 来响应。每一位在 SK
的下降沿驱动到 SI 上。SSP 又在 SK 的上升沿将每一位锁存。在帧传输结束后,对于单帧传输,在最后一
位被锁存到接收串行移位器后的一个时钟周期内 CS 信号被拉高,使数据传输到接收 FIFO。
注:在 LSB 被接收移位器锁存后或当 CS 变为高电平时,片外从器件的接收线在任何一个 SK 的下降
沿都呈现三态。
连续传输过程的数据发送开始和结束的方法都与单帧传输相同。所不同的是,在连续传输过程中,CS
持续有效(保持低电平)
,数据连续发送。当前数据帧的 LSB 被接收后,下一帧的控制字节立刻直接发送。
在一帧数据的 LSB 被锁存到 SSP 后,每个接收到的数据在 SK 的下降沿传送到接收移位器。
106
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
SK
CS
SO
LSB
LSB
MSB
8位控制
SI
0 MSB
LSB
4~16位
输出数据
图 34
LSB
MSB
4~16位
输出数据
Microwire 帧格式(连续传输)
Microwire 模式中 CS 相对 SK 的建立和保持时间
Microwire 模式中,当 CS 变低后,SSP 从机在 SK 的上升沿对接收数据的首位进行采样。因此,主机
驱动 SK 自由运行时必须确保 CS 信号相对 SK 的上升沿有足够的建立和保持时间。
图 45 给出了建立和保持时间的要求。相对 SSP 从机采样接收数据的首个位的 SK 上升沿,CS 的建立
时间至少为 SSP 的 SK 周期的 2 倍。相对于之前的 SK 上升沿,CS 的保持时间至少为一个 SK 周期。
t SETUP=2*tSK
tHOLD =tSK
SK
CS
SI
图 45
Microwire 帧格式(连续传输)
寄存器描述
SSP 控制器的基地址为 0xE006 8000。其寄存器的基址偏移量如下所示。
表 116 SSP 寄存器
名称
描述
访问
地址
SSPCR0
控制寄存器 0。选择串行时钟速率、总线类型和数据长度。
读/写
0xE0068000
SSPCR1
控制寄存器 1。选择主机/从机和其它模式。
读/写
0xE0068004
SSPDR
数据寄存器。写满发送 FIFO 和读空接收 FIFO。
读/写
0xE0068008
SSPSR
状态寄存器
读/写
0xE006800C
SSPCPSR
时钟预分频寄存器。
读/写
0xE0068010
SSPIMSC
中断屏蔽设置和清零寄存器。
读/写
0xE0068014
SSPRIS
所有中断状态寄存器。
读/写
0xE0068018
SSPMIS
屏蔽中断状态寄存器。
读/写
0xE006801C
SSPICR
中断清零寄存器。
读/写
0xE0068020
SSP 控制寄存器 0(SSPCR0-0xE0068000)
该寄存器控制着 SSP 控制器的基本操作。
107
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 117 SSP 控制寄存器 0(SSPCR0 – 0xE0068000)
SSPCR0
名称
描述
复位值
15:8
SCR
串行时钟速率。其值为总线上每位的预分频器输出时钟数减 1。假
0
设 CPSDVR 为预分频器分频值,VPB 时钟 PCLK 为预分频器的时
钟,则位频率为 f (PCLK)/ (CPSDVR*(SCR+1))。
7
CPHA
时钟输出相位。该位只用在 SPI 模式。该位为 0 时,SSP 控制器使
0
总线时钟在每帧传输之间保持低电平,该位为 1 时,SSP 控制器使
总线时钟在每帧传输之间保持高电平。
6
CPOL
时钟输出极性。该位只用在 SPI 模式。如果该位为 0,SSP 控制器
0
在帧传输的第一个时钟跳变上升沿捕获串行数据,即跳变远离时钟
线在帧内部的状态。如果该位为 1,SSP 控制器在帧传输的第二个
时钟跳变沿捕获串行数据,即跳变后退到时钟线在帧内部的状态。
5:4
FRF
帧格式。00=SPI,01=SSI,10=Microwire,11=保留
0
3:0
DSS
数据长度选择。该字段控制着每帧传输的位数目:
0
0000 - 0010=保留, 0011=4 位, 0111=8 位,…, 1111=16 位
SSP 控制寄存器 1(SSPCR1 – 0xE0068004)
该寄存器控制着 SSP 控制器的工作方式。
表 118 SSP 控制寄存器 1(SSPCR1 – 0xE0068004)
SSPCR1
名称
描述
复位值
3
SOD
从机输出禁能。该位只与从机模式有关(MS=1)
。如果该位为 1,
0
禁止 SSP 控制器驱动发送数据线(MISO)
。
2
MS
主机/从机模式。该位为 0(复位后的值)时 SSP 控制器用作总线主
0
机,驱动 SCLK、MOSI 和 SSEL 并接收 MISO 的信息。该位为 1
时 SSP 控制器用作总线从机,驱动 MISO 和接收 SCLK、MOSI 和
SSEL 的信息。该位只能在 SSE 位为 0 时写入(SSE 位为 1 时可同
时写 MS 和 SSE)
。
1
SSE
SSP 使能。该位为 1 时,SSP 控制器可与串行总线上的其它器件相
0
互通信。在置位该位前,软件应将合适的控制信息写入其它 SSP 寄
存器和中断控制器寄存器。
0
LBM
回写模式。正常工作模式下该位为 0。该位为 1 时,串行输入脚可
,而不是仅用作串行输入脚
用作串行输出脚共用(MOSI 或 MISO)
(MISO 或 MOSI 分别起作用)
。
SSP 数据寄存器(SSPDR – 0xE0068008)
软件可将要发送的数据写入该寄存器,或从该寄存器读出接收到的数据。
108
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 119 SSP 数据寄存器 1(SSPDR – 0xE0068008)
SSPDR
名称
描述
复位值
15:0
DATA
写:当状态寄存器的 TNF 位为 1 指示 Tx FIFO 未满时,软件可将要发送
0
的帧的数据写入该寄存器。如果 Tx FIFO 以前为空且 SSP 控制器空闲,则
立刻开始发送数据。否则,写入该寄存器的数据要等到所有数据发送(或
接收)完后才能发送。如果数据长度小于 16 位,软件必须对数据进行调
整后再写入该寄存器。
读:当状态寄存器的 RNE 位为 1 指示 Rx FIFO 不为空时,软件可读取该
寄存器。软件读取该寄存器时,SSP 控制器将返回从 Rx FIFO 中读走的最
后一个数据。如果数据长度小于 16 位,该字段的数据必须进行调整,低
位对齐,高位补零。
SSP 状态寄存器(SSPSR – 0xE006800C)
该只读寄存器反映了 SSP 控制器的当前状态。
表 120 SSP 状态寄存器(SSPSR – 0xE006800C)
SSPSR
名称
描述
复位值
4
BSY
忙。SSP 控制器空闲、当前正在发送/接收一帧数据和/或 Tx FIFO 不
0
为空时该位为 1。
3
RFF
接收 FIFO 满。接收 FIFO 满时该位为 1,反之为 0。
0
2
RNE
接收 FIFO 不为空。接收 FIFO 为空时该位为 0,反之为 1。
0
1
TNF
发送 FIFO 未满。Tx FIFO 满时该位为 0,反之为 1。
1
0
TFE
发送 FIFO 空。发送 FIFO 为空时该位为 1,反之为 0。
1
SSP 时钟预分频寄存器(SSPCPSR – 0xE0068010)
该寄存器控制着预分频器分频 VPOB 时钟 PCLK 得到预分频器时钟的因子,
反过来,
预分频时钟被 SCR
(SSPCR0 的位 15~8)分频后得到位时钟。
表 121 SSP 时钟预分频寄存器(SSPCPSR – 0xE0068010)
SSPCPSR
名称
描述
复位值
7:0
CPSDVSR
这是一个 2~254 中的一个偶数。它是 PCLK 的分频因子,PCLK 通
0
过分频后得到预分频器输出时钟。位 0 读出时总是为 0。
SSP 中断屏蔽设置/清除寄存器(SSPIMSC – 0xE0068014)
该寄存器控制着 SSP 控制器 4 个中断条件的使能。注意:ARM 使用“masked”一词时的理解与经典
计算机术语相反,计算机术语中“masked”意思是“禁能”
。而 ARM 中“masked”的意思是“使能“。为
了防止混淆,ARM 文档中通常不用“masked”一词。
表 122 SSP 中断屏蔽设置/清除寄存器(SSPIMSC – 0xE0068014)
SSPIMSC
名称
描述
3
TXIM
当 Tx FIFO 至少有一半为空时,软件置位该位来使能中断。
0
2
RXIM
当 Rx FIFO 至少有一半为满时,软件置位该位来使能中断。
0
1
RTM
当出现接收超时条件时,软件置位该位来使能中断。当 Rx FIFO 不为
0
空且在 32 个位时间内既未接收新数据又未从 FIFO 中读出数据时,产
生接收超时。
109
复位值
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
SSPIMSC
名称
0
RORIM
描述
复位值
当接收溢出时软件置位该位来使能中断,即当 Rx FIFO 满时又完成另
0
一个帧的接收时该位置位。ARM 特别指出,接收溢出时新的数据帧
会将前面的数据帧覆盖。
SSP 所有中断状态寄存器(SSPRIS – 0xE0068018)
当一个中断条件出现时,该只读寄存器中对应的位置位,与中断是否通过 SSPIMSC 使能无关。
表 123 SSP 所有中断状态寄存器(SSPRIS – 0xE0068018)
SSPRIS
名称
描述
复位值
3
TXRIS
当 Tx FIFO 至少一半为空时该位置位。
1
2
RXRIS
当 Rx FIFO 至少一半为满时该位置位。
0
1
RTRIS
当接收超时条件出现时该位置位。注意:一旦开始接收数据,接收
0
超时撤除。
0
RORRIS
当 Rx FIFO 满时又接收到另一帧数据时该位置位。ARM 特别指出,
0
此时接收到的新数据帧会将前面的数据帧覆盖。
SSP 屏蔽中断状态寄存器(SSPMIS – 0xE006801C)
当一个中断条件出现且相应的中断在 SSPIMSC 中被使能时,对应在该只读寄存器的位置位。当产生
SSP 中断时,中断服务程序可通过读该寄存器来判断中断源。
表 124 SSP 屏蔽中断状态寄存器(SSPMIS – 0xE006801C)
SSPMIS
名称
描述
复位值
3
TXMIS
当 Tx FIFO 至少一半为空且中断被使能时该位置位。
0
2
RXMIS
当 Rx FIFO 至少一半为满且中断被使能时该位置位。
0
1
RTMIS
当接收超时条件出现且中断被使能时该位置位。注意:一旦开始接
0
收数据,接收超时撤除。
0
RORMIS
当 Rx FIFO 满时又接收到另一帧数据,并且中断被使能时该位置
0
位。
SSP 中断清除寄存器(SSPICR – 0xE0068020)
软件可通过向该只写寄存器写入 1 或多个 1 来清除 SSP 控制器的相关中断。注意:另外 2 个中断条件
可通过写或读相应的 FIFO 来清除,通过清除 SSPIMSC 中对应的位来禁能。
表 125 SSP 中断清除寄存器(SSPICR – 0xE0068020)
SSPICR
名称
1
RTIC
0
RORIC
描述
复位值
向该位写 1 来清除接收超时中断。
NA
向该位写 1 来清除“Rx FIFO 满时还接收到数据”的中断。
NA
定时器/计数器 0 和定时器/计数器 1
14.
定时器/计数器 0 和定时器/计数器 1 除了外设基地址以外,其它都相同。
特性
带可编程 32 位预分频器的 32 位定时器/计数器
用作计数器或定时器
具有多达 4 路 32 位的捕获通道。当输入信号跳变时可取得定时器的瞬时值。也可选择使捕获事
110
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
件产生中断。
4 个 32 位匹配寄存器:
-匹配时定时器继续工作,可选择产生中断
-匹配时停止定时器,可选择产生中断
-匹配时复位定时器,可选择产生中断
多达 4 个对应于匹配寄存器的外部输出,具有下列特性:
-匹配时设置为低电平
-匹配时设置为高电平
-匹配时翻转
-匹配时无动作
应用
用于对内部事件进行计数的间隔定时器
通过捕获输入实现脉宽调制
自由运行的定时器
描述
定时器对外设时钟(pclk)周期进行计数,可选择产生中断或根据 4 个匹配寄存器的设定,在到达指
定的定时值时执行其它动作。它还包括 4 个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选
择产生中断。
管脚描述
表 126 所示为每个定时器相关管脚的简要描述。
表 126 管脚概况
管脚名称
管脚方向
管脚描述
CAP0.3..0
捕获信号 捕获管脚的跳变可配置为将定时器值装入一个捕获寄存器,并可选择
CAP1.3..0
产生一个中断。可选择多个管脚用作捕获功能。当有多个管脚被选择用作一个
TIMER0/1 通道的捕获输入时,使用编号最小的管脚。例如,30 脚(P0.6)和 46
脚(P0.16)选择用作 CAP0.2 时,TIMER0 只选择 30 脚执行 CAP0.2 功能。
下面列出了所有捕获信号及其被选用的管脚:
CAP0.0(3 脚)
:P0.2, P0.22 和 P0.30。
CAP0.1(2 脚)
:P0.4 和 P0.27。
输入
CAP0.2(3 脚)
:P0.6, P0.16 和 P0.28。
CAP0.3(1 脚)
:P0.29。
CAP1.0(1 脚)
:P0.10。
CAP1.1(1 脚)
:P0.11。
CAP1.2(2 脚)
:P0.17 和 P0.19。
CAP1.3(2 脚)
:P0.18 和 P0.21。
计数器/定时器可选择一个捕获信号作为时钟源来代替 pclk 时钟。详见计数控制
寄存器(CTCR: TIMER0-T0CTCR:0xE0004070;TIMER1-T1TCR: 0xE0008070)。
111
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
管脚名称
管脚方向
管脚描述
MAT0.3..0
外部匹配输出 0/1 当匹配寄存器 0/1(MR3:0)等于定时器计数器(TC)时,该
MAT1.3..0
输出可翻转,变为低电平、变为高电平或不变。外部匹配寄存器(EMR)控制
该输出的功能。可选择多个管脚并行用作匹配输出功能。例如,同时选择 2 个管
脚并行提供 MAT1.3 功能。
下面列出了所有匹配信号及其选用的管脚:
MAT0.0(2 脚)
:P0.3 和 P0.22。
输出
MAT0.1(2 脚)
:P0.5 和 P0.27。
MAT0.2(2 脚)
:P0.16 和 P0.28。
MAT0.3(1 脚)
:P0.29。
MAT1.0(1 脚)
:P0.12。
MAT1.1(1 脚)
:P0.13。
MAT1.2(2 脚)
:P0.17 和 P0.19。
MAT1.3(2 脚)
:P0.18 和 P0.20。
寄存器描述
每个定时器所包含的寄存器如表 127 所示。(“复位值”仅表示使用位的数据,不包括保留位的内容)。
详见下列的描述。
表 127 定时器 0 和定时器 1 寄存器映射
名称
描述
访问
复位值
中断寄存器 可以写 IR 来清除中断。可读取 IR 来识别哪个中
IR
R/W
断源被挂起。
R/W
计数器可通过 TCR 禁止或复位。
PR
R/W
过 TCR 进行控制。
预分频寄存器 32 位 TC 每经过 PR+1 个 pclk 周期加 1。
R/W
时,TC 加 1。
匹配控制寄存器
MCR
R/W
位 TC。
MR1
MR2
MR3
止 TC 和 PC 和/或产生中断。
匹配寄存器 1 MR0 见描述
R/W
匹配寄存器 2 MR0 见描述
R/W
匹配寄存器 3 MR0 见描述
捕获控制寄存器
CCR
R/W
R/W
边沿以及在发生捕获时是否产生中断。
112
T1IR
0xE0004004
0xE0008004
T0TCR
T1TCR
0xE0004008
0xE0008008
T0TC
T1TC
0xE000400C
0xE000800C
T0PR
T1PR
0xE0004010
0xE0008010
T0PC
T1PC
0xE0004014
0xE0008014
T0MCR
T1MCR
0xE0004018
0xE0008018
T0MR0
T1MR0
0xE000401C
0xE000801C
T0MR1
T1MR1
0xE0004020
0xE0008020
T0MR2
T1MR2
0xE0004024
0xE0008024
T0MR3
T1MR3
0xE0004028
0xE0008028
T0CCR
T1CCR
0
0
0
0
0
CCR 控制用于装载捕获寄存器的捕获输入
R/W
0xE0008000
T0IR
0
匹配寄存器 0 MR0 可通过 MCR 设定为在匹配时复位 TC,停
MR0
0xE0004000
0
MCR 用于控制在匹配时是否产生中断或复
R/W
地址&名称
0
预分频计数器 每当 32 位 PC 的值增加到等于 PR 中保存的值
PC
地址&名称
0
定时器计数器 32 位 TC 每经过 PR+1 个 pclk 周期加 1。TC 通
TC
定时器 1
0
定时器控制寄存器 TCR 用于控制定时器计数器功能。定时器
TCR
定时器 0
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
名称
描述
访问
复位值
捕获寄存器 0 当在 CAP0.0(CAP1.0)上产生捕获事件时,CR0
CR0
CR1
CR2
CR3
RO
装载 TC 的值。
捕获寄存器 1 见 CR0 描述
捕获寄存器 2 见 CR0 描述
RO
捕获寄存器 3 见 CR0 描述
外 部 匹 配 寄 存 器
EMR
RO
RO
MAT0.0-3(MAT1.0-3)。
R/W
数器模式下选择计数的信号和边沿
地址&名称
地址&名称
0xE000402C
0xE000802C
T0CR0
T1CR0
0xE0004030
0xE0008030
T0CR1
T1CR1
0xE0004034
0xE0008034
T0CR2
T1CR2
0xE0004038
0xE0008038
T0CR3
T1CR3
0xE000403C
0xE000803C
T0EMR
T1EMR
0xE0004070
0xE0008070
T0CTCR
T1CTCR
0
0
0
0
计数控制寄存器。CTCR 用来选择定时器或计数器模式,在计
CTCR
定时器 1
0
EMR 控 制 外 部 匹 配 管 脚
R/W
定时器 0
0
中断寄存器(IR: 定时器 0 - T0IR:0xE00040000;定时器 1 - T1IR:0xE0008000)
中断寄存器包含 4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,
否则为 0。向对应的 IR 位写入 1 会复位中断。写入 0 无效。
表 128 中断寄存器(IR: 定时器 0 - T0IR:0xE0004000;定时器 1 - T1IR:0xE0008000)
IR
功能
描述
复位值
0
MR0 中断 匹配通道 0 的中断标志
0
1
MR1 中断 匹配通道 1 的中断标志
0
2
MR2 中断 匹配通道 2 的中断标志
0
3
MR3 中断 匹配通道 3 的中断标志
0
4
CR0 中断
捕获通道 0 事件的中断标志
0
5
CR1 中断
捕获通道 1 事件的中断标志
0
6
CR2 中断
捕获通道 2 事件的中断标志
0
7
CR3 中断
捕获通道 3 事件的中断标志
0
定时器控制寄存器(TCR: 定时器 0 – T0TCR:0xE0004004;定时器 1 – T1TCR:0xE0008004)
定时器控制寄存器 TCR 用于控制定时器计数器的操作。
表 129 定时器控制寄存器(TCR - 定时器 0 – T0TCR:0xE0004004;定时器 1 – T1TCR:0xE0008004)
TCR
功能
0
计数器使能
1
计数器复位
描述
复位值
为 1 时,定时器计数器和预分频计数器使能计数。为 0 时,计数器被禁
止。
为 1 时,
定时器计数器和预分频计数器在 pclk 的下一个上升沿同步复位。
计数器在 TCR[1]恢复为 0 之前保持复位状态。
0
0
计数控制寄存器(CTCR:定时器 0-T0CTCR:0xE0004070;定时器 1-T1TCR: 0xE0008070)
计数控制寄存器(CTCR)用来选择定时器或计数器模式,计数器模式下选择计数的管脚和边沿。
当选择工作在计数器模式时,在每个 pclk 时钟的上升沿对 CAP 输入(由 CTCR 位 3:2 选择)进行采样。
比较完 CAP 输入的 2 次连续采样结果后,可以识别下面四个事件中的一个:上升沿、下降沿、任一边沿或
选择的 CAP 输入的电平无变化。只要识别到的事件与 CTCR 寄存器中位 1:0 选择的事件相对应时,定时器
113
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
计数器寄存器加 1。
计数器的外部时钟源的操作受到一些限制。由于 pclk 时钟的 2 个连续的上升沿用来识别 CAP 选择输
入的一个边沿,所以 CAP 输入的频率不能大于 1/2 个 pclk 时钟。因此,这种情况下同一 CAP 输入的高/低
电平持续时间不能小于 1/fpclk。
表 130 计数控制寄存器(CTCR:定时器 0-T0CTCR: 0xE0004070;定时器 1-T1TCR: 0xE0008070)
功能
描述
复位值
计数器/定时器模式
该字段选择触发定时器的预分频计数器(PC)递增、清除 PC
00
CTCR
1:0
和定时器计数器(TC)递增的 PCLK 边沿:
00:定时器模式:每个 PCLK 的上升沿。
01:计数器模式:TC 在位 3:2 选择的 CAP 输入的上升沿
递增。
10:计数器模式:TC 在位 3:2 选择的 CAP 输入的下降沿
递增。
11:计数器模式:TC 在位 3:2 选择的 CAP 输入的上升和
下降沿递增。
3:2
计数器输入选择
当位 1:0 不是 00 时,这些位用来选择对哪一个 CAP 管脚进
00
行采样计时:
00=CAPn.0
01=CAPn.1
10=CAPn.2
11=CAPn.3
注:如果在 TnCTCR 中选择计数器模式用于某个特定的
CAPn 输入,则捕获控制寄存器(TnCCR)中对应该输入的 3
位必须编程设为 000。但是,可在相同的定时器中选择其它
3 个 CAPn 输入用于捕获和/或中断。
定时器计数器(TC: 定时器 0 – T0TC:0xE0004008;定时器 1 – T1TC:0xE0008008)
当预分频计数器到达计数的上限时,32 位定时器计数器加 1。如果 TC 在到达计数上限之前没有被复
位,它将一直计数到 0xFFFFFFFF 然后翻转到 0x00000000。该事件不会产生中断。如果需要,可用匹配寄
存器检测溢出。
预分频寄存器(PR: 定时器 0 – T0PR:0xE000400C;定时器 1 – T1PR:0xE000800C)
32 位预分频寄存器指到预分频计数器的最大值。
预分频计数器寄存器(PC: 定时器 0 – T0PC:0xE0004010;定时器 1 – T1PC:0xE0008010)
32 位预分频计数器使用某个常量来控制 pclk 的分频。这样可在定时器溢出之前控制定时器的分辨率和
最大时间之间的关系。预分频计数器每个 pclk 周期加 1。当其到达预分频寄存器中保存的值时,定时器计
数器加 1,预分频计数器在下个 pclk 周期复位。这样,当 PR=0 时,定时器计数器每个 pclk 周期加 1,当
PR=1 时,定时器计数器每 2 个 pclk 周期加 1。
匹配寄存器(MR0 - MR3)
匹配寄存器值连续与定时器计数值相比较。当两个值相等时自动触发相应动作。这些动作包括产生中
断,复位定时器计数器或停止定时器。所执行的动作由 MCR 寄存器控制。
114
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
匹配控制寄存器(MCR: 定时器 0 – T0MCR:0xE0004014;定时器 1 – T1MCR:0xE0008014)
匹配控制寄存器用于控制在发生匹配时所执行的操作。每个位的功能见表 131。
表 131 匹配控制寄存器(MCR: 定时器 0 – T0MCR:0xE0004014;定时器 1 – T1MCR:0xE0008014)
MCR
功能
描述
0
中断(MR0)
为 1 时,MR0 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。
0
1
复位(MR0)
为 1 时,MR0 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。
0
2
停止(MR0)
3
中断(MR1)
为 1 时,MR1 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。
0
4
复位(MR1)
为 1 时,MR1 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。
0
5
停止(MR1)
6
中断(MR2)
为 1 时,MR2 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。
0
7
复位(MR2)
为 1 时,MR2 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。
0
8
停止(MR2)
9
中断(MR3)
为 1 时,MR3 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。
0
10
复位(MR3)
为 1 时,MR3 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。
0
11
停止(MR3)
为 1 时,MR0 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0
时,该特性被禁止。
为 1 时,MR1 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0
时,该特性被禁止。
为 1 时,MR2 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0
时,该特性被禁止。
为 1 时,MR3 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0
时,该特性被禁止。
复位值
0
0
0
0
捕获寄存器(CR0 - CR3)
每个捕获寄存器都与一个器件管脚相关联。当管脚发生特定的事件时,可将定时器计数值装入该寄存
器。捕获控制寄存器的设定决定捕获功能是否使能以及捕获事件在管脚的上升沿、下降沿或是双边沿发生。
捕获控制寄存器(CCR: 定时器 0 – T0CCR:0xE0004028;定时器 1 – T1CCR:0xE0008028)
当发生捕获事件时,捕获控制寄存器用于控制将定时器计数值是否装入 4 个捕获寄存器中的一个以及
是否产生中断。同时设置上升沿和下降沿位也是有效的配置,这样会在双边沿触发捕获事件。在下面的描
述中,
“n”代表定时器的编号 0 或 1。
表 132 捕获控制寄存器(CCR: 定时器 0 – T0CCR:0xE0004028;定时器 1 – T1CCR:0xE0008028)
CCR
0
1
2
3
4
5
功能
描述
CAPn.0
为 1 时,CAPn.0 上 0 到 1 的跳变将导致 TC 的内容装入 CR0。为 0 时,
上升沿捕获 该特性被禁止。
CAPn.0
为 1 时,CAPn.0 上 1 到 0 的跳变将导致 TC 的内容装入 CR0。为 0 时,
下降沿捕获 该特性被禁止。
CAPn.0
事件中断
CAPn.1
为 1 时,CAPn.0 的捕获事件所导致的 CR0 装载将产生一个中断。为 0
时,该特性被禁止。
为 1 时,CAPn.1 上 0 到 1 的跳变将导致 TC 的内容装入 CR1。为 0 时,
上升沿捕获 该特性被禁止。
CAPn.1
为 1 时,CAPn.1 上 1 到 0 的跳变将导致 TC 的内容装入 CR1。为 0 时,
下降沿捕获 该特性被禁止。
CAPn.1
事件中断
为 1 时,CAPn.1 的捕获事件所导致的 CR1 装载将产生一个中断。为 0
时,该特性被禁止。
115
复位值
0
0
0
0
0
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
CCR
6
7
8
9
10
11
功能
描述
复位值
CAPn.2
为 1 时,CAPn.2 上 0 到 1 的跳变将导致 TC 的内容装入 CR2。为 0 时,
上升沿捕获 该特性被禁止。
CAPn.2
为 1 时,CAPn.2 上 1 到 0 的跳变将导致 TC 的内容装入 CR2。为 0 时,
下降沿捕获 该特性被禁止。
CAPn.2
事件中断
CAPn.3
为 1 时,CAPn.2 的捕获事件所导致的 CR2 装载将产生一个中断。为 0
时,该特性被禁止。
为 1 时,CAPn.3 上 0 到 1 的跳变将导致 TC 的内容装入 CR3。为 0 时,
上升沿捕获 该特性被禁止。
CAPn.3
为 1 时,CAPn.3 上 1 到 0 的跳变将导致 TC 的内容装入 CR3。为 0 时,
下降沿捕获 该特性被禁止。
CAPn.3
事件中断
为 1 时,CAPn.3 的捕获事件所导致的 CR3 装载将产生一个中断。为 0
时,该特性被禁止。
0
0
0
0
0
0
外部匹配寄存器(EMR: 定时器 0 – T0EMR:0xE000403C;定时器 1 – T1EMR:0xE000803C)
外部匹配寄存器提供外部匹配管脚 M(0-3)的控制和状态。
表 133 外部匹配寄存器(EMR: 定时器 0 – T0EMR:0xE000403C;定时器 1 – T1EMR:0xE000803C)
EMR
功能
描述
复位值
不管 MAT0.0/MAT1.0 是否连接到管脚,该位都会反映 MAT0.0/MAT1.0 的
0
外部匹配 0 状态。当 MR0 发生匹配时,该输出可翻转,变为低电平,变为高电平或
0
不执行任何动作。位 EMR[4:5]控制该输出的功能。
不管 MAT0.1/MAT1.1 是否连接到管脚,该位都会反映 MAT0.1/MAT1.1 的
1
外部匹配 1 状态。当 MR1 发生匹配时,该输出可翻转,变为低电平,变为高电平或
0
不执行任何动作。位 EMR[6:7]控制该输出的功能。
不管 MAT0.2/MAT1.2 是否连接到管脚,该位都会反映 MAT0.2/MAT1.2 的
2
外部匹配 2 状态。当 MR2 发生匹配时,该输出可翻转,变为低电平,变为高电平或
0
不执行任何动作。位 EMR[8:9]控制该输出的功能。
不管 MAT0.3/MAT1.3 是否连接到管脚,该位都会反映 MAT0.3/MAT1.3 的
3
外部匹配 3 状态。当 MR3 发生匹配时,该输出可翻转,变为低电平,变为高电平或
0
不执行任何动作。位 EMR[10:11]控制该输出的功能。
外部匹配
5:4
控制 0
外部匹配
7:6
控制 1
外部匹配
9:8
控制 2
外部匹配
11:10
控制 3
决定外部匹配 0 的功能。表 134 所示为这两个位的编码。
0
决定外部匹配 1 的功能。表 134 所示为这两个位的编码。
0
决定外部匹配 2 的功能。表 134 所示为这两个位的编码。
0
决定外部匹配 3 的功能。表 134 所示为这两个位的编码。
0
表 134 外部匹配控制
EMR[11:10], EMR[9:8]
功能
EMR[7:6],或 EMR[5:4]
00
不执行任何动作
116
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
EMR[11:10], EMR[9:8]
功能
EMR[7:6],或 EMR[5:4]
01
将对应的外部匹配输出设置为 0(如果连接到管脚,则输出低电平)
10
将对应的外部匹配输出设置为 1(如果连接到管脚,则输出高电平)
11
使对应的外部匹配输出翻转
定时器举例操作
图 46 所示为定时器配置为在匹配时复位计数并产生中断。预分频器设置为 2,匹配寄存器设置为 6。
在发生匹配的定时器周期结束时,定时器计数值复位。这样就使匹配值具有完整长度的周期。指示匹配发
生的中断在定时器到达匹配值的下一个时钟产生。
图 47 所示为定时器配置为在匹配时停止并产生中断。预分频器设置为 2,匹配寄存器设置为 6。在定
时器到达匹配值的下一个周期中,TCR 中的定时器使能位清零并产生指示匹配发生的中断。
pclk
预分频计数器
2
定时器计数器
4
0
1
2
0
5
1
2
6
0
1
2
0
0
定时器计数器
复位
中断
图 46 定时器周期设置为 PR=2, MRx=6, 匹配时使能中断和复位
pclk
预分频计数器
2
定时器计数器
4
TCR[0]
(计数器使能)
0
1
2
0
5
6
1
0
中断
图 47 定时器周期设置为 PR=2, MRx=6, 匹配时使能中断和停止
结构
定时器 0 和定时器 1 的方框图,见图 48。
117
1
1
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
匹配寄存器 0
匹配寄存器 1
匹配寄存器 2
匹配寄存器 3
匹配控制寄存器
外部匹配寄存器
中断寄存器
控制
MAT[3:0]
中断
CAP[3:0]
匹配时停止
匹配时复位
Load[3:0]
=
=
=
=
捕获控制寄存器
CSN
捕获寄存器 0
定时器计数器
捕获寄存器 1
捕获寄存器 2
捕获寄存器 3 *
CE
TCI
预分频计数器
复位
使能
定时器控制寄存器
MAXVAL
预分频寄存器
* 注:捕获寄存器 3 不能用于定时器 0
图 48 定时器方框图
脉宽调制器(PWM)
15.
LPC3131/2132/2138 的脉宽调制器建立在前一章的标准定时器 0/1 之上。应用可在 PWM 和匹配功能当
中进行选择。
特性
7 个匹配寄存器,可实现 6 个单边沿控制或 3 个双边沿控制 PWM 输出,或这两种类型的混合输
出:
-连续操作,可选择在匹配时产生中断
-匹配时停止定时器,可选择产生中断
-匹配时复位定时器,可选择产生中断
每个匹配寄存器对应一个外部输出,具有下列特性:
-匹配时设置为低电平
-匹配时设置为高电平
-匹配时翻转
-匹配时无动作
支持单边沿控制和/或双边沿控制的 PWM 输出。单边沿控制 PWM 输出在每个周期开始时总是为
118
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
高电平,除非输出保持恒定低电平。双边沿控制 PWM 输出可在一个周期内的任何位置产生边沿。
这样可同时产生正和负脉冲。
脉冲周期和宽度可以是任何的定时器计数值。这样可实现灵活的分辨率和重复速率的设定。所有
PWM 输出都以相同的重复率发生。
双边沿控制的 PWM 输出可编程为正脉冲或负脉冲
匹配寄存器更新与脉冲输出同步,防止产生错误的脉冲。软件必须在新的匹配值生效之前将它们
释放。
如果不使能 PWM 模式,可作为一个标准定时器
带可编程 32 位预分频器的 32 位定时器/计数器
当输入信号跳变时 4 个捕获寄存器可取得定时器的瞬时值,也可选择使捕获事件产生中断。
描述
PWM 基于标准的定时器模块并具有其所有特性。不过 LPC2131/2132/2138 只将其 PWM 功能输出到管
脚。定时器对外设时钟(pclk)进行计数,可选择产生中断或基于 7 个匹配寄存器,在到达指定的定时值时执
行其它动作。它还包括 4 个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选择在事件发生时
产生中断。PWM 功能是一个附加特性,建立在匹配寄存器事件基础之上。
独立控制上升和下降沿位置的能力使 PWM 可以应用于更多的领域。例如,多相位电机控制通常需要 3
个非重叠的 PWM 输出,而这 3 个输出的脉宽和位置需要独立进行控制。
两个匹配寄存器可用于提供单边沿控制的 PWM 输出。一个匹配寄存器(PWMMR0)通过匹配时重新
设置计数值来控制 PWM 周期率。另一个匹配寄存器控制 PWM 边沿的位置。每个额外的单边沿控制 PWM
输出只需要一个匹配寄存器,因为所有 PWM 输出的重复率速率是相同的。多个单边沿控制 PWM 输出在
每个 PWM 周期的开始,当 PWMMR0 发生匹配时,都有一个上升沿。
3 个匹配寄存器可用于提供一个双边沿控制 PWM 输出。也就是说,PWMMR0 匹配寄存器控制 PWM
周期速率,其它匹配寄存器控制两个 PWM 边沿位置。每个额外的双边沿控制 PWM 输出只需要两个匹配
寄存器,因为所有 PWM 输出的重复率速率是相同的。
使用双边沿控制 PWM 输出时,指定的匹配寄存器控制输出的上升和下降沿。这样就产生了正脉冲(当
上升沿先于下降沿时)和负脉冲(当下降沿先于上升沿时)
。
图 49 所示为 PWM 的方框图。在标准定时器模块上增加的部分位于图的右边和顶端。
119
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
映像寄存器 0
匹配寄存器 0
装载使能
映像寄存器 1
匹配寄存器 1
装载使能
映像寄存器 2
匹配寄存器 2
装载使能
映像寄存器 3
匹配寄存器 3
装载使能
映像寄存器 4
匹配寄存器 4
装载使能
映像寄存器 5
匹配寄存器 5
装载使能
映像寄存器 6
匹配寄存器 6
装载使能
匹配 0
锁存使能寄存器
匹配 0
匹配控制寄存器
S
匹配 1
R
Q
EN
PWM1
PWMENA1
PWMSEL2
mux
匹配 2
中断寄存器
S
R
Q
EN
PWM2
PWMENA2
PWMSEL3
控制
mux
=
M[6:0]
中断
=
匹配 3
R
=
mux
=
匹配 4
=
S
R
=
PWM3
PWMENA3
Q
EN
PWM4
PWMENA4
PWMSEL5
mux
匹配 5
CSN
Q
EN
PWMSEL4
=
匹配时停止
匹配时复位
S
R
Q
EN
PWM5
PWMENA5
PWMSEL6
定时器计数器
mux
CE
S
匹配 6
S
R
Q
EN
PWM6
PWMENA6
TCI
预分频计数器
复位
使能
定时器控制寄存器
PWMENA1..6
PWMSEL2..6
MAXVAL
预分频寄存器
PWM 控制寄存器
注:该图用来解释 PWM 的功能,不是一个具体的设计方案。
图 49 PWM 方框图
图 50 所示为一个用来说明 PWM 值与波形输出之间关系的例子。图 49 的 PWM 输出逻辑允许通过
PWMSELn 位选择单边沿或者双边沿控制的 PWM 输出。表 135 所示为不同 PWM 输出的匹配寄存器选项。
支持 N-1 个单边沿 PWM 输出或(N-1)/2 个双边沿 PWM 输出,其中 N 为匹配寄存器的个数。如果需要也可
使用混合的 PWM 类型。
下面所示的波形是单个 PWM 周期,它演示了在下列条件下的 PWM 输出:
定时器配置为 PWM 模式
匹配寄存器 0 配置为在发生匹配事件时复位定时器/计数器
控制位 PWMSEL2 和 PWMSEL4 置位
匹配寄存器值如下:
120
广州周立功单片机发展有限公司 Tel: (020)38730976
MR0=100
(PWM 速率)
MR1=41, MR2=78
(PWM2 输出)
MR3=53, MR4=27
(PWM4 输出)
MR5=65
(PWM5 输出)
38730977
Fax: 38730925
http://www.zlgmcu.com
PWM2
PWM4
PWM5
0
27
41
53
65
78
100
(计数器复位)
图 50 PWM 波形举例
表 135 PWM 触发器的置位和复位输入
PWM 通道
单边沿 PWM(PWMSELn=0)
置位
复位
双边沿 PWM(PWMSELn=1)
置位
复位
1
1
匹配 0
匹配 1
匹配 0
匹配 11
2
匹配 0
匹配 2
匹配 1
匹配 2
2
3
匹配 0
匹配 3
匹配 2
匹配 32
4
匹配 0
匹配 4
匹配 3
匹配 4
2
5
匹配 0
匹配 5
匹配 4
匹配 52
6
匹配 0
匹配 6
匹配 5
匹配 6
注:
1.
这种情况下与单边沿模式相同,因为匹配 0 是相邻的匹配寄存器。基本上 PWM1 不能用作双边
沿输出。
2.
通常不建议使用 PWM 通道 3 和通道 5 作为双边沿 PWM 输出,
因为这样会减少可用的双边沿 PWM
的个数。使用 PWM2, PWM4 和 PWM6 可得到最多个数的双边沿 PWM 输出。
单边沿控制的 PWM 输出规则
1.
所有单边沿控制的 PWM 输出在 PWM 周期开始时都为高电平,除非它们的匹配值等于 0。
2.
每个 PWM 输出在到达其匹配值时都会变为低电平。如果没有发生匹配(即匹配值大于 PWM 速
率)
,PWM 将一直保持高电平。
双边沿控制的 PWM 输出规则
当一个新的周期将要开始时,使用以下 5 个规则来决定下一个 PMW 输出的值:
1.
在一个 PWM 周期结束时(与下一个 PWM 周期的开始重合的时间点)
,使用下一个 PMW 周期的
匹配值,例外见规则 3。
2.
等于 0 或当前 PWM 速率(与匹配通道 0 的值相同)的匹配值等效。例外见规则 3。例如,在 PWM
周期开始时的下降沿请求与 PWM 周期结束时的下降沿请求等效。
3.
当匹配值正在改变时,如果有其中一个“旧”匹配值等于 PWM 速率,并且新的匹配值不等于 0
或 PWM 速率,旧的匹配值不等于 0,那么旧的匹配值将再次被使用。
4.
如果同时请求 PWM 输出置位和清零,清零优先。当置位和清零匹配值相同时,或者置位或清零
121
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
值等于 0 并且其它值等于 PWM 速率时,可能发生这种状况。
5.
如果匹配值超出范围(大于 PMW 速率值)
,将不会发生匹配事件,匹配通道对输出不起作用。
也就是说 PWM 输出将一直保持一种状态,可以为低电平、高电平或是“无变化”输出。
管脚描述
表 136 汇集了所有与 PWM 相关的管脚。
表 136 PWM 管脚汇总
管脚名称
管脚方向
管脚描述
PWM1
输出
PWM 通道 1 输出
PWM2
输出
PWM 通道 2 输出
PWM3
输出
PWM 通道 3 输出
PWM4
输出
PWM 通道 4 输出
PWM5
输出
PWM 通道 5 输出
PWM6
输出
PWM 通道 6 输出
寄存器描述
PWM 功能增加了新的寄存器和寄存器位,见表 137。
表 137 PWM 寄存器映射
名称
PWMIR
描述
访问
复位值*
地址
0
0xE0014000
R/W
0
0xE0014004
R/W
0
0xE0014008
PWM 中断寄存器 可以写 IR 来清除中断。可读取 IR 来识别哪个中断源被挂起。 R/W
PWM 定时器控制寄存器 TCR 用于控制定时器计数器功能。定时器计数器可通
PWMTCR
过 TCR 禁止或复位。
PWM 定时器计数器 32 位 TC 每经过 PR+1 个 pclk 周期加 1。TC 通过 TCR 进行
PWMTC
控制。
PWMPR
PWM 预分频寄存器 TC 每经过 PR+1 个 pclk 周期加 1。
R/W
0
0xE001400C
PWMPC
PWM 预分频计数器 每当 32 位 PC 的值增加到等于 PR 中保存的值时,TC 加 1。 R/W
0
0xE0014010
R/W
0
0xE0014014
PWMMR0 和/或产生中断。此外,MR0 和 TC 的匹配将置位所有单边沿模式的 PWM 输出, R/W
0
0xE0014018
R/W
0
0xE001401C
R/W
0
0xE0014020
R/W
0
0xE0014024
R/W
0
0xE0014040
PWMMCR PWM 匹配控制寄存器 MCR 用于控制在匹配时是否产生中断或复位 TC。
PWM 匹配寄存器 0 MR0 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC
并置位双边沿模式下的 PWM1 输出。
PWM 匹配寄存器 1 MR1 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC
PWMMR1 和/或产生中断。此外,MR1 和 TC 的匹配将清零单边沿模式或双边沿模式下的
PWM1,并置位双边沿模式下的 PWM2 输出。
PWM 匹配寄存器 2 MR2 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC
PWMMR2 和/或产生中断。此外,MR2 和 TC 的匹配将清零单边沿模式或双边沿模式下的
PWM2,并置位双边沿模式下的 PWM3 输出。
PWM 匹配寄存器 3 MR3 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC
PWMMR3 和/或产生中断。此外,MR3 和 TC 的匹配将清零单边沿模式或双边沿模式下的
PWM3,并置位双边沿模式下的 PWM4 输出。
PWM 匹配寄存器 4 MR4 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC
PWMMR4 和/或产生中断。此外,MR4 和 TC 的匹配将清零单边沿模式或双边沿模式下的
PWM4,并置位双边沿模式下的 PWM5 输出。
122
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
续上表…
名称
描述
访问
复位值*
地址
R/W
0
0xE0014044
R/W
0
0xE0014048
R/W
0
0xE001404C
R/W
0
0xE0014050
PWM 匹配寄存器 5 MR5 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC
PWMMR5 和/或产生中断。此外,MR5 和 TC 的匹配将清零单边沿模式或双边沿模式下的
PWM5,并置位双边沿模式下的 PWM6 输出。
PWM 匹配寄存器 6 MR6 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC
PWMMR6 和/或产生中断。此外,MR6 和 TC 的匹配将清零单边沿模式或双边沿模式下的
PWM6,
PWM 控制寄存器 使能 PWM 输出并选择 PWM 通道类型为单边沿或双边沿控
PWMPCR
制。
PWMLER PWM 锁存使能寄存器 使能使用新的 PWM 匹配值。
PWM 中断寄存器(PWMIR - 0xE0014000)
中断寄存器包含 11 个位(见表 138)
。其中 7 个位用于匹配中断,4 个位保留将来之用。如果有中断产
生,PWMIR 中的对应位会置位,否则为 0。向对应的 IR 位写入 1 会复位中断。写入 0 无效。
表 138 中断寄存器(PWMIR - 0xE0014000)
PWMIR
功能
描述
复位值
0
PWMMR0 中断 PWM 匹配通道 0 的中断标志
0
1
PWMMR1 中断 PWM 匹配通道 1 的中断标志
0
2
PWMMR2 中断 PWM 匹配通道 2 的中断标志
0
3
PWMMR3 中断 PWM 匹配通道 3 的中断标志
0
4
保留
应用程序不能向该位写入 1
0
5
保留
应用程序不能向该位写入 1
0
6
保留
应用程序不能向该位写入 1
0
7
保留
应用程序不能向该位写入 1
0
8
PWMMR4 中断 PWM 匹配通道 4 的中断标志
0
9
PWMMR5 中断 PWM 匹配通道 5 的中断标志
0
10
PWMMR6 中断 PWM 匹配通道 6 的中断标志
0
PWM 定时器控制寄存器(PWMTCR - 0xE0014004)
PWM 定时器控制寄存器(PWMTCR)用于控制 PWM 定时器计数器的操作。每个位的功能见表 139。
表 139 PWM 定时器控制寄存器(PWMTCR - 0xE0014004)
PWMTCR
功能
0
计数器使能
1
计数器复位
2
保留
描述
为 1 时,PWM 定时器计数器和 PWM 预分频计数器使能计数。为 0 时,
计数器被禁止。
为 1 时,PWM 定时器计数器和 PWM 预分频计数器在 pclk 的下一个上
升沿同步复位。计数器在 TCR[1]恢复为 0 之前保持复位状态。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
123
复位值
0
0
NA
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
PWMTCR
功能
描述
复位值
为 1 时,PWM 模式使能。PWM 模式将映像寄存器连接到匹配寄存器。
只有在 PWMLER 中的相应位置位后发生的匹配 0 事件才会使程序写入
3
PWM 使能 匹配寄存器的值生效。需要注意的是,决定 PWM 速率(PWM 匹配 0)
0
的匹配寄存器必须在使能 PWM 之前设定。否则不会发生使映像寄存器
内容生效的匹配事件。
PWM 定时器计数器(PWMTC - 0xE0014008)
当预分频计数器到达计数的上限时,32 位定时器计数器加 1。如果 PWMTC 在到达计数上限之前没有
被复位,它将一直计数到 0xFFFFFFFF 然后翻转到 0x00000000。该事件不会产生中断。如果需要,可用匹
配寄存器检测溢出。
PWM 预分频寄存器(PWMPR - 0xE001400C)
32 位预分频寄存器指到预分频寄存器的最大值。
PWM 预分频计数器寄存器(PWMPC - 0xE0014010)
32 位 PWM 预分频计数器使用某个常量来控制 pclk 的分频,再使之用于 PWM 定时器计数器。这样可
实现控制定时器分辨率和定时器溢出时间之间的关系。预分频计数器每个 pclk 周期加 1。当其到达 PWM
预分频计数器中保存的值时,PWM 定时器计数器加 1,PWM 预分频计数器在下个 pclk 周期复位。这样,
当 PWMPR=0 时,PWM TC 每 1 个 pclk 周期加 1,当 PWMPR=1 时,PWMTC 每 2 个 pclk 周期加 1。
PWM 匹配寄存器(PWMMR0 –PWMMR6)
32 位 PWM 匹配寄存器值连续与 PWM 定时器计数值相比较。当两个值相等时自动触发相应动作。这
些动作包括产生中断,复位 PWM 定时器计数器或停止定时器。所执行的动作由 PWMMCR 寄存器控制。
PWM 匹配控制寄存器(PWMMCR - 0xE0014014)
PWM 匹配控制寄存器用于控制在发生匹配时所执行的操作。每个位的功能见表 140。
表 140 PWM 匹配控制寄存器(PWMMCR – 0xE0014014)
PWMMCR
功能
描述
复位值
0
中断(PWMMR0)
为 1 时,PWMMR0 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。
0
1
复位(PWMMR0)
为 1 时,PWMMR0 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。
0
2
停止(PWMMR0)
3
中断(PWMMR1)
为 1 时,PWMMR1 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。
0
4
复位(PWMMR1)
为 1 时,PWMMR1 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。
0
5
停止(PWMMR1)
6
中断(PWMMR2)
为 1 时,PWMMR2 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。
0
7
复位(PWMMR2)
为 1 时,PWMMR2 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。
0
8
停止(PWMMR2)
9
中断(PWMMR3)
为 1 时,PWMMR3 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。
0
10
复位(PWMMR3)
为 1 时,PWMMR3 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。
0
为 1 时,PWMMR0 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使
PWMTCR[0]复位为 0。为 0 时,该特性被禁止。
0
为 1 时,PWMMR1 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使
PWMTCR[0]复位为 0。为 0 时,该特性被禁止。
0
为 1 时,PWMMR2 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使
PWMTCR[0]复位为 0。为 0 时,该特性被禁止。
124
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
PWMMCR
功能
描述
复位值
11
停止(PWMMR3)
12
中断(PWMMR4)
为 1 时,PWMMR4 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。
0
13
复位(PWMMR4)
为 1 时,PWMMR4 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。
0
14
停止(PWMMR4)
15
中断(PWMMR5)
为 1 时,PWMMR5 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。
0
16
复位(PWMMR5)
为 1 时,PWMMR5 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。
0
17
停止(PWMMR5)
18
中断(PWMMR6)
为 1 时,PWMMR6 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。
0
19
复位(PWMMR6)
为 1 时,PWMMR6 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。
0
20
停止(PWMMR6)
为 1 时,PWMMR3 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使
0
PWMTCR[0]复位为 0。为 0 时,该特性被禁止。
为 1 时,PWMMR4 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使
0
PWMTCR[0]复位为 0。为 0 时,该特性被禁止。
为 1 时,PWMMR5 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使
0
PWMTCR[0]复位为 0。为 0 时,该特性被禁止。
为 1 时, PWMMR6 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使
PWMTCR[0]复位为 0。为 0 时,该特性被禁止。
0
PWM 控制寄存器(PWMPCR - 0xE001404C)
PWM 控制寄存器用于使能并选择每个 PMW 通道的类型。每个位的功能详见表 141。
表 141 PWM 控制寄存器(PWMPCR - 0xE001404C)
PWMPCR
功能
描述
1:0
保留
2
PWMSEL2
为 0 时,PWM2 选择单边沿控制模式;为 1 时,选择双边沿控制模式。
0
3
PWMSEL3
为 0 时,PWM3 选择单边沿控制模式;为 1 时,选择双边沿控制模式。
0
4
PWMSEL4
为 0 时,PWM4 选择单边沿控制模式;为 1 时,选择双边沿控制模式。
0
5
PWMSEL5
为 0 时,PWM5 选择单边沿控制模式;为 1 时,选择双边沿控制模式。
0
6
PWMSEL6
为 0 时,PWM6 选择单边沿控制模式;为 1 时,选择双边沿控制模式。
0
8:7
保留
9
PWMENA1
为 1 时,使能 PWM1 输出;为 0 时,禁止 PWM1 输出。
0
10
PWMENA2
为 1 时,使能 PWM2 输出;为 0 时,禁止 PWM2 输出。
0
11
PWMENA3
为 1 时,使能 PWM3 输出;为 0 时,禁止 PWM3 输出。
0
12
PWMENA4
为 1 时,使能 PWM4 输出;为 0 时,禁止 PWM4 输出。
0
13
PWMENA5
为 1 时,使能 PWM5 输出;为 0 时,禁止 PWM5 输出。
0
14
PWMENA6
为 1 时,使能 PWM6 输出;为 0 时,禁止 PWM6 输出。
0
15
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
复位值
NA
NA
NA
PWM 锁存使能寄存器(PWMLER - 0xE0014050)
当 PWM 匹配寄存器用于产生 PWM 时,PWM 锁存使能寄存器用于控制 PWM 匹配寄存器的更新。当
定时器处于 PWM 模式时如果软件对 PWM 匹配寄存器位置执行写操作,写入的值将保存在一个映像寄存
,如果对应的锁存使能寄存器
器中。当 PWM 匹配 0 事件发生时(在 PWM 模式下,通常也会复位定时器)
位已经置位,
那么映像寄存器的内容将传送到实际的匹配寄存器中。
此时,
新的值将生效并决定下一个 PWM
周期。当发生新值传送时,LER 中的所有位都自动清零。在 PWMLER 中相应位置位和 PWM 匹配 0 事件
发生之前,任何写入 PWM 匹配寄存器的值都不会影响 PWM 操作。
125
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
例如,当 PWM2 配置为双边沿操作并处于运行中时,改变定时的典型事件顺序如下:
将新值写入 PWM 匹配 1 寄存器;
将新值写入 PWM 匹配 2 寄存器;
写 PWMLER,同时置位 bit1 和 bit2;
更改的值将在下一次定时器复位时(当 PWM 匹配 0 事件发生时)生效。
写两个 PWM 匹配寄存器的顺序并不重要,因为在写 PWMLER 之前,写入的新匹配值都无效。这样
就确保了两个值同时生效。如果使用单个值,也可用同样的方法更改。
PWMLER 中所有位的功能如表 140 所示。
表 140 PWM 锁存使能寄存器(PWMLER - 0xE0014050)
功能
PWMLER
0
1
2
3
4
5
6
使能 PWM
匹配 0 锁存
使能 PWM
匹配 1 锁存
使能 PWM
匹配 2 锁存
使能 PWM
匹配 3 锁存
使能 PWM
匹配 4 锁存
使能 PWM
匹配 5 锁存
使能 PWM
匹配 6 锁存
保留
7
描述
复位值
将该位置位允许最后写入 PWM 匹配 0 寄存器的值在由 PWM 匹配事
件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器
0
(PWMMCR)的描述。
将该位置位允许最后写入 PWM 匹配 1 寄存器的值在由 PWM 匹配事
件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器
0
(PWMMCR)的描述。
将该位置位允许最后写入 PWM 匹配 2 寄存器的值在由 PWM 匹配事
件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器
0
(PWMMCR)的描述。
将该位置位允许最后写入 PWM 匹配 3 寄存器的值在由 PWM 匹配事
件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器
0
(PWMMCR)的描述。
将该位置位允许最后写入 PWM 匹配 4 寄存器的值在由 PWM 匹配事
件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器
0
(PWMMCR)的描述。
将该位置位允许最后写入 PWM 匹配 5 寄存器的值在由 PWM 匹配事
件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器
0
(PWMMCR)的描述。
将该位置位允许最后写入 PWM 匹配 6 寄存器的值在由 PWM 匹配事
件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器
0
(PWMMCR)的描述。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
16. A/D 转换器
特性
1 个(LPC2131/2132)或 2 个(LPC2138)10 位逐次逼近式模数转换器
8 个管脚复用为输入脚
掉电模式
测量范围:0~3V
10 位转换时间>=2.44us
一个或多个输入的 Burst 转换模式
可选择由输入跳变或定时器匹配信号触发转换
2 个转换器的全局启动命令(LPC2138)
126
NA
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
描述
A/D 转换器的基本时钟由 VPB 时钟提供。每个转换器包含一个可编程分频器,可将时钟调整至逐步逼
近转换所需的 4.5MHz(最大)
。完全满足精度要求的转换需要 11 个这样的时钟。
管脚描述
表 143
A/D 管脚描述
管脚名称
类型
管脚描述
ADO7:0
输入
模拟输入。A/D 转换器单元可测量输入信号的电压。注意:这些模拟输入通
常连接到管脚上,即使管脚复用寄存器将它们设定为端口管脚。通过将这些
&
管脚驱动成端口输出来实现 A/D 转换器的简单自测。
AD1.7:0
注:当使用 A/D 转换器时,模拟输入管脚的信号电平在任何时候都不能大于
(LPC2138)
V3A,否则,读出的 A/D 值无效。如果在应用中未使用 A/D 转换器,则 A/D
输入管脚用作可承受 5V 电压的数字 I/O 口。
Vref
参考电压
VDDA,VSSA
电源
参考电压。该管脚连接到 A/D 转换器的 VrefP 信号。
模拟电源和地。它们分别与标称为 V3 和 VSSD 的电压相同,但为了降低噪声
和出错几率,两者应当隔离。
寄存器描述
A/D 转换器的基址是 0xE003 4000。A/D 转换器包含 2 个寄存器,见表 144。
表 144
A/D 寄存器
名称
ADCR
描述
访问
A/D 控制寄存器。A/D 转换开始
读/写
复位值
0x0000 0001
前,必须写入 ADCR 寄存器来选
AD0 地址&
AD1 地址&
名称
名称
0xE003 4000
0xE006 0000
AD0CR
AD1CR
0xE003 4004
0xE006 0004
AD0DR
AD1DR
择工作模式。
ADDR
A/D 数据寄存器。该寄存器包含
读/写
NA
ADC 的 DONE 位(当 DONE 位
为 1 时)和 10 位的转换结果。
ADGSR
A/D 全局启动寄存器。写入该地
只写
0x00
址(在 A/D0 地址范围内)来同时
ADGSR
0xE003 4008
启动 2 个 A/D 转换器的转换。
A/D 控制寄存器(AD0CR – 0xE0034000, AD1CR – 0xE0060000)
表 145
A/D 控制寄存器(AD0CR – 0xE0034000, AD1CR – 0xE0060000)
ADCR
名称
描述
复位值
7:0
SEL
从 AD0.7:0/AD1.7:0 管脚中选择采样和转换输入脚。
对于 AD0,
0x01
位 0 选择管脚 AD0.0,位 7 选择管脚 AD0.7。软件控制模式下,
这些位中只有一位可被置位。硬件扫描模式下,SEL 可为 1~8
中的任何一个值。SEL 为零时等效于为 0x01。
15:8
CLKDIV
将 VPB 时钟(PCK)进行(CLKDIV 的值+1)分频得到 A/D
转换时钟,该时钟必须小于或等于 4.5MHz。典型地,软件将
CLKDIV 编程为最小值来得到 4.5MHz 或稍低于 4.5MHz 的时
钟,但某些情况下(例如高阻抗模拟电源)可能需要更低的时
钟。
127
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
ADCR
名称
描述
复位值
16
BURST
如果该位为 0,转换由软件控制,需要 11 个时钟方能完成。如果
0
该位为 1,A/D 转换器以 CLKS 字段选择的速率重复执行转换,
(如果必要)并从 SEL 字段中为 1 的位对应的管脚开始扫描。
A/D 转换器启动后的第一次转换的是 SEL 字段中为 1 的位中的最
低有效位对应的模拟输入,然后是为 1 的更高有效位对应的模拟
输入(如果可用)。重复转换通过清零该位终止,但该位被清零
时并不会中止正在进行的转换。
19:17
该字段用来选择 Burst 模式下每次转换使用的时钟数和所得
CLKS
000
ADDR 转换结果的 LS 位中可确保精度的位的数目,CLKS 可在
11 个时钟(10 位)~4 个时钟(3 位)之间选择:000=11 个时
钟/10 位,001=10 个时钟/9 位,…111=4 个时钟/3 位。
21
1:A/D 转换器处于正常工作模式。
PDN
0
0:A/D 转换器处于掉电模式。
23:22
TEST1:0
这些位用于器件测试。00=正常模式,01=数字测试模式,10=
0
DAC 测试模式,11=一次转换测试模式。
26:24
START
当 BURST 为 0 时,
这些位控制着 A/D 转换是否启动和何时启动:
000
000:不启动(PDN 清零时使用该值)
001:立即启动转换
010 : ADCR 寄 存 器 位 27 选 择 的 边 沿 出 现 在 P0.16/EINT0/
MAT0.2/CAP0.2 脚时启动转换
011:ADCR 寄存器位 27 选择的边沿出现在 P0.22/TD3/CAP0.0/
MAT0.0 脚时启动转换
注意:START 选择 100-111 时 MAT 信号不必输出到管脚上
100:ADCR 寄存器位 27 选择的边沿出现在 MAT0.1 时启动转换
101:ADCR 寄存器位 27 选择的边沿出现在 MAT0.3 时启动转换
110:ADCR 寄存器位 27 选择的边沿出现在 MAT1.0 时启动转换
111:ADCR 寄存器位 27 选择的边沿出现在 MAT1.1 时启动转换
27
EDGE
该位只有在 START 字段为 010~111 时有效。
0
0:在所选 CAP/MAT 信号的下降沿启动转换
1:在所选 CAP/MAT 信号的上升沿启动转换
31:28
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
A/D 数据寄存器(AD0DR – 0xE0034004, AD1DR – 0xE0060004)
表 146
A/D 数据寄存器(AD0DR – 0xE0034004, AD1DR – 0xE0060004)
ADDR
名称
5:0
保留
描述
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
128
复位值
0
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
ADDR
名称
描述
复位值
15:6
V/V3A
当 DONE 为 1 时,该字段包含一个二进制数,用来代表 SEL 字段选
X
中的 Ain 脚的电压。该字段根据 VddA 脚上的电压对 Ain 脚的电压进
行划分。该字段为 0 表明 Ain 脚的电压小于,等于或接近于 VssA;
该字段为 0x3FF 表明 Ain 脚的电压接近于,等于或大于 V3A。
为了测试的需要,写入到该字段的数据捕获到移位寄存器,寄存器的
移位时钟为 A/D 转换器时钟。仅当 TEST1:0 为 10 时,寄存器的 MS
位供给 A/D 转换器的 DINSERI 输入。
23:16
保留
保留。这些位读出时为 0。用户不应将其置位。
0
26:24
CHN
这些位包含的是 LS 位的转换通道。
X
29:27
保留
保留。这些位读出为 0。用户不应将其置位。
0
30
OVERUN
Burst 模式下,如果在转换产生 LS 位的结果前一个或多个转换结果被
0
丢失和覆盖,该位置位。在非 FIFO 操作中,该位通过读 ADDR 寄存
器清零。
31
A/D 转换结束时该位置位。该位在 ADDR 被读出和 ADCR 被写入时
DONE
0
清零。如果 ADCR 在转换过程中被写入,该位置位,启动一次新的转
换。
A/D 全局启动寄存器(ADGSR – 0xE0034008)
表 147
A/D 全局启动寄存器(ADGSR – 0xE0034008)
ADGSR
名称
描述
复位值
15:0
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
16
BURST
如果该位为 0,转换由软件控制,需要 11 个时钟方能完成。如
0
果该位为 1,A/D 转换器以 CLKS 字段选择的速率重复执行转
换,
(如果必要)并从 SEL 字段中为 1 的位对应的管脚开始扫
描。A/D 转换器启动后的第一次转换的是 SEL 字段中为 1 的位
中的最低有效位对应的模拟输入,然后是为 1 的更高有效位对
应的模拟输入(如果可用)。重复转换通过清零该位终止,但
该位被清零时并不会中止正在进行的转换。
23:17
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
26:24
START
当 BURST 为 0 时,这些位控制着 A/D 转换是否启动和何时启
000
动:
000:不启动(PDN 清零时使用该值)
001:立即启动转换
010 : 寄 存 器 位 27 选 择 的 边 沿 出 现 在 P0.16/EINT0/
MAT0.2/CAP0.2 脚时启动转换
011 : 寄 存 器 位 27 选 择 的 边 沿 出 现 在 P0.22/TD3/CAP0.0/
MAT0.0 脚时启动转换
注意:START 选择 100-111 时 MAT 信号不必输出到管脚上
100:寄存器位 27 选择的边沿出现在 MAT0.1 时启动转换
101:寄存器位 27 选择的边沿出现在 MAT0.3 时启动转换
110:寄存器位 27 选择的边沿出现在 MAT1.0 时启动转换
111: 寄存器位 27 选择的边沿出现在 MAT1.1 时启动转换
129
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
ADGSR
名称
27
EDGE
描述
该位只有在 START 字段为 010~111 时有效。
复位值
0
0:在所选 CAP/MAT 信号的下降沿启动转换
1:在所选 CAP/MAT 信号的上升沿启动转换
保留
31:28
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
操作
硬件触发转换
如果 ADCR 的 BURST 位为 0 且 START 字段的值包含在 010-111 之内,当所选管脚或定时器匹配信号
发生跳变时 A/D 转换器启动一次转换。也可选择在 4 个匹配信号中任何一个的指定边沿转换,或者在 2 个
捕获/匹配管脚中任何一个的指定边沿转换。将所选端口的管脚状态或所选的匹配信号与 ADCR 位 27 相异
或所得的结果用作边沿检测逻辑。
时钟产生
通常,我们非常希望时钟分频器(利用它来得到 4.5MHz 的转换时钟)在 A/D 转换器空闲时保持复位
状态,以便在 ADCR 的 START 字段被写入 01 或所选边沿出现在选择的信号上时可立刻启动采样时钟。这
个特性可以节省功率,尤其适用于 A/D 转换器很少使用的场合。
中断
当 DONE 位为 1 时,中断请求声明到向量中断控制器(VIC)
。软件通过 VIC 中 A/D 转换器的中断使
能位来控制是否产生中断。DONE 在 ADDR 读出时清零。
精度和数字接收器
当 A/D 转换器用来测量 AIN 脚的电压时,
并不理会管脚在管脚选择寄存器中的设置
(见管脚连接模块)
,
但是通过禁能管脚的数字接收器来选择 AIN 功能可以提高转换精度。
17. D/A 转换器(仅为 LPC2132/2138)
特性
10 位数模转换器
电阻串连结构
缓冲输出
掉电模式
选择的转换速率与功率有关
管脚描述
表 148
D/A 管脚描述
管脚名称
类型
管脚描述
Aout
输入
模拟输出。当 DACR 写入一个新值选择好设定时间后,该管脚上的电压(相
对 VssA)为 VALUE /1024*Vref。
Vref
参考电压
VDDA,VSSA
电源
参考电压。该管脚连接到 A/D 转换器的 VrefP 信号。
模拟电源和地。它们分别与标称为 V3 和 VSSD 的电压相同,但为了降低噪声
和出错几率,两者应当隔离。
130
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
寄存器描述
D/A 转换寄存器(DACR – 0xE006C000)
该寄存器是一个读/写寄存器,它包含用于模拟转换的数字值和一个用来调节转换性能和功率两者之间
的关系的位。寄存器的位 5:0 保留,供给更高性能的 D/A 转换器将来使用。
表 149
D/A 转换寄存器(DACR – 0xE006C000)
ADCR
名称
描述
复位值
5:0
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
15:6
VALUE
当该字段写入一个新值选择好设定时间后,AOUT 管脚上的电压
0
(相对 VssA)为 VALUE /1024*Vref。
16
BIAS
该位为 0 时,DAC 的设定时间最大为 1us,最大电流为 700uA。
0
该位为 1 时,DAC 的设定时间为 2.5us,最大电流为 350uA。
保留
31:17
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
0
操作
PINSEL1 寄存器的位 19:18 控制着 DAC 的使能和管脚 P0.25/AD0.4/AOUT 的状态。当这两位的值为 10
时,DAC 接通有效。当 AOUT 管脚的电阻大于或等于某一个值(待定)时 BIAS 位给定的设定时间才有效。
如果电阻小于这个值,则设定时间将比规定的时间更长。有关电阻和设定时间的关系将在最终定稿的数据
手册中详细描述。
实时时钟
18.
特性
测量保持日历或时钟的时间通路
超低功耗设计,支持电池供电系统
提供秒、分、小时、日、月、年和星期
指定的 32kHz 振荡器或可编程 VPB 时钟预分频器
专用电源管脚可与电池或 3.3V 的电压相连
描述
实时时钟(RTC)提供一套计数器在系统上电和关闭操作时对时间进行测量。RTC 消耗的功率非常低。
LPC2131/2132/2138 的 RTC 时钟可由独立的 32.768kHz 振荡器或基于 VPB 时钟的可编程预分频器来提供。
另外,RTC 还具有专用的电源管脚 Vbat,可连接到电池或其它器件使用的相同的 3.3V 电压上。
131
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
结构
clk32k
基准时钟分频器
(预分频器)
时钟发生器
选通
Clk1
CCLK
时间计数器
计数器使能
比较器
计数器增量
中断使能
报警寄存器
报警屏蔽寄存器
中断发生器
图 51 RTC 方框图
寄存器描述
RTC 包含了许多寄存器。地址空间按照功能分成 4 个部分。前 8 个地址为混合寄存器组。第二部分的
8 个地址为定时器计数器组,第三部分的 8 个地址为报警寄存器组。最后一部分为基准时钟分频器。
实时时钟模块所包含的寄存器见表 150。详细的描述见后面的寄存器。
表 150 实时时钟寄存器映射
名称
规格
ILR
2
CTC
描述
访问
复位值
地址
中断位置寄存器
R/W
*
0xE0024000
15
时钟节拍计数器
RO
*
0xE0024004
CCR
4
时钟控制寄存器
R/W
*
0xE0024008
CIIR
8
计数器递增中断寄存器
R/W
*
0xE002400C
AMR
8
报警屏蔽寄存器
R/W
*
0xE0024010
CTIME0
(32)
完整时间寄存器 0
RO
*
0xE0024014
CTIME1
(32)
完整时间寄存器 1
RO
*
0xE0024018
CTIME2
(32)
完整时间寄存器 2
RO
*
0xE002401C
SEC
6
秒寄存器
R/W
*
0xE0024020
MIN
6
分寄存器
R/W
*
0xE0024024
HOUR
5
小时寄存器
R/W
*
0xE0024028
DOM
5
日期(月)寄存器
R/W
*
0xE002402C
DOW
3
星期寄存器
R/W
*
0xE0024030
DOY
9
日期(年)寄存器
R/W
*
0xE0024034
MONTH
4
月寄存器
R/W
*
0xE0024038
132
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
名称
规格
YEAR
12
ALSEC
描述
访问
复位值
地址
年寄存器
R/W
*
0xE002403C
6
秒报警值
R/W
*
0xE0024060
ALMIN
6
分报警值
R/W
*
0xE0024064
ALHOUR
5
小时报警值
R/W
*
0xE0024068
ALDOM
5
日期(月)报警值
R/W
*
0xE002406C
ALDOW
3
星期报警值
R/W
*
0xE0024070
ALDOY
9
日期(年)报警值
R/W
*
0xE0024074
ALMON
4
月报警值
R/W
*
0xE0024078
ALYEAR
12
年报警值
R/W
*
0xE002407C
PREINT
13
预分频值,整数部分
R/W
0
0xE0024080
PREFRAC
15
预分频值,小数部分
R/W
0
0xE0024084
* RTC 当中除预分频器部分之外的其它寄存器都不受器件复位的影响。如果 RTC 使能,这些寄存器必须
通过软件来初始化。
RTC 中断
中断的产生由中断位置寄存器 (ILR)、计数器递增中断寄存器 (CIIR)、报警寄存器和报警屏蔽寄存器
(AMR) 控制。只有转换到中断状态才能产生中断。ILR 单独使能 CIIR 和 AMR 中断。CIIR 中的每个位都
对应一个时间计数器。如果 CIIR 使能用于一个特定的计数器,那么该计数器的值每增加一次就产生一个中
断。报警寄存器允许用户设定产生中断的日期或时间。AMR 提供一个屏蔽报警比较的机制。如果所有非屏
蔽报警寄存器与它们对应的时间计数器的值相匹配时,则会产生中断。
RTC 中断(如果 RTC 工作在其自身的 RTCX1-2 管脚的振荡器下)可使 LPC2131/2132/2138 退出掉电
模式。当 RTC 中断使能产生唤醒并且所选中断事件出现时,启动 XTAL 1/2 管脚相关的振荡器唤醒周期。
有关 RTC 唤醒处理的内容详见第 34 页的中断唤醒寄存器(INTWAKE-0xE01FC144)和 51 页的唤醒定时器。
混合寄存器组
表 151 所示为 A[6:2]的 0 到 7 的寄存器。详见下面的描述。
表 15 混合寄存器
地址
名称
规格
描述
2
中断位置寄存器。读出的该位置寄存器的值指示了中断
0xE0024000
ILR
0xE0024004
CTC
15
时钟节拍计数器。该寄存器的值来自时钟分频器。
RO
0xE0024008
CCR
4
时钟控制寄存器。控制时钟分频器的功能。
RW
CIIR
8
计数器递增中断寄存器。当计数器递增时,选择一个计数
0xE002400C
0xE0024010
AMR
8
报警屏蔽寄存器。控制报警寄存器的屏蔽。
RW
0xE0024014
CTIME0
32
完整时间寄存器 0
RO
0xE0024018
CTIME1
32
完整时间寄存器 1
RO
0xE002401C
CTIME2
32
完整时间寄存器 2
RO
源。向寄存器的一个位写入 1 来清除相应的中断。
器产生中断。
访问
RW
RW
中断位置(ILR - 0xE0024000)
中断位置寄存器为 2 位寄存器,它指定哪些模块产生中断(见表 152)
。向一个位写入 1 会清除相应的
133
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
中断。写入 0 无效。这样程序员可以读取该寄存器并将读出的值回写到寄存器中清除检测到的中断。
表 152 中断位置寄存器(ILR - 0xE0024000)
ILR
功能
描述
0
RTCCIF
为 1 时,计数器增量中断模块产生中断。向该位写入 1 清除计数器增量中断。
1
RTCALF
为 1 时,报警寄存器产生中断。向该位写入 1 清除报警中断。
时钟节拍计数器(CTC - 0xE0024004)
时钟节拍计数器只可读。它可通过时钟控制寄存器(CCR)复位为 0。CTC 包含时钟分频计数器位。
表 153 时钟节拍计数器(CTC - 0xE0024004)
CTC
功能
0
保留
时钟节拍
15:1
计数器
描述
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
位于秒计数器之前,CTC 每秒计数 32768 个时钟。由于 RTC 预分频器的关系,
这 32768 个时间增量的长度可能并不全部相同。详见基准时钟分频器(预分频
器)
。
时钟控制寄存器(CCR - 0xE0024008)
时钟控制寄存器是一个 5 位寄存器,它控制时钟分频电路的操作。每一位的功能见表 154。
表 154 时钟控制寄存器(CCR - 0xE0024008)
CCR
功能
0
CLKEN
1
CTCRST
3:2
CTTEST
描述
时钟使能 当该位为 1 时,时间计数器使能。为 0 时,时间计数器都被禁止,这
时可对其进行初始化。
CTC 复位 为 1 时,时钟节拍计数器复位。在 CCR[1]变为 0 之前,它将一直保
持复位状态。
测试使能 在正常操作中,这些位应当全为 0。
如果该位为 0,时钟节拍计数器计数预分频器的时钟,这与早先的 Philips 嵌入式
4
CLKSRC
ARM 系列器件相吻合。如果该位为 1,CTC 计数连接在 RTCX1 和 RTCX2 两端
的 32kHz 振荡器信号。
计数器增量中断寄存器(CIIR-0xE002400C)
计数器增量中断寄存器( CIIR )可使计数器每次增加时产生一次中断。在中断位置寄存器的位 0
(ILR[0])写入 1 之前,该中断一直保持有效。
表 155 计数器增量中断寄存器(CIIR - 0xE002400C)
CIIR
功能
描述
0
IMSEC
为 1 时,秒值的增加产生一次中断。
1
IMMIN
为 1 时,分值的增加产生一次中断。
2
IMHOUR
为 1 时,小时值的增加产生一次中断。
3
IMDOM
为 1 时,日期(月)值的增加产生一次中断。
4
IMDOW
为 1 时,星期值的增加产生一次中断。
5
IMDOY
为 1 时,日期(年)值的增加产生一次中断。
6
IMMON
为 1 时,月值的增加产生一次中断。
7
IMYEAR
为 1 时,年值的增加产生一次中断。
报警屏蔽寄存器(AMR - 0xE0024010)
报警屏蔽寄存器(AMR)允许用户屏蔽任意报警寄存器。表 156 所示为 AMR 位与报警寄存器位之间
134
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
的关系。对于报警功能来说,要产生中断,非屏蔽的报警寄存器必须匹配对应的时间计数值。只有当计数
器之间的比较第一次从不匹配到匹配时才会产生中断。向中断位置寄存器(ILR)的位写入 1 会清除相应的
中断。如果所有屏蔽位都置位,报警将被禁止。
表 156 报警屏蔽寄存器位(AMR - 0xE0024010)
AMR
功能
描述
0
AMRSEC
为 1 时,秒值不与报警寄存器比较。
1
AMRMIN
为 1 时,分值不与报警寄存器比较。
2
AMRHOUR 为 1 时,小时值不与报警寄存器比较。
3
AMRDOM 为 1 时,日期(月)值不与报警寄存器比较。
4
AMRDOW 为 1 时,星期值不与报警寄存器比较。
5
AMRDOY
6
AMRMON 为 1 时,月值不与报警寄存器比较。
7
AMRYEAR 为 1 时,年值不与报警寄存器比较。
为 1 时,日期(年)值不与报警寄存器比较。
完整时间寄存器
时间计数器的值可选择以一个完整格式读出,程序员只需执行 3 次读操作即可读出所有的时间计数器
值,见表 149,150 和 151。每个寄存器的最低位分别位于 bit0, 8, 16 和 24。
完整时间寄存器为只读寄存器。要更新时间计数器的值,必须对时间计数器寻址。
完整时间寄存器 0(CTIME0 - 0xE0024014)
完整时间寄存器 0 包含的时间值为:秒、分、小时和星期。
表 157 完整时间寄存器 0(CTIME0 - 0xE0024014)
CTIME0
功能
描述
31:27
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
26:24
星期
星期值 该值的范围为 0~6。
23:21
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
20:16
小时
小时值 该值的范围为 0~23。
15:14
保留
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
13:8
分
7:6
保留
5:0
秒
分值 该值的范围为 0~59。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
秒值 该值的范围为 0~59。
完整时间寄存器 1(CTIME1 - 0xE0024018)
完整时间寄存器 1 包含的时间值为:日期(月)
、月和年。
表 158 完整时间寄存器 1(CTIME1 - 0xE0024018)
CTIME1
功能
31:28
保留
27:16
年
15:12
保留
11:8
月
7:5
保留
4:0
描述
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
年值 该值的范围为 0~4095。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
小时值 该值的范围为 1~12。
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
日期(月) 日期(月)值 该值的范围为 1~28, 29, 30 或 31(取决于月份以及是否为闰年)
。
135
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
完整时间寄存器 2(CTIME2 - 0xE002401C)
完整时间寄存器 2 仅包含日期(年)
。
表 159 完整时间寄存器 2(CTIME2 - 0xE002401C)
功能
CTIME2
描述
日期(年) 日期(年)值 该值的范围为 1~365(闰年为 366)
。
11:0
保留
31:12
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
时间计数器组
时间值包含 8 个寄存器,见表 160 和 161。表 161 所示的寄存器可执行读或写操作。
表 160 时间计数器的关系和值
计数器
规格
使能
最小值
最大值
秒
6
Clk1(见图 51)
0
59
分
6
秒
0
59
小时
5
分
0
23
日期(月)
5
小时
1
28, 29, 30 或 31
星期
3
小时
0
6
日期(年)
9
小时
1
365 或 366(闰年)
月
4
日期(月)
1
12
年
12
月或日期(年)
0
4095
表 161 时间计数器寄存器
地址
名称
规格
描述
访问
0xE0024020
SEC
6
秒值 该值的范围为 0~59。
R/W
0xE0024024
MIN
6
分值 该值的范围为 0~59。
R/W
0xE0024028
HOUR
5
小时值 该值的范围为 0~23。
R/W
0xE002402C
DOM
5
0xE0024030
DOW
3
日期(月)值 该值的范围为 1~28,29,30 或 31(取决于月份
以及是否为闰年)
。1
星期值 该值的范围为 0~6。1
R/W
R/W
1
0xE0024034
DOY
9
日期(年)值 该值的范围为 1~365(闰年为 366)
。
R/W
0xE0024038
MONTH
4
月值 该值的范围为 1~12。
R/W
0xE002403C
YEAR
12
年值 该值的范围为 0~4095。
R/W
注:
1. 这些值只能在适当的时间间隔处递增且在定义的溢出点复位。为了使这些值有意义,它们不能进行计算
且必须被正确初始化。
闰年计算
RTC 执行一个简单的位比较,看年计数器的最低两位是否为 0。如果为 0,那么 RTC 认为这一年为闰
年。RTC 认为所有能被 4 整除的年份都为闰年。这个算法从 1901 年到 2099 年都是准确的,但在 2100 年出
错,2100 年并不是闰年。闰年对 RTC 的影响只是改变 2 月份的长度、日期(月)和年的计数值。
报警寄存器组
报警寄存器见表 162。这些寄存器的值与时间计数器相比较。如果所有未屏蔽(见 210 页“报警屏蔽
寄存器(AMR-0xE0024010)”)的报警寄存器都与它们对应的时间计数器相匹配,那么将产生一次中断。
向中断位置寄存器的位 1(ILR[1])写入 1 清除中断。
136
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 162 报警寄存器
地址
名称
规格
描述
访问
0xE0024060
ALSEC
6
秒报警值
R/W
0xE0024064
ALMIN
6
分报警值
R/W
0xE0024068
ALHOUR
5
小时报警值
R/W
0xE002406C
ALDOM
5
日期(月)报警值
R/W
0xE0024070
ALDOW
3
星期报警值
R/W
0xE0024074
ALDOY
9
日期(年)报警值
R/W
0xE0024078
ALMON
4
月报警值
R/W
0xE002407C
ALYEAR
12
年报警值
R/W
RTC 使用注意事项
如果使用 RTC,Vbat 必须连接到 V3 脚或一个独立的电源(外部电池)
。否则,Vbat 应该接地(Vss)。
Vbat 断电时 LPC2131/2132/2138 不能保存 RTC 的状态,如果时钟源丢失、中断或改变,RTC 也无法维持时
间计数。
由于 RTC 有两个可用的时钟(VPB 时钟(pclk)或来自 RTCX1-2 管脚的 32KHz 的信号)
,所选择时钟的
任何中断都会导致时间值的偏移。如果 RTC 初始化成这个时间值或从 RTC 激活后运行的一段时间内出现
了一个错误,它们带来的变化都将影响真实的时钟时间。
RTCX1-2 管脚的信号可随时为 RTC 提供时钟,选择 pclk 作为 RTC 时钟和进入掉电模式会使时间的更
新出现误差。而且,在系统操作过程中(重新配置 PLL、VPB 定时器或 RTC 预分频器)改变 RTC 的时间
基准会使累加时间出现错误。当 RTC 时钟由 pclk 转变为 RTCX 管脚信号时也会出现累加时间误差。
一旦 RTCX1-2 管脚的 32KHz 信号被选择用作 RTC 的时钟源,
RTC 可完全独立工作,
与 VPB 时钟(pclk)
无关。因此,在要用到 RTC 且对功耗敏感的应用中(如电池供电设备)可通过使用 RTCX1-2 管脚的信号
和清除 PCONP 功率控制寄存器的 PCRTC 位来降低功耗(见“系统控制模块”一章的“功率控制”
)
。
基准时钟分频器(预分频器)
基准时钟分频器(在下文中称为预分频器)允许从任何频率高于 65.536kHz(2×32.768kHz)的外设时
钟源产生一个 32.768kHz 的基准时钟。这样,不管外设时钟的频率为多少,RTC 总是以正确的速率运行。
预分频器通过一个包含整数和小数部分的值对外设时钟(pclk)进行分频。这样就产生了一个不是恒定频率的
连续输出。有些时钟周期比其它周期多 1 个 pclk 周期。但是每秒钟的计数总数总是 32,768。
基准时钟分频器包含一个 13 位整数计数器和一个 15 位小数计数器。使用该规格的原因如下:
1.
对于 LPC2131/2132/2138 所支持的频率,13 位整数计数器是必要的。可以这样进行计算:频率
160MHz 除以 32768 再减去 1 等于 4881,余数为 26,624。保存 4881 需要 13 个位。13 位实际所能
支持的最高频率为 268.4MHz(32,768×8192)
。
2.
余数的最大值为 32,767,需要 15 位来保存。
表 163 基准时钟分频寄存器
地址
名称
规格
描述
0xE0024080
PREINT
13
预分频值,整数部分
R/W
0xE0024084
PREFRAC
15
预分频值,小数部分
R/W
预分频整数寄存器(PREINT - 0xE0024080)
预分频值的整数部分计算如下:
PREINT = int (pclk/32768) – 1。PREINT 的值必须大于等于 1。
137
访问
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 164 预分频整数寄存器(PREINT - 0xE0024080)
PREINT
功能
15:13
保留
12:0
描述
复位值
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
预分频整数 包含 RTC 预分频值的整数部分
NA
0
预分频小数寄存器(PREFRAC - 0xE0024084)
预分频值的小数部分计算如下:
PREFRAC = pclk – ((PREINT+1)×32768)
表 165 预分频小数寄存器(PREFRAC - 0xE0024084)
PREFRAC
功能
15
保留
14:0
描述
复位值
保留,用户软件不要向其写入 1。从保留位读出的值未被定义。
预分频小数 包含 RTC 预分频值的小数部分
NA
0
预分频器的使用举例
先假设一个最简单的状况,pclk 频率为 65.537kHz。那么:
PREINT = int (pclk/32768) – 1 = 1, PREFRAC = pclk – ((PREINT+1)×32768) = 1
使用此设定,每秒钟有 32,767 次 2 个 pclk 周期计数,1 次 3pclk 周期计数,加起来每秒刚好为 RTC 提
供 32,768 个时钟。
再假设一个比较实际的状况,pclk 频率为 10MHz。那么:
PREINT = int (pclk/32768) – 1 = 304, PREFRAC = pclk – ((PREINT+1)×32768) = 5,760
这时,有 5,760 个预分频器输出时钟宽度为 306 (305+1)pclk 周期。余下的时钟宽度为 305 个 pclk 周期。
采用相似的方法可以将任何高于 65.536kHz 的 pclk 频率(每秒钟的周期数必须是偶数)转换成 RTC 的
32kHz 基准时钟。唯一需要注意的是,如果 PREFRAC 不等于 0,那么每秒当中的 32768 个时钟长度是不完
全相同的,有些时钟会比其它时钟多 1 个 pclk 周期。虽然较长的脉冲已经尽可能地分配到剩余的脉冲当中,
但是在希望直接观察时钟节拍计数器的应用中可能需要注意这种“抖动”
。
pclk
(VPB 时钟 )
到时钟节拍计数器
Clk
Clk
13 位整数计数器
(递减计数器)
15 位小数计数器
下溢
重装
15
外部重装
13
组合逻辑
15
13 位重装整数计数器
15 位小数计数器
(PREINT)
(PREFRAC)
13
VPB 总线
15
图 52 RTC 预分频器方框图
预分频器操作
图 52 预分频器模块中被称为“组合逻辑”的模块决定了何时 13 位 PREINT 计数器的递减操作延长 1
个 pclk。为了使插入的延长周期数目正确并对它们进行合理地分配,组合逻辑将 PREFRAC 的每一位与 15
位小数计数器的值对应起来。这种对应关系如表 166 所示。
138
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
例如,如果 PREFRAC 的位 14 为 1(表示小数 1/2)
,则 13 位计数器计数半个周期时延长。当小数计
数器的 LSB 位为 1 时,组合逻辑将使每次计数变化(每当小数计数器的 LSB 位为 1 时)的时间延长 1 个
pclk,并尽量平均分配脉冲宽度。类似地,PREFRAC 的位 13 为 1(表示小数 1/4)时 13 位计数器计数 1/4
个周期(每当小数计数器的低 2 位=10 时)时延长。
表 166 整数计数器重装值递增时预分频器的情况
PREFRAC 位
小数计数器
14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
--- ---- ---- ---1
1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
--- ---- ---- --10
-
1
-
-
-
-
-
-
-
-
-
-
-
-
-
--- ---- ---- -100
-
-
1
-
-
-
-
-
-
-
-
-
-
-
-
--- ---- ---- 1000
-
-
-
1
-
-
-
-
-
-
-
-
-
-
-
--- ---- ---1 0000
-
-
-
-
1
-
-
-
-
-
-
-
-
-
-
--- ---- --10 0000
-
-
-
-
-
1
-
-
-
-
-
-
-
-
-
--- ---- -100 0000
-
-
-
-
-
-
1
-
-
-
-
-
-
-
-
--- ---- 1000 0000
-
-
-
-
-
-
-
1
-
-
-
-
-
-
-
--- ---1 0000 0000
-
-
-
-
-
-
-
-
1
-
-
-
-
-
-
--- --10 0000 0000
-
-
-
-
-
-
-
-
-
1
-
-
-
-
-
--- -100 0000 0000
-
-
-
-
-
-
-
-
-
-
1
-
-
-
-
--- 1000 0000 0000
-
-
-
-
-
-
-
-
-
-
-
1
-
-
-
--1 0000 0000 0000
-
-
-
-
-
-
-
-
-
-
-
-
1
-
-
-10 0000 0000 0000
-
-
-
-
-
-
-
-
-
-
-
-
-
1
-
100 0000 0000 0000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1
19. 看门狗
特性
如果没有周期性重装,则产生片内复位
调试模式
由软件使能,但要求禁止硬件复位或看门狗复位/中断
错误/不完整的喂狗时序会导致复位/中断(如果使能)
指示看门狗复位的标志
带内部预分频器的可编程 32 位定时器
可选择 tpclk×4 倍数的时间周期:从(tpclk×256×4) 到 (tpclk×232×4)
应用
看门狗的用途是使微控制器在进入错误状态后的一定时间内复位。当看门狗使能时,如果用户程序没
有在周期时间内喂狗(重装)
,看门狗会产生一个系统复位。
有关片内看门狗和外围功能的相互作用,尤其是复位和引导过程的关系,请参考本文“复位”的内容。
描述
看门狗包括一个 4 分频的预分频器和一个 32 位计数器。时钟通过预分频器输入定时器。定时器递减计
数。定时器递减的最小值为 0xFF。如果设置一个小于 0xFF 的值,系统会将 0xFF 装入计数器。因此最小看
139
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
门狗间隔为(tpclk×256×4),最大间隔为(tpclk×232×4),两者都是 tpclk×4 的倍数。看门狗应当根据下面的方
法来使用:
- 在 WDTC 寄存器中设置看门狗定时器的固定装载值
- 在 WDMOD 寄存器中设置模式
- 通过向 WDFEED 寄存器顺序写入 0xAA 和 0x55 启动看门狗
- 在看门狗向下溢出之前应当再次喂狗以防止复位/中断
当看门狗计数器向下溢出时,程序计数器将从 0x00000000 开始,和外部复位一样。可以检查看门狗超
时标志(WDTOF)来确定看门狗是否产生复位条件。WDTOF 标志必须由软件清零。
寄存器描述
看门狗包含 4 个寄存器,见表 167。
表 167 看门狗寄存器映射
名称
描述
看门狗模式寄存器
WDMOD
WDTC
WDFEED
该寄存器包含看门狗定时器的基本模
式和状态。
复位值*
地址
读/设置
0
0xE0000000
读/写
0xFF
0xE0000004
只写
NA
0xE0000008
只读
0xFF
0xE000000C
看门狗定时器常数寄存器 该寄存器决定超时值。
看门狗喂狗寄存器 向该寄存器顺序写入 AAh 和 55h 使看
门狗定时器重新装入预设值。
看门狗定时器值寄存器
WDTV
访问
该寄存器读出看门狗定时器的当
前值。
看门狗模式寄存器(WDMOD - 0xE0000000)
WDMOD 寄存器通过 WDEN 和 RESET 位的组合来控制看门狗的操作。
WDEN
WDRESET
0
X
看门狗关闭时的调试/操作
1
0
带看门狗中断的调试,但没有 WDRESET
1
1
带看门狗中断和 WDRESET 的操作
一旦 WDEN 和/或 WDRESET 位设置,就无法使用软件将其清零。这两个标志由外部复位或看门狗定
时器溢出清零。
WDTOF
当看门狗发生超时,看门狗超时标志置位。该标志由软件清零。
WDINT
当看门狗发生超时,看门狗中断标志置位。产生的任何复位都会使该位清零。
表 168 看门狗模式寄存器(WDMOD - 0xE0000000)
WDMOD
功能
描述
复位值
0
WDEN
看门狗中断使能位(只能置位)
0
1
WDRESET
看门狗复位使能位(只能置位)
0
2
WDTOF
看门狗超时标志
3
WDINT
看门狗中断标志(只读)
7:4
保留
0(仅在外部复位后)
保留,用户软件不要向其写入 1。从保留位读出的值未被
定义。
0
NA
看门狗定时器常数寄存器(WDTC - 0xE0000004)
WDTC 寄存器决定看门狗超时值。当喂狗时序产生时,WDTC 的内容重新装入看门狗定时器。它是一
个 32 位寄存器,低 8 位在复位时设置为 1。写入一个小于 0xFF 的值会使 0xFF 装入 WDTC,因此超时的
最小时间间隔为 tpclk×256×4。
140
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 169 看门狗常数寄存器(WDTC - 0xE0000004)
WDTC
功能
31:0
计数值
描述
复位值
看门狗超时间隔
0xFF
看门狗喂狗寄存器(WDFEED - 0xE0000008)
向该寄存器写入 0xAA,然后写入 0x55 会使 WDTC 的值重新装入看门狗定时器。如果看门狗通过
WDMOD 寄存器使能,该操作还将启动看门狗运行。置位 WDMOD 中的 WDEN 位不足以使能看门狗。在
看门狗能够产生中断/复位之前,必须完成一次有效的喂狗时序。否则,看门狗将忽略喂狗错误。向 WDFEED
寄存器写入 0xAA 的下一个操作应当是向 WDFEED 寄存器写入 0x55,除非看门狗被触发。在一个喂狗时
序中,一次对看门狗定时器寄存器不正确的访问之后第二个 pclk 周期将产生中断/复位。
表 170 看门狗喂狗寄存器(WDFEED - 0xE0000008)
WDFEED
功能
7:0
喂狗
描述
复位值
喂狗值应当为 0xAA,然后是 0x55。
未定义
看门狗定时器值寄存器(WDTV - 0xE000000C)
WDTV 寄存器用于读取看门狗定时器的当前值。
表 171 看门狗定时器值寄存器(WDTV - 0xE000000C)
WDTV
功能
31:0
计数
描述
复位值
当前定时器值
0xFF
方框图
看门狗方框图如图 53 所示。
喂狗错误
WDTC
喂狗时序
WDFEED
喂狗正确
pclk
32位倒计数器
/4
溢出
使能计数器 1
WDTV
寄存器
当前WDT计数
映像位
WDMOD
寄存器
WDEN 2
WDTOF
WDINT
WDRESET 2
1. 计数器只有当WDEN位置位并且执行了一个
有效喂狗时序时才可使能
2. WDEN和WDRESET只能组合使用。一旦被置位,它们只有
在看门狗溢出或发生外部复位时才能被清零
图 53 看门狗方框图
20.
FLASH 存储器系统和编程
本章讲述了 Boot 装载程序以及在系统编程(ISP)和在应用中编程(IAP)接口。
141
复位
中断
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
下章描述的是 Flash 编程逻辑,它是 APB 的一个物理接口,用来真正实现 Flash 编程,Boot 装载程序
也利用它来实现 ISP 和 IAP 编程。
FLASH BOOT 装载程序
Boot 装载程序控制复位后的初始化操作,并提供实现 Flash 编程的方法。BOOT 装载器可启动对空片
的编程、已编程器件的擦除和再编程以及在运行的系统中由应用程序对 Flash 存储器进行编程。
特性
在系统编程:在系统编程 (ISP)通过 boot 装载程序和串口对片内 Flash 存储器进行编程和再编程。
通常用于最终用户板上器件的编程。
在应用中编程:最终用户代码直接执行在应用编程 (IAP)对片内 Flash 存储器进行擦除和编程操
作。
应用
Flash boot 装载程序同时提供片内 Flash 存储器的 ISP 和 IAP 编程接口。
描述
Flash boot 装载程序代码在器件上电或复位时执行。装载程序可执行 ISP 命令处理器或用户应用代码。
复位后 P0.14 的低电平被认为是启动 ISP 命令处理器的外部硬件请求。该管脚由软件采样。假定在 RST 脚
产生上升沿时 X1 管脚上有正确的信号,在 P0.14 被采样之前最多为 3ms 并决定执行用户代码还是 ISP 处理
程序。如果 P0.14 采样为低电平并且看门狗溢出标志置位,启动 ISP 命令处理器的外部硬件请求将被忽略。
如果没有外部请求(P0.14 复位后采样为高电平)
,那么将搜索有效的用户程序。如果找到有效的用户程序,
执行的控制就转移给用户程序。如果没有找到有效的用户程序,那么就调用自动波特率程序。
管脚 P0.14 作为 ISP 硬件请求时要特别注意。由于 P0.14 在复位后处于高阻模式,用户需要提供外部硬
件(上拉电阻或其它器件)使管脚处于一个确定的状态。否则可能导致非预期的进入 ISP 模式。
复位后的存储器映射
Boot block 规格为 12kB,它位于片内 Flash 存储器最顶端的部分(从 0x0007 D000 开始)
。在任何复位
后,整个 Boot block 映射到片内存储器空间的顶端,也就是说 Boot block 出现在存储器从地址 0x7FFF D000
的区域。Flash boot 装载程序运行在这部分存储器区域,但 ISP 和 IAP 程序使用部分片内 RAM。RAM 的使
用在稍后讲述。中断向量位于片内 Flash 存储器的 Boot block 当中,它在复位后被激活,即 Boot block 的最
低 64 字节也出现在存储器从地址 0x0000 0000 的区域。复位向量包含一条跳转指令,用来跳转到 Flash boot
装载程序的入口。
2.0 GB
12K byte Boot Block
0x7FFF FFFF
从Flash存储器顶端重新映射
2.0 GB - 12KB
(Boot Block 中断向量)
重新映射到更高地址空间的12KB Boot Block
0x7FFF D000
0x000x FFFF
0x0007 D000
片内Flash存储器
0.0 GB
来自Boot Block的有效中断向量
注:存储器区并不是按比例绘制的。
图 54 复位后低地址存储器的映射
142
0x0000 0000
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
有效用户代码的判定标准:保留的 ARM 中断向量位置(0x0000 0014)应当包含剩余中断向量校验和的 2 的
补码。这样就使所有向量的校验和为 0。boot 装载程序代码禁止中断向量在 boot block 内重叠,然后计算
Flash 扇区 0 当中的中断向量的校验和。如果结果匹配,那么通过将 0x0000 0000 装入程序计数器使执行控
制权转移给用户代码。此后,用户 Flash 复位扇区应当包含一条跳转到用户代码的跳转指令。
如果结果不匹配,那么自动波特率程序通过串口 0 与主机进行同步。主机应当发送一个同步字符“?”
(0x3F)并等待响应。主机的串口应设定为 8 个数据位、1 个停止位和无奇偶校验。自动波特率程序根据
自身的频率测量接收到的同步字符的位时间并对串口波特率发生器进行编程。它还向主机发送一个 ASCII
字符串(
“Synchronized<CR><LF>”
)
。作为响应,主机应当发送接收到的字符串(
“Synchronized<CR><LF>”
)
。
自动波特率程序通过观察接收到的字符来验证是否同步。如果通过验证,则向主机发送“OK<CR><LF>”
。
主机应当通过发送正在运行部分的晶振频率(单位为 kHz)作为响应。例如,如果运行在 10MHz,主机的
。如果同步验证没
响应应当为“10000 <CR><LF>”。在接收到晶振频率后再向主机发送“OK<CR><LF>”
有通过,那么自动波特率程序再次等待一个同步字符。要使自动波特率正确工作,晶振频率应当大于等于
10MHz。Boot 代码没有使用片内 PLL。
在接收到晶振频率后,执行初始化并调用 ISP 命令处理器。处于安全性的考虑,在执行 Flash 编程/擦
除操作命令和“Go”命令之前必须执行“Unlock(解锁)
”命令。其它命令不需要解锁命令。每次 ISP 命令
处理都要执行一次“Unlock(解锁)
”命令。解锁命令在“ISP 命令”一节讲述。
通信协议
所有 ISP 命令都以单个 ASCII 字符串形式发送。字符串应当以回车(CR)和/或换行(LF)控制字符
作为结束。多余的<CR>和<LF>将被忽略。所有 ISP 的响应都以<CR><LF>结束的字符串形式发送。数据以
UU 编码格式发送和接收。
ISP 命令格式
“命令 参数_0 参数_1 ... 参数_n<CR><LF>”
“数据”
(只适用于写命令)
ISP 响应格式
“返回代码<CR><LF>响应_0<CR><LF>响应_1<CR><LF> ... 响应_n<CR><LF>" "数据"(只适用于读
命令)
ISP 数据格式
数据流采用 UU 编码格式。UU 编码算法将 3 字节二进制数据转换成 4 字节可打印的 ASCII 字符集。
该编码的效率高于 Hex 格式。Hex 格式将 1 字节二进制数据转换成 2 字节 ASCII Hex 数据。发送器应当在
发送 20 个 UU 编码行之后发送校验和。任何 UU 编码行的长度都不应超过 61 个字符(字节)
。也就是说它
可以保持 45 个数据字节。接收器应当将该校验和与接收数据的校验和相比较。如果校验和匹配,接收器响
应“OK<CR><LF>”,并等待下一次发送。如果校验和不匹配,接收器响应“RESEND<CR><LF>”。作为
响应,发送器应当将字节重新发送。
UU 编码的描述见 http://www.wotsit.org。
ISP 流程控制
软件 XON/XOFF 流程控制机制可防止缓冲区溢出时的数据丢失。当数据快速到达时,发送 ASCII 控制
字符 DC3(停止)使数据流停止。发送 ASCII 控制字符 DC1(启动)恢复数据流。主机也应支持相同的控制机
制。
143
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
ISP 命令中止
命令可通过发送 ASCII 控制字符“ESC”中止。该特性在“ISP 命令”一节中并没有作为一个命令。一
旦接收到 ESC 代码,ISP 命令处理器将等待一个新命令。
ISP 过程中的中断
在任何复位后,位于 Flash boot block 内的 boot block 中断向量都有效。
IAP 过程中的中断
在擦除/编程操作过程中,片内 Flash 存储器不可访问。当用户应用程序启动执行时,用户 Flash 区域的
中断向量有效。在调用 Flash 擦除/写 IAP 之前,用户应当禁止中断或确保用户中断向量在 RAM 中有效和
中断处理程序位于 RAM 中。IAP 代码不使用或禁止中断。
ISP 命令处理器使用的 RAM
ISP 命令使用片内地址 0x4000 0120 到 0x4000 01FF 范围内的 RAM。用户可以使用该区域,但是在复
位时内容可能会丢失。Flash 编程命令使用片内 RAM 最顶端的 32 字节。堆栈位于 RAM 顶端-32。可使用
的最大堆栈为 256 字节,堆栈是向下增加的。
IAP 命令处理器使用的 RAM
Flash 编程命令使用片内 RAM 最顶端的 32 字节。用户可使用的最大堆栈为 128 字节,堆栈是向下增
加的。
RealMonitor 使用的 RAM
RealMonitor 使用的片内 RAM 地址范围为 0x4000 0040~0x4000 011F。如果不需要基于 RealMonitor 的
调试,用户可使用该区域。Flash boot 装载程序不初始化 RealMonitor 的堆栈。
144
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
BOOT 处理流程图
复位
初始化
CRP *
使能?
No
使能调试
Yes
设置看门狗
标志?
Yes
No
用户代码有效?
进入ISP模式?
Yes
No
(P0.14为低?)
No
Yes
执行内部用户代码
Yes
运行自动波特率
自动波特率
运行成功?
No
Yes
接收晶振频率
运行ISP命令处理程序
*代码读保护
图 55 Boot 处理流程图
扇区数
有些 IAP 和 ISP 命令根据“扇区”进行操作并指定扇区数。LPC2131/2132/2138 分别包含 32K,64K
和 512K 的 Flash 存储器,下表列出它们所包含的扇区数和存储器地址。IAP、ISP 和 RealMonitor 程序都位
145
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
于 boot block。boot block 存在于所有器件的 0007D000 – 0007 FFFF 中。ISP 和 IAP 命令不允许对 boot block
执行写/擦除/运行操作。由于 boot block 的存在,512kB Flash 器件中只有 500kB Flash 可供用户程序使用。
另一方面,LPC2131/2132 器件全部的 32/64K Flash 都可供用户程序使用。
表 172
LPC2131/2132 和 LPC2138 的 Flash 扇区
扇区号
扇区规格 [kB]
0
存储器地址
LPC2131 (32 kB Flash)
LPC2132 (64 kB Flash)
LPC2138 (512 kB Flash)
4
0x0000 0000 - 0FFF
0x0000 0000 - 0FFF
0x0000 0000 - 0FFF
1
4
0x0000 1000 - 1FFF
0x0000 1000 - 1FFF
0x0000 1000 - 1FFF
2
4
0x0000 2000 - 2FFF
0x0000 2000 - 2FFF
0x0000 2000 - 2FFF
3
4
0x0000 3000 - 3FFF
0x0000 3000 - 3FFF
0x0000 3000 - 3FFF
4
4
0x0000 4000 - 4FFF
0x0000 4000 - 4FFF
0x0000 4000 - 4FFF
5
4
0x0000 5000 - 5FFF
0x0000 5000 - 5FFF
0x0000 5000 - 5FFF
6
4
0x0000 6000 - 6FFF
0x0000 6000 - 6FFF
0x0000 6000 - 6FFF
7
4
0x0000 7000 - 7FFF
8
32
9
32
0x0001 0000 - 7FFF
10 (0x0A)
32
0x0001 8000 - FFFF
0x0000 7000 - 7FFF
0x0000 7000 - 7FFF
0x0000 8000 - FFFF
0x0000 8000 - FFFF
11 (0x0B)
32
0x0002 0000 - 7FFF
12 (0x0C)
32
0x0002 8000 - FFFF
13 (0x0D)
32
0x0003 0000 - 7FFF
14 (0x0E)
32
0x0003 8000 - FFFF
15 (0x0F)
32
0x0004 0000 - 7FFF
16 (0x10)
32
0x0004 8000 - FFFF
17 (0x11)
32
18 (0x12)
32
19 (0x13)
32
20 (0x14)
32
0x0006 8000 -FFFF
21 (0x15)
32
0x0007 0000 - 7FFF
22 (0x16)
4
0x0007 8000 - 8FFF
23 (0x17)
4
0x0007 9000 - 9FFF
24 (0x18)
4
0x0007 A000 - AFFF
25 (0x19)
4
0x0007 B000 - BFFF
26 (0x1A)
4
0x0007 C000 - CFFF
-
-
0x0005 0000 - 7FFF
0x0005 8000 - FFFF
0x0006 0000 - 7FFF
FLASH 内容保护机制
LPC2131/2132/2138 含有带错误校验码(ECC)的 Flash 存储器。错误校验模块有 2 个用途。第一,它
将从存储器读出的数据字译码成输出数据字。第二,它对写入存储器的数据字进行编码。错误校验由
Hamming 码的单个位错误校验组成。
ECC 的操作可在运行应用中看出。ECC 自身的内容储存在 flash 存储器中,不能通过用户代码访问,
进行自身的读取或写入。一个字节的 ECC 对应用户可访问 Flash 的每个连续的 128 位。因此,从 0x0000 0000
到 0x0000 0003 的 Flash 字节由第一个 ECC 字节保护,从 0x0000 0004 到 0x0000 0007 的 Flash 字节由第二
个 ECC 字节保护,依次类推。
每当 CPU 请求读取用户的 Flash 时,128 位的包含指定存储器单元的数据和匹配的 ECC 字节都包含在
访问之列。如何 ECC 机制在读取的数据中检测到一个错误,先对数据进行校验,再将其送往 CPU。当请求
用户 Flash 的写操作时,用户指定的内容以及 ECC 存储器中计算和存储的匹配 ECC 值一起写入。
当用户 Flash 存储器的一个扇区被擦除时,相应的 ECC 字节也擦除。一旦写入一个 ECC 字节,它不能
146
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
被更新,除非它先被擦除。因此,为了正确执行 ECC 机制,数据必须以 4 个字节(或 4 的倍数)为一组写入
Flash 存储器,字节的排列顺序见如上所述。
代码读保护
代码读保护通过向 Flash 地址单元 0x1FC (用户 Flash 扇区 0 )写入 0x87654321 (十进制表示为
2271560481)来使能。地址单元 0x1FC 允许为 fiq 异常处理程序保留部分空间。当读保护被使能时,JTAG
调试端口、外部存储器引导和以下 ISP 命令将被禁能:
读存储器
写 RAM
运行
将 RAM 内容复制到 Flash
上述 ISP 命令终止时返回 CODE_READ_PROTECTION_ENABLED。
代码读保护使能时,ISP 擦除命令只允许擦除用户扇区的内容。这种限制是代码读保护不使能时所没
有的。IAP 命令不受代码读保护的影响。
重要:一旦器件经过了电源周期后,代码读保护变为有效/无效。
ISP 命令
下面的命令是 ISP 命令处理程序所接受的命令。每个命令都有具体的状态代码。当接收到未定义的命
令时,命令处理程序返回代码 INVALID_COMMAND。命令和返回代码为 ASCII 格式。
只有当接收到的 ISP 命令执行完毕时,处理程序才发送 CMD_SUCCESS。这时主机才能发送新的 ISP
命令。但“设置波特率”
、
“写 RAM”
、
“读存储器”和“运行”命令除外。
表 173 ISP 命令汇总
ISP 命令
使用
描述
解锁
U <解锁代码>
见表 174
设置波特率
B <波特率> <停止位>
见表 175
回声
A <设定>
见表 177
写 RAM
W <起始地址> <字节数>
见表 178
读存储器
R <地址> <字节数>
见表 179
准备写操作的扇区
P <起始扇区号> <结束扇区号>
见表 180
将 RAM 内容复制到 Flash
C <Flash 地址> <RAM 地址> <字节数>
见表 181
运行
G <地址> <模式>
见表 182
擦除扇区
E <起始扇区号> <结束扇区号>
见表 183
扇区查空
I <起始扇区号> <结束扇区号>
见表 184
读器件 ID
J
见表 185
读 Boot 代码版本
K
见表 186
比较
M <地址 1> <地址 2> <字节数>
见表 187
解锁 <解锁代码>
表 174 ISP 解锁命令描述
命令
U
输入
解锁代码:23130
CMD_SUCCESS |
返回代码
INVALID_CODE |
PARAM_ERROR
147
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
命令
U
描述
该命令用于解锁 Flash 写/擦除和运行命令。
举例
“U 23130<CR><LF>”解锁 Flash 写/擦除&运行命令。
设置波特率 <波特率> <停止位>
表 175 ISP 设置波特率命令描述
命令
B
波特率: 9600 | 19200 | 38400 | 57600 | 115200 | 230400
输入
停止位: 1 | 2
CMD_SUCCESS |
INVALID_BAUD_RATE |
返回代码
INVALID_STOP_BIT |
PARAM_ERROR
该命令用于改变波特率。新的波特率在命令处理器发送 CMD_SUCCESS 返回
描述
代码之后生效。
举例
"B 57600 1<CR><LF>"设置串口波特率 57600bps 和 1 个停止位。
表 176 ISP 波特率和外部晶体频率的关系(以 MHz 为单位)
ISP 波特率和
9600
19200
38400
10.0000
+
+
+
11.0592
+
+
12.2880
+
+
+
14.7456
+
+
+
15.3600
+
18.4320
+
+
19.6608
+
+
+
24.5760
+
+
+
25.0000
+
+
+
57600
115200
230400
+
+
外部晶体频率
+
+
+
回声 <设定>
表 177 ISP 回音命令描述
命令
A
输入
设定: 打开=1 | 关闭=0
返回代码
CMD_SUCCESS |
PARAM_ERROR
描述
举例
回声命令的默认设定是打开。当打开时,ISP 命令处理器将接收到的串行数据
发送回主机。
"A 0<CR><LF>" 回声关闭。
写 RAM<起始地址> <字节数>
主机应当在接收到 CMD_SUCCESS 返回代码后发送数据。主机应当在发送 20 个 UU 编码行之后发送
148
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
校验和。校验和在增加新数据(UU 编码前)字节时产生,发送完 20 个编码行后重新设置。任何 UU 编码
行的长度不应超过 61 个字符(字节)
,即可以保持 45 个数据字节。当数据少于 20 个 UU 编码行时,校验
和按照实际发送的字节数进行计算。ISP 命令处理器将它与接收字节的校验和相比较。如果校验和匹配,
那么 ISP 命令处理器响应“ OK<CR><LF> ”,并等待下一次发送。如果校验和不匹配,接收器响应
“RESEND<CR><LF>”
。作为响应,发送器应当将字节重新发送。
表 178 ISP 写 RAM 命令描述
命令
输入
W
起始地址:被写 RAM 的起始地址,该地址应当以字为边界。
字节数:写入的字节数。计数值应当为 4 的倍数。
CMD_SUCCESS |
ADDR_ERROR (地址不是以字为边界) |
返回代码
ADDR_NOT_MAPPED |
COUNT_ERROR (字节计数值不是 4 的倍数) |
PARAM_ERROR
CODE_READ_PROTECTION_ENABLED
描述
举例
该命令用于将数据下载到 RAM。数据应当为 UU 编码格式。当代码读保护使
能时该命令被禁止。
"W 1073742336 4<CR><LF>"向地址 0x4000 0200 写入 4 个字节数据。
读存储器 <地址> <字节数>
数据流之后是命令成功返回代码。
校验和在发送完 20 个 UU 编码行之后发送。
校验和在增加新数据
(UU
编码前)字节时产生,发送完 20 个编码行后重新设置。任何 UU 编码行的长度都不应超过 61 个字符(字
节)
,即它可以保持 45 个数据字节。当数据少于 20 个 UU 编码行时,校验和按照实际发送的字节数进行计
算。主机将它与接收字节的校验和相比较。如果校验和匹配,那么主机响应“OK<CR><LF>”,并等待下
一次发送。如果校验和不匹配,主机响应“RESEND<CR><LF>”
。作为响应,ISP 命令处理器应当将字节
重新发送。
表 179 ISP 读存储器命令描述
命令
输入
R
起始地址:被读出数据字节的地址,该地址应当以字为边界。
字节数:读出的字节数。计数值应当为 4 的倍数。
CMD_SUCCESS,后面是<实际数据(UU 编码)>|
ADDR_ERROR (地址不是以字为边界) |
返回代码
ADDR_NOT_MAPPED |
COUNT_ERROR (字节计数值不是 4 的倍数) |
PARAM_ERROR
CODE_READ_PROTECTION_ENABLED
描述
举例
该命令用于读出 RAM 或 Flash 存储器的数据。当代码读保护使能时该命令被
禁止。
"R 1073741824 4<CR><LF>"从地址 0x4000 0000 读出 4 个字节数据。
准备写操作的扇区<起始扇区号> <结束扇区号>
该命令使 Flash 写/擦除操作分成两个步骤处理。
149
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 180 ISP 准备写操作的扇区命令描述
命令
输入
P
起始扇区号
结束扇区号:应当大于等于起始扇区号。
CMD_SUCCESS |
返回代码
BUSY |
INVALID_SECTOR |
PARAM_ERROR
该命令必须在执行“将 RAM 内容复制到 Flash”或“擦除扇区”命令之前执
描述
行。这两个命令的成功执行会导致相关的扇区再次被保护。该命令不能用于
boot block。要准备单个扇区,可将起始和结束扇区号设置为相同值。
举例
"P 0 0<CR><LF>"准备 Flash 扇区 0。
将 RAM 内容复制到 Flash <Flash 地址> <RAM 地址> <字节数>
表 181 ISP 将 RAM 内容复制到 Flash 命令描述
命令
C
Flash 地址(DST): 要写入数据字节的目标 Flash 地址。目标地址的边界应当为
输入
256 字节。
RAM 地址(SRC): 读出数据字节的源 RAM 地址。
字节数: 写入字节的数目。应当为 256 |512 | 1024 | 4096。
CMD_SUCCESS |
SRC_ADDR_ERROR (地址不以字为边界) |
DST_ADDR_ERROR (地址边界错误) |
SRC_ADDR_NOT_MAPPED |
DST_ADDR_NOT_MAPPED |
返回代码
COUNT_ERROR (字节计数值不是 256 |512 | 1024 | 4096) |
SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION |
BUSY |
CMD_LOCKED |
PARAM_ERROR
CODE_READ_PROTECTION_ENABLE
该命令用于编程 Flash 存储器。
“准备写操作的扇区”命令应当在该命令之前
描述
被执行。当成功执行复制命令后,扇区将自动受到保护。该命令不能写
bootblock。当代码读保护使能时该命令被禁止。
举例
"C 0 1073774592 512<CR><LF>"将 RAM 地址 0x4000 8000 开始的 512 字节复
制到 Flash 地址 0。
运行<地址><模式>
表 182 ISP 运行命令描述
命令
G
地址:代码执行起始的 Flash 或 RAM 地址。该地址应当以字为边界。如果进
输入
入代替地址的“test”区域,将执行保留测试区的程序。
模式:T(执行 Thumb 模式下的程序)|A(执行 ARM 模式下的程序)
150
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
CMD_SUCCESS |
ADDR_ERROR |
返回代码
ADDR_NOT_MAPPED |
CMD_LOCKED |
PARAM_ERROR
CODE_READ_PROTECTION_ENABLE
描述
举例
该命令用于执行位于 RAM 或 Flash 存储器当中的程序。一旦成功执行该命令,
就有可能不再返回 ISP 命令处理程序。当代码读保护使能时该命令被禁止。
"G 0 A<CR><LF>"跳转到 ARM 模式下的地址 0x0000 0000 处。
擦除扇区<起始扇区号><结束扇区号>
表 183 ISP 擦除扇区命令描述
命令
输入
E
起始扇区号
结束扇区号:应当大于等于起始扇区号。
CMD_SUCCESS |
BUSY |
INVALID_SECTOR |
返回代码
SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION |
CMD_LOCKED |
PARAM_ERROR
CODE_READ_PROTECTION_ENABLE
描述
举例
该命令用于擦除片内 Flash 存储器的一个或多个扇区。Boot block 不能由该命
令擦除。当代码读保护使能时,该命令只允许擦除所有用户扇区的内容。
"E 2 3<CR><LF>"擦除 Flash 扇区 2 和 3。
扇区查空<起始扇区号><结束扇区号>
表 184 ISP 扇区查空命令描述
命令
输入
I
起始扇区号
结束扇区号:应当大于等于起始扇区号。
CMD_SUCCESS |
返回代码
SECTOR_NOT_BLANK (后跟<第一个非空字的偏移量> <非空字的内容>) |
INVALID_SECTOR |
PARAM_ERROR
描述
举例
该命令用于对片内 Flash 存储器的一个或多个扇区进行查空。由于扇区 0 的前
64 字节重新映射到 Flash boot block,因此对其进行查空一定会失败。
"I 2 3<CR><LF>"对 Flash 扇区 2 和 3 进行查空。
读器件标识
表 185 ISP 读器件标识命令描述
命令
J
输入
无
151
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
命令
返回代码
描述
J
CMD_SUCCESS 后跟 ASCII 格式的 ID 号。
该命令用于读取器件的标识。
读 Boot 代码版本
表 186 ISP 读 Boot 代码版本命令描述
命令
K
输入
无
返回代码
描述
CMD_SUCCESS 后跟 2 字节 ASCII 格式的 boot 代码版本号。将其解释为<字
节 1 (主)>.<字节 0 (次)>
该命令用于读取 boot 代码版本号。
比较<地址 1><地址 2><字节数>
表 187 ISP 比较命令描述
命令
M
地址 1(DST): 要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为
边界。
输入
地址 2(SRC): 要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为
边界。
字节数: 待比较的字节数. 计数值应当为 4 的倍数。
CMD_SUCCESS | (源和目标数据相同)
COMPARE_ERROR | (后跟第一个不匹配字节的地址)
返回代码
COUNT_ERROR (字节数不是 4 的倍数) |
ADDR_ERROR |
ADDR_NOT_MAPPED |
PARAM_ERROR
该命令用来比较两个地址单元的存储器内容。当源或目标地址包含从地址 0
描述
开始的前 64 字节中的任意一个地址时,比较的结果可能不正确。因为前 64
字节重新映射到 Flash boot 扇区。
举例
"M 8192 1073741824 4<CR><LF>"将 RAM 地址 0x4000 0000 开始的 4 个字节
与 Flash 地址 0x2000 开始的 4 个字节相比较。
表 188 ISP 返回代码汇总
返回代码
0
符号
描述
命令被成功执行。只有当主机发出的命令被成功执行完
CMD_SUCCESS
毕后,才由 ISP 处理程序发送。
1
INVALID_COMMAND
无效命令
2
SRC_ADDR_ERROR
源地址没有以字为边界
3
DST_ADDR_ERROR
目标地址的边界错误
4
SRC_ADDR_NOT_MAPPED
源地址没有位于存储器映射中。计数值必须考虑可用性。
5
DST_ADDR_NOT_MAPPED
目标地址没有位于到存储器映射中。计数值必须考虑到
可用性。
152
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
返回代码
符号
描述
6
COUNT_ERROR
字节计数值不是 4 的倍数或是一个非法值。
7
INVALID_SECTOR
扇区号无效或结束扇区号大于起始扇区号。
8
SECTOR_NOT_BLANK
扇区非空
9
SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION
为写操作准备扇区命令未执行。
10
COMPARE_ERROR
源和目标数据不相等。
11
BUSY
Flash 编程硬件接口忙
12
PARAM_ERROR
参数不足或无效参数
13
ADDR_ERROR
地址没有以字为边界
14
ADDR_NOT_MAPPED
地址没有位于存储器映射中。计数值必须考虑可用性。
15
CMD_LOCKED
命令被锁定
16
INVALID_CODE
解锁代码无效
17
INVALID_BAUD_RATE
无效波特率设定
18
INVALID_STOP_BIT
无效停止位设定
19
CODE_READ_PROTECTION_ENABLE
代码读保护使能
IAP 命令
对于在应用编程来说,应当通过寄存器 r0 中的字指针指向存储器(RAM)包含的命令代码和参数来调用
IAP 程序。IAP 命令的结果返回到寄存器 r1 所指向的返回表。用户可通过传递寄存器 r0 和 r1 中的相同指
针重用命令表来得到结果。参数表应当大到足够保存所有的结果以防结果的数目大于参数的数目。参数传
递见图 56。参数和结果的数目根据 IAP 命令而有所不同。参数的最大数目为 5,由“将 RAM 内容复制到
Flash”命令传递。结果的最大数目为 2,由“扇区查空”命令返回。命令处理程序在接收到一个未定义的
命令时发送状态代码 INVALID_COMMAND。IAP 程序是 thumb 代码,位于地址 0x7FFFFFF0。
IAP 功能可用下面的 C 代码来调用。
定义 IAP 程序的入口地址。由于 IAP 地址的第 0 位是 1,因此,当程序计数器转移到该地址时会引起
Thumb 指令集的变化。
#define
IAP_LOCATION 0x7ffffff1
定义数据结构或指针,将 IAP 命令表和结果表传递给 IAP 函数
unsigned
long
command[5];
unsigned
long
result[2];
unsigned
long
* command;
unsigned
long
* result;
或
command = (unsigned
result = (unsigned
long
long
*)
*)
0x….
0x….
定义函数类型指针,函数包含 2 个参数,无返回值。注意:IAP 将函数结果和 R1 中的表格基址一同返回。
typedef
void (*IAP)
(unsigned
int [ ] , unsigned
int [ ]);
IAP iap_entry;
设置函数指针
iap_entry=(IAP)
IAP_LOCATION;
使用下面的语句来调用 IAP。
iap_entry
(command , result);
使用 ADS(ARM 开发套件)的 ARM 连接器支持的符号定义文件可以进一步简化 IAP 的调用。用户
153
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
还可使用汇编程序来调用 IAP 程序。
下面的符号定义可用于连接 IAP 程序和用户代码。
#<SYMDEFS># ARM Linker, ADS1.2 [Build 826]: Last Updated: Wed May 08 16:12:23 2002
0x7fffff90 T rm_init_entry
0x7fffffa0 A rm_undef_handler
0x7fffffb0 A rm_prefetchabort_handler
0x7fffffc0 A rm_dataabort_handler
0x7fffffd0 A rm_irqhandler
0x7fffffe0 A rm_irqhandler2
0x7ffffff0 T iap_entry
根据 ARM 规范(ARM Thumb 过程调用标准 SWS ESPC 0002 A-05)
,r0, r1, r2 和 r3 寄存器能够传递最
多 4 个参数。另外的参数通过堆栈传递。最多有 4 个参数可以返回 r0, r1, r2 和 r3 寄存器。另外的参数间接
通过存储器返回。有些 IAP 调用需要的参数多于 4 个。如果使用 ARM 建议的机制来传递/返回参数,则有
可能因为不同厂商所提供的 C 编译器的差异而产生问题。建议的参数传递机制降低了这样的风险。
Flash 存储器在写或擦除操作过程中不可被访问。执行 Flash 写/擦除操作的 IAP 命令使用片内 RAM 顶
端的 32 个字节空间。如果应用程序中允许 IAP 编程,那么用户程序不应使用该空间。
表 189 IAP 命令汇总
ISP 命令
命令代码
描述
准备编程扇区
50
见表 190
将 RAM 内容复制到 Flash
51
见表 191
擦除扇区
52
见表 192
扇区查空
53
见表 193
读器件 ID
54
见表 194
读 boot 代码版本
55
见表 195
比较
56
见表 197
重新调用 ISP
57
命令代码
参数1
参数2
ARM 寄存器0
ARM 寄存器1
命令
参数表
参数n
状态码
结果1
结果2
结果n
图 56 IAP 参数传递
154
命令
结果表
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
准备编程扇区
该命令使 Flash 写/擦除操作分两步执行。
表 190 IAP 准备编程扇区命令描述
命令
准备编程扇区
命令代码:50
输入
参数 0:起始扇区号
参数 1:结束扇区号:应当大于等于起始扇区号。
CMD_SUCCESS |
状态代码
BUSY |
INVALID_SECTOR
结果
无
该命令必须在执行“将 RAM 内容复制到 Flash”或“擦除扇区”命令之前执
描述
行。这两个命令的成功执行会导致相关的扇区再次被保护。该命令不能用于
boot 扇区。要准备单个扇区,可将起始和结束扇区号设置为相同值。
将 RAM 内容复制到 Flash
表 191 IAP 将 RAM 内容复制到 Flash 命令描述
命令
将 RAM 内容复制到 Flash
命令代码:5110
参数 0 (DST):要写入数据字节的目标 Flash 地址。目标地址的边界应当为 256
输入
字节。
参数 1 (SRC): 读出数据字节的源 RAM 地址。该地址应当以字为边界。
参数 2:写入字节的数目。应当为 256 |512 | 1024 | 4096 |.
参数 3:系统时钟频率(CCLK)(单位:KHz)
CMD_SUCCESS |
SRC_ADDR_ERROR (地址不以字为边界) |
DST_ADDR_ERROR (地址边界错误) |
状态代码
SRC_ADDR_NOT_MAPPED |
DST_ADDR_NOT_MAPPED |
COUNT_ERROR (字节计数值不是 256 |512 | 1024 | 4096) |
SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION |
BUSY
结果
无
该命令用于编程 Flash 存储器。受影响的扇区应当先通过调用“准备写操作的
描述
扇区”命令准备。当成功执行复制命令后,扇区将自动受到保护。该命令不能
写 boot 扇区。
擦除扇区
表 192 IAP 擦除扇区命令描述
命令
擦除扇区
命令代码:5210
输入
参数 0:起始扇区号
参数 1:结束扇区号:应当大于等于起始扇区号。
参数 2:系统时钟频率(CCLK)(单位:KHz)
155
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
命令
擦除扇区
CMD_SUCCESS |
状态代码
BUSY |
SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION |
INVALID_SECTOR |
结果
描述
无
该命令用于擦除片内 Flash 存储器的一个或多个扇区。boot 扇区不能由该命令
擦除。要擦除单个扇区可将起始和结束扇区号设定为相同值。
扇区查空
表 193 IAP 扇区查空命令描述
命令
扇区查空
命令代码:5310
输入
参数 0:起始扇区号
参数 1:结束扇区号:应当大于或等于起始扇区号。
CMD_SUCCESS |
状态代码
BUSY |
SECTOR_NOT_BLANK |
INVALID_SECTOR |
结果
描述
结果 0:状态代码为 SECTOR_NOT_BLANK 时第一个非空字位置的偏移量
结果 1:非空字位置的内容
该命令用于对片内 Flash 存储器的一个或多个扇区进行查空。要查空单个扇区
可将起始和结束扇区号设定为相同值。
读器件标识号
表 194 IAP 读器件标识号命令描述
命令
读器件标识号
输入
命令代码:5410
返回代码
CMD_SUCCESS
参数:无
结果
结果 0:器件标识号
描述
该命令用于读取器件的标识号。
读 Boot 代码版本号
表 195 IAP 读 Boot 代码版本号命令描述
命令
输入
返回代码
结果
描述
读 Boot 代码版本号
命令代码:5510
参数:无
CMD_SUCCESS
结果 0:2 字节 boot 代码版本号(ASCII 格式)。将其解释为<字节 1 (主)>.<
字节 0 (次)>
该命令用于读取 boot 代码版本号。
比较 <地址 1><地址 2> <字节数>
156
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
表 196 IAP 比较命令描述
命令
比较
命令代码:5610
输入
参数 0 (DST):要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为边界。
参数 1 (SRC):要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为边界。
参数 2:待比较的字节数。计数值应当为 4 的倍数。
CMD_SUCCESS |
COMPARE_ERROR |
返回代码
COUNT_ERROR (字节数不是 4 的倍数) |
ADDR_ERROR |
ADDR_NOT_MAPPED
结果
描述
结果 0:当状态代码为 COMPARE_ERROR 时第一个不匹配字节的偏移地址
该命令用来比较两个地址单元的存储器内容。当源或目标地址包含从地址 0 开始的前
64 字节中的任意一个地址时,
比较的结果可能不正确。
前 64 字节可重新映射到 RAM。
重新调用 ISP
表 197 重新调用 ISP
命令
重新调用 ISP
输入
命令代码:5710
状态码
无
结果
无
描述
该命令用于在 ISP 模式下调用引导装载程序。该命令映射引导向量,将 P0.1 配置
为输入并在进入 ISP 模式之前将 vpb 分频器寄存器设为 0。当一个有效的用户程
序出现在内部 flash 存储器且 P0.14 脚不能访问来强制进入 ISP 模式时,该命令被
使用。该命令不禁止 PLL,因此当器件脱离 PLL 运行时该命令可调用引导装载
程序。这时,ISP 应用程序应在自动波特率握手后传递 PLL 频率。另一种选择是
在调用 IAP 之前禁止 PLL。
表 198 IAP 状态代码汇总
返回代码
符号
描述
0
CMD_SUCCESS
命令被成功执行。
1
INVALID_COMMAND
无效命令。
2
SRC_ADDR_ERROR
源地址没有以字为边界。
3
DST_ADDR_ERROR
目标地址的边界错误。
4
SRC_ADDR_NOT_MAPPED
源地址没有位于存储器映射中。计数值必须考虑可用性。
目标地址没有位于到存储器映射中。计数值必须考虑到
5
DST_ADDR_NOT_MAPPED
可用性。
6
COUNT_ERROR
字节计数值不是 4 的倍数或是一个非法值。
7
INVALID_SECTOR
扇区号无效。
8
SECTOR_NOT_BLANK
扇区非空。
9
SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION
为写操作准备扇区命令未执行。
10
COMPARE_ERROR
源和目标数据不相等。
11
BUSY
Flash 编程硬件接口忙
157
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
JTAG Flash 编程接口
调试工具可以将 Flash 映像部分写入 RAM,然后根据正确的偏移重复执行 IAP 调用“将 RAM 内容复
制到 Flash”
。
EmbeddedICE 逻辑
21.
特性
通过软件调试器启动调试会话,不需要目标资源
允许软件调试器通过 JTAG 直接与内核进行对话
在 ARM7TDMI-S 内核中直接插入指令
通过插入不同类型的指令可对 ARM7TDMI-S 内核或系统状态进行检查、保存或修改
允许指令在低调试速度或高系统速度下执行
应用
EmbeddedICE 逻辑提供对片内调试的支持。对目标系统进行调试需要一个主机来运行调试软件和
EmbeddedICE 协议转换器。EmbeddedICE 协议转换器将远程调试协议命令转换成所需要的 JTAG 数据,从
而对目标系统上的 ARM7TDMI-S 内核进行访问。
描述
ARM7TDMI-S 调试结构使用现有的 JTAG* 端口来访问内核。供产品测试用的扫描链在调试状态下重
新用来捕获数据总线上的信号并向内核或存储器插入新的信息。在 ARM7TDMI-S 当中有两个 JTAG 类型的
扫描链。一个 JTAG 类型的测试访问端口控制器控制扫描链。除了扫描链之外,调试结构还使用位于
ARM7TDMI-S 核内部的 EmbeddedICE 逻辑。EmbeddedICE 使用自身的扫描链向 ARM7TDMI-S 内核插入
观察点和断点。EmbeddedICE 逻辑包含 2 个实时观察点寄存器和 1 个控制和状态寄存器。这两个观察点寄
存器或其中的一个可编程为暂停 ARM7TDMI-S 内核。当编程到 EmbeddedICE 逻辑中的值与当前出现在地
址总线、数据总线和某些控制信号上的值匹配时,内核的运行将暂停。可以屏蔽任何位使其不会影响比较
操作。观察点寄存器可以配置为观察点(即对于数据的访问)或断点(指令取指)
。观察点和断点可以按照
下面的方式进行组合:
在停止 ARM7TDMI 内核之前,必须满足观察点的两个条件。CHAIN 的功能要求在暂停内核之前
满足两个连续的条件。例如,将第一个断点设定为在访问外设时触发,而第二个断点在执行任务
切换的代码段时触发。当断点触发时,与任务切换有关的信息准备就绪以备检查。
观察点可以配置为在一段地址范围内对观察点有效。RANGE 功能允许实现一个组合的断点,例
如在访问存储器最低 256 字节但不访问最低 32 字节时产生断点。
ARM7TDMI-S 内核有一个内置的调试通信通道功能。调试通信通道允许程序在目标系统上运行,即使
进入调试状态 ,目标系统程 序与主机调试 器或其它独立 的主机进行通 信时也不会中 断程序流程。
ARM7TDMI-S 内核上运行的程序将调试通信通道作为协处理器 14 进行访问。调试通信通道允许 JTAG 端
口发送和接收数据,但不影响正常的程序流程。调试通信通道数据和控制寄存器映射到 EmbeddedICE 逻辑
中的地址。
。
* 详见 IEEE 标准 1149.1-1990《标准测试访问端口和边界扫描结构》
158
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
管脚描述
表 199
EmbeddedICE 管脚描述
管脚名称 类型
描述
TMS
输入 测试模式选择
TCK
输入
TDI
输入 测试数据输入
TDO
输出 测试数据输出 移位寄存器的串行数据输出端。
器件中的数据在 TCK 信号的下降沿输出。
测试时钟
该管脚允许 TMS 和 TDI 管脚上数据的转换。它是一个上升沿触发时钟,由
TMS 和 TCK 信号定义器件的内部状态。
输入 测试复位
nTRST
TMS 管脚选择 TAP 状态机中的下一个状态
移位寄存器的串行数据输入端。
nTRST 管脚可用于复位 EmbeddedICE 逻辑中的测试逻辑。
返回的测试时钟
输出
RTCK
叠加到 JTAG 端口的额外信号。 基于 ARM7TDMI-S 处理器内核进行
设计时需要该信号。Multi-ICE(ARM 的开发系统)使用该信号来保持与低或宽范围时钟
频率的目标系统的同步。详见“ Multi-ICE 系统设计精要应用笔记注 72 ( ARM DAI
0072A)”。
复用管脚的复位状态
LPC2131/2132/2138 器件的上述 EmbeddedICE 管脚是 P1.31-26 的复用功能。如果 P1.31-26 用作调试端
口,VSS 和 P1.26/RTCK 之间必须连接一个弱偏置电阻(4.7 - 10kΩ,取决于外部 JTAG 电路)
。如果它们用
作 GPIO,无需连接偏置电阻,并且确保了任何连接到 P1.26/RTCK 的外部驱动器复位时驱动为高或处于高
阻态。
寄存器描述
EmbeddedICE 逻辑包含 16 个寄存器,见表 200。有关 ARM7TDMI-S 的调试结构的详细描述见 ARM
有限公司出版的“ARM7TDMI-S(Rev 4)技术参考手册”(ARM DDI 0234A),可从网站 http://www.arm.com
下载。
表 200
EmbeddedICE 逻辑寄存器
名称
宽度
描述
调试控制
6
强制调试状态,禁止中断
00000
调试状态
5
调试状态
00001
调试通信控制寄存器
32
调试通信控制寄存器
00100
调试通信数据寄存器
32
调试通信数据寄存器
00101
观察点 0 地址值
32
保存观察点 0 地址值
01000
观察点 0 地址屏蔽
32
保存观察点 0 地址屏蔽
01001
观察点 0 数据值
32
保存观察点 0 数据值
01010
观察点 0 数据屏蔽
32
保存观察点 0 数据屏蔽
01011
观察点 0 控制值
9
保存观察点 0 控制值
01100
观察点 0 控制屏蔽
8
保存观察点 0 控制屏蔽
01101
观察点 1 地址值
32
保存观察点 1 地址值
10000
观察点 1 地址屏蔽
32
保存观察点 1 地址屏蔽
10001
观察点 1 数据值
32
保存观察点 1 数据值
10010
观察点 1 数据屏蔽
32
保存观察点 1 数据屏蔽
10011
观察点 1 控制值
9
保存观察点 1 控制值
10100
观察点 1 控制屏蔽
8
保存观察点 1 控制屏蔽
10101
159
地址
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
方框图
调试环境的方框图如图 57 所示。
JTAG 端口
串行/并行接口
EmbeddedICE
接口协议转换器
5
EmbeddedICE
主机运行的
调试程序
ARM7TDMI-S
目标板
图 57
EmbeddedICE 调试环境方框图
嵌入式跟踪宏单元
22.
特性
跟踪 ARM 内核正在执行的指令
10 脚接口
1 个外部触发输入
所有寄存器都通过 JTAG 接口编程
不使用跟踪时不消耗功率
支持 THUMB 指令集
应用
由于微控制器带有大量的片内存储器,因此不能简单地通过观察外部管脚来确定处理器核是如何运行
的。ETM 对深嵌入处理器内核提供了实时跟踪能力。它向一个跟踪端口输出处理器执行的信息。软件调试
器允许使用 JTAG 接口对 ETM 进行配置并以用户易于理解的格式显示捕获到的跟踪信息。
描述
ETM 直接连接到 ARM 内核而不是主 AMBA 系统总线。它将跟踪信息压缩并通过一个窄带跟踪端口输
出。外部跟踪端口分析仪在软件调试器的控制下捕获跟踪信息。跟踪端口可以广播指令跟踪信息。指令跟
踪(或 PC 跟踪)显示了处理器的执行流程并提供所有已执行指令的列表。指令跟踪被显著压缩为广播分支地
址和一套用于指示流水线状态的状态信号。跟踪信息的产生可通过选择触发源进行控制。触发源包括地址
比较器、计数器和序列发生器。由于跟踪信息被压缩,软件调试器需要一个执行代码的静态映像。由于这
个限制,自修改代码无法被跟踪。
ETM 配置
ETM 宏单元使用下面的标准配置。
表 201
ETM 配置
Small 1
资源数/类型
地址比较器对
1
数据比较器
0(不支持数据跟踪)
存储器映射译码器
4
计数器
1
时序发生器
无
外部输入
2
外部输出
0
160
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
Small 1
资源数/类型
FIFOFULL 信号
是(未连接)
FIFO 深度
10 字节
跟踪包宽度
4/8
详见 ARM 文档“嵌入式跟踪宏单元规范”
(ARM IHI 0014E)
。
1.
管脚描述
表 202
ETM 管脚描述
管脚名称
类型
TRACECLK
输出
描述
跟踪时钟
跟踪时钟信号为跟踪端口提供时钟。PIPESTAT[2:0], TRACESYNC
和 TRACEPKT[3:0]信号以跟踪时钟的上升沿为参照。该时钟并不由 ETM 模块
产生,而是由系统时钟得来的。该时钟应当为跟踪数据信号提供足够的保持时
间。支持半速率时钟模式。跟踪数据信号应当从 TRACECLK 的时钟相位移出。
详见“ETM7 技术参考手册”(ARM DDI 0158B),而 TRACECLK 时序请参阅
“嵌入式跟踪宏单元规范”(ARM IHI 0014E)。
PIPESTAT[2:0]
输出
流水线状态
流水线状态信号提供处理器流水线执行阶段中所发生状况的指
示
TRACESYNC
输出
跟踪同步
跟踪同步信号用于指示一组跟踪包当中的第一个包。并且仅为任何
分支地址的第一个包声明为高电平。
TRACEPKT[3:0]
输出
跟踪包
跟踪包信号用于输出打包的关于流水线状态的地址和数据信息。所有
包的长度都为 8 位。一个包需要两个周期输出,在第一个周期中,Packet[3:0]
输出,第二个周期 Packet[7:4]输出。
EXTIN[0]
输入
外部触发输入
复用管脚的复位状态
LPC2131/2132/2138 器件的上述 ETM 管脚是 P1.25-16 的复用功能。如果 P1.25-16 用作调试端口,VSS
和 P1.20/TRACESYNC 之间必须连接一个弱偏置电阻(4.7kΩ)
。如果它们用作 GPIO,无需连接偏置电阻,
并且确保了任何连接到 P1.20/TRACESYNC 的外部驱动器复位时驱动为高或处于高阻态。
寄存器描述
ETM 包含 29 个寄存器,见表 203。有关它们的详细描述见 ARM 有限公司出版的 ARM IHI 0014E 文
档,可从网站 http://www.arm.com 下载。
表 203
ETM 寄存器
名称
访问
寄存器编码
控制 ETM 的一般操作
R/W
000 0000
允许调试器读取每种资源类型的数目。
RO
000 0001
保存控制事件
WO
000 0010
8 位寄存器,用于静态配置存储器映射译码器。
WO
000 0011
ETM 状态
保存挂起的溢出状态位
RO
000 0100
系统配置
保存使用 SYSOPT 总线的配置信息
RO
000 0101
跟踪使能控制 3
保存跟踪使能/禁止地址
WO
000 0110
跟踪使能控制 2
保存比较的地址
WO
000 0111
跟踪使能事件
保存使能的事件
WO
000 1000
ETM 控制
ETM 配置代码
触发事件
存储映射译码控制
描述
161
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
接上表
名称
描述
访问
寄存器编码
跟踪使能控制 1
保存包含和排除的区域
WO
000 1001
FIFOFULL 区域
保存包含和排除的区域
WO
000 1010
FIFOFULL 水平
保存认为 FIFO 已满的值
WO
000 1011
保存使能的事件
WO
000 1100
ViewData 控制 1
保存包含/排除的区域
WO
000 1101
ViewData 控制 2
保存包含/排除的区域
WO
000 1110
ViewData 控制 3
保存包含/排除的区域
WO
000 1111
地址比较器 1~16
保存比较的地址
WO
001 xxxx
WO
010 xxxx
ViewData 事件
地址访问类型 1~16 保存访问的类型和规格
保留
-
-
000 xxxx
保留
-
-
100 xxxx
初始计数值 1~4
保存计数器的初始值
WO
101 00xx
计数器使能 1~4
保存计数器时钟使能控制和事件
WO
101 01xx
计数器重装 1~4
保存计数器重装事件
WO
101 10xx
保存当前计数器值
RO
101 11xx
保存下一个状态触发的事件
-
110 00xx
WO
110 10xx
计数值 1~4
时序状态和控制
外部输出 1~4
保存每个输出的控制事件
保留
-
-
110 11xx
保留
-
-
111 0xxx
保留
-
-
111 1xxx
方框图
ETM 调试环境的方框图如图 58 所示。
跟踪端口
分析仪
10
跟踪
触发
连接器
主机运行的
调试程序
ARM
JTAG
接口单元
外设
ETM
外设
RAM
5
EmbeddedICE
ROM
连接器
LAN
应用板
图 58
23.
ETM 调试环境方框图
REALMONITOR
RealMonitor 是一个可配置的软件模块,它由 ARM 公司开发,可以提供实时的调试。本章所描述的信
息摘自 ARM 文档 RealMonitor 目标集成指南(ARM DUI 0142A)
。该器件包含一个编程到片内 ROM boot
存储器内的 RealMonitor 软件,用于特定的配置。
162
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
请参考白皮书“ 片上系统的实时调试 ”,可从网站 http://www.arm.com/support/White_Papers?Open
Document 下载。
特性
允许用户在不暂停或复位系统的情况下,与当前运行的系统建立调试会话。
在其它用户应用代码调试过程中,允许用户的实时中断代码连续执行。
应用
实时调试
描述
RealMonitor 是一个轻巧的调试监视器,它允许在用户调试前台应用程序时对中断进行服务。它通过
DCC(调试通信通道)与主机进行通信,DCC 位于 EmbeddedICE 逻辑当中。RealMonitor 比 ARM 系统中传统
的调试方法更具优势。传统的调试方法包括:
Angel(基于目标的调试监视器)
Multi-ICE 或其它 JTAG 单元和 EmbeddedICE 逻辑(基于硬件的调试方案)
尽管这两种方法都提供健壮的调试环境,但并不适合作为一个轻巧的实时监视器。
Angel 设计成可以装载和调试在各种不同模式下独立运行的应用程序,它通过不同的连接与调试主机
进行通信(例如串口或者以太网)
。Angel 要求保存和恢复所有的处理器上下文,这样做的结果是使中断产
生延迟。Angel 作为一个全功能的基于目标的调试器,对于执行实时监视来说显得过于笨重了。
Multi-ICE 是一种硬件调试方案。
它使用内置在大多数 ARM 处理器中的 EmbeddedICE 单元来执行操作。
为了执行访问存储器或处理器寄存器这样的调试任务,Multi-ICE 必须使内核进入调试状态。处理器处于调
试状态的时间可能长达数百万个周期,这样正常的程序执行被挂起,中断也无法执行。
RealMonitor 结合了 Angel 和 Multi-ICE 的特性和机制。它提供了必需的服务和功能,此外,它还包含
了 Multi-ICE 的通信机制(使用 JTAG 的 DCC)和类似 Angel 的保存和恢复处理器上下文。RealMonitor 被
预先编程在片内 ROM 存储器当中(boot 扇区)
。当用户将其使能后,可以在部分应用程序继续运行时进行
观察和调试。详见如何使能 RealMonitor 一节的内容。
RealMonitor 部件
如图 59 所示,RealMonitor 分成两个功能部件:
RMHost
位于调试器和 JTAG 单元之间。RMHost 控制器和 RealMonitor.dll 将通用的远程调试接口(RDI)请求
从调试器转换为 JTAG 单元的仅为 DCC 的 RDI 信息。有关主机 RealMonitor 集成应用调试的完整信息请参
考“ARM RMHost 用户指南”
(ARM DUI 0137A)
。
RMTarget
这部分预先编程到片内 ROM 存储器(boot 扇区)并在目标硬件上运行。它使用 EmbeddedICE 逻辑并
通过 DCC 与主机进行通信。
有关 RMTarget 功能的详细信息见 RealMonitor 目标集成指南(ARM DUI 0142A)。
163
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
调试器
RDI 1.5.1
主机
RealMonitor.dll
RMHost
RDI 1.5.1rt
JTAG 单元
RealMonitor 协议
通过 JTAG 连接
的 DCC 传输
RMTarget
目标
目标板和处理器
应用程序
图 59
RealMonitor 部件
RealMonitor 是如何工作的
通常情况下,RealMonitor 作为一个状态机,如图 60 所示。为了响应主机接收到的包,或者因为目标
板上的异步事件,RealMonitor 在运行和停止状态之间进行切换。RMTarget 一次只支持一个断点、观察点、
停止或半主机 SWI 的触发。不提供嵌套事件的保存和恢复。因此,如果用户应用程序因为一个断点而停止,
而在 IRQ 处理程序中产生了另一个断点,那么 RealMonitor 进入 Panic 状态。RealMonitor 进入该状态后将
不执行任何调试。
SWI
Abort
Undef
停止
运行
SWI
Abort
Undef
停止
Panic
Go
图 60 作为状态机的 RealMonitor
一个运行在主计算机上的调试器,例如 ARM eXtended 调试器(AXD)或其它 RealMonitor 调试器可以
连接到目标,实现命令的发送和数据的接收。主机和目标之间的通信如图 59 所示。
RealMonitor 的目标部件 RMTarget 与主机部件 RMHost 通过调试通信通道(DCC)进行通信。DCC 通
过 JTAG 连接来传递数据。
当用户应用程序运行时,RMTarget 通常使用 DCC 所产生的 IRQ。这意味着,如果用户应用程序也打
算使用 IRQ,它必须将 DCC 产生的中断传递给 RealMonitor。
为了实现不间断的调试,处理器中的 EmbeddedICE-RT 逻辑在接收到一个断点时产生一个预取指中止
异常或在接收到观察点时产生一个数据中止异常。这些异常由 RealMonitor 异常处理程序进行处理,并由调
试器告知用户。这样用户应用程序可以在不停止处理器的情况下继续运行。RealMonitor 认为用户应用程序
包含下面两部分:
164
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
连续运行的前台应用程序,通常处于用户、系统或 SVC 模式。
包含中断和异常处理程序的后台应用程序,由用户系统的特定事件触发,这些事件包括:
-IRQ 或 FIQ
-由用户前台应用程序产生的数据和预取指中止,表示应用程序在调试时出现错误。这两种情况
都会通知主机并停止用户应用程序。
-由用户前台程序中的未定义指令所导致的未定义异常,表示在调试程序时出现错误。
RealMonitor 使用户程序一直停止到从主机接收到一个“Go”包为止。
当一个不是由用户应用程序处理的异常发生时,执行下面的操作:
RealMonitor 进入查询 DCC 的一个循环。如果 DCC 读缓冲区已满,控制权传递给 m_ReceiveData()
(RealMonitor 内部函数)
。如果 DCC 写缓冲区空闲,控制权传递给 m_TransmitData()(RealMonitor
内部函数)。如果没有别的事要做,函数返回调用程序。上述比较的顺序使读操作的优先级高于
写操作。
RealMonitor 停止前台应用程序。如果 IRQ 和 FIQ 在前台程序停止时已经使能,那么 IRQ 和 FIQ
可以继续得到服务。
如何使能 RealMonitor
必须执行下面的步骤才可使能 RealMonitor。在这一节的末尾给出了执行所有步骤的例程。
增加堆栈
用户必须确保在 RealMonitor 所使用的每一个处理器模式下的应用程序中都建立了堆栈。对于每一种模
式,RealMonitor 都要求一个固定数目字的堆栈空间。用户必须为 RealMonitor 和应用程序提供足够的堆栈
空间。
RealMonitor 对堆栈有下列要求:
表 204
RealMonitor 的堆栈要求
处理器模式
RealMonitor 堆栈使用(字节)
未定义
48
预取指中止
16
数据中止
16
IRQ
8
IRQ 模式
该模式下的堆栈是必不可少的。RealMonitor 用两个字保存中断处理程序的入口。在嵌套中断使能前将
它们释放。
未定义模式
该模式的堆栈也是必要的。RealMonitor 在处理一个未定义指令异常时使用 12 个字。
SVC 模式
RealMonitor 不使用该堆栈。
预取指中止模式
RealMonitor 使用 4 个字保存预取指中止中断处理程序的入口。
165
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
数据中止模式
RealMonitor 使用 4 个字保存数据中止中断处理程序的入口。
用户/系统模式
RealMonitor 不使用该堆栈。
FIQ 模式
RealMonitor 不使用该堆栈。
处理异常
这一节讲述 RealMonitor 和用户程序共用异常处理程序的重要性。
RealMonitor 异常处理
为了正常工作,RealMonitor 必须能够截获特定的中断和异常。图 61 所示为如何由 RealMonitor 自身声
明异常或与应用程序共用异常处理程序。如果用户应用程序要求共用异常,那么它必须提供函数(例如
app_IRQHandler( ))
。根据异常的特性,该处理程序可以:
将控制权传递给 RealMonitor 处理程序,例如 rm_irqhandler2()
为应用程序自身声明异常,例如 app_IRQHandler()
一个自身不带异常处理程序的应用程序可以安装 RealMonitor 低级异常处理程序,该程序直接指向处理
器的向量表。irq 处理程序必须得到向量中断控制器的地址。最简单的方法是在向量表中写一条转移指令,
转移指令的目标地址为相关的 RealMonitor 异常处理程序的起始地址。
复位
RealMonitor 提供的异常向量处理程序
rm_undef_handler()
rm_prefetchabort_handler()
rm_dataabort_handler()
rm_irqhandler()
未定义
SWI
预取指中止
RealMonitor 和用户 IRQ 处理程序共用的 irq
rm_irqhandler2()
数据中止
app_irqDispatch
保留
or
IRQ
App_IRQHandler()
FIQ
图 61 异常处理程序
RMTarget 初始化
当处理器处于特权模式并且 IRQ 禁止时,用户必须在应用程序的初始化代码中加入一行指令:call
rm_init_entry()。
例程
下面的例子显示了如何建立堆栈、VIC、初始化 RealMonitor 以及共用非向量中断:
166
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
IMPORT rm_init_entry
IMPORT rm_prefetchabort_handler
IMPORT rm_dataabort_handler
IMPORT rm_irqhandler2
IMPORT rm_undef_handler
; 用户应用程序入口
IMPORT User_Entry
CODE32
ENTRY
; 定义异常表。指令连接器将代码放置在地址 0x0000 0000。
AREA exception_table, CODE
LDR pc, Reset_Address
LDR pc, Undefined_Address
LDR pc, SWI_Address
LDR pc, Prefetch_Address
LDR pc, Abort_Address
NOP
; 在此处插入用户代码有效签名
LDR pc, [pc, #-0xFF0]
; 从 VIC 装载 IRQ 向量
LDR PC, FIQ_Address
Reset_Address
DCD
__init
; 复位入口
Undefined_Address
DCD
rm_undef_handler
; 由 RealMonitor 提供
SWI_Address
DCD
0
Prefetch_Address
DCD
rm_prefetchabort_handler ; 由 RealMonitor 提供
Abort_Address
DCD
rm_dataabort_handler
; 由 RealMonitor 提供
FIQ_Address
DCD
0
; 用户可将 FIQ 处理程序的地址放置在此处
AREA
init_code,
ram_end
EQU
; 用户可将 SWI 处理程序的地址放置在此处
CODE
0x4000xxxx
; 片内 RAM 的顶端
__init
; /*********************************************************************
; * 为不同的处理模式建立堆栈指针。堆栈向下增加。
; *********************************************************************/
LDR r2, =ram_end
; 得到 RAM 顶端地址
MRS r0, CPSR
; 保存当前处理器模式
; 初始化未定义模式堆栈,供 RealMonitor 使用
BIC
ORR
r1, r0, #0x1f
r1, r1, #0x1b
MSR CPSR_c, r1
; 为 Flash 编程程序保留顶端 32 字节。参见 Flash 存储器系统和编程章节。
SUB sp,r2,#0x1F
; 初始化中止模式堆栈,供 RealMonitor 使用
167
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
BIC r1, r0, #0x1f
ORR r1, r1, #0x17
MSR CPSR_c, r1
; 为未定义模式堆栈保留 64 字节
SUB sp,r2,#0x5F
; 初始化 IRQ 模式堆栈,供 RealMonitor 和用户程序使用
BIC r1, r0, #0x1f
ORR r1, r1, #0x12
MSR CPSR_c, r1
; 为中止模式堆栈保留 32 字节
SUB sp,r2,#0x7F
; 返回初始模式
MSR CPSR_c, r0
; 初始化用户应用程序堆栈
; 为 IRQ 模式堆栈保留 256 字节
SUB sp,r2,#0x17F
; /*********************************************************************
; * 建立向量中断控制器。DCC Rx 和 Tx 中断产生非向量 IRQ 请求。
; * rm_init_entry 意识到 VIC 并使能 DBGCommRX 和 DBGCommTx 中断。
; * 将默认向量地址寄存器编程为非向量 app_irqDispatch 的地址。
; * 在此例中,用户可在此处建立向量 IRQ 或 FIQ
; *********************************************************************/
VICBaseAddr
EQU 0xFFFFF000 ; VIC 基地址
VICDefVectAddrOffset
EQU
0x34
LDR r0, =VICBaseAddr
LDR r1, =app_irqDispatch
STR r1, [r0,#VICDefVectAddrOffset]
BL rm_init_entry
; 初始化 RealMonitor
;使能 ARM 处理器中的 FIQ 和 IRQ
MRS r1, CPSR
; 读取 CPSR
BIC r1, r1, #0xC0
; 使能 IRQ 和 FIQ
MSR CPSR_c, r1
; 更新 CPSR
; /*********************************************************************
; * 获取用户程序的入口。
; *********************************************************************/
LDR lr, =User_Entry
MOV pc, lr
168
http://www.zlgmcu.com
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
; /*********************************************************************
; * 非向量 irq 处理程序 (app_irqDispatch)
; *********************************************************************/
AREA app_irqDispatch, CODE
VICVectAddrOffset EQU 0x30
app_irqDispatch
; 使能中断嵌套
STMFD sp!, {r12,r14}
MRS r12, spsr
; 将 SPSR 保存到 r12
MSR cpsr_c,0x1F
; 重新使能 IRQ, 进入系统模式
; 如果要求共用非向量中断,用户应当在此处插入代码。每个非向量共用 irq 处理程序都必须使用下列代码
; 返回到被中断的指令。
;MSR cpsr_c, #0x52
; 禁止 irq, 进入 IRQ 模式
;MSR spsr, r12
; 从 r12 恢复 SPSR
;STMFD sp!, {r0}
;LDR r0, =VICBaseAddr
;STR r1, [r0,#VICVectAddrOffset]
; 应答。非向量 irq 已经执行完毕
;LDMFD sp!, {r12,r14,r0}
; 恢复寄存器
;SUBS pc, r14, #4
; 返回到被中断的指令
; 用户中断没有发生,因此调用 rm_irqhandler2。该处理程序没有意识到 VIC 的中断优先级,通过硬件使
; rm_irqhandler2 返回到此处。
STMFD sp!, {ip,pc}
LDR pc, rm_irqhandler2
;rm_irqhandler2 返回到此处
MSR cpsr_c, #0x52
; 禁止 irq, 进入 IRQ 模式
MSR spsr, r12
; 将 SPSR 从 r12 恢复
STMFD sp!, {r0}
LDR r0, =VICBaseAddr
STR r1, [r0,#VICVectAddrOffset]
; 应答。非向量 irq 已经执行完毕
LDMFD sp!, {r12,r14,r0}
; 恢复寄存器
SUBS pc, r14, #4
; 返回到被中断的指令
END
RealMonitor 建立选项
RealMonitor 使用下列选项建立:
RM_OPT_DATALOGGING=FALSE
该选项使能或禁止在非 RealMonitor(第三方)通道上发送任何从目标到主机的包。
RM_OPT_STOPSTART=TRUE
该选择使能或禁止对所有停止和启动调试特性的支持。
169
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
RM_OPT_SOFTBREAKPOINT=TRUE
该选项使能或禁止对软件断点的支持。
RM_OPT_HARDBREAKPOINT=TRUE
在带有 EmbeddedICE-RT 的内核上使能。该器件使用带有 EmbeddedICE-RT 的 ARM-7TDMI-S Rev 4 内核。
RM_OPT_HARDWATCHPOINT=TRUE
在带有 EmbeddedICE-RT 的内核上使能。该器件使用带有 EmbeddedICE-RT 的 ARM-7TDMI-S Rev 4 内核。
RM_OPT_SEMIHOSTING=FALSE
该选项使能或禁止对 SWI 半主 (semi-hosting)的支持。Semi-hosting 提供运行在 ARM 目标板上的代码,这
些代码具有运行 ARM 调试器的主机的一些功能。这些功能包括键盘输入、屏幕输出和磁盘 I/O 等等。
RM_OPT_SAVE_FIQ_REGISTERS=TRUE
当 RealMonitor 停止时,该选项决定是否将 FIQ 模式寄存器保存到寄存器块。
RM_OPT_READBYTES=TRUE
RM_OPT_WRITEBYTES=TRUE
RM_OPT_READHALFWORDS=TRUE
RM_OPT_WRITEHALFWORDS=TRUE
RM_OPT_READWORDS=TRUE
RM_OPT_WRITEWORDS=TRUE
使能或禁止对 8/16/32 位读/写的支持。
RM_OPT_EXECUTECODE=FALSE
使能或禁止对“执行代码”缓冲区的执行代码的支持。该代码必须先下载。
RM_OPT_GETPC=TRUE
该选项使能或禁止对 RealMonitor GetPC 包的支持。当中断模式中使用了实时监视时,它可用于代码的成型。
RM_EXECUTECODE_SIZE=NA
"执行代码"缓冲器规格。参见 RM_OPT_EXECUTECODE 选项。
RM_OPT_GATHER_STATISTICS=FALSE
该选项使能或禁止关于 RealMonitor 内部操作的集中统计表代码。
RM_DEBUG=FALSE
该选项使能或禁止在 RealMonitor 中额外的调试和错误检测代码。
RM_OPT_BUILDIDENTIFIER=FALSE
该选项决定是否在 RMTarget 的性能表中建立一个“建立标识符”。性能表保存在 ROM 中。
RM_OPT_SDM_INFO=FALSE
SDM 向调试工具提供关于应用板和处理器的额外信息。
170
广州周立功单片机发展有限公司 Tel: (020)38730976
38730977
Fax: 38730925
http://www.zlgmcu.com
RM_OPT_MEMORYMAP=FALSE
该选项决定板的存储器映射是否建立到目标当中。并通过性能表得到。
RM_OPT_USE_INTERRUPTS=TRUE
该选项指定是否为中断驱动模式和查询模式建立 RMTarget。
RM_FIFOSIZE=NA
该选项指定数据记录 FIFO 缓冲区的规格(以字为单位)。
CHAIN_VECTORS=FALSE
该选项允许 RMTarget 通过µHAL(ARM HW abstraction API)支持向量链。
更改历史记录
2004 年 8 月 25 日:
根据设计要求得出的 LPC2132/2138 用户手册
2004 年 9 月 13 日:
“简介”和“定时器/计数器 0 和定时器/计数器 1”章节中增加了 TIMER0/1 的计数器功能的内容。
表 23“功率控制寄存器
(PCON – 0xE01FC0C0)
(
”
“系统控制模块”
一章)
中的 LPC201x 被 LPC2132/2138
代替。
表 52“管脚功能选择寄存器 2(PINSEL2 – 0xE002C014)
”
(
“管脚连接模块”一章)中的保留位内容
被更改。
“GPIO”章的“寄存器描述”一节中的 PORT2/3 内容被删除。有关 PORT0 可用管脚数的描述被更新。
2004 年 9 月 14 日:
“系统控制模块”一章中的“复位”和“唤醒定时器”增加了有关 RTC 的描述。
“实时时钟”一章中的“RTC 使用注意事项”内容被更新。
2004 年 9 月 15 日:
“定时器/计数器 0 和定时器/计数器 1”一章中计数控制寄存器的描述被更新。
“定时器/计数器 0 和定时器/计数器 1”一章中的管脚描述中列出了所有可用的 CAP 和 MAT 管脚。
“定时器/计数器 0 和定时器/计数器 1”一章中的计数控制寄存器的描述中增加了计数器模式的详细信
息。
2004 年 9 月 16 日:
“SSP 控制器(SPI1)
”一章中的印刷错误被更正。
“简介”一章中增加了 Flash 擦除/写周期和数据保护的内容。
2004 年 11 月 22 日
文档中 I2C 章节的内容被更新。
文档中遗漏的存储器加速模块(MAM)一章的内容被加上。
171