首页资源分类嵌入式处理器ARM MCU > LPC1100中文手册

LPC1100中文手册

已有 445125个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:LPC1100

    分    享:

    文档简介

    LPC1100 中文参考手册,编程的时候用。

    文档预览

    LPC1100 系列微控制器 第第一一章章 概概述述 用用户户手手册册 RReevv11..0000 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 目录 第 1 章 概述 .................................................................................................................2 1.1 简介........................................................................................................................... 2 1.2 特性........................................................................................................................... 2 1.3 订购信息 ................................................................................................................... 3 1.4 方框图....................................................................................................................... 4 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第1章 第1章 概述 1.1 简介 LPC111x 是基于 ARM Cortex-M0 的微控制器,可用于高集成度和低功耗的嵌入式应用。 ARM Cortex-M0 是第二代内核,它提供了一个简单的指令集,可以实现确定性行为。 LPC111x CPU 的工作频率高达 50MHz。 LPC111x 的外设包括:高达 32kB 的 Flash、8kB 的数据存储器、一个 Fast-mode Plus 的 I2C 接口、一个 RS-485/EIA-485 UART、2 个 SSP 接口、4 个通用定时器,以及多达 42 个通 用 I/O 引脚。 1.2 特性  ARM Cortex-M0 处理器工作在 50MHz 的频率下;  ARM Cortex-M0 处理器内置有嵌套向量中断控制器(NVIC);  32kB(LPC1114)、24 kB(LPC1113)、16kB(LPC1112)或 8kB(LPC1111)的 片内 Flash 程序存储器;  高达 8kB 的静态 RAM;  通过片内 Bootloader 软件来实现在系统编程(ISP)和在应用中编程(IAP);  串行接口: - UART:可产生小数波特率,带有内部 FIFO,支持 RS-485/EIA-485,具有 moderm 控制; - 2 个 SSP 控制器,具有 FIFO 和多协议功能(LQFP48 和 PLCC44 封装只有第 二个 SSP 有该功能); - I2C 总线接口支持全部 I2C 总线规范和 Fast-mode Plus 模式,数据速率高达 1Mbit/s,具有多地址识别和监控模式;  其它外设: - 多达 42 个通用 I/O(GPIO)引脚,上拉/下拉电阻可配置; - 一个引脚具有 20mA 的高电流驱动能力; - 2 个 I2C 总线引脚在 Fast-mode Plus 模式下具有 20mA 的高电流汲入能力; - 4 个通用定时器/计数器,共有 4 个捕获输入和 13 个比较输出; - 看门狗定时器(WDT); - 系统节拍定时器;  串行调试;  集成的 PMU(Power Management Unit)在睡眠、深度睡眠和深度掉电模式下自动 调节内部稳压器,将功耗降至最低;  3 种节能模式:睡眠、深度睡眠和深度掉电;  单个 3.3V 电源(2.0V~3.6V);  10 位 ADC,在 8 个引脚之间实现输入多路复用;  GPIO 引脚可以用作边沿和电平触发的中断源;  带分频器的时钟输出功能可以反映主振荡器时钟、IRC 时钟、CPU 时钟或看门狗 时钟;  处理器通过一个高达 13 个功能引脚的专用起始逻辑从深度睡眠模式中唤醒;  掉电检测有 4 个中断阈值和 1 个强制复位阈值;  上电复位(POR); LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第1章  晶体振荡器的工作范围为 1MHz~25MHz;  12MHz 内部 RC 振荡器可调节到 1%的精度;可以选择用作一个系统时钟;  PLL 允许 CPU 无需使用高频晶体而工作在最大 CPU 速率下。时钟可以由主振荡器、 内部 RC 振荡器或看门狗振荡器提供;  提供 LQFP48、PLCC44 和 HVQFN33 几种封装形式。 1.3 订购信息 表 1.1 订购信息 器件编号 LPC1111FHN33/101 LPC1111FHN33/201 LPC1112FHN33/101 LPC1112FHN33/201 LPC1113FHN33/201 LPC1113FHN33/301 LPC1114FHN33/201 LPC1114FHN33/301 LPC1113FBD48/301 LPC1114FBD48/301 LPC1114FA44/301 名称 HVQFN33 HVQFN33 HVQFN33 HVQFN33 HVQFN33 HVQFN33 HVQFN33 HVQFN33 LQFP48 LQFP48 PLCC44 封装信息 描述 HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm HVQFN:超薄塑料热增强型扁平封装;无引线;33 个 引脚;裸片尺寸:7×7×0.85mm LQFP48:塑料薄型 QFP;48 条引线;裸片尺寸:7×7 ×1.4mm LQFP48:塑料薄型 QFP;48 条引线;裸片尺寸:7×7 ×1.4mm PLCC44:带引线的塑料芯片载体;44 条引线 版本 n/a n/a n/a n/a n/a n/a n/a n/a sot313-2 sot313-2 sot187-2 型号 Flash LPC1111 LPC1111FHN33/101 LPC1111FHN33/201 LPC1112 LPC1112FHN33/101 LPC1112FHN33/201 8kB 8kB 16kB 16kB 表 1.2 选型表 总 SRAM UART RS-485 ADC I2C/Fast+ SSP 通道 封装 2kB 1 4kB 1 1 1 8 HVQFN33 1 1 8 HVQFN33 2kB 1 4kB 1 1 1 8 HVQFN33 1 1 8 HVQFN33 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第1章 型号 LPC1113 LPC1113FHN33/201 LPC1113FHN33/301 LPC1113FBD48/301 LPC1114 LPC1114FHN33/201 LPC1114FHN33/301 LPC1114FBD48/301 LPC1114FA44/301 1.4 方框图 Flash 24kB 24kB 24kB 32kB 32kB 32kB 32kB 总 SRAM UART RS-485 ADC I2C/Fast+ SSP 通道 续上表 封装 4kB 1 8kB 1 8kB 1 1 1 8 HVQFN33 1 1 8 HVQFN33 1 2 8 LQFP48 4kB 1 8kB 1 8kB 1 8kB 1 1 1 8 HVQFN33 1 1 8 HVQFN33 1 2 8 LQFP48 1 2 8 PLCC44 图 1.1 LPC111x 方框图 注:只适用 LQFP48/PLCC44 封装的器件。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 LPC1100 系列微控制器 第第二二章章 存存储储器器映映射射 用用户户手手册册 RReevv11..0000 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 目录 第 2 章 存储器映射 .....................................................................................................2 2.1 如何阅读本手册.......................................................................................................2 2.2 存储器映射 ............................................................................................................... 2 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第2章 第2章 存储器映射 2.1 如何阅读本手册 表 2.1 LPC111x 内存配置 器件前缀 Flash SRAM /101 /201 /301 LPC1111 8kB 2kB 4kB - LPC1112 16kB 2kB 4kB - LPC1113 24kB - 4kB 8kB LPC1114 32kB - 4kB 8kB 2.2 存储器映射 LPC111x 的存储器和外设地址空间如图 2.1 所示。 AHB 外设区的大小为 2MB,可分配多达 128 个外设。在 LPC111x 系列 ARM 上,GPIO 端口是唯一的 AHB 外设。APB 外设区的大小为 512KB,可分配多达 32 个外设,每种类型 的每一个外设空间的大小都为 16KB,从而简化了每个外设的地址译码。 所有外设寄存器不管规格大小,都按照字地址进行分配(32 位边界)。这意味着字和 半字寄存器是一次性访问。例如,不能对一个字寄存器的最高字节执行单独的读或写操作。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第2章 注:只适用 LQFP48/PLCC44 封装的器件。 图 2.1 LPC111x 存储器映射 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 LPC1100 系列微控制器 第第三三章章 系系统统配配置置 用用户户手手册册 RReevv11..0000 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 目录 第 3 章 系统配置 .........................................................................................................3 3.1 简介........................................................................................................................... 3 3.2 引脚描述 ................................................................................................................... 3 3.3 时钟和电源控制.......................................................................................................3 3.4 寄存器描述 ............................................................................................................... 4 3.4.1 统存储器重映射寄存器...................................................................................6 3.4.2 外设复位控制寄存器.......................................................................................6 3.4.3 系统 PLL 控制寄存器......................................................................................6 3.4.4 系统 PLL 状态寄存器......................................................................................7 3.4.5 系统振荡器控制检测器...................................................................................7 3.4.6 看门狗振荡器控制寄存器...............................................................................7 3.4.7 内部共振晶体控制寄存器...............................................................................8 3.4.8 系统复位状态寄存器.......................................................................................9 3.4.9 系统 PLL 时钟源选择寄存器..........................................................................9 3.4.10 系统 PLL 时钟源更新使能寄存器..................................................................9 3.4.11 主时钟源选择寄存器.....................................................................................10 3.4.12 主时钟源更新使能寄存器.............................................................................10 3.4.13 系统 AHB 时钟分频寄存器 ..........................................................................10 3.4.14 系统 AHB 时钟控制寄存器 .......................................................................... 11 3.4.15 SSP0 时钟分频寄存器 ...................................................................................12 3.4.16 UART 时钟分频寄存器 .................................................................................13 3.4.17 SSP1 时钟分频寄存器 ...................................................................................13 3.4.18 SYSTICK 时钟分频寄存器 ...........................................................................13 3.4.19 WDT 时钟源选择寄存器...............................................................................13 3.4.20 WDT 时钟源更新使能寄存器.......................................................................14 3.4.21 WDT 时钟分频寄存器...................................................................................14 3.4.22 CLKOUT 时钟源选择寄存器........................................................................14 3.4.23 CLKOUT 时钟源更新使能寄存器................................................................15 3.4.24 CLKOUT 时钟分频寄存器............................................................................15 3.4.25 POR 捕获 PIO 状态寄存器 0.........................................................................15 3.4.26 POR 捕获 PIO 状态寄存器 1.........................................................................16 3.4.27 BOD 控制寄存器 ...........................................................................................16 3.4.28 系统节拍定时器校准寄存器 .........................................................................16 3.4.29 起始逻辑边沿控制寄存器 0 ..........................................................................17 3.4.30 起始逻辑信号使能寄存器 0 ..........................................................................17 3.4.31 始逻辑复位寄存器 0......................................................................................17 3.4.32 起始逻辑状态寄存器 0..................................................................................18 3.4.33 深度睡眠模式配置寄存器.............................................................................18 3.4.34 唤醒配置寄存器.............................................................................................19 3.4.35 掉电配置寄存器.............................................................................................20 3.4.36 器件 ID 寄存器...............................................................................................21 3.5 复位......................................................................................................................... 21 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 3.6 Brown-Out Detection ..............................................................................................22 3.7 电源管理 ................................................................................................................. 22 3.7.1 运行模式.........................................................................................................23 3.7.2 睡眠模式.........................................................................................................23 3.7.3 深度睡眠模式.................................................................................................23 3.7.4 深度掉电模式.................................................................................................24 3.8 深度睡眠模式 ......................................................................................................... 24 3.8.1 进入深度睡眠模式.........................................................................................24 3.8.2 关断 12MHz IRC 振荡器 ...............................................................................25 3.8.3 起始逻辑.........................................................................................................25 3.9 系统 PLL 的功能描述............................................................................................25 3.9.1 锁定检测器.....................................................................................................26 3.9.2 直接输出模式.................................................................................................26 3.9.3 掉电控制.........................................................................................................26 3.9.4 操作模式.........................................................................................................26 3.9.5 分频率编程.....................................................................................................26 3.9.6 频率选择.........................................................................................................27 3.10 Flash 存储器的访问 ...............................................................................................28 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii ii 广州周立功单片机发展有限公司 第3章 第3章 系统配置 3.1 简介 系统配置模块控制振荡器、电源管理单元和 LPC111x 系列 ARM 的时钟发生功能。该 模块还包括为 AHB 访问设置优先级的寄存器,以及一个重映射 Flash、SRAM 和 ROM 存储 器区域的寄存器。 3.2 引脚描述 系统控制模块的相关引脚如下表所示。 表 3.1 引脚汇总 引脚名 CLKOUT PIO0_0~PIO0_11 PIO1_0 引脚方向 O I I 引脚描述 时钟输出引脚 起始逻辑唤醒引脚端口 0 起始逻辑唤醒引脚端口 1 3.3 时钟和电源控制 LPC111x 的时钟产生单元(CGU)如图 3.1 所示。 LPC111x 含有 3 个独立的振荡器:系统振荡器、内部 RC 振荡器(IRC)和看门狗振荡 器。应特殊应用的要求,所有振荡器都可以具有多个功能。 复位之后,LPC111x 会根据内部 RC 振荡器的频率运行,直到频率被软件切换。这样, 系统就无需根据外部晶体的频率运行,bootloader 代码的运行频率可知。 寄存器 SYSAHBCLKCTRL 控制着各种外设和存储器的系统时钟。UART、SSP0/1 和 SysTick 定时器都有单独的时钟分频器,可以从主时钟衍生出外设所需的时钟频率。 主时钟以及从 IRC、系统振荡器和看门狗振荡器输出的时钟均可以直接在 CLKOUT 引 脚上观察到。 有关电源控制的详细描述请参见本章“电源管理”小节。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第3章 图 3.1 LPC111x 时钟产生单元 3.4 寄存器描述 所有寄存器无论大小都按字地址边界排列。寄存器的详情在每种功能的描述中给出。 有关 Flash 访问时序寄存器的描述请参见 “Flash 存储器访问”小节,该寄存器可以重 新配置。该寄存器不属于系统配置模块。 表 3.2 寄存器总览:系统控制模块(基址 0x4004 8000) 寄存器名 SYSMEMREMAP PRESETCTRL SYSPLLCTRL SYSPLLSTAT SYSOSCCTRL WDTOSCCTRL IRCCTRL - SYSRESSTAT - SYSPLLCLKSEL SYSPLLCLKUEN 访问 R/W R/W R/W R R/W R/W R/W R R/W R/W 地址偏移 0x000 0x004 0x008 0x00C 0x010-0x01C 0x020 0x024 0x028 0x02C 0x030 0x034-0x03C 0x040 0x044 描述 系统存储器映射 外设复位控制 系统 PLL 控制 系统 PLL 状态 保留 系统振荡器控制 看门狗振荡器控制 IRC 控制 保留 系统复位状态寄存器 保留 系统 PLL 时钟源选择 系统 PLL 时钟源更新使能 复位值 0x000 0x000 0x000 0x000 0x000 0x000 0x080 0x000 0x000 0x000 参考 表 3.3 表 3.4 表 3.5 表 3.6 表 3.7 表 3.8 表 3.9 表 3.10 表 3.11 表 3.12 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第3章 寄存器名 - MAINCLKSEL MAINCLKUEN SYSAHBCLKDIV SYSAHBCLKCTRL SSP0CLKDIV UARTCLKDIV SSP1CLKDIV SYSTICKCLKDIV WDTCLKSEL WDTCLKUEN WDTCLKDIV CLKOUTCLKSEL CLKOUTUEN CLKOUTDIV - PIOPORCAP0 PIOPORCAP1 BODCTRL SYSTCKCAL STARTAPRP0 STARTERP0 STARTRSRP0CLR STARTSRP0 PDSLEEPCFG PDAWAKECFG PDRUNCFG 访问 - R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W - R R R R/W R/W R/W R/W W R R/W R/W R/W 地址偏移 0x048-0x06C 0x070 0x074 0x078 0x07C 0x080 0x084-0x090 0x094 0x098 0x09C 0x0A0-0x0AC 0x0B0 0x0B4-0x0CC 0x0D0 0x0D4 0x0D8 0x0DC 0x0E0 0x0E4 0x0E8 0x0EC-0x0FC 0x100 描述 保留 主时钟源的选择 主时钟源的更新使能 系统 AHB 时钟分频器 保留 系统 AHB 时钟控制 保留 SSP0 时钟分频器 UART 时钟分频器 SSP1 时钟分频器 保留 SYSTICK 时钟分频器 保留 WDT 时钟源选择 WDT 时钟源更新使能 WDT 时钟分频器 保留 CLKOUT 时钟源选择 CLKOUT 时钟源更新使能 CLKOUT 时钟分频器 保留 POR 捕获 PIO 状态 0 0x104 POR 捕获 PIO 状态 1 0x108-0x14C 0x150 0x154 0x158 0x15C-0x1FC 0x200 0x204 0x208 0x210-0x22C 0x20C 0x210-0x22C 0x230 0x234 0x238 保留 BOD 控制 保留 系统节拍计数器校准 保留 静态逻辑边沿控制寄存器 0 静态逻辑信号使能寄存器 0 静态逻辑复位寄存器 0 保留 静态逻辑状态寄存器 0 保留 深度睡眠模式的掉电状态 从深度睡眠模式唤醒以后的掉电 状态 使配置寄存器掉电 复位值 - 0x000 0x000 0x001 0x01F 0x000 0x000 0x000 0x000 0x000 0x000 0x000 0x000 0x000 0x000 由用户 决定 由用户 决定 0x000 - n/a n/a 0x000 0x0000 FDF0 0x0000 FDF0 续上表 参考 表 3.13 表 3.14 表 3.15 表 3.16 表 3.17 表 3.18 表 3.19 表 3.20 表 3.21 表 3.22 表 3.23 表 3.24 表 3.25 表 3.26 表 3.27 表 3.28 表 3.29 表 3.30 表 3.31 表 3.32 表 3.33 表 3.34 表 3.35 表 3.36 表 3.37 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第3章 寄存器名 DEVICE_ID 访问 R 地址偏移 0x3F4 器件 ID 描述 复位值 与器件 有关 续上表 参考 表 3.38 3.4.1 统存储器重映射寄存器 系统存储器重映射寄存器决定了 ARM 中断向量是否从引导 ROM、Flash 或 SRAM 读取。 表 3.3 系统存储器重映射寄存器的位描述(SYSMEMREMAP,地址 0x4004 8000) 位 符号 值 描述 系统存储器重映射 1:0 MAP 00 BootLoader 模式。中断向量被重新映射到 BootROM 01 用户 RAM 模式。中断向量被重新映射到静态 ROM 10 或 11 用户 Flash 模式。中断向量不会被映射,而且一直位于 Flash 31:2 - - 保留 复位值 0x00 0x00 3.4.2 外设复位控制寄存器 软件可以利用该寄存器来复位 SSP 和 I2C。向位 SSP0/1_RST_N 或 I2C_RST_N 写 0 可 以复位 SSP0/1 或 I2C。写 1 就取消复位。 表 3.4 外设复位控制寄存器的位描述(PRESETCTRL,地址 0x4004 8004) 位 符号 值 SSP0 复位控制 0 SSP0_RST_N 0 复位 SSP0 1 SSP0 复位取消 I2C 复位控制 1 I2C0_RST_N 0 复位 I2C 1 I2C 复位取消 SSP1 复位控制 2 SSP1_RST_N 0 复位 SSP1 1 SSP1 复位取消 31:3 - - 保留 描述 复位值 0x1 0x1 0x1 0x00 3.4.3 系统 PLL 控制寄存器 该寄存器连接并使能系统 PLL、配置 PLL 倍频器和分频值。PLL 可从各种时钟源中接 收高达 25MHz(10MHz 起)的输入频率。该输入频率倍频为较高的频率,然后进行分频提 供给 CPU、外设和 USB 子系统实际使用的时钟。这个 PLL 可产生 CPU 允许的最大频率。 PLL 操作模式由 DIRECT 和 BYPASS 位的设置决定(表 3.5)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第3章 表 3.5 系统 PLL 控制寄存器(SYSPLLCTRL,地址 0x4004 8008)位描述 位 符号 4:0 MSEL 6:5 PSEL 7 DIRECT 8 BYPASS 31:9 - 值 0000 ... 1111 00 01 10 11 0 1 0 1 - 描述 反馈分频器值。分频值 M 为 MSEL 值+1 除数 M=1 除数 M=32 后置分频器速率 P。分频率为 2×P P=1 P=2 P=4 P=8 直接 CCO 时钟输出控制 时钟信号通过后置分频器 时钟信号直接到输出 输入时钟旁路控制 CCO 时钟发送到后置分频器 PLL 输入时钟发送到后置分频器 保留 复位值 0000 0x00 0x0 0x0 0x00 3.4.4 系统 PLL 状态寄存器 该寄存器是只读寄存器,并提供 PLL 锁定状态。(见“锁定检测器”小节)。 表 3.6 系统 PLL 状态寄存器(SYSPLLSTAT,地址 0x4004 800C)位描述 位 符号 值 PLL 锁定状态 0 LOCK 0 PLL 未锁定 1 PLL 锁定 31:1 - - 保留 描述 3.4.5 系统振荡器控制检测器 该寄存器配置系统振荡器的频率范围。 复位值 0x0 0x00 表 3.7 系统振荡器控制寄存器(SYSOSCCTRL,地址 0x4004 8020)位描述 位 符号 值 描述 复位值 旁路系统振荡器 0 振荡器未被旁路 0 BYPASS 0x0 1 振荡器被旁路。PLL 输入(sys_osc_clk)直接由管脚 XTALIN 和 XTALOUT 提供 决定低功耗振荡器的频率范围 1 FREQRANGE 0 1-20MHz 频率范围 0x0 1 15-50MHz 频率范围 31:2 - - 保留 0x00 3.4.6 看门狗振荡器控制寄存器 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第3章 该寄存器配置看门狗振荡器。振荡器分模拟和数字两个部分。模拟部分含有振荡器功能, 可以产生一个模拟时钟信号(Fclkana)。数字部分可以将 Fclkana 时钟信号进行分频,产生 所需的输出时钟频率 wdt_osc_clk。用户也可以利用位 FREQSEL 对 Fclkana 时钟信号进行调 节,调节范围为 500KHz 到 3.7MHz 之间。使能数字部分对 Fclkana 时钟信号进行分频可以 通过 DIVSEL 位来实现(分频值=2、4… … 64)。 看门狗振荡器的输出时钟频率的计算公式如下: wdt_osc_clk=Fclkana/(2×(1+DIVSEL) 复位值的计算公式如下: wdt_osc_clk=1.6MHz/6=270KHz 提示:不管 FREQSET 设置的值是多少,Fclkana 的值都会比表中列出的频率多 25%。 表 3.8 看门狗振荡器控制寄存器(WDTOSCCTRL,地址 0x4004 8024)位描述 位 符号 值 描述 选择将 Fclkana 分频成 wdt_osc_clk 的分频器 00000 2 00001 4 4:0 DIVSEL 00010 6 …… 11111 64 选择看门狗振荡器模拟输出频率(Fclkana) 0001 0.5 MHz 0010 0.8 MHz 0011 1.1 MHz 0100 0101 1.4 MHz 1.6 MHz (复位值) 0110 1.8 MHz 0111 2.0 MHz 8:5 FREQSEL 1000 2.2 MHz 1001 2.4 MHz 1010 2.6 MHz 1011 2.7 MHz 1100 2.9 MHz 1101 3.1 MHz 1110 3.2 MHz 1111 3.4 MHz 31:9 - - 保留 复位值 0x000 0x05 0x00 3.4.7 内部共振晶体控制寄存器 该寄存器对片内 12MHz 振荡器进行调整。调整值由厂商制定,并在启动时通过引导代 码写入。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第3章 表 3.9 内部共振晶体控制寄存器(IRCCTRL,地址 0x4004 8028)位描述 位 符号 值 7:0 TRIM 31:9 - - 描述 调整值 保留 复位值 0x1000 0000,然后对 Flash 重新编程 0x00 3.4.8 系统复位状态寄存器 SYSRSTSTAT 寄存器可以给出最近一个复位事件的来源。向该寄存器中的任意一个位 写 1 都可以清除对应的位。POR 事件可以将该寄存器中的其他位都清除,但是在 POR 信号 取消之后仍有复位信号有效的情况下,比如 EXTRST 信号,该位就被清除。 表 3.10 系统复位状态寄存器(SYSRSTSTAT,地址 0x4004 8030)位描述 位 符号 0 POR 1 EXTRST 2 WDT 3 BOD 4 SYSRST 31:5 - 值 描述 POR 复位状态 0 POR 清除 1 POR 有效 外部管脚 RESET 的状态 0 RESET 使能 1 RESET 禁能 看门狗复位的状态 0 WDT 复位使能 1 WDT 复位禁能 关闭看门狗? 掉电检测复位的状态 0 BOD 复位使能 1 BOD 复位禁能 系统复位的状态 0 系统复位使能 1 系统复位禁能 - 保留 复位值 0x0 0x0 0x0 0x0 0x0 0x00 3.4.9 系统 PLL 时钟源选择寄存器 该寄存器为系统 PLL 选择时钟源。SYSPLLCLKUEN 寄存器(见小节“系统 PLL 时钟 源更新使能寄存器”)要想生效必须要先向寄存器写 0 再写 1。 表 3.11 系统 PLL 时钟源选择寄存器(SYSPLLCLKSEL,地址 0x4004 8040)位描述 位 符号 1:0 SEL 31:2 - 值 描述 系统 PLL 时钟源 00 IRC 振荡器 01 系统振荡器 10 WDT 振荡器 11 保留 - 保留 3.4.10 系统 PLL 时钟源更新使能寄存器 复位值 00 0x00 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第3章 该寄存器可以更新系统 PLL 的时钟源,新的输入时钟源由 SYSYPLLCLKSEL 寄存器决 定。为了使更新有效,必须先向寄存器 SYSPLLUEN 写 0 然后再写 1。 表 3.12 系统 PLL 时钟源更新使能寄存器(SYSPLLUEN,地址 0x4004 8044)位描述 位 符号 0 ENA 31:1 - 值 描述 使能系统 PLL 时钟源更新 0 时钟源不变 1 更新时钟源 - 保留 复位值 0x0 0x00 3.4.11 主时钟源选择寄存器 该寄存器选择主系统时钟,这个时钟可以是系统 PLL 的输入时钟,也可以是它的输出 时钟(sys_pllclkout),或者直接从看门狗或 IRC 振荡器输出。主系统时钟可以为内核、外 设以及存储器计时。 MAINCLKSEL 寄存器(见“主时钟源更新使能寄存器”)必须先写 0 再写 1 才能生效。 表 3.13 主时钟源选择寄存器(MAINCLKSEL,地址 0x4004 8070)位描述 位 符号 1:0 SEL 31:2 - 值 描述 主时钟的时钟源 00 IRC 振荡器 01 输入时钟到系统 PLL 10 WDT 振荡器 11 系统 PLL 时钟输出 - 保留 复位值 0x00 0x00 3.4.12 主时钟源更新使能寄存器 该寄存器更新主时钟的时钟源,新的输入时钟源由 MAINCLKSEL 寄存器来决定。为了 使更新有效,必须先向寄存器 MAINCLKUEN 写 0 然后再写 1。 表 3.14 主时钟源更新使能寄存器(MAINCLKUEN,地址 0x4004 8074)位描述 位 符号 0 ENA 31:1 - 值 描述 使能主时钟源更新 0 时钟源不变 1 更新时钟源 - 保留 复位值 0 0x00 3.4.13 系统 AHB 时钟分频寄存器 该寄存器对主时钟进行分频,并向内核、存储器和外设提供 sys_ahb_clk。将 DIV 设为 0x0 就可以把系统时钟彻底关闭。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第3章 表 3.15 系统 AHB 时钟分频寄存器(SYSAHBCLKDIV,地址 0x4004 8078)位描述 位 符号 7:0 DIV 31:8 - 值 描述 系统 AHB 时钟分频器值 0 门 1 用1除 ... ... 255 用 255 整除 - 保留 复位值 0x01 0x00 3.4.14 系统 AHB 时钟控制寄存器 AHBCLKCTRL 寄存器控制系统和外设寄存器接口时钟的使能。系统时(sys_ahb_clk[0], AHBCLKCTRL 寄存器的位 0)为 AHB 到 APB 桥、AHB 矩阵、ARM Cortex-M0、Syscon 块和 PMU 提供时钟,不可以禁止。 表 3.16 系统 AHB 时钟控制寄存器(AHBCLKCTRL,地址 0x4004 8080)位描述 位 符号 值 描述 复位值 为 AHB 到 APB 桥、AHB 矩阵、Cortex-M3 FCLK 和 HCLK、SysCon 和 PMU 使能时钟。该位是只读位 0 SYS 1 0 保留 1 使能 使能 ROM 的时钟 1 ROM 0 禁能 1 1 使能 使能 RAM 的时钟 2 RAM 0 禁能 1 1 使能 使能 Flash1 的时钟 3 FLASH1 0 禁能 1 1 使能 使能 Flash2 的时钟 4 FLASH2 0 禁能 1 1 使能 使能 I2C 的时钟 5 I2C 0 禁能 0 1 使能 使能 GPIO 的时钟 6 GPIO 0 禁能 0 1 使能 使能 16 位计数器/定时器 0 的时钟 7 CT16B0 0 禁能 0 1 使能 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 第3章 位 符号 8 CT16B1 9 CT32B0 10 CT32B1 11 SSP0 12 UART 13 ADC 14 - 15 WDT 16 17 18 31:19 IOCON - SSP1 - 续上表 值 描述 复位值 使能 16 位计数器/定时器 1 的时钟 0 禁能 0 1 使能 使能 32 位计数器/定时器 0 的时钟 0 禁能 0 1 使能 使能 32 位计数器/定时器 1 的时钟 0 禁能 0 1 使能 使能 SSP0 的时钟 0 禁能 0 1 使能 使能 UART 的时钟。注意:使能 UART 时钟之前必 须将 UART 管脚配置好 0 0 禁能 1 使能 使能 ADC 的时钟 0 禁能 0 1 使能 保留 0 使能 WDT 的时钟 0 禁能 0 1 使能 使能 IO 配置块的时钟 0 禁能 0 1 使能 保留 0 使能 SSP1 的时钟 0 禁能 0 1 使能 - 保留 0x00 3.4.15 SSP0 时钟分频寄存器 该寄存器配置 SSP0 外设时钟 SSP0_PCLK。将 DIV 设为 0x0 就可以彻底关闭该时钟。 表 3.17 SSP0 时钟分频寄存器(SSP0CLKDIV,地址 0x4004 8094)位描述 位 符号 值 描述 SSP0_PCLK 时钟分频器值 0 禁能 SSP0_PCLK 7:0 DIV 1 用1除 到 ... 255 用 255 除 复位值 0x00 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1212 广州周立功单片机发展有限公司 第3章 位 符号 值 31:8 - - 续上表 描述 复位值 保留 0x00 3.4.16 UART 时钟分频寄存器 该寄存器配置 UART 外设时钟 UART_PCLK。将 DIV 设为 0x0 就可以彻底关闭该时钟。 提示:使能 UART 时钟之前必须将 UART 管脚配置好。 表 3.18 UART 时钟分频寄存器(UARTCLKDIV,地址 0x4004 8098)位描述 位 符号 7:0 DIV 31:8 - 值 描述 UART_PCLK 时钟分频器值 0 禁能 UART_PCLK 1 用1除 到 ... 255 用 255 除 - 保留 复位值 0x00 0x00 3.4.17 SSP1 时钟分频寄存器 该寄存器配置 SSP1 外设时钟 SSP1_PCLK。将 DIV 设为 0x0 就可以彻底关闭该时钟。 表 3.19 SSP1 时钟分频寄存器(SSP1CLKDIV,地址 0x4004 809C)位描述 位 符号 7:0 DIV 31:8 - 值 描述 SSP1_PCLK 时钟分频器值 0 禁能 SSP1_PCLK 1 用1除 到 ... 255 用 255 除 - 保留 复位值 0x00 0x00 3.4.18 SYSTICK 时钟分频寄存器 该寄存器配置 SysTick 外设时钟。将 DIV 设为 0x0 就可以彻底关闭该时钟。 表 3.20 SYSTICK 时钟分频寄存器(SYSTICKCLKDIV,地址 0x4004 80B0)位描述 位 符号 7:0 DIV 31:8 - 值 描述 SYSTICK 时钟分频器值 0 禁能 SYSTICK 定时器时钟 1 用1除 到 ... 255 用 255 除 - 保留 复位值 0x00 0x00 3.4.19 WDT 时钟源选择寄存器 该寄存器为看门狗定时器选择时钟源。WDTCLKSEL 寄存器必须先写 0 再写 1 才能生 效。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1313 广州周立功单片机发展有限公司 第3章 表 3.21 WDT 时钟源选择寄存器(WDTCLKSEL,地址 0x4004 80D0)位描述 位 符号 1:0 SEL 31:2 - 值 WDT 时钟源 00 IRC 振荡器 01 主时钟 10 看门狗振荡器 11 保留 - 保留 描述 复位值 0x00 0x00 3.4.20 WDT 时钟源更新使能寄存器 该寄存器更新看门狗定时器的时钟源,新的输入时钟由寄存器 ADTCLKSEL 来选择。 为了使更新生效,必须先向该寄存器写 0 再写 1。 表 3.22 WDT 时钟源更新使能寄存器(WDTUEN,地址 0x4004 80D4)位描述 位 符号 值 描述 使能 WDT 时钟源更新 0 ENA 0 不改变时钟源 1 更新时钟源 31:1 - - 保留 复位值 0x00 3.4.21 WDT 时钟分频寄存器 该寄存器可以设置看门狗时钟 wdt_clk 的分频值。 表 3.23 WDT 时钟分频寄存器(WDTCLKDIV,地址 0x4004 80D8)位描述 位 符号 值 描述 WDT 时钟分频器值 0 门 7:0 DIV 1 用1除 到 ... 255 用 255 除 31:8 - - 保留 复位值 0x00 0x00 3.4.22 CLKOUT 时钟源选择寄存器 该寄存器把 clkout_clk 信号配置为 CLKOUT 管脚的输出。三个振荡器和主时钟都可以 选为 clkout_clk 时钟。 必须先向 CLKOUTCLKSEL 写 0 再写 1 新的时钟源才能生效。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1414 广州周立功单片机发展有限公司 第3章 表 3.24 CLKOUT 时钟源选择寄存器(CLKOUTCLKSEL,地址 0x4004 80E0)位描述 位 符号 1:0 SEL 31:2 - 值 描述 CLKOUT 时钟源 00 IRC 振荡器 01 系统振荡器 10 看门狗振荡器 11 主时钟 - 保留 复位值 0x00 0x00 3.4.23 CLKOUT 时钟源更新使能寄存器 该寄存器更新 CLKOUT 管脚的时钟源,新的输入时钟由寄存器 CLKOUTCLKSEL 来选 择。为了使更新生效,必须先向 CLKOUTUEN 寄存器写 0 再写 1。 3.25 CLKOUT 时钟源更新使能寄存器(CLKOUTUEN,地址 0x4004 80E4)位描述 位 符号 0 ENA 31:1 - 值 描述 使能 CLKOUT 时钟源更新 0 不改变时钟源 1 更新时钟源 - 保留 3.4.24 CLKOUT 时钟分频寄存器 该寄存器为 CLKOUT 管脚上的 clkout_clk 信号确定分频值。 复位值 0x0 0x00 表 3.26 CLKOUT 时钟分频寄存器(CLKOUTCLKDIV,地址 0x4004 80E8)位描述 位 符号 值 描述 时钟分频器值 0 门 7:0 DIV 1 用1除 到 ... 255 用 255 除 31:8 - - 保留 复位值 0x00 0x00 3.4.25 POR 捕获 PIO 状态寄存器 0 PIOPORCAP0 寄存器在上电复位时捕获端口 0、1、2(管脚 PIO2_0 到 PIO2_7)上的 GPIO 管脚状态(高电平或低电平)。每一位代表一个 GPIO 管脚的复位状态。该寄存器是 只读状态寄存器。 表 3.27 POR 捕获 PIO 状态寄存器 0(PIOPORCAP0,地址 0x4004 8100)位描述 位 0 1 11:2 23:12 31:24 符号 CAPPIO0_0 CAPPIO0_1 CAPPIO0_11 到 CAPPIO0_2 CAPPIO1_11 到 CAPPIO1_0 CAPPIO2_7 到 CAPPIO2_0 描述 原始复位状态输入 PIO0_0 原始复位状态输入 PIO0_1 原始复位状态输入 PIO0_11 到 PIO0_2 原始复位状态输入 PIO1_11 到 PIO1_0 原始复位状态输入 PIO2_7 到 PIO2_0 复位值 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1515 广州周立功单片机发展有限公司 第3章 3.4.26 POR 捕获 PIO 状态寄存器 1 PIOPORCAP1 寄存器捕获在上电复位时端口 2(管脚 PIO2_8 到 PIO2_11)和端口 3 上 的 GPIO 管脚状态(高电平或低电平)。每一位代表一个 GPIO 管脚的复位状态。该寄存器 是只读状态寄存器。 表 3.28 POR 捕获 PIO 状态寄存器 1(PIOPORCAP1,地址 0x4004 8104)位描述 位 0 1 2 3 4 5 6 7 8 9 31:10 符号 CAPPIO2_8 CAPPIO2_9 CAPPIO2_10 CAPPIO2_11 CAPPIO3_0 CAPPIO3_1 CAPPIO3_2 CAPPIO3_3 CAPPIO3_4 CAPPIO3_5 - 描述 原始复位状态输入 PIO2_8 原始复位状态输入 PIO2_9 原始复位状态输入 PIO2_10 原始复位状态输入 PIO2_11 原始复位状态输入 PIO3_0 原始复位状态输入 PIO3_1 原始复位状态输入 PIO3_2 原始复位状态输入 PIO3_3 原始复位状态输入 PIO3_4 原始复位状态输入 PIO3_5 保留 复位值 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 依赖于用户执行 - 3.4.27 BOD 控制寄存器 BOD 控制寄存器可以用来选择向 NVIC 发送 BOD 中断时所需的 4 个电压阈值。但只有 一个电压阈值可以引起复位。 表 3.29 BOD 控制寄存器(BODCTRL,地址 0x4004 8150)位描述 位 符号 1:0 BODRSTLEV 3:2 BODINTVAL 3:2 BODINTVAL 4 BODRSTENA 31:5 - 值 00 01-11 00 01 10 11 0 1 - 描述 BOD 复位电平 能引起复位的阈值电压为 1.49V;能使复位无效 的阈值电压为 1.64V 保留 BOD 中断电平 能引起中断的阈值电压为 1.69V;能使中断无效 的阈值电压为 1.84V 能引起中断的阈值电压为 2.29V;能使中断无效 的阈值电压为 2.44V 能引起中断的阈值电压为 2.59V;能使中断无效 的阈值电压为 2.74V 能引起中断的阈值电压为 2.87V;能使中断无效 的阈值电压为 2.98V BOD 复位使能 禁止复位功能 使能复位功能 保留 3.4.28 系统节拍定时器校准寄存器 复位值 0x00 0x00 0x00 0x0 0x00 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1616 广州周立功单片机发展有限公司 第3章 位 25:0 31:26 表 3.30 系统节拍定时器校准计数器(SYSTCKCAL,地址 0x4004 8158)位描述 符号 值 描述 复位值 CAL 系统节拍校准值 待定 - - 保留 0x00 3.4.29 起始逻辑边沿控制寄存器 0 STARTAPRP0 寄存器控制端口 0(PIO0_0 到 PIO_11)和端口 1(PIO1_0 到 PIO1_11) 的起始逻辑输入。该寄存器为起始逻辑选择对应 PIO 输入的下降沿或上升沿来分别产生下 降或上升时钟沿(见“起始逻辑”章节)。 STARTAPRP0 寄存器的每一位控制一个端口输入,并连接到 NVIC 中的一个唤醒中断。 STARTAPRP0 寄存器中的位 0 对应中断 0,位 1 对应中断 1 等,最多有 13 个中断。 表 3.31 起始逻辑边沿控制寄存器 0(STARTAPRP0,地址 0x4004 8200)位描述 位 符号 值 描述 起始逻辑输入 PIO0_11 到 PIO0_0 的边沿选择 APRPIO0_11 到 11:0 0 下降沿 APRPIO0_0 1 上升沿 12 APRPIO1_0 起始逻辑输入 PIO1_0 的边沿选择 0 下降沿 1 上升沿 31:13 - - 保留 复位值 0x0 0x0 0x0 3.4.30 起始逻辑信号使能寄存器 0 STARTERP0 寄存器使能或禁止起始逻辑中的起始信号。位的分配与表 3.31 相同。 表 3.32 起始逻辑信号使能寄存器 0(STARTERP0,地址 0x4004 8204)位描述 位 符号 ERPIO0_11 到 11:0 ERPIO0_0 12 ERPIO1_0 31:13 - 值 描述 使能起始逻辑输入 PIO0_11 到 PIO0_0 的起始信号 0 禁能 1 使能 使能起始逻辑输入 PIO1_0 的起始信号 0 禁能 1 使能 - 保留 复位值 0x0 0x0 0x0 3.4.31 始逻辑复位寄存器 0 在 STARTRSRP0CLR 寄存器内对一个位写 1 则复位起始逻辑信号。位的分配与表 3.31 相同。为了记录起始信号,启动逻辑会利用输入信号产生一个时钟边沿来实现。时钟边沿(上 升沿或下降沿)可以设置从深度睡眠模式唤醒的中断。所以,启动逻辑的状态必须在它使用 之前清除。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1717 广州周立功单片机发展有限公司 第3章 表 3.33 起始逻辑复位寄存器 0(STARTRSRP0CLR,地址为 0x4004 8208)位描述 位 11:0 12 31:13 符号 值 描述 起始逻辑输入 PIO0_11 到 PIO0_0 的起始信号复位 RSRPIO0_11 到 0RSRPIO0_0 1 写:复位起始信号 起始逻辑输入 PIO1_0 的起始信号复位 RSRPIO1_0 01 写:复位起始信号 - - 保留 复位值 n/a n/a n/a 3.4.32 起始逻辑状态寄存器 0 该寄存器反映了使能起始信号的状态。位的分配与表 3.31 相同。每一位(使能的话) 都能反映起始逻辑的状态,比如说可以反映已知管脚是不是已经接收到了唤醒信号。 表 3.34 起始逻辑状态寄存器 0(STARTSRP0,地址 0x4004 820C)位描述 位 11:0 12 31:13 符号 SRPIO0_11 到 SRPIO0_0 SRPIO1_0 - 值 描述 起始逻辑输入 PIO0_11 到 PIO0_0 的起始信号状态 0 没有收到起始信号 1 起始信号挂起 起始逻辑输入 PIO1_0 的起始信号状态 0 没有收到起始信号 1 起始信号挂起 - 保留 复位值 n/a n/a n/a 3.4.33 深度睡眠模式配置寄存器 当 ARM 检测到芯片处于深度睡眠模式时,就可以编辑该寄存器从而表示芯片要进入的 状态。当进入睡眠模式时,PDSLEEPCFG 寄存器的值将会自动下载到 PDRUNCFG 寄存器。 表 3.35 深度睡眠配置寄存器(PDSLEEPCFG,地址 0x4004 8230)位描述 位 符号 值 描述 复位值 深度睡眠模式下的 IRC 振荡器输出掉电控制 0 IRCOUT_PD 1 掉电 0 0 上电 深度睡眠模式下的 IRC 振荡器掉电控制 1 IRC_PD 1 掉电 0 0 上电 深度睡眠模式下的 Flash 掉电控制 2 FLASH_PD 1 掉电 0 0 上电 深度睡眠模式下的 BOD 掉电控制 3 BOD_PD 1 掉电 0 0 上电 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1818 广州周立功单片机发展有限公司 第3章 位 4 5 6 7 8 9 10 11 31:12 符号 ADC_PD SYSOSC_PD WDT_PD SYSPLL_PD - 值 描述 深度睡眠模式下的 ADC 掉电控制 1 掉电 0 上电 深度睡眠模式下的系统振荡器掉电控制 1 掉电 0 上电 深度睡眠模式下的 WDT 掉电控制 1 掉电 0 上电 深度睡眠模式下的系统 PLL 掉电控制 1 掉电 0 上电 - 保留 1 保留。在深度睡眠模式下该位必须为 1 - 保留 1 保留。在深度睡眠模式下该位必须为 1 - 保留 续上表 复位值 0 0 0 0 0 0 0 0 0 3.4.34 唤醒配置寄存器 当从深度睡眠模式中唤醒时,该寄存器中的位可被编程来表示芯片将要进入的状态。 表 3.36 唤醒配置寄存器(PDAWAKECFG,地址 0x4004 8234)位描述 位 符号 值 描述 IRC 振荡器输出唤醒配置 0 IRCOUT_PD 1 掉电 0 上电 IRC 振荡器掉电唤醒配置 1 IRC_PD 1 掉电 0 上电 Flash 唤醒配置 2 FLASH_PD 1 掉电 0 上电 BOD 唤醒配置 3 BOD_PD 1 掉电 0 上电 ADC 唤醒配置 4 ADC_PD 1 掉电 0 上电 系统振荡器唤醒配置 5 SYSOSC_PD 1 掉电 0 上电 复位值 0 0 0 0 1 1 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1919 广州周立功单片机发展有限公司 第3章 位 6 7 8 9 10 11 15:12 31:16 符号 WDT_PD SYSPLL_PD - 值 描述 WDT 唤醒配置 1 掉电 0 上电 系统 PLL 唤醒配置 1 掉电 0 上电 - 保留 1 保留。在深度睡眠模式下该位必须为 1 - 保留 1 保留。在深度睡眠模式下该位必须为 1 - 保留 - 保留 续上表 复位值 1 1 待定 0 待定 0 0 0 3.4.35 掉电配置寄存器 PDRUNCFG 寄存器中的位控制各种模拟块的掉电信号。芯片运行时的任何时刻都可以 写入该寄存器,而这个写操作将会立即生效,IRC 的掉电信号除外。 为了避免在 IRC 掉电时产生干扰,IRC 时钟在 clean point 自动关断。因此对于 IRC,在 掉电状态生效之前可能会有一个延时。 表 3.37 掉电配置寄存器(PDRUNCFG,地址 0x4004 8238)位描述 位 符号 值 描述 IRC 振荡器输出掉电 0 IRCOUT_PD 1 掉电 0 上电 IRC 振荡器掉电 1 IRC_PD 1 掉电 0 上电 Flash 掉电 2 FLASH_PD[1] 1 掉电 0 上电 BOD 掉电 3 BOD_PD 1 掉电 0 上电 ADC 掉电 4 ADC_PD 1 掉电 0 上电 系统振荡器掉电 5 SYSOSC_PD 1 掉电 0 上电 WDT 掉电 6 WDT_PD 1 掉电 0 上电 复位值 0 0 0 0 1 1 1 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2020 广州周立功单片机发展有限公司 第3章 续上表 位 符号 值 描述 复位值 系统 PLL 掉电 7 SYSPLL_PD 1 掉电 1 0 上电 8 - - 保留 待定 9 - 1 保留。在深度睡眠模式下该位必须为 1 0 10 - - 保留 待定 11 - 1 保留。在深度睡眠模式下该位必须为 1 0 15:12 - - 保留 0 31:16 - - 保留 0 注 1:从深度睡眠模式中唤醒的 Flash 上电序列需要 100μs。注意不需要在这种情况下初始化 Flash。 如果 Flash 掉电,用户必须在继续 Flash 操作之前等待这个时期。复位后的上电要花稍微多的时间 来进行 Flash 初始化。 3.4.36 器件 ID 寄存器 器件 ID 寄存器为只读寄存器,存有所有 LPC111x 系列器件的 ID。该寄存器只能通过 ISP/IAP 命令读取(见“读取器件 ID 号”和“读 UID”)。 表 3.38 器件 ID 寄存器(DEVICE_ID,地址 0x4004 83F4)位描述 位 符号 值 描述 LPC111x 系列器件的 ID 0x0416 502B for LPC1111FHN33/101 0x0416 502B for LPC1111FHN33/201 0x0425 502B for LPC1112FHN33/101 0x0425 502B for LPC1112FHN33/201 0x0434 502B for LPC1113FHN33/201 31:0 DEVICE_ID 0x0434 102B for LPC1113FHN33/301 0x0434 102B for LPC1113FBD48/301 0x0444 502B for LPC1114FHN33/201 0x0444 102B for LPC1114FHN33/301 0x0444 102B for LPC1114FBD48/301 0x0444 102B for LPC1114FA44/301 复位值 由器件而 定 3.5 复位 LPC111x 上有 4 个复位源:RESET 管脚、看门狗复位、上电复位(POR)和 Brown Out Detect(BOD)。除了这 4 个复位源以外还有一个软复位。 RESET 管脚为施密特触发式输入管脚。芯片复位可以由任意一个复位源引起,只要工 作电压达到规定值,就会启动 IRC(可引起复位)来保持芯片复位状态,直到外部复位无效 为止,同时振荡器运行,Flash 控制器完成初始化。 当 Cortex-M0 CPU 外部复位源(POR、BOD 复位、外部复位和看门狗复位)有效时, IRC 启动。IRC 启动最多 6μs 以后,IRC 就会输出稳定的时钟信号。 第 1:ROM 中的引导代码启动。引导代码的作用就是执行引导任务也可以转到 Flash; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2121 广州周立功单片机发展有限公司 第3章 第 2:Flash 上电。Falsh 大约需要 100μs 的时间上电。之后 Falsh 进行初始化,初始化 需要大约 250 个时钟周期。 当内部复位移除时,处理器就在地址 0 处运行,这里是最先从引导模块映射来的复位向 量。这时,所有处理器和外部寄存器已初始化,预先值也设定好了。 3.6 Brown-Out Detection LPC111x 系列器件设有 4 个电平值来监控 VDD(3V3)管脚上的电压。当 VDD(3V3)管脚上 的电压低于任何一个选定的电平值时,BOD 就会向 NVIC 发出一个中断信号。该信号可以 使能一个能引起 CPU 中断的中断;如果不能,软件就会通过读取专门的状态寄存器来监控 该信号。其他电平值还可以用于芯片强制复位的产生。 3.7 电源管理 LPC111x 系列器件支持多种电源控制方式。在器件运行时,用户可以根据实际运行情 况对器件中各模块的电源和时钟进行合理的控制,从而优化整个系统的功耗。 此外,器件还有 3 种特殊的节能模式:睡眠模式、深度睡眠模式和深度掉电模式。电源 管理模块可以控制器件所进入的模式,即睡眠模式或深度掉电模式。如果器件进入睡眠模式, ARM 内核时钟停止,外设仍继续运行。如果进入深度睡眠模式,用户可以配置哪个 Flash 和振荡器继续上电或要掉电。 CPU 的时钟速率也可以通过改变时钟源、重置 PLL 值和/或改变系统时钟分频值来调整。 这样的话就使得处理器速率和处理器所消耗的功率达到平衡,满足应用的需求。 器件运行时用户可以对片内的外设进行单独控制,把应用中不需要用到的外设关闭,避 免不必要的动态功耗,从而更好地降低系统的功耗。为了方便进行电源控制,外设(UART、 SSP、ARM 跟踪时钟、SysTick 定时器、看门狗定时器和 USB)都有自己的时钟分频器。 提示:器件处于节能模式的时候不能进行调试。 表 3.39 LPC111x 电源和时钟控制选项 电源控制 电源控制 PDRUNCFG PDSLEEPCFG PDAWAKECFG 电源/时钟控制功能 应用的模式 表 3.37 表 3.35 表 3.36 控制模拟模块的电源(振荡器、PLL、ADC、Flash 和 BOD)。在运行模式下可以通过该寄存器来改变电源的 配置 提示:为了确保在运行模式下能正常运行该寄存器的第 九位必须为 0 选择在深度睡眠模式中停止的模拟模块。当器件进入深 度睡眠模式时该寄存器中的内容会自动加载到 PDRUNCFG 中 提示:为了降低深度睡眠模式中的功耗该寄存器中的第 九位必须为 1 选择从深度睡眠模式唤醒后需要上电的模拟模块。当器 件离开深度睡眠模式以后该寄存器中的内容就会自动加 载到 PDRUNCFG 中 提示:为了确保在运行模式下能正常运行该寄存器的第 九位必须为 0 运行模式 深度睡眠 模式 运行模式 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2222 广州周立功单片机发展有限公司 第3章 电源控制 时钟控制 AHBCLKCTRL 表 3.15 SYSAHBCLKDIV 表 3.14 SSP0CLKDIV 表 3.16 UARTCLKDIV 表 3.17 SSP1CLKDIV 表 3.18 WDTCLKDIV 表 3.22 CLKOUTDIV 表 3.25 掉电模式的控制(PMU) PCON 电源/时钟控制功能 续上表 应用的模式 控制 ARM Cortex-M0 CPU、存储器以及 APB 外设的时 钟 禁能或配置系统时钟 禁能或配置 SSP0 外设时钟 禁能或配置 UART 外设时钟 禁能或配置 SSP1 外设时钟 禁能或配置看门狗定时器时钟 禁能或配置 CLKOUT 管脚上的时钟 运行模式 运行模式 运行模式 运行模式 运行模式 运行模式 运行模式 控制器件所进入的掉电模式 睡眠/深度 睡眠/掉电 模式 3.7.1 运行模式 在运行模式下,ARM Cortex-M3 内核、存储器和外设都由系统时钟来计时。寄存器 AHBCLKCTRL 负责选择要运行的存储器和外设。系统时钟的频率由寄存器 AHBCLKDIV 来决定。 选定的外设(UART、SSP、ARM 跟踪时钟、USB、WDT 和 Systick 定时器)除了有系 统时钟计时以外,还有单独的外设时钟和它们自己的时钟分频器。外设时钟可以通过时钟分 频寄存器来关闭。 各模拟模块(PLL、振荡器、ADC、USB PHY、BOD 电路和闪存模块)的电源可以通 过寄存器 PDRUNCFG 来单独控制。 提示:在运行模式下寄存器 PDRUNCFG 中的第九位必须为 0。 3.7.2 睡眠模式 在睡眠模式下,ARM Cortex-M3 内核时钟停止。在复位或中断出现之前都不能执行指 令。 进入睡眠模式的步骤如下: 第 1 步:向 ARM Cortex-M0 SCR 寄存器中的位 SLEEPDEEP 写 0; 第 2 步:通过使用 ARM Cortex-M3 等待中断(WFI)指令进入睡眠模式。 当中断到达处理器时自动退出睡眠模式。 在睡眠模式下外设的功能继续进行,并可能产生中断使处理器重新运行。睡眠模式不使 用处理器自身的动态电源,存储器系统和相关控制器和内部总线。 处理器的状态和寄存器、外设寄存器和内部 SRAM 的值都会保留,管脚的逻辑电平也 会保留。 3.7.3 深度睡眠模式 在深度睡眠模式(见“深度睡眠模式”),芯片处于睡眠模式,系统时钟停止, PDSLEEPCFG 选择的模拟模块也掉电。在进入睡眠模式时,用户可以配置哪个模块掉电, 以及哪个模块可以从深度睡眠模式中唤醒时运行。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2323 广州周立功单片机发展有限公司 第3章 进入深度睡眠模式的步骤如下: 第 1 步:通过 PDSLEEPCFG 寄存器(表 3.35)选择在深度睡眠模式下要掉电的模拟模 块(振荡器、PLL、ADC、闪存和 BOD)。PDSLEEPCFG 中的第九位必须为 1; 第 2 步:通过 PDAWAKECFG 寄存器(表 3.36)选择从深度睡眠模式唤醒后要上电的 模拟模块。PDAWAKECFG 中的第九位必须为 0; 第 3 步:向 ARM Cortex-M0 SCR 寄存器写 1; 第 4 步:通过使用 ARM WFI 指令进入深度睡眠模式。 LPC111x 可以不通过中断直接通过监控起始逻辑(见“起始逻辑”)的输入从深度睡 眠模式中唤醒。大部分的 GPIO 管脚都可以用作起始逻辑的输入管脚。起始逻辑不需要任何 时钟信号,而且从深度睡眠模式唤醒后也不会产生中断。 在深度睡眠模式期间,处理器的状态和寄存器、外设寄存器以及内部 SRAM 的值都保 留,而且管脚的逻辑电平也不变。 深度睡眠的优点在于可以使时钟产生模块(例如振荡器和 PLL)掉电,这样深度睡眠模 式所消耗的动态功耗就比一般的睡眠模式消耗的要少得多。另外,在深度睡眠模式中 Flash 可以掉电,这样静态漏电流就会减少。但消耗的 Flash 存储器唤醒时间就更多。 3.7.4 深度掉电模式 在深度掉电模式下,整个芯片的电源和时钟都关闭(通过 WAKEUP 管脚)。 进入深度掉电模式的步骤如下: 第 1 步:设置 PCON 寄存器中的 DPDEN 位; 第 2 步:向 ARM Cortex-M0 SCR 寄存器中的 SLEEPDEEP 位写 1; 第 3 步:确保 IRC 上电,可以通过将寄存器 PDRUNCFG 中的 IRCOUT_PD 和 IRC_PD 位都设为 0 来实现; 第 4 步:通过使用 ARM WFI 指令进入深度掉电模式。 给 WAKEUP 管脚一个脉冲信号就可以使 LPC111x 从深度掉电模式中唤醒。在深度掉 电模式期间,SRAM 中的内容会被保留。但是器件可以将数据保存在 4 个通用寄存器中。 3.8 深度睡眠模式 在深度睡眠模式中,ARM 内核的时钟关断(LPC111x 系列 ARM 处于睡眠状态),另 外各种模拟模块可以选为掉电。深度睡眠模式的进入由深度睡眠 negotiator(这是 ARM Cortex-M3 内核的一部分)和深度睡眠有限状态机来控制。从深度睡眠模式的唤醒进程由起 始逻辑启动。在唤醒后,模拟块的电源状态由 PDAWAKECFG 寄存器确定。 3.8.1 进入深度睡眠模式 深度睡眠 negotiator 使 LPC111x 系列 ARM 保持进入深度睡眠模式直到 ARM Cortex-M0 内核应答睡眠保持的请求。在保持时间内,ARM 内核仍然可以退出掉电序列。而且 ARM 内核可以选择在睡眠模式时不保持这个请求(例如,如果在调试时有这样的要求),这样深 度睡眠的请求也是无效的。 深度睡眠有限状态机确保在进入深度睡眠模式时忽略起始逻辑的唤醒信号。这样能保证 在短时间内不进入深度睡眠模式,因为频繁进入模式将在掉电信号上产生干扰。 一旦检测到 LPC111x 系列 ARM 深度睡眠请求,Syscon 模块对内核掉电,PDRUNCFG 寄存器将下载 PDSLEEPCFG 值,并且选择的模拟块将在子序列时钟边沿掉电。在下一个 30 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2424 广州周立功单片机发展有限公司 第3章 ns 的延时之后,LPC111x 系列 ARM 处于深度睡眠模式,并且能够接受来自起始逻辑的起始 信号进行唤醒。 注:如果 IRC 选择为掉电,则深度睡眠有限状态机将等待一个信号,声明在 30ns 的延时之前已经安 全关断 IRC(见“关断 12MHz IRC 振荡器”)。 3.8.2 关断 12MHz IRC 振荡器 IRC 采用了一种机制确保 12 MHz 振荡器在不产生干扰的情况下关断。一旦该振荡器关 断(在两个 12MHz 时钟周期内),将会有一个应答信号发送到 Syscon 模块。 注;IRC 是 LPC111x 系列 ARM 中唯一可以无干扰关断的振荡器。因此建议用户在芯片进入深度睡眠 模式之前将时钟源切换为 12MHz 的 IRC-除非在深度睡眠模式中 IRC 振荡器选择为供电电源。 3.8.3 起始逻辑 在起始逻辑向 ARM 内核发送一个中断时退出深度睡眠模式。所有的 PIO 端口(除了 PIO3_4 和 PIO3_5)输入都连接到起始逻辑并作为唤醒管脚。用户必须对起始逻辑寄存器的 每一个输入进行编程,为对应的唤醒事件设置合适的边沿极性。另外,必须在 NVIC 中使能 对应每个输入的中断。NVIC 中的 0 到 39 对应于 40 个 PIO 管脚(见“起始逻辑边沿控制寄 存器 0”)。 起始逻辑不要求时钟运行,因为在使能时它用 PIO 输入信号来产生时钟边沿。因此在 使用前必须清除起始逻辑信号(见表 3.33)。 起始逻辑也可以用于普通的激活模式(例如不是睡眠或深度睡眠模式),使用 LPC111x 系列 ARM 输入管脚提供向量中断。 3.9 系统 PLL 的功能描述 LPC111x 利用系统 PLL 来为 ARM 内核以及外设提供时钟信号。 图 3.2 系统 PLL 方框图 PLL 的方框图如图 3.2 所示。输入频率的范围为 10MHz 到 25MHz。输入时钟直接馈送 到相位频率检测器。该模块会比较输入的相位和频率,并在相位和/或频率不匹配时产生一 个控制信号。环形滤波器过滤掉这些控制信号并驱动当前控制的振荡器,从而产生主时钟以 及可选的两个额外相位。CCO 的频率范围为 156MHz 到 320MHz。这些时钟通过可编程的 后置分频器除以 2×P,以产生输出时钟;或者直接发送到输出。然后主输出时钟通过可编 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2525 广州周立功单片机发展有限公司 第3章 程的反馈分频器除以 M,以产生反馈时钟。当 PLL 锁定到输入时钟时发出信号时,相位频 率检测器的输出信号也由锁定检测器监控。 3.9.1 锁定检测器 锁定检测器测量输入和反馈时钟上升沿之间的相位差异。只有在超过 8 个连续输入时钟 周期这个差别都小于“锁定标准”时,锁定输出才从低电平转换到高电平。若有一个大的相 位差别则立即复位计数器,并造成锁定信号下降(如果为高电平)。要求连续 8 个相位测量 都低于一个指定数字能保证锁定检测器不锁定,直到输入和反馈时钟的相位和频率都排列 好。这样便能防止错误的锁定显示,从而保证无干扰的锁定信号。 3.9.2 直接输出模式 在普通操作模式中(DIRECT 位设为 0),根据 PSEL 位的值,CCO 时钟由 2、4、8 或 16 分频,得到一个占空比为 50%的输出时钟。如果需要更高的输出频率,CCO 时钟可以通 过设置“1”直接发送到输出。由于 CCO 无法直接产生占空比为 50%的占空比时钟,在这 种模式下的输出时钟占空比可以偏离 50%。 3.9.3 掉电控制 为了减少在不需要 PLL 时钟时的功耗,器件引入了掉电模式。该模式通过设置 SYS_PLL_PD(或 USB_PLL_PD)位到其中一个掉电配置寄存器(表 3.37)。在这种模式 下,将会关断内部电流参考,振荡器和相位频率检测器停止,分频器进入一个复位状态。在 掉电模式下,锁定输出将会降低,表示 PLL 未锁定。当通过设置 SYS_PLL_PD(或 USB_PLL_PD)位为 0 结束掉电模式时,PLL 恢复其普通操作,并且一旦输入时钟重新获得 锁定,锁定信号就变高电平。 3.9.4 操作模式 表 3.40 PLL 操作模式 模式 描述 1 普通模式 2 直接 CCO 模式 3 掉电模式 4 旁路模式[1] 5 直接旁路模式[1] 注 1:PLL 的模拟部分自动掉电。 PD 位 0 0 1 x x BYPASS 位 0 0 0 1 1 直接位 0 0 x 0 1 3.9.5 分频率编程 后置分频器 后置分频器的分频率由 PSEL 位控制。分频率为 PSEL 位选择的 P 值的两倍,如表 3.5 所示。这样能确保输出时钟的占空比为 50%。 反馈分频器 反馈分频器的分频率由 MSEL 位控制。PLL 输出时钟和输入时钟之间的分频率等于 MSEL 位十进制数值加 1,见表 3.5。 改变分频器值 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2626 广州周立功单片机发展有限公司 第3章 不推荐在 PLL 运行时改变分频器比率。因为这样没法将 MSEL 和 PSEL 值同步到分频 器,计数器也会读到未定义的值,进而造成不必要的干扰或输出时钟频率下降。建议在改变 分频器设置时使 PLL 掉电,调整分频器设置,然后再让 PLL 重新启动。 3.9.6 频率选择 有关计算频率的等式都会用到下列参数(见图 3.1)。 表 3.41 PLL 频率参数 参数 FCLKIN FCCO FCLKOUT P 系统 PLL 从 SYSPLLCLKSEL 多路复用器输出的 sys_pllclkin 的频率(系统 PLL 的输入时钟)。 请参见“系统 PLL 时钟源选择寄存器”小节 CCO 的频率,范围在 156MHz 到 320MHz 之间 sys_pllclkout 的频率 系统 PLL 的后置分频比率;由 SYSPLLCTRL 中的位 PSEL 来设置(见“系统 PLL 控 制寄存器”小节) 系统 PLL 的反馈分频比率;由 SYSPLLCTRL 中的位 MSEL 来设置(见“系统 PLL 控 M 制寄存器”小节)  模式 1(普通模式) 在这种模式下使能后置分频器,占空比时钟为 50%,频率关系如下: Fclkout=M×Fclkin=(FCCO)/(2×P) (1) 为了选择合适的 M 和 P 值,推荐如下步骤: 第 1 步:指定输入时钟频率 Fclkin; 第 2 步:计算 M 值以获得所需的输出频率 Fclkout,M=Fclkout/Fclkin; 第 3 步:找出一个值使得 FCCO=2×P×Fclkout; 第 4 步:检查所有的频率和分频器值是否符合表 3.5 的限定。  模式 2(直接 CCO 模式) 在该模式下旁路后置分频器,并且 CCO 时钟直接发送到输出,结果如下 频率等式: Fclkout=M×Fclkin=FCCO (2) 要选择合适的 M 和 P 值,推荐如下步骤: 第 1 步:指定输入时钟频率 Fclkin。 第 2 步:计算 M 值以获得所需的输出频率 Fclkout,M=Fclkout/Fclkin。 第 3 步:检查所有的频率和分频器值是否符合表 3.5 的限定。 注意:虽然不使用后置分频器,但是系统仍在这种模式下运行。为了使电流功耗降到最 低,建议将 PSEL 位设为‘00’。这样将设置后置分频器进行二分频,使电流达到最低。  模式 3(掉电模式) LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2727 广州周立功单片机发展有限公司 第3章 在这种模式下,内部电流参考关闭,振荡器和相位频率检测器将停止,分频器进入复位 状态。在掉电模式中,锁定输出为低电平,表示 PLL 未锁定。当掉电模式通过将 pd 设为低 电平而结束时,PLL 恢复普通操作,并且一旦输入时钟重新锁定,将使锁定信号为高电平。  模式 4(旁路模式) Fclkout=Fclkin/(2×P) (3) 当 M>1 时 Fdivo=Fclkout/M (4) 由于反馈分频器的特殊结构,divo 输出不是反馈时钟,只有一个信号屏蔽反馈分频器的 输出时钟来产生实际的反馈时钟。当 M 设为 1 时,divo 输出信号为‘1’。  模式 5(直接旁路模式) 在该模式下,模拟部分处于掉电状态,后置分频器被禁止,并且输入时钟直接发送到输 出。该模式可用于在反馈分频器上执行功能测试和/或扫描测试。在这种模式下,反馈时钟 输出的频率由下式给出: 当 M>1 时 Fdivo=Fclkin/M (5) 3.10 Flash 存储器的访问 由于系统时钟频率的不同,访问 Flash 存储器的时间也有所不同,访问时间保存在寄存 器 FLASHCFG 中(寄存器地址为 0x4003 C010)。 提示:如果该寄存器中的设置错误那么就会引起 Flash 存储器的错误操作。 表 3.42 Flash 配置寄存器的位描述(FLASHCFG,地址 0x4003 C010) 位 符号 1:0 FLASHTIM 31:2 - 值 描述 复位值 Flash 存储器的访问时间。FLASHTIM+1 等于访问 Flash 所需 的系统时钟周期的个数 1 个系统时钟的 Flash 访问时间(当系统时钟频率最大为 20MHz 00 的时候) 1 个系统时钟的 Flash 访问时间(当系统时钟频率最大为 40MHz 10 01 的时候) 3 个系统时钟的 Flash 访问时间(当系统时钟频率最大为 50MHz 10 的时候) 11 保留 - 保留。用户软件不能更改这些位的值。31:2 位必须准确地回读 待定 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2828 LPC1100 系列微控制器 第第四四章章 电电源源管管理理单单元元((PPMMUU)) 用用户户手手册册 RReevv11..0000 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 目录 第 4 章 电源管理单元(PMU).................................................................................2 4.1 简介........................................................................................................................... 2 4.2 寄存器描述 ............................................................................................................... 2 4.2.1 电源控制寄存器...............................................................................................2 4.2.2 通用寄存器 0 到 3............................................................................................2 4.2.3 通用寄存器 4....................................................................................................3 4.3 功能描述 ................................................................................................................... 3 4.3.1 进入深度掉电模式...........................................................................................3 4.3.2 离开深度掉电模式...........................................................................................3 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第4章 第4章 电源管理单元(PMU) 4.1 简介 PMU 可以控制深度掉电模式。在深度掉电模式期间,数据暂时由 PMU 中的 4 个通用 寄存器来保存。 4.2 寄存器描述 表 4.1 寄存器总览:PMU(基址 0x4003 8000) 名称 PCON GPREG0 GPREG1 GPREG2 GPREG3 GPREG4 访问 R/W R/W R/W R/W R/W R/W 地址偏移 0x000 0x004 0x008 0x00C 0x010 0x014 电源控制寄存器 通用寄存器 0 通用寄存器 1 通用寄存器 2 通用寄存器 3 通用寄存器 4 描述 复位值 0x0 0x0 0x0 0x0 0x0 0x0 4.2.1 电源控制寄存器 电源控制寄存器可以用在使用 ARM WFI 指令让器件进入节能模式的时候为器件选择 要进入到的模式:睡眠模式或深度睡眠模式。 表 4.2 电源控制寄存器(PCON,地址 0x4003 8000)的位描述 位 0 1 10:2 11 31:12 符号 - DPDEN - DPDFLAG - 值 描述 复位值 - 保留。不能向该位写 1 0x0 深度掉电模式的使能位 1 通过使用 ARM WFI 指令使器件进入深度掉电模式 (ARM Cortex-M0 内核掉电) 0x0 0 通过使用 ARM WFI 指令使器件进入睡眠模式(ARM Cortex-M0 内核的时钟停止) - 保留。不能向这些位写 1 0x0 深度掉电标记 1 读:进入深度掉电模式 写:清除深度掉电标记 0x0 0 读:不进入深度掉电模式 写:没有作用 - 保留。不能向这些位写 1 0x0 4.2.2 通用寄存器 0 到 3 当 VDD(3V3)管脚上仍有电源但器件已经进入到深度掉电模式的时候,数据就暂时由通用 寄存器来保存,这就是通用寄存器的作用。只有在芯片的所有电源都关断的情况下,“冷” 引导程序才能将通用寄存器复位。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第4章 表 4.3 通用寄存器 0 到 3 的位描述(GPREG0-3,地址 0x4003 8004 到 0x4003 8010) 位 符号 值 描述 31:0 GPDATA - 在器件处于深度掉电模式下保存数据 复位值 0x0 4.2.3 通用寄存器 4 当 VDD(3V3)管脚上仍有电源但器件已经进入到深度掉电模式的时候,数据就暂时由通用 寄存器来保存,这就是通用寄存器 4 的作用。只有在芯片的所有电源都关断的情况下,“冷” 引导程序才能将通用寄存器复位。 提示:如果 VDD(3V3)管脚上的电压值降到某个规定值以下,WAKEUP 输入管脚上就不会 有时滞,器件直接从深度掉电模式唤醒。 表 4.4 通用寄存器 4 的位描述(GPREG4,地址 0x4003 8014) 位 符号 值 描述 9:0 - - 保留。不能向这些位写 1 WAKEUP 管脚滞后的使能位 10 WAKEUPHYS 1 WAKEUP 管脚滞后使能 0 WAKEUP 管脚滞后禁能 31:0 GPDATA - 在器件处于深度掉电模式下保存数据 复位值 0x0 0x0 0x0 4.3 功能描述 4.3.1 进入深度掉电模式 从运行模式进入深度掉电模式的步骤如下: 第 1 步:(可选的)器件处于深度掉电器件将数据保存到通用寄存器中的数据位(见表 4.3 和表 4.4); 第 2 步:将寄存器 PCON 中的 DPDEN 位置 1,从而使能深度掉电模式; 第 3 步:通过使用 ARM Cortex-M0 WFI/WFE 指令使器件进入深度掉电模式。 4.3.2 离开深度掉电模式 从深度掉电模式唤醒的步骤如下: 第 1 步:WAKEUP 管脚的电平从高到低的转变; PMU 会开启片内电压调节器。当内核电压达到上电复位的触发值时,系统就会复位, 芯片将重新导入; 除了 GPREG0 到 4 以外的所有寄存器和 PCON 都会处于复位状态。 第 2 步:一旦芯片重新导入之后,就可以读取 PCON(见表 4.1)中的深度掉电模式标 记,看看器件复位是由唤醒事件(从深度掉电模式唤醒)引起的还是由冷复位引起的; 第 3 步:清除 PCON 中的深度掉电标记(见表 4.1); 第 4 步:(可选的)读取保存在通用寄存器中的数据(见表 4.3 和表 4.4); 第 5 步:为下一次进入深度掉电模式设置 PMU(见“进入深度掉电模式”小节)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 LPC1100 系列微控制器 第第五五章章 功功率率配配置置文文件件 用用户户手手册册RReevv..11..0000 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 目录 第 5 章 LPC111x/102/202/302 功率配置文件····································································1 5.1 本章导读······················································································································1 5.2 特性 ·····························································································································1 5.3 描述 ·····························································································································1 5.4 定义 ·····························································································································1 5.5 时钟程序······················································································································1 5.5.1 set_pll ···················································································································1 5.6 功率程序······················································································································4 5.6.1 set_power··············································································································4 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. I 广州周立功单片机发展有限公司 第5章 第5章 LPC111x/102/202/302 功率配置文件 5.1 本章导读 功率配置文件只适用于 LPC111x/102/202/302 器件。 5.2 特性  包括基于 ROM 的应用服务;  功率管理服务;  时钟服务。 5.3 描述 本章描述了一些可供调用的程序,应用中可在片上 ROM 的程序里放入对这些程序的调用, 以方便功率管理和时钟设置操作。 5.4 定义 在需要使用功率配置文件时,须定义以下的几个参数: typedef struct _PWRD { void (*set_pll)(unsigned int cmd[], unsigned int resp[]); void (*set_power)(unsigned int cmd[], unsigned int resp[]); } PWRD; typedef struct _ROM { const PWRD * pWRD; } ROM; ROM ** rom = (ROM **) 0x1FFF1FF8; unsigned int command[4], result[2]; 5.5 时钟程序 5.5.1 set_pll 该程序根据程序调用的参数设置系统的 PLL。若简单地分频系统 PLL 的输入时钟就可获得 期望的时钟,则 set_pll 程序会旁路 PLL 以降低系统功耗。 需要注意的是,在调用这个程序之前,必须先选择 PLL 时钟源(IRC/系统振荡器)(见表 “系统 PLL 时钟源选择寄存器位描述”),系统 PLL 的输入时钟必须设置为主时钟(见表“主 时钟选择寄存器位描述”),且系统/AHB 时钟分频器的分频值必须设为 1(见表“系统 AHB 时 钟分频器位描述”)。 set_pll 尝试找一个匹配调用参数的 PLL 设置。一旦找到一个反馈分频器分频值 (SYSPLLCTRL,M)、后置分频器分频值(SYSPLLCTRL,P)和系统/AHB 时钟分频器分频 值(SYSAHBCLKDIV)的组合,set_pll 会用已选择的值,并将系统 PLL 时钟输出作为主时钟 (如果有必要的话)。 程序返回一个结果码,该结果码指示系统 PLL 是否设置成功。若设置成功,则返回 PLL_CMD_SUCCESS;若没有设置成功,则返回码会标识出是什么运行错误。同时返回当前系 统的频率值。应用中可利用这个信息来调整器件中的其它时钟(如 SSP、UART 和 WDT 时钟, 以及/或时钟输出)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1 广州周立功单片机发展有限公司 第5章 表 5.1 set_pll 程序 程序 输入 结果 set_pll Param0:系统 PLL 输入频率(单位 KHz) Param1:期望的系统时钟(单位 KHz) Param2:模式(CPU_FREQ_EQU、CPU_FREQ_LTE、CPU_FREQ_GTE、 CPU_FREQ_APPROX) Param3:系统 PLL 锁定超时 Result0:PLL_CMD_SUCCESS|PLL_INVALID_FREQ|PLL_INVALID_MODE| PLL_FREQ_NOT_FOUND|PLL_NOT_LOCKED Result1:系统时钟(单位 KHz) 当调用 set_pll 功率程序时,需定义以下内容: /* set_pll mode options */ #define CPU_FREQ_EQU 0 #define CPU_FREQ_LTE 1 #define CPU_FREQ_GTE 2 #define CPU_FREQ_APPROX 3 /* set_pll result0 options */ #define PLL_CMD_SUCCESS 0 #define PLL_INVALID_FREQ 1 #define PLL_INVALID_MODE 2 #define PLL_FREQ_NOT_FOUND 3 #define PLL_NOT_LOCKED 4 1. 系统 PLL 输入频率和期望的系统时钟 set_pll 要找一个系统 PLL 时钟不超过 50MHz 的设置。当期望的系统时钟和系统 PLL 输入 频率之比为整数时,问题很容易解决,不过若是其它情况也可以解决问题。 系统 PLL 输入时钟的频率(Param0)必须在 10000KHz~25000KHz(即 10MHz~25MHz, 包括 25MHz)之间。期望的系统时钟(Param1)必须在 1KHz~50000KHz(包括 50000KHz) 之间。如果这两个条件中的任一个不满足,set_pll 会返回 PLL_INVALID_FREQ,且由于 PLL 设置没有变化,因此在 Result1 中返回 Param0。 2. 模式 set_pll 的首要任务是找到一个设置,该设置能准确产生 Param1 指定频率的系统时钟。如果 找不到精确的匹配,应该用输入参数模式(Param2)说明实际系统时钟是小于或等于、大于或 等于或约等于期望系统时钟(Param1)指定的值。 针对 CPU_FREQ_EQU 模式的调用只有在 PLL 输出准确的 Param1 要求的频率的情况下才 会成功。 若没有超过要求的频率(如总电流消耗和/或功率预算等原因),则可针对 CPU_FREQ_LTE 模式来调用程序。 CPU_FREQ_GTE 模式适合于只需最小级别 CPU 处理能力的应用。 CPU_FREQ_APPROX 产生尽可能接近期望值的系统时钟(可能大于或小于期望的值)。 若选择了非法模式,set_pll 会返回 PLL_INVALID_MODE。若期望的系统时钟超过了该程 序所支持的范围,set_pll 会返回 PLL_FREQ_NOT_FOUND。在这种情况下,当前的 PLL 设置 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2 广州周立功单片机发展有限公司 第5章 不会改变,并且在 Result1 中返回 Param0。 3. 系统 PLL 锁定超时 若选择了有效的配置,则系统 PLL 在 100µs 内即可锁定。若 Param3 为 0,则 set_pll 会一 直等待直到 PLL 锁定。若 Param3 为非零值,则该数值就是返回 PLL_NOT_LOCKED 之前, set_PLL 程序去检查 PLL 锁定成功事件的次数。在这种情况下,PLL 设置不会变化,并且在 Result1 中返回 Param0。 提示:将 Param3 的值设定为系统 PLL 频率 10000 分频的值[Hz],可以有充分的 PLL 锁定 事件轮询周期。 4. 代码示例 以下示例对上面讨论的 set_pll 的一些特性给出了说明。 (1)无效的频率(超过器件所能支持的最高时钟频率) command[0] = 12000; command[1] = 60000; command[2] = CPU_FREQ_EQU; command[3] = 0; (*rom)->pWRD->set_pll(command, result); 以上代码指定了一个 12MHz 的 PLL 输入时钟和一个要求精确达到的 60MHz 的系统时钟, 并指定要一直等 PLL 锁定。由于期望的系统时钟 60MHz 超过了最大值 50MHz。因此 set_pll 在 result[0]中返回 PLL_INVALID_FREQ,在 result[1]中返回 12000,且不会改变 PLL 设置。 (2)无效的频率选择(受系统时钟分频器的约束) command[0] = 12000; command[1] = 40; command[2] = CPU_FREQ_LTE; command[3] = 0; (*rom)->pWRD->set_pll(command, result); 以上代码指定 PLL 输入时钟为 12MHz、系统时钟不大于 40KHz、等待 PLL 锁定时无超时。 由于系统时钟的最大分频值为 255,而在 40KHz 下运行时系统需要 300 分频,因此 set_pll 在 result[0]中返回 PLL_INVALID_FREQ,在 result[1]中返回 12000,且不改变 PLL 设置。 (3)不能找到精确值(PLL) command[0] = 12000; command[1] = 25000; command[2] = CPU_FREQ_EQU; command[3] = 0; (*rom)->pWRD->set_pll(command, result); 以上代码指定了 PLL 输入时钟须为 12MHz、系统时钟须为精确的 25MHz、并且一直等待 PLL 锁定。由于在约束中没有预先给出有效的 PLL 设置,因此 set_pll 在 result[0]中返回 PLL_FREQ_NOT_FOUND,在 result[1]中返回 12000,且不会改变 PLL 设置。 (4)系统时钟小于或等于期望值 command[0] = 12000; command[1] = 25000; command[2] = CPU_FREQ_LTE; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3 广州周立功单片机发展有限公司 第5章 command[3] = 0; (*rom)->pWRD->set_pll(command, result); 以上代码指定了 12MHz 的 PLL 输入时钟、不大于 25MHz 的系统时钟和一直等待 PLL 锁 定。set_pll 在 result[0]中返回 PLL_CMD_SUCCESS,在 result[1]中返回 24000。新系统时钟为 24MHz。 (5)系统时钟大于或等于期望值 command[0] = 12000; command[1] = 25000; command[2] = CPU_FREQ_GTE; command[3] = 0; (*rom)->pWRD->set_pll(command, result); 以上代码指定了 12MHz 的 PLL 输入时钟、最小 25MHz 的系统时钟和一直等待 PLL 锁定。 set_pll 在 result[0]中返回 PLL_CMD_SUCCESS,在 result[1]中返回 36000。新系统时钟为 36MHz。 (6)系统时钟接近于期望值 command[0] = 12000; command[1] = 16500; command[2] = CPU_FREQ_APPROX; command[3] = 0; (*rom)->pWRD->set_pll(command, result); 以上代码指定了一个 12MHz 的 PLL 输入时钟、一个接近 16.5MHz 的系统时钟和一直等待 PLL 锁定。set_pll 在 result[0]中返回 PLL_CMD_SUCCESS,在 result[1]中返回 16000。系统时 钟为 16MHz。 5.6 功率程序 5.6.1 set_power 该程序根据要调用的参数配置器件的内部功率控制设置。目的是在保证芯片当前应用性能 的前提下,将有效功耗减少到最合适的值。 set_power 返回结果码,该结果码反映功率控制是否更改成功。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4 广州周立功单片机发展有限公司 第5章 程序 输入 结果 图 5.1 功率文件的用法 表 5.2 set_power 程序 set_power Param0:新的系统时钟(单位 MHz) Param1:模式(PWR_DEFAULT、PWR_CPU_PERFORMANCE、 PWR_EFFICIENCY、PWR_LOW_CURRENT) Param2:当前系统时钟(单位 MHz) Result0:PWR_CMD_SUCCESS|PWR_INVALID_FREQ| PWR_INVALID_MODE LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5 广州周立功单片机发展有限公司 第5章 调用 set_power 程序需定义以下内容: /* set_power mode options */ #define PWR_DEFAULT 0 #define PWR_CPU_PERFORMANCE 1 #define PWR_EFFICIENCY 2 #define PWR_LOW_CURRENT 3 /* set_power result0 options */ #define PWR_CMD_SUCCESS 0 #define PWR_INVALID_FREQ 1 #define PWR_INVALID_MODE 2 1. 新的系统时钟 新的系统时钟是指:成功执行时钟程序调用或用户提供的相似代码之后,微控制器所运行 的时钟频率。该操作数必须为 1MHz~50MHz(包括 50MHz)范围内的一个整数。若提供的值 超出该范围,set_power 返回 PWR_INVALID_FREQ,并且不会改变功率控制系统。 2. 模式 模式参数(Param1)指定 4 个可用功率控制模式中的一个。如果没有按规定范围选择, set_power 会返回 PWR_INVALID_MODE,且不会改变功率控制系统。 PWR_DEFAULT 使器件保持为类似于复位状态的基本功率控制设置。 PWR_CPU_PERFORMANCE 配置微控制器,以便其能为应用提供更多的处理能力。CPU 性能比默认选项下的性能提高 30%。 PWR_EFFICIENCY 设置是用于在有效电流和 CPU 执行代码与处理数据能力之间找到一个 平衡。在该模式下,器件可以比默认模式更好地兼顾提高 CPU 性能和降低有效电流这两个方面。 PWR_LOW_CURRENT 是着眼于降低功耗而非 CPU 性能而设计。 3. 当前系统时钟 当前系统时钟是指调用 set_power 时微控制器运行的时钟频率。该参数是 1MHz~50MHz (包括 50MHz)之间的一个整数 4. 程序示例 以下示例阐明了以上讨论的 set_power 的一些特性。 (1)无效频率(超过器件所能支持的最大时钟频率) command[0] = 55; command[1] = PWR_CPU_PERFORMANCE; command[2] = 12; (*rom)->pWRD->set_power(command, result); 上面的程序用于将在 12MHz 下运行的系统切换至 55MHz 的系统时钟,且要求有最大的 CPU 处理功率。由于规定的 55MHz 时钟高于最大值 50MHz,因此 set_power 在 result[0]中返回 PWR_INVALID_FREQ,且不会对现有的功率控制内容作任何修改。 (2)有效的功率控制 command[0] = 24; command[1] = PWR_CPU_EFFICIENCY; command[2] = 12; (*rom)->pWRD->set_power(command, result); LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 6 广州周立功单片机发展有限公司 销售与服务网络(二) 广州致远电子有限公司 地址:广州市天河区车陂路黄洲工业区 3 栋 2 楼 邮编:510660 传真:(020)38601859 网址:www.embedtools.com (嵌入式系统事业部) www.embedcontrol.com (工控网络事业部) www.ecardsys.com (楼宇自动化事业部) 技术支持: CAN-bus: 电话:(020)22644381 22644382 22644253 邮箱:can.support@embedcontrol.com MiniARM: 电话:(020)28872684 28267813 邮箱:miniarm.support@embedtools.com 无线通讯: 电话:(020) 22644386 邮箱:wireless@embedcontrol.com 编程器: 电话:(020)22644371 邮箱:programmer@embedtools.com ARM 嵌入式系统: 电话:(020) 22644383 22644384 邮箱:NXPARM@zlgmcu.com iCAN 及数据采集: 电话:(020)28872344 22644373 邮箱:ican@embedcontrol.com 以太网: 电话:(020)22644380 22644385 邮箱:ethernet.support@embedcontrol.com 串行通讯: 电话:(020)28267800 22644385 邮箱:serial@embedcontrol.com 分析仪器: 电话:(020)22644375 邮箱:tools@embedtools.com 楼宇自动化: 电话:(020)22644376 22644389 28267806 邮箱:mjs.support@ecardsys.com mifare.support@zlgmcu.com 销售: 电话:(020)22644249 22644399 22644372 22644261 28872524 28872342 28872349 28872569 28872573 38601786 维修: 电话:(020)22644245 广州周立功单片机发展有限公司 目录 第 6 章 中断控制器 .....................................................................................................2 6.1 简介........................................................................................................................... 2 6.2 特性........................................................................................................................... 2 6.3 中断源....................................................................................................................... 2 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第6章 第6章 中断控制器 6.1 简介 嵌套向量中断控制器(NVIC)是 Cortex-M0 不可分割的一部分。它与 CPU 紧密结合, 降低了中断延时,并能够有效处理即将到来的中断。 请参考 Cortex-M3 技术参考手册来获取 NVIC 操作的详细描述。 6.2 特性  ARM Cortex-M3 内部包含有嵌套向量中断控制器;  与内核紧密联系的中断控制器,可支持低中断延时;  可对系统异常和外设中断进行控制;  LPC111x 系列 ARM 中,NVIC 支持 32 个向量中断;  4 个可编程的中断优先级级别,具有硬件优先级屏蔽;  可重定位的向量表;  不可屏蔽中断(NMI);  软件中断功能。 6.3 中断源 表 6.1 列出了每一个外设功能所对应的中断源。每一个外围设备可以有一条或几条中断 线连接到向量中断控制器。多个中断源可以共用一条中断线。哪一条中断线连接到哪一个中 断源是无关紧要的或没有优先级的,某些 ARM 的特定标准除外。 表 6.1 连接到向量中断控制器的中断源 异常编号 12:0 13 14 15 16 17 18 19 向量偏移量 功能 启动逻辑唤醒中断 - SSP1 I2C CT16B0 CT16B1 CT32B0 CT32B1 标志 每一个中断都会与一个 PIO 输入管脚相连,作为从 深度睡眠模式唤醒的唤醒管脚;中断 0 到 11 对应 PIO0_0 到 PIO0_11,中断 12 对应 PIO_1_0。 保留 Tx FIFO 一半为空 Rx FIFO 一半为满 Rx 超时 Rx 溢出 SI(状态改变) 匹配 0-2 捕获 0 匹配 0-1 捕获 0 匹配 0-3 捕获 0 匹配 0-3 捕获 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 异常编号 向量偏移量 20 21 22 23 24 25 26 27 28 29 30 31 功能 SSP0 UART ADC WDT BOD PIO_3 PIO_2 PIO_1 PIO_0 标志 Tx FIFO 一半为空 Rx FIFO 一半为满 Rx 超时 Rx 溢出 Rx 线状态(RLS) 发送保持寄存器空(THRE) Rx 数据可用(RDA) 字符超时指示(CTI) Modem 控制改变 自动波特率结束(ABEO) 自动波特率超时(ABTO) 保留 保留 A/D 转换器结束转换 看门狗中断(WDINT) Brown-out 检测 保留 端口 3 的 GPIO 中断状态 端口 2 的 GPIO 中断状态 端口 1 的 GPIO 中断状态 端口 0 的 GPIO 中断状态 第6章 续上表 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 目录 第 7 章 I/O 口配置 .......................................................................................................2 7.1 本章导读 ................................................................................................................... 2 7.2 简介........................................................................................................................... 2 7.3 概述........................................................................................................................... 2 7.3.1 管脚功能...........................................................................................................2 7.3.2 管脚模式...........................................................................................................2 7.3.3 滞后作用...........................................................................................................3 7.3.4 A/D 模式...........................................................................................................3 7.3.5 I2C 模式 ............................................................................................................3 7.4 寄存器描述 ............................................................................................................... 3 7.4.1 I/O 配置寄存器 IOCON_PIOn ........................................................................6 7.4.2 IOCON 位置寄存器 .......................................................................................25 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第7章 第7章 I/O 口配置 7.1 本章导读 对于不同的 LPC1110 系列 ARM 器件和封装,I/O 配置寄存器的执行各不相同。表 7.2 显示在不同的封装上使用哪个 IOCON 寄存器。 7.2 简介  I/O 配置寄存器控制引脚的电气特性。配置如下:  管脚功能;  内部上拉/下拉电阻或总线保持功能;  滞后;  引脚控制 ADC 输入的模拟输入或数字模式;  引脚控制 I2C 功能的 I2C 模式。 7.3 概述 IOCON 寄存器控制功能(GPIO 或外设功能)、输入模式和所有 PIOn_m 管脚的滞后。 另外,可以为不同的 I2C 总线模式配置 I2C 总线管脚。如果管脚用作 ADC 的输入管脚,那 么可以选择模拟输入模式。 VDD(IO) Rpu 使能 输出 管脚 输入 Rpd 滞后 控制 VSS 图 7.1 标准 I/O 管脚配置 7.3.1 管脚功能 IOCON 寄存器的 FUNC 位可以设为 GPIO(FUNC=000)或者一种外设功能。如果管脚 用作 GPIO 管脚,那么 GPIOnDIR 寄存器确定哪个管脚配置为输入或输出。对于任何外设功 能,根据管脚功能来自动控制管脚的方向。对于外设功能来说,GPIOnDIR 寄存器没有作用。 7.3.2 管脚模式 IOCON 寄存器的 MODE 位允许为每个管脚选择片内上拉或下拉寄存器或者选择中继模 式(repeater mode)。 片内电阻配置有上拉使能、下拉使能或无上拉/下拉。缺省值是上拉使能。 如果管脚处于逻辑高电平,则中继模式使能上拉电阻;如果管脚处于逻辑低电平,则中 继模式使能下拉电阻。这样,如果管脚配置为输入并且不被外部驱动,那么它可以保持上一 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第7章 种已知状态。这种状态的保持不适用于深度掉电模式。中继模式可以用来在暂时不被驱动时 防止管脚悬空(并且如果悬空到未知状态时使用关键电源)。 7.3.3 滞后作用 数字功能的输入缓冲可以通过 IOCON 寄存器配置为滞后或用作普通的缓冲器(详情见 LPC111X 数据手册)。 如果外部引脚电源电压 VDD(IO)在 2.5V 和 3.6V 之间,则滞后缓冲器可以被使能或禁能。 如果 VDD(IO)低于 2.5V,则滞后缓冲器必须被禁能以使管脚用于输入模式。 7.3.4 A/D 模式 在 A/D 模式中,数字接收器断开连接,用来为模数转换获取精确的输入电压。在控制 带模拟功能管脚的 IOCON 寄存器中都可以选择该模式。如果选择了 A/D 模式,那么滞后和 管脚模式设置都无效。 对于没有模拟功能的管脚,A/D 模式设置无效。 7.3.5 I2C 模式 如果寄存器 IOCON_PIO0_4(表 7.13)和 IOCON_PIO0_5(表 7.14)的 FUNC 位选择 I2C 功能,则 I2C 总线管脚可以配置为不同的 I2C 模式: 带输入干扰滤波的标准模式/快速模式的 I2C(包括根据 I2C 总线规格的开漏输出); 带输入干扰滤波的 Fast-mode Plus 模式(包括根据 I2C 总线规格的开漏输出)。在该模 式中,管脚汲取很高的灌电流;无需输入滤波的标准 I/O 功能。 备注:如果管脚用作 GPIO 管脚,那么必须选择标准模式/快速模式的 I2C 或者标准 I/O 功能。 7.4 寄存器描述 I/O 配置寄存器控制 PIO 端口管脚、所有外设和功能模块的输入和输出、I2C 总线管脚 和 ADC 输入管脚。每个端口管脚 PIOn_m 都分配一个 IOCON 寄存器,以控制管脚功能和 电气特性。某些输入功能(SCK0、DSR0 和 RI0)在几个物理管脚中复用。IOCON_LOC 寄 存器为每个功能选择管脚位置。 备注:表 7.1 中按照存储单元列出了 IOCON 寄存器,这和它们在 LQFP48 封装中的物理管脚编号一 一对应,从左上角的管脚 1(PIO2_6)开始。按照端口编号排列的 IOCON 寄存器见表 7.2。 表 7.1 寄存器汇总:I/O 配置(基址 0x4004 4000) 名称 访问 IOCON_PIO2_6 R/W - R/W IOCON_PIO2_0 R/W IOCON_RESET_PIO0_0 R/W IOCON_PIO0_1 R/W IOCON_PIO1_8 R/W - R/W IOCON_PIO0_2 R/W 地址 偏移 0x000 0x004 0x008 0x00C 0x010 0x014 0x018 0x01C 描述 管脚 PIO2_6 的 I/O 配置 保留 管脚 PIO2_0/ DTR /SSEL1 的 I/O 配置 管脚 RESET /PIO0_0 的 I/O 配置 管脚 PIO0_1/CLKOUT/CT32B0_MAT2 的 I/O 配置 管脚 PIO1_8/CT16B1_CAP0 的 I/O 配置 保留 管 脚 PIO0_2/SSEL0/CT16B0_CAP0 的 I/O 配置 复位 值 0xD0 - 0xD0 0xD0 0xD0 0xD0 - 0xD0 参考 表 7.3 - 表 7.4 表 7.5 表 7.6 表 7.7 - 表 7.8 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第7章 名称 IOCON_PIO2_7 IOCON_PIO2_8 IOCON_PIO2_1 IOCON_PIO0_3 IOCON_PIO0_4 IOCON_PIO0_5 IOCON_PIO1_9 IOCON_PIO3_4 IOCON_PIO2_4 IOCON_PIO2_5 IOCON_PIO3_5 IOCON_PIO0_6 IOCON_PIO0_7 IOCON_PIO2_9 IOCON_PIO2_10 IOCON_PIO2_2 IOCON_PIO0_8 访问 R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W IOCON_PIO0_9 R/W IOCON_JTAG_TCK_PI R/W O0_10 IOCON_PIO1_10 R/W IOCON_PIO2_11 R/W IOCON_JTAG_TDI_PIO R/W 0_11 IOCON_JTAG_TMS_PI R/W O1_0 IOCON_JTAG_TDO_PI R/W O1_1 IOCON_JTAG_nTRST_ R/W PIO1_2 IOCON_PIO3_0 R/W IOCON_PIO3_1 R/W IOCON_PIO2_3 R/W IOCON_SWDIO_PIO1_ R/W 3 IOCON_PIO1_4 R/W 地址 偏移 0x020 0x024 0x028 0x02C 0x030 0x034 0x038 0x03C 0x040 0x044 0x048 0x04C 0x050 0x054 0x058 0x05C 0x060 0x064 0x068 0x06C 0x070 0x074 0x078 0x07C 0x080 0x084 0x088 0x08C 0x090 0x094 描述 管脚 PIO2_7 的 I/O 配置 管脚 PIO2_8 的 I/O 配置 管脚 PIO2_1/ DSR /SCK1 的 I/O 配置 管脚 PIO0_3 的 I/O 配置 管脚 PIO0_4/SCL 的 I/O 配置 管脚 PIO0_5/SDA 的 I/O 配置 管脚 PIO1_9/CT16B1_MAT0 的 I/O 配置 管脚 PIO3_4 的 I/O 配置 管脚 PIO2_4 的 I/O 配置 管脚 PIO2_5 的 I/O 配置 管脚 PIO3_5 的 I/O 配置 管脚 PIO0_6/SCK0 的 I/O 配置 管脚 PIO0_7/ CTS 的 I/O 配置 管脚 PIO2_9 的 I/O 配置 管脚 PIO2_10 的 I/O 配置 管脚 PIO2_2/ DCD /MISO1 的 I/O 配置 管脚 PIO0_8/MISO0/CT16B0_MAT0 的 I/O 配置 PIO0_9/MOSI0/CT16B0_MAT1 的 I/O 配 置 管脚 SWCLK//PIO0_10/SCK0/ CT16B0_ MAT2 的 I/O 配置 管 脚 PIO1_10/AD6/CT16B1_MAT1 的 I/O 配置 管脚 PIO2_11/SCK0 的 I/O 配置 管脚 TDI/PIO0_11/AD0/CT32B0_MAT3 的 I/O 配置 管 脚 TMS/PIO1_0/AD1/CT32B1_CAP0 的 I/O 配置 管 脚 TDO/PIO1_1/AD2/CT32B1_MAT0 的 I/O 配置 管 脚 TRST /PIO1_2/AD3/ CT32B1_MAT1 的 I/O 配置 管脚 PIO3_0/ DTR 的 I/O 配置 管脚 PIO3_1/ DSR 的 I/O 配置 管脚 PIO2_3/ RI /MOSI1 的 I/O 配置 管脚 SWDIO/PIO1_3/AD4/ CT32B1_MA T2 的 I/O 配置 管脚 PIO1_4/AD5/CT32B1_MAT3 的 I/O 配置 复位 值 0xD0 0xD0 0xD0 0xD0 0xC0 0xC0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 续上表 参考 表 7.9 表 7.10 表 7.11 表 7.12 表 7.13 表 7.14 表 7.15 表 7.16 表 7.17 表 7.18 表 7.19 表 7.20 表 7.21 表 7.22 表 7.23 表 7.24 表 7.25 表 7.26 表 7.27 表 7.28 表 7.29 表 7.30 表 7.31 表 7.32 表 7.33 表 7.34 表 7.35 表 7.36 表 7.37 表 7.38 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第7章 名称 IOCON_PIO1_11 IOCON_PIO3_2 IOCON_PIO1_5 IOCON_PIO1_6 IOCON_PIO1_7 IOCON_PIO3_3 IOCON_SCK_LOC IOCON_DSR_LOC IOCON_DCD_LOC IOCON_RI_LOC 访问 R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W 地址 偏移 0x098 0x09C 0x0A0 0x0A4 0x0A8 0x0AC 0x0B0 0x0B4 0x0B8 0x0BC 描述 管脚 PIO1_11/AD7 的 I/O 配置 管脚 PIO3_2/ DCD 的 I/O 配置 管脚 PIO1_5/ RTS /CT32B0_CAP0 的 I/O 配置 管脚 PIO1_6/RXD/CT32B0_MAT0 的 I/O 配置 管脚 PIO1_7/TXD/CT32B0_MAT1 的 I/O 配置 管脚 PIO3_3/ RI 的 I/O 配置 SCK 管脚位置选择寄存器 DSR 管脚位置选择寄存器 DCD 管脚位置选择寄存器 RI 管脚位置寄存器 复位 值 0xD0 0xD0 0xD0 0xD0 0xD0 0xD0 0x00 0x00 0x00 0x00 续上表 参考 表 7.39 表 7.40 表 7.41 表 7.42 表 7.43 表 7.44 表 7.45 表 7.46 表 7.47 表 7.48 表 7.2 按端口编号排列的 I/O 配置寄存器 端口 管脚 PIO0_0 PIO0_1 PIO0_2 PIO0_3 PIO0_4 PIO0_5 PIO0_6 PIO0_7 PIO0_8 PIO0_9 PIO0_10 PIO0_11 PIO1_0 PIO1_1 PIO1_2 PIO1_3 PIO1_4 PIO1_5 PIO1_6 PIO1_7 PIO1_8 PIO1_9 寄存器名 IOCON_RESET_PIO0_0 IOCON_PIO0_1 IOCON_PIO0_2 IOCON_PIO0_3 IOCON_PIO0_4 IOCON_PIO0_5 IOCON_PIO0_6 IOCON_PIO0_7 IOCON_PIO0_8 IOCON_PIO0_9 IOCON_JTAG_TCK_PIO0_10 IOCON_JTAG_TDI_PIO0_11 IOCON_JTAG_TMS_PIO1_0 IOCON_JTAG_TDO_PIO1_1 IOCON_JTAG_nTRST_PIO1_ 2 IOCON_SWDIO_PIO1_3 IOCON_PIO1_4 IOCON_PIO1_5 IOCON_PIO1_6 IOCON_PIO1_7 IOCON_PIO1_8 IOCON_PIO1_9 LPC1111 HVQFN33 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 LPC1112 HVQFN33 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 LPC1113 HVQFN33 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 LPC1113 PLCC44 有 有 有 有 有 有 有 有 有 有 有 有 有 有 LPC1113 LQFP48 有 有 有 有 有 有 有 有 有 有 有 有 有 有 参考 表 7.5 表 7.6 表 7.8 表 7.12 表 7.13 表 7.14 表 7.20 表 7.21 表 7.25 表 7.26 表 7.27 表 7.30 表 7.31 表 7.32 有 有 表 7.33 有 有 表 7.37 有 有 表 7.38 有 有 表 7.41 有 有 表 7.42 有 有 表 7.43 有 有 表 7.7 有 有 表 7.15 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第7章 端口 管脚 PIO1_10 PIO1_11 PIO2_0 PIO2_1 PIO2_2 PIO2_3 PIO2_4 PIO2_5 PIO2_6 PIO2_7 PIO2_8 PIO2_9 PIO2_10 PIO2_11 PIO3_0 PIO3_1 PIO3_2 PIO3_3 PIO3_4 PIO3_5 - - 寄存器名 IOCON_PIO1_10 IOCON_PIO1_11 IOCON_PIO2_0 IOCON_PIO2_1 IOCON_PIO2_2 IOCON_PIO2_3 IOCON_PIO2_4 IOCON_PIO2_5 IOCON_PIO2_6 IOCON_PIO2_7 IOCON_PIO2_8 IOCON_PIO2_9 IOCON_PIO2_10 IOCON_PIO2_11 IOCON_PIO3_0 IOCON_PIO3_1 IOCON_PIO3_2 IOCON_PIO3_3 IOCON_PIO3_4 IOCON_PIO3_5 IOCON_SCK_LOC IOCON_DSR_LOC IOCON_DCD_LOC IOCON_RI_LOC LPC1111 HVQFN33 有 有 有 无 无 无 无 无 无 无 无 无 无 无 无 无 有 无 有 有 有 (SCKL OC=01 保留) 无 无 无 LPC1112 HVQFN33 有 有 有 无 无 无 无 无 无 无 无 无 无 无 无 无 有 无 有 有 有 (SCKL OC=01 保留) 无 无 无 LPC1113 HVQFN33 有 有 有 无 无 无 无 无 无 无 无 无 无 无 无 无 有 无 有 有 有 (SCKL OC=01 保留) 无 无 无 7.4.1 I/O 配置寄存器 IOCON_PIOn 对于 I/O 配置设置的详细情况,见本章的“概述”小节。 LPC1113 PLCC44 有 有 有 有 有 有 有 有 有 有 有 有 有 有 无 无 无 无 有 有 有 无 无 无 LPC1113 LQFP48 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 有 续上表 参考 表 7.28 表 7.39 表 7.4 表 7.11 表 7.24 表 7.36 表 7.17 表 7.18 表 7.3 表 7.9 表 7.10 表 7.22 表 7.23 表 7.29 表 7.34 表 7.35 表 7.40 表 7.44 表 7.16 表 7.19 有 表 7.45 有 表 7.46 有 表 7.47 有 表 7.48 表 7.3 IOCON_PIO2_6 寄存器(IOCON_PIO2_6,地址 0x4004 4000)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_6 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 复位值 000 10 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第7章 位 符号 5 HYS 7:6 - 31:8 - 值 滞后作用 0 禁能 1 使能 - 保留 - 保留 描述 续上表 复位值 0 11 0 表 7.4 IOCON_PIO2_0 寄存器(IOCON_PIO2_0,地址 0x4004 4008)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 PIO2_0 2:0 FUNC 001 选择功能 DTR 010 选择功能 SSEL1 011-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.5 IOCON_nRESET_PIO0_0 寄存器(IOCON_nRESET_PIO0_0,地址 0x4004 400C)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 RESET 001 选择功能 PIO0_0 010-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第7章 表 7.6 IOCON_PIO0_1 寄存器(IOCON_PIO0_1,地址 0x4004 4010)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 PIO0_1 2:0 FUNC 001 选择功能 CLKOUT 010 选择功能 CT32B0_MAT2 011-111 保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 7:6 - 31:8 - 0 禁能 1 使能 - 保留 - 保留 复位值 000 10 0 11 0 表 7.7 IOCON_PIO1_8 寄存器(IOCON_PIO1_8,地址 0x4004 4014)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO1_8 001 选择功能 CT16B1_CAP0 010-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.8 IOCON_PIO0_2 寄存器(IOCON_PIO0_2,地址 0x4004 401C)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO0_2 001 选择功能 SSEL0 010 选择功能 CT16B0_CAP0 011-111 保留 复位值 000 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第7章 位 符号 4:3 MODE 5 HYS 7:6 - 31:8 - 值 描述 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 0 禁能 1 使能 - 保留 - 保留 续上表 复位值 10 0 11 0 表 7.9 IOCON_PIO2_7 寄存器(IOCON_PIO2_7,地址 0x4004 4020)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_7 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.10 IOCON_PIO2_8 寄存器(IOCON_PIO2_8,地址 0x4004 4024)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_8 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第7章 表 7.11 IOCON_PIO2_1 寄存器(IOCON_PIO2_1,地址 0x4004 4028)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 PIO2_1 2:0 FUNC 001 选择功能 DSR 010 选择功能 SCK1 011-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.12 IOCON_PIO0_3 寄存器(IOCON_PIO0_3 地址 0x4004 402C)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO0_3 001-111 保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.13 IOCON_PIO0_4 寄存器(IOCON_PIO0_4,地址 0x4004 4030)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO0_4 001 选择 I2C 功能 SCL 010-111 保留 7:3 - 保留 复位值 000 10000 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第7章 续上表 位 符号 值 描述 复位值 选择 I2C 模式 00[1] 标准模式/快速模式 I2C 9:8 I2CMODE 01[1] 标准 I/O 功能 00 10 快速模式 plus 的 I2C 11 保留 31:10 - - 保留 - [1] 如果管脚功能是 GPIO(FUNC=000),则选择标准模式(I2CMODE=0,缺省)或标准 I/O 功能 (I2CMODE=01)。 表 7.14 IOCON_PIO0_5 寄存器(IOCON_PIO0_5,地址 0x4004 4034)位描述 位 符号 值 描述 复位值 选择管脚功能 000 选择功能 PIO0_5 2:0 FUNC 000 001 选择 I2C 功能 SDA 010-111 保留 7:3 - 保留 10000 选择 I2C 模式 00[1] 标准模式/快速模式 I2C 9:8 I2CMODE 01[1] 标准模式/快速模式 I2C 00 10 标准 I/O 功能 11 保留 31:10 - - 保留 - [1] 如果管脚功能是 GPIO(FUNC=000),则选择标准模式(I2CMODE=0,缺省)或标准 I/O 功能 (I2CMODE=01)。 表 7.15 IOCON_PIO1_9 寄存器(IOCON_PIO1_9,地址 0x4004 4038)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO1_9 001 选择功能 CT16B1_MAT0 010-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 第7章 表 7.16 IOCON_PIO3_4 寄存器(IOCON_PIO3_4,地址 0x4004 403C)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO3_4 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.17 IOCON_PIO2_4 寄存器(IOCON_PIO2_4,地址 0x4004 4040)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_4 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.18 IOCON_PIO2_5 寄存器(IOCON_PIO2_5,地址 0x4004 4044)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_5 001-111 保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 复位值 000 10 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1212 广州周立功单片机发展有限公司 第7章 位 符号 值 描述 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 续上表 复位值 0 11 0 表 7.19 IOCON_PIO3_5 寄存器(IOCON_PIO3_5,地址 0x4004 4048)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO3_5 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.20 IOCON_PIO0_6 寄存器(IOCON_PIO0_6,地址 0x4004 404C)位描述 位 符号 值 描述 复位值 选择管脚功能 000 选择功能 PIO0_6 2:0 FUNC 001 保留 000 010 选择功能 SCK0(只有当按照表 7.45 选择管脚 PIO0_6/SCK0 时) 011-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 0 1 使能 7:6 - - 保留 11 31:8 - - 保留 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1313 广州周立功单片机发展有限公司 第7章 表 7.21 IOCON_PIO0_7 寄存器(IOCON_PIO0_7,地址 0x4004 4050)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO0_7 001 选择功能 CTS 010-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.22 IOCON_PIO2_9 寄存器(IOCON_PIO2_9,地址 0x4004 4054)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_9 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.23 IOCON_PIO2_10 寄存器(IOCON_PIO2_10,地址 0x4004 4058)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_10 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 复位值 000 10 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1414 广州周立功单片机发展有限公司 第7章 位 符号 值 描述 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 续上表 复位值 0 11 0 表 7.24 IOCON_PIO2_2 寄存器(IOCON_PIO2_2,地址 0x4004 405C)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 PIO2_2 2::0 FUNC 001 选择功能 DCD 010 选择功能 MISO1 011-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.25 IOCON_PIO0_8 寄存器(IOCON_PIO0_8,地址 0x4004 4060)位描述 位 符号 值 描述 复位值 选择管脚功能 000 选择功能 PIO0_8 001 选择功能 MISO0 2:0 FUNC 000 010 选择功能 CT16B0_MAT0 011 保留 100-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 0 1 使能 7:6 - - 保留 11 31:8 - - 保留 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1515 广州周立功单片机发展有限公司 第7章 表 7.26 IOCON_PIO0_9 寄存器(IOCON_PIO0_9,地址 0x4004 4064)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 PIO0_9 2:0 FUNC 001 选择功能 MO0 010 选择功能 CT16B0_MAT0 011 保留 100-111 保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 5 HYS 滞后作用 0 禁能 1 使能 7:6 - 31:8 - - 保留 - 保留 复位值 000 10 0 11 0 表 7.27 IOCON_JTAG_TCK_PIO0_10 寄存器(IOCON_JTAG_TCK_PIO0_10,0x4004 4068)位描述 位 符号 值 描述 复位值 选择管脚功能 000 选择功能 SWCLK 001 选择功能 PIO0_10 2:0 FUNC 010 选择功能 SCK0(只有当按照表 7.45 选择管脚 000 SWCLK/PIO0_10/SCK0/CT16B0_MAT2 时) 011 选择功能 CT16B0_MAT2 100-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 0 1 使能 7:6 - - 保留 11 31:8 - - 保留 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1616 广州周立功单片机发展有限公司 第7章 位 2:0 4:3 5 6 7 31:8 位 2;0 4:3 5 31:8 表 7.28 IOCON_PIO1_10 寄存器(地址 0x4004 406C)位描述 符号 FUNC MODE HYS - ADMODE - 值 000 001 010 011-111 00 01 10 11 0 1 - 0 1 - 描述 选择管脚功能 选择功能 PIO1_10 选择功能 AD6 选择功能 CT16B1_MAT1 保留 选择功能模式(片内上拉/下拉电阻控制) 无效(无下拉/上拉电阻使能) 下拉电阻使能 上拉电阻使能 中继模式 滞后作用 禁能 使能 保留 选择模拟/数字模式 模拟输入模式 数字功能模式 保留 复位值 000 10 0 1 1 - 表 7.29 IOCON_PIO2_11 寄存器(地址 0x4004 4070)位描述 符号 FUNC MODE HYS - 值 000 001 010-111 00 01 10 11 0 1 - 描述 选择管脚功能 选择功能 PIO2_11 选择功能 SCK0 (只有当按照表 7.45 选择管脚 PIO2_11/SCK0 时) 保留 选择功能模式(片内上拉/下拉电阻控制) 无效(无下拉/上拉电阻使能) 下拉电阻使能 上拉电阻使能 中继模式 滞后作用 禁能 使能 保留 复位值 000 10 0 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1717 广州周立功单片机发展有限公司 第7章 表 7.30 IOCON_JTAG_TDI_PIO0_11 寄存器(IOCON_JTAG_TDI_PIO0_11,0x4004 4074)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 TDI 001 选择功能 PIO0_11 010 选择功能 AD0 011 选择功能 CT32B0_MAT3 100-111 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 6 - - 保留 选择模拟/数字模式 7 ADMODE 0 模拟输入模式 1 数字功能模式 31:8 - - 保留 复位值 000 10 0 1 1 - 表 7.31 IOCON_JTAG_TMS_PIO1_0 寄存器(IOCON_JTAG_TMS_PIO1_0,0x4004 4078)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 TMS 2:0 FUNC 001 选择功能 PIO1_0 010 选择功能 AD1 011 选择功能 CT32B1_CAP0 100-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 6 - - 保留 选择模拟/数字模式 7 ADMODE 0 模拟输入模式 1 数字功能模式 31:8 - - 保留 复位值 000 10 0 1 1 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1818 广州周立功单片机发展有限公司 第7章 表 7.32 IOCON_JTAG_TDO _PIO1_1 寄存器(IOCON_JTAG_TDO_PIO1_1,0x4004 407C)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 TDO 001 选择功能 PIO1_1 010 选择功能 AD2 011 100-111 选择功能 CT32B1_MAT0 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 6 - - 保留 选择模拟/数字模式 7 ADMODE 0 模拟输入模式 1 数字功能模式 31:8 - - 保留 复位值 000 10 0 1 1 - 表 7.33 IOCON_JTAG_nTRST_PIO1_2 寄存器(IOCON_JTAG_nTRST_PIO1_2,地址 0x4004 4080) 位 符号 值 描述 选择管脚功能 000 选择功能 TRST 2:0 FUNC 001 选择功能 PIO1_2 010 选择功能 AD3 011 选择功能 CT32B1_MAT1 100-111 保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 6 - - 保留 7 ADMODE 选择模拟/数字模式 0 模拟输入模式 1 数字功能模式 31:8 - - 保留 复位值 000 10 0 1 1 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1919 广州周立功单片机发展有限公司 第7章 表 7.34 IOCON_PIO3_0 寄存器(IOCON_PIO3_0,地址 0x4004 4084)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO3_0 001 选择功能 DTR 011-111 保留 4:3 MODE 5 HYS 7:6 - 31:8 - 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 0 禁能 1 使能 - 保留 - 保留 复位值 000 10 0 11 0 表 7.35 IOCON_PIO3_1 寄存器(IOCON_PIO3_1,地址 0x4004 4088)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO3_0/ DSR 001-111 保留 选择功能模式(片内上拉/下拉电阻控制) 4:3 MODE 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.36 IOCON_PIO2_3 寄存器(IOCON_PIO2_3,地址 0x4004 408C)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_3/MOSI1 001 选择功能 RI 010-111 保留 复位值 000 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2020 广州周立功单片机发展有限公司 第7章 位 符号 4:3 MODE 5 HYS 7:6 - 31:8 - 值 描述 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 0 禁能 1 使能 - 保留 - 保留 续上表 复位值 10 0 11 0 表 7.37 IOCON_SWDIO_PIO1_3 寄存器(IOCON_SWDIO_PIO1_3,地址 0x4004 4090)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 SWDIO 2:0 FUNC 001 选择功能 PIO1_3 010 选择功能 AD4 011 选择功能 CT32B1_MAT2 100-111 保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 5 HYS 6 - 7 ADMODE 31:8 - 滞后作用 0 禁能 1 使能 - 保留 选择模拟/数字模式 0 模拟输入模式 1 数字功能模式 - 保留 复位值 000 10 0 1 1 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2121 广州周立功单片机发展有限公司 第7章 表 7.38 IOCON_PIO1_4 寄存器(IOCON_PIO1_4,地址 0x4004 4094)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO1_4 001 选择功能 AD5 010 选择功能 CT32B1_MAT3 100-111 保留 复位值 000 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 0 1 使能 6 - - 保留 1 选择模拟/数字模式 7 ADMODE 0 模拟输入模式 1 1 数字功能模式 31:8 - - 保留 - [1] 如果 LPC1110 系列 ARM 处于深度掉电模式,无论 FUNC 为何值,该管脚功能为 WAKEUP 管脚。 表 7.39 IOCON_PIO1_11 寄存器(IOCON_PIO1_11,地址 0x4004 4098)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO1_11 001 选择功能 AD7 010-111 保留 4:3 MODE 5 HYS 6 - 7 ADMODE 31:8 - 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 0 禁能 1 使能 - 保留 选择模拟/数字模式 0 模拟输入模式 1 数字功能模式 - 保留 复位值 000 10 0 1 1 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2222 广州周立功单片机发展有限公司 第7章 表 7.40 IOCON_PIO3_2 寄存器(IOCON_PIO3_2,地址 0x4004 409C)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO2_3 001 选择功能 DCD 010-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.41 IOCON_PIO1_5 寄存器(IOCON_PIO1_5,地址 0x4004 40A0)位描述 位 符号 值 描述 选择管脚功能 000 选择功能 PIO1_5 2:0 FUNC 001 选择功能 RTS 010 选择功能 CT32B0_CAP0 011-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2323 广州周立功单片机发展有限公司 第7章 表 7.42 IOCON_PIO1_6 寄存器(IOCON_PIO1_6,地址 0x4004 40A4)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO1_6 001 选择功能 RXD 010 选择功能 CT32B0_MAT0 011-111 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.43 IOCON_PIO1_7 寄存器(IOCON_PIO1_7,地址 0x4004 40A8)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO1_7 001 选择功能 TXD 010 011-111 厦门站功能 CT32B0_MAT1 保留 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 4:3 MODE 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 5 HYS 0 禁能 1 使能 7:6 - - 保留 31:8 - - 保留 复位值 000 10 0 11 0 表 7.44 IOCON_PIO3_3 寄存器(IOCON_PIO3_3,地址 0x4004 40AC)位描述 位 符号 值 描述 选择管脚功能 2:0 FUNC 000 选择功能 PIO3_3 001 选择功能 RI 010-111 保留 复位值 000 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2424 广州周立功单片机发展有限公司 第7章 位 符号 4:3 MODE 5 HYS 7:6 - 31:8 - 值 描述 选择功能模式(片内上拉/下拉电阻控制) 00 无效(无下拉/上拉电阻使能) 01 下拉电阻使能 10 上拉电阻使能 11 中继模式 滞后作用 0 禁能 1 使能 - 保留 - 保留 续上表 复位值 10 0 11 0 7.4.2 IOCON 位置寄存器 IOCON 位置寄存器用于为复用的功能选择物理管脚。 备注:注意一旦选择了管脚位置,则仍必须在相应的 IOCON 寄存器中配置管脚上可用的功能。 表 7.45 IOCON SCK 位置寄存器(IOCON_SCK_LOC,地址 0x4004 40B0)位描述 位 符号 1:0 FUNC 31:2 - 值 描述 复位值 选择 SCK0 管脚的位置 00 在管脚位置 SWCLK/PIO0_10/SCK0/CT16B0_MAT2 选 择 SCK0 功能(见表 7.27) 00 01 在管脚位置 PIO2_11/SCK0 选择 SCK0 功能(见表 7.29) 10 在管脚位置 PIO0_6/SCK0 选择 SCK0 功能(见表 7.45) 11 保留 - 保留 - 表 7.46 IOCON DSR 位置寄存器(IOCON_DSR_LOC,地址 0x4004 40B4)位描述 位 符号 1:0 DSRLOC 31:2 - 值 描述 选择 DSR0 管脚的位置 00 在管脚位置 PIO2_1/ DSR /SCK1 选择 DSR 功能 01 在管脚位置 PIO3_1/ DSR 选择 DSR 功能 10 保留 11 保留 - 保留 复位值 00 - 表 7.47 IOCON DCD 位置寄存器(IOCON_DCD_LOC,地址 0x4004 40B8)位描述 位 符号 1:0 DCDLOC 31:2 - 值 描述 选择 DCD 管脚的位置 00 在管脚位置 PIO2_2/ DCD /MISO1 选择 DCD 功能 01 在管脚位置 PIO3_2/ DCD 选择 DCD 功能 10 保留 11 保留 - 保留 复位值 00 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2525 广州周立功单片机发展有限公司 第7章 表 7.48 IOCON RI 位置寄存器(IOCON_RI_LOC,地址 0x4004 40BC)位描述 位 符号 1:0 RILOC 31:2 - 值 描述 选择 RI 管脚的位置 00 在管脚位置 PIO2_3/ RI /MOSI1 选择 RI 功能 01 在管脚位置 PIO3_3/ RI 选择 RI 功能 10 保留 11 保留 - 保留 复位值 00 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2626 广州周立功单片机发展有限公司 目录 第 8 章 管脚配置 .........................................................................................................2 8.1 本章导读 ................................................................................................................... 2 8.2 LPC1110 管脚配置...................................................................................................2 8.3 LPC1110 管脚描述...................................................................................................4 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第8章 第8章 管脚配置 8.1 本章导读 LPC1110 系列 ARM 可以用三种封装:LQFP48 (LPC1113、LPC1114),PLCC44(LPC1114), 和 HVQFN33 (LPC1111、LPC1112、LPC1113、LPC1114).。 表 8.1 LPC1110 管脚配置 器件 LPC1111 LPC1112 LPC1113 LPC1114 管脚配置 管脚描述 管脚配置 管脚描述 管脚配置 管脚描述 管脚配置 管脚描述 8.2 LPC1110 管脚配置 LQFP48 - 图 8.1 表 8.1 图 8.1 表 8.1 PLCC44 - 图 8.2 表 8.2 HVQFN33 图 8.3 表 8.4 图 8.3 表 8.4 图 8.3 表 8.4 图 8.3 表 8.4 PIO2_6 1 PIO2_0/DTR/SSEL1 2 RESET/PIO0_0 3 PIO0_1/CLKOUT/CT32B0_MAT2 4 VSSIO 5 XTALIN 6 XTALOUT 7 VDD(IO) 8 PIO1_8/CT16B1_CAP0 9 PIO0_2/SSEL0/CT16B0_CAP0 10 PIO2_7 11 PIO2_8 12 LPC1113FBD48/301 LPC1114FBD48/301 36 PIO3_0/DTR 35 TRST/PIO1_2/AD3/CT32B1_MAT1 34 TDO/PIO1_1/AD2/CT32B1_MAT0 33 TMS/PIO1_0/AD1/CT32B1_CAP0 32 TDI/PIO0_11/AD0/CT32B0_MAT3 31 PIO2_11/SCK0 30 PIO1_10/AD6/CT16B1_MAT1 29 SWCLK/PIO0_10/SCK0/CT16B0_MAT2 28 PIO0_9/MOSI0/CT16B0_MAT1 27 PIO0_8/MISO0/CT16B0_MAT0 26 PIO2_2/DCD/MISO1 25 PIO2_10 图 8.1 管脚配置 LQFP48 封装 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第8章 RESET/PIO0_0 7 PIO0_1/CLKOUT/CT32B0_MAT2 8 VSSIO 9 XTALIN 10 XTALOUT 11 VDD(IO) 12 PIO1_8/CT16B1_CAP0 13 PIO0_2/SSEL0/CT16B0_CAP0 14 PIO2_7 15 PIO2_8 16 PIO2_1/DSR/SCK1 17 LPC1114F A44/301 39 TRST/PIO1_2/AD3/CT32B1_MAT1 38 TDO/PIO1_1/AD2/CT32B1_MAT0 37 TMS/PIO1_0/AD1/CT32B1_CAP0 36 TDI/PIO0_11/AD0/CT32B0_MAT3 35 PIO2_11/SCK0 34 PIO1_10/AD6/CT16B1_MAT1 33 SWCLK/PIO0_10/SCK0/CT16B0_MAT2 32 PIO0_9/MOSI0/CT16B0_MAT1 31 PIO0_8/MISO0/CT16B0_MAT0 30 PIO2_2/DCD/MISO1 29 PIO2_10 图 8.2 管脚配置 PLCC44 封装 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第8章 terminal 1 index area PIO2_0/DTR 1 RESET/PIO0_0 2 PIO0_1/CLKOUT/CT32B0_MAT2 3 XTALIN 4 XTALOUT 5 VDD(IO) 6 PIO1_8/CT16B1_CAP0 7 PIO0_2/SSEL0/CT16B0_CAP0 8 33 V SS 24 TRST/PIO1_2/AD3/CT32B1_MAT1 23 TDO/PIO1_1/AD2/CT32B1_MAT0 22 TMS/PIO1_0/AD1/CT32B1_CAP0 21 TDI/PIO0_11/AD0/CT32B0_MAT3 20 PIO1_10/AD6/CT16B1_MAT1 19 SWCLK/PIO0_10/SCK0/CT16B0_MAT2 18 PIO0_9/MOSI0/CT16B0_MAT1 17 PIO0_8/MISO0/CT16B0_MAT0 俯视图 图 8.3 管脚配置 HVQFN33 封装 8.3 LPC1110 管脚描述 表 8.2 LPC1113/14 管脚描述表(LQFP48 封装) 符号 RESET /PIO0_0 PIO0_1/CLKOUT/ CT32B0_MAT2/ PIO0_2/SSEL0/ CT16B0_CAP0 PIO0_3 管脚 3 4[1] 10[1] 14[1] 类型 I I/O I/O O O I/O O I I/O 描述 RESET -外部复位输入:该管脚为低电平时复位器件, 使 I/O 端口和外设进入其默认状态,并且处理器从地址 0 开始执行 PIO0_0-通用数字输入/输出管脚 PIO0_1-通用数字输入/输出管脚,在复位时,该管脚为 低电平就启动 ISP 指令处理 CLKOUT-时钟输出管脚 CT32B0_MAT2-32 位定时器 0 的匹配输出 2 USB_FRAME_TOGGLE-(只用于 LPC1343) PIO0_2-通用数字输入/输出管脚 SSEL0-SSP 的从选择 CT16B0_CAP0-16 位定时器 0 的捕获输入 0 PIO0_3-通用数字输入/输出管脚 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第8章 符号 PIO0_4/SCL PIO0_5/SDA PIO0_6//SCK0 PIO0_7/ CTS PIO0_8/MISO/ CT16B0_MAT0 PIO0_9/MOSI0/ CT16B0_MAT1 SWCLK/PIO0_10/ SCK0/CT16B0_MAT2 TDI/PIO0_11/ AD0/CT32B0_MAT3 TMS/PIO1_0/ AD1/CT32B1_CAP0 TDO/PIO1_1/ AD2/CT32B1_MAT0 TRST /PIO1_2/ AD3/CT32B1_MAT1 SWDIO/PIO1_3/AD4/ CT32B1_MAT2 管脚 15[2] 16[2] 22[1] 23[1] 27[1] 28[1] 29[1] 32[3] 33[3] 34[3] 35[3] 39[3] 类型 I/O I/O I/O I/O I/O I/O I/O I I/O I/O O I/O I/O O I I/O O O I I/O I O I I/O I I O I/O I O I I/O I O I/O I/O I O 续上表 描述 PIO0_4-通用数字输入/输出管脚 SCL-I2C 总线时钟输入/输出。只有在 I/O 配置寄存器 中选择了 I2C 快速模式 plus,才有高灌电流(High-current sink) PIO0_5-通用数字输入/输出管脚 SDA-I2C 总线数据输入/输出。只有在 I/O 配置寄存器 中选择了 I2C 快速模式 plus,才有高灌电流 PIO0_6-通用数字输入/输出管脚 SCK-SSP0 的串行时钟 PIO0_7-通用数字输入/输出管脚(高电流输出驱动) CTS -清除 UART 以发送到输入 PIO0_8-通用数字输入/输出管脚 MISO0-SSP0 的主机输入从机输出 CT16B0_MAT0-16 位定时器 0 的匹配输出 0 PIO0_9-通用数字输入/输出管脚 MOSI0-SSP0 的主机输出从机输入 CT16B0_MAT1-16 位定时器 0 的匹配输出 1 SWCLK-JTAG 接口的串行线时钟和测试时钟 TCK PIO0_10-通用数字输入/输出管脚 SCK0-SSP0 的串行时钟 CT16B0_MAT2-16 位定时器 0 的匹配输出 2 TDI-JTAG 接口的测试数据输入 PIO0_11-通用数字输入/输出管脚 AD0-A/D 转换器,输入 0 CT32B0_MAT3-32 位定时器 0 的匹配输出 3 TMS-JTAG 接口的测试模式选择 PIO1_0-通用数字输入/输出管脚 AD1-A/D 转换器,输入 1 CT32B1_CAP0-32 位定时器 1 的捕获输入 0 TDO-JTAG 接口的测试数据输出 PIO1_1-通用数字输入/输出管脚 AD2-A/D 转换器,输入 2 CT32B1_MAT0-32 位定时器 1 的匹配输出 0 TRST -JTAG 接口的测试复位 PIO1_2-通用数字输入/输出管脚 AD3-A/D 转换器,输入 3 CT32B1_MAT1-32 位定时器 1 的匹配输出 1 SWDIO-串行线调试输入/输出 PIO1_3-通用数字输入/输出管脚 AD4-A/D 转换器,输入 4 CT32B1_MAT2-32 位定时器 1 的匹配输出 2 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第8章 符号 PIO1_4/AD5/ CT32B1_MAT3/WAKEUP PIO1_5/ RTS / CT32B0_CAP0 PIO1_6/RXD/ CT32B0_MAT0 PIO1_7/TXD/ CT32B0_MAT1 PIO1_8/CT16B1_CAP0 PIO1_9/CT16B1_MAT0 PIO1_10/AD6/ CT16B1_MAT1 PIO1_11/AD7 PIO2_0/ DTR /.SSEL1 PIO2_1/ DSR /SCK1 PIO2_2/ DCD /MISO1 PIO2_3/ RI /MOSI1 PIO2_4 PIO2_5 PIO2_6 PIO2_7 PIO2_8 PIO2_9 PIO2_10 管脚 40[3] 45[1] 46[1] 47[1] 9[1] 17[1] 30[3] 42[3] 2[1] 13[1] 26[1] 38[1] 19[1] 20[1] 1[1] 11[1] 12[1] 24[1] 25[1] 类型 I/O I O I/O O I I/O I O I/O O O I/O I I/O O I/O I O I/O I I/O O O I/O I I/O I/O I I/O I/O I I/O I/O I/O I/O I/O I/O I/O I/O 描述 PIO1_4-通用数字输入/输出管脚 AD5-A/D 转换器,输入 5 CT32B1_MAT3-32 位定时器 1 的匹配输出 3 WAKEUP-从深度掉电模式唤醒的管脚 PIO1_5-通用数字输入/输出管脚 RTS -UART 请求发送到输出 CT32B0_CAP0-32 位定时器 0 的捕获输入 0 PIO1_6-通用数字输入/输出管脚 RXD-UART 的接收器输入 CT32B0_MAT0-32 位定时器 0 的匹配输出 0 PIO1_7-通用数字输入/输出管脚 TXD-UART 的发送器输出 CT32B0_MAT1-32 位定位器 0 的匹配输出 1 PIO1_8-通用数字输入/输出管脚 CT16B1_CAP0-16 位定位器 1 的捕获输入 0 PIO1_9-通用数字输入/输出管脚 CT16B1_MAT0-16 位定时器 1 的匹配输出 0 PIO1_10-通用数字输入/输出管脚 AD6-A/D 转换器,输入 6 CT16B1_MAT1-16 位定时器 1 的匹配输出 1 PIO1_11-通用数字输入/输出管脚 AD7-A/D 转换器,输入 7 PIO2_0-通用数字输入/输出管脚 DTR -UART 数据终端就绪输出 SSEL1-SSP1 的从机选择 PIO2_1-通用数字输入/输出管脚 DSR -UART 数据设置就绪输入 SCK1-SSSP1 的串行时钟 PIO2_2-通用数字输入/输出管脚 DCD -UART 数据载波检测输入 MISO1-SSP1 的主机输入从机输出 PIO2_3-通用数字输入/输出管脚 RI -UART 铃响指示器输入 MOSI1-SSP1 的主机输出从机输入 PIO2_4-通用数字输入/输出管脚 PIO2_4-通用数字输入/输出管脚 PIO2_6-通用数字输入/输出管脚 PIO2_7-通用数字输入/输出管脚 PIO2_8-通用数字输入/输出管脚 PIO2_9-通用数字输入/输出管脚 PIO2_10-通用数字输入/输出管脚 续上表 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第8章 续上表 符号 管脚 类型 描述 PIO2_11/SCK0 I/O PIO2_11-通用数字输入/输出管脚 31[1] I/O SCK0-SSP0 的串行时钟 PIO3_0/ DTR PIO3_1/ DSR PIO3_2/ DCD PIO3_3/ RI PIO3_4 I/O PIO3_0-通用数字输入/输出管脚 36[1] O DTR -UART 数据终端就绪输出 I/O PIO3_1-通用数字输入/输出管脚 37[1] I DSR -UART 数据设置就绪输入 I/O PIO3_2-通用数字输入/输出管脚 43[1] I DCD -UART 数据载波检测输入 I/O PIO3_3-通用数字输入/输出管脚 48[1] I RI -UART 铃响指示器输入 18[1] I/O PIO3_4-通用数字输入/输出管脚 PIO3_5 VDD (IO) VDD(3V3) 21[1] I/O PIO3_5-通用数字输入/输出管脚 8[4] 1 3.3V 的输入/输出供电电压 供给内部稳压器和 ADC 的 3.3 V 电压。也用作 ADC 参 44[4] 1 考电压 VSSIO XTALIN 5 1地 振荡器电路和内部时钟发生器电路的输入。输入电压必 6[5] 1 须超过 1.8 V XTALOUT 7[5] O 振荡器放大器的输出 VSS 41 I地 [1] 5V 容差引脚,提供带可配置滞后的上拉/下拉电阻的数字 I/O 功能。 [2] I2C 总线引脚符合 I2C 标准模式和 I2C 快速模式 plus 的 I2C 总线规格。 [3] 5V 容差引脚。提供带可配置滞后上拉/下拉电阻和模拟输入(当配置为 ADC 输入时)的数字 I/O 功能,引脚的数字部分被禁能并且管脚不是 5V 的容差。 [4] 外部 VDD(3V3)和 VDD(IO)的组合。如果 VDD(3V3)和 VDD(IO)使用不同的电源,需要保证这两 个电源电压的差别小于等于 0.5 V。 [5] 不使用系统振荡器时,XTALIN 和 XTALOUT 连接方法如下:XTALIN 可以悬空或接地(接地更 好,因为可以减少噪声干扰),XTALOUT 应该悬空。 符号 RESET /PIO0_0 PIO0_1/CLKOUT/ CT32B0_MAT2/ 表 8.3 LPC1114 管脚描述表(PLCC44 封装) 管脚 7 8[1] 类型 I I/O I/O O O 描述 RESET -外部复位输入:该管脚为低电平时复位器件, 使 I/O 端口和外设进入其默认状态,并且处理器从地址 0 开始执行 PIO0_0-通用数字输入/输出管脚 PIO0_1-通用数字输入/输出管脚,在复位时,该管脚为 低电平就启动 ISP 指令处理 CLKOUT-时钟输出管脚 CT32B0_MAT2-32 位定时器 0 的匹配输出 2 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第8章 符号 PIO0_2/SSEL0/ CT16B0_CAP0 PIO0_3 PIO0_4/SCL PIO0_5/SDA PIO0_6//SCK0 PIO0_7/ CTS PIO0_8/MISO0/ CT16B0_MAT0 PIO0_9/MOSI0/ CT16B0_MAT1 SWCLK/PIO0_10/ SCK0/CT16B0_MAT2 TDI/PIO0_11/ AD0/CT32B0_MAT3 TMS/PIO1_0/ AD1/CT32B1_CAP0 TDO/PIO1_1/ AD2/CT32B1_MAT0 TRST /PIO1_2/ AD3/CT32B1_MAT1 管脚 14[1] 18[1] 19[2] 20[2] 26[1] 27[1] 31[1] 32[1] 10[1] 21[3] 22[3] 23[3] 24[3] 类型 I/O O I I/O I/O I/O I/O I/O I/O I/O I/O I I/O I/O O I/O I/O O I I/O O O I I/O I O I I/O I I O I/O I O I I/O I O 续上表 描述 PIO0_2-通用数字输入/输出管脚 SSEL0-SSP0 的从机选择 CT16B0_CAP0-16 位定时器 0 的捕获输入 0 PIO0_3-通用数字输入/输出管脚 PIO0_4-通用数字输入/输出管脚 SCL-I2C 总线时钟输入/输出。只有在 I/O 配置寄存器 中选择了 I2C 快速模式 plus,才有高灌电流(High-current sink) PIO0_5-通用数字输入/输出管脚 SDA-I2C 总线数据输入/输出。只有在 I/O 配置寄存器 中选择了 I2C 快速模式 plus,才有高灌电流 PIO0_6-通用数字输入/输出管脚 SCK0-SSP0 的串行时钟 PIO0_7-通用数字输入/输出管脚(高电流输出驱动) CTS -清除 UART 以发送到输入 PIO0_8-通用数字输入/输出管脚 MISO0-SSP0 的主机输入从机输出 CT16B0_MAT0-16 位定时器 0 的匹配输出 0 PIO0_9-通用数字输入/输出管脚 MOSI0-SSP0 的主机输出从机输入 CT16B0_MAT1-16 位定时器 0 的匹配输出 1 SWCLK-JTAG 接口的串行线时钟和测试时钟 TCK PIO0_10-通用数字输入/输出管脚 SCK0-SSP0 的串行时钟 CT16B0_MAT2-16 位定时器 0 的匹配输出 2 TDI-JTAG 接口的测试数据输入 PIO0_11-通用数字输入/输出管脚 AD0-A/D 转换器,输入 0 CT32B0_MAT3-32 位定时器 0 的匹配输出 3 TMS-JTAG 接口的测试模式选择 PIO1_0-通用数字输入/输出管脚 AD1-A/D 转换器,输入 1 CT32B1_CAP0-32 位定时器 1 的捕获输入 0 TDO-JTAG 接口的测试数据输出 PIO1_1-通用数字输入/输出管脚 AD2-A/D 转换器,输入 2 CT32B1_MAT0-32 位定时器 1 的匹配输出 0 TRST -JTAG 接口的测试复位 PIO1_2-通用数字输入/输出管脚 AD3-A/D 转换器,输入 3 CT32B1_MAT1-32 位定时器 1 的匹配输出 1 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第8章 符号 SWDIO/PIO1_3/AD4/ CT32B1_MAT2 PIO1_4/AD5/ CT32B1_MAT3/WAKEUP PIO1_5/ RTS / CT32B0_CAP0 PIO1_6/RXD/ CT32B0_MAT0 PIO1_7/TXD/ CT32B0_MAT1 PIO1_8/CT16B1_CAP0 PIO1_9/CT16B1_MAT0 PIO1_10/AD6/ CT16B1_MAT1 PIO1_11/AD7 PIO2_0/ DTR PIO2_1/ DSR /SCK1 PIO2_2/ DCD /MISO1 PIO2_3/ RI /MOSI1 PIO2_4 PIO2_5 PIO2_6 管脚 25[3] 26[3] 30[1] 31[1] 32[1] 7[1] 12 [1] 20[3] 27[3] 1[1] 17[1] 30[1] 40[1] 23[1] 24[1] 5[1] 类型 I/O I/O I O I/O I O I I/O O I I/O I O I/O O O I/O I I/O O I/O I O I/O I I/O O O I/O I I/O I/O I I/O I/O I I/O I/O I/O I/O 描述 SWDIO-串行线调试输入/输出 PIO1_3-通用数字输入/输出管脚 AD4-A/D 转换器,输入 4 CT32B1_MAT2-32 位定时器 1 的匹配输出 2 PIO1_4-通用数字输入/输出管脚 AD5-A/D 转换器,输入 5 CT32B1_MAT3-32 位定时器 1 的匹配输出 3 WAKEUP-深度掉电模式唤醒管脚 PIO1_5-通用数字输入/输出管脚 RTS -UART 请求发送到输出 CT32B0_CAP0-32 位定时器 0 的捕获输入 0 PIO1_6-通用数字输入/输出管脚 RXD-UART 的接收器输入 CT32B0_MAT0-32 位定时器 0 的匹配输出 0 PIO1_7-通用数字输入/输出管脚 TXD-UART 的发送器输出 CT32B0_MAT1-32 位定位器 0 的匹配输出 1 PIO1_8-通用数字输入/输出管脚 CT16B1_CAP0-16 位定位器 1 的捕获输入 0 PIO1_9-通用数字输入/输出管脚 CT16B1_MAT0-16 位定时器 1 的匹配输出 0 PIO1_10-通用数字输入/输出管脚 AD6-A/D 转换器,输入 6 CT16B1_MAT1-16 位定时器 1 的匹配输出 1 PIO1_11-通用数字输入/输出管脚 AD7-A/D 转换器,输入 7 PIO2_0-通用数字输入/输出管脚 DTR -UART 数据终端就绪输出 SSEL1-SSP1 的从机选择 PIO2_1-通用数字输入/输出管脚 DSR -UART 数据设置就绪输入 SCK1-SSSP1 的串行时钟 PIO2_2-通用数字输入/输出管脚 DCD -UART 数据载波检测输入 MISO1-SSP1 的主机输入从机输出 PIO2_3-通用数字输入/输出管脚 RI -UART 铃响指示器输入 MOSI1-SSP1 的主机输出从机输入 PIO2_4-通用数字输入/输出管脚 PIO2_5-通用数字输入/输出管脚 PIO2_6-通用数字输入/输出管脚 续上表 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第8章 续上表 符号 管脚 类型 描述 PIO2_7 15[1] I/O PIO2_7-通用数字输入/输出管脚 PIO2_8 16[1] I/O PIO2_8-通用数字输入/输出管脚 PIO2_9 28[1] I/O PIO2_9-通用数字输入/输出管脚 PIO2_10 29[1] I/O PIO2_10-通用数字输入/输出管脚 PIO2_11/SCK0 I/O PIO2_11-通用数字输入/输出管脚 35[1] I/O SCK0-SSP0 的串行时钟 PIO3_4 22[1] I/O PIO3_4-通用数字输入/输出管脚 PIO3_5 25[1] I/O PIO3_5-通用数字输入/输出管脚 VDD (IO) VDD(3V3) 12[4] 1 3.3V 的输入/输出供电电压 供给内部稳压器和 ADC 的 3.3 V 电压。也用作 ADC 参 1[4] 1 考电压 VSSIO XTALIN 9 1地 振荡器电路和内部时钟发生器电路的输入。输入电压必 10[5] 1 须超过 1.8 V XTALOUT 5[5] O 振荡器放大器的输出 VSS 43 I地 [1] 5V 容差引脚,提供带可配置滞后的上拉/下拉电阻的数字 I/O 功能。 [2] I2C 总线引脚符合 I2C 标准模式和 I2C 快速模式 plus 的 I2C 总线规格。 [3] 5V 容差引脚。提供带可配置滞后的上拉/下拉电阻和模拟输入(当配置为 ADC 输入时)的数字 I/O 功能,引脚的数字部分被禁能并且管脚不是 5V 的容差。 [4] 外部 VDD(3V3)和 VDD(IO)的组合。如果 VDD(3V3)和 VDD(IO)使用不同的电源,需要保证这两 个电源电压的差别小于等于 0.5 V。 [5] 不使用系统振荡器时,XTALIN 和 XTALOUT 连接方法如下:XTALIN 可以悬空或接地(接地更 好,因为可以减少噪声干扰),XTALOUT 应该悬空。 表 8.4 LPC1111/12/13/14 管脚描述表(HVQFN33 封装) 符号 RESET /PIO0_0 PIO0_1/CLKOUT/ CT32B0_MAT2/ PIO0_2/SSEL0/ CT16B0_CAP0 PIO0_3 管脚 2 3[1] 8[1] 9[1] 类型 I I/O I/O O O I/O O I I/O 描述 RESET -外部复位输入:该管脚为低电平时复位器件, 使 I/O 端口和外设进入其默认状态,并且处理器从地址 0 开始执行 PIO0_0-通用数字输入/输出管脚 PIO0_1-通用数字输入/输出管脚,在复位时,该管脚为 低电平就启动 ISP 指令处理 CLKOUT-时钟输出管脚 CT32B0_MAT2-32 位定时器 0 的匹配输出 2 PIO0_2-通用数字输入/输出管脚 SSEL0-SSP0 的从机选择 CT16B0_CAP0-16 位定时器 0 的捕获输入 0 PIO0_3-通用数字输入/输出管脚 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第8章 符号 PIO0_4/SCL PIO0_5/SDA PIO0_6//SCK0 PIO0_7/ CTS PIO0_8/MISO0/ CT16B0_MAT0 PIO0_9/MOSI0/ CT16B0_MAT1 SWCLK/PIO0_10/ SCK0/CT16B0_MAT2 TDI/PIO0_11/ AD0/CT32B0_MAT3 TMS/PIO1_0/ AD1/CT32B1_CAP0 TDO/PIO1_1/ AD2/CT32B1_MAT0 TRST /PIO1_2/ AD3/CT32B1_MAT1 SWDIO/PIO1_3/AD4/ CT32B1_MAT2 管脚 10[2] 11[2] 15[1] 16[1] 17[1] 18[1] 19[1] 21[3] 22[3] 23[3] 24[3] 25[3] 类型 I/O I/O I/O I/O I/O I/O I/O I I/O I/O O I/O I/O O I I/O O O I I/O I O I I/O I I O I/O I O I I/O I O I/O I/O I O 续上表 描述 PIO0_4-通用数字输入/输出管脚 SCL-I2C 总线时钟输入/输出。只有在 I/O 配置寄存器 中选择了 I2C 快速模式 plus,才有高灌电流 PIO0_5-通用数字输入/输出管脚 SDA-I2C 总线数据输入/输出。只有在 I/O 配置寄存器 中选择了 I2C 快速模式 plus,才有高灌电流(High-current sink) PIO0_6-通用数字输入/输出管脚 SCK0-SSP0 的串行时钟 PIO0_7-通用数字输入/输出管脚(高电流输出驱动) CTS -清除 UART 以发送到输入 PIO0_8-通用数字输入/输出管脚 MISO0-SSP0 的主机输入从机输出 CT16B0_MAT0-16 位定时器 0 的匹配输出 0 PIO0_9-通用数字输入/输出管脚 MOSI0-SSP0 的主机输出从机输入 CT16B0_MAT1-16 位定时器 0 的匹配输出 1 SWCLK-JTAG 接口的串行线时钟和测试时钟 TCK PIO0_10-通用数字输入/输出管脚 SCK0-SSP0 的串行时钟 CT16B0_MAT2-16 位定时器 0 的匹配输出 2 TDI-JTAG 接口的测试数据输入 PIO0_11-通用数字输入/输出管脚 AD0-A/D 转换器,输入 0 CT32B0_MAT3-32 位定时器 0 的匹配输出 3 TMS-JTAG 接口的测试模式选择 PIO1_0-通用数字输入/输出管脚 AD1-A/D 转换器,输入 1 CT32B1_CAP0-32 位定时器 1 的捕获输入 0 TDO-JTAG 接口的测试数据输出 PIO1_1-通用数字输入/输出管脚 AD2-A/D 转换器,输入 2 CT32B1_MAT0-32 位定时器 1 的匹配输出 0 TRST -JTAG 接口的测试复位 PIO1_2-通用数字输入/输出管脚 AD3-A/D 转换器,输入 3 CT32B1_MAT1-32 位定时器 1 的匹配输出 1 SWDIO-串行线调试输入/输出 PIO1_3-通用数字输入/输出管脚 AD4-A/D 转换器,输入 4 CT32B1_MAT2-32 位定时器 1 的匹配输出 2 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 第8章 续上表 符号 管脚 类型 描述 I/O PIO1_4-通用数字输入/输出管脚 PIO1_4/AD5/ 26[3] CT32B1_MAT3/WAKEUP I AD5-A/D 转换器,输入 5 O CT32B1_MAT3-32 位定时器 1 的匹配输出 3 I WAKEUP-深度掉电模式唤醒管脚 PIO1_5/ RTS / CT32B0_CAP0 I/O PIO1_5-通用数字输入/输出管脚 30[1] O RTS -UART 请求发送到输出 I CT32B0_CAP0-32 位定时器 0 的捕获输入 0 PIO1_6/RXD/ CT32B0_MAT0 I/O PIO1_6-通用数字输入/输出管脚 31[1] I RXD-UART 的接收器输入 O CT32B0_MAT0-32 位定时器 0 的匹配输出 0 PIO1_7/TXD/ CT32B0_MAT1 I/O PIO1_7-通用数字输入/输出管脚 32[1] O TXD-UART 的发送器输出 O CT32B0_MAT1-32 位定位器 0 的匹配输出 1 PIO1_8/CT16B1_CAP0 I/O PIO1_8-通用数字输入/输出管脚 7[1] I CT16B1_CAP0-16 位定位器 1 的捕获输入 0 PIO1_9/CT16B1_MAT0 12 [1] I/O PIO1_9-通用数字输入/输出管脚 O CT16B1_MAT0-16 位定时器 1 的匹配输出 0 PIO1_10/AD6/ CT16B1_MAT1 I/O PIO1_10-通用数字输入/输出管脚 20[3] I AD6-A/D 转换器,输入 6 O CT16B1_MAT1-16 位定时器 1 的匹配输出 1 PIO1_11/AD7 I/O PIO1_11-通用数字输入/输出管脚 27[3] I AD7-A/D 转换器,输入 7 PIO2_0/ DTR PIO3_2 I/O PIO2_0-通用数字输入/输出管脚 1[1] O DTR -UART 数据终端就绪输出 28[1] I/O PIO3_2-通用数字输入/输出管脚 PIO3_4 13[1] I/O PIO3_4-通用数字输入/输出管脚 PIO3_5 14[1] I/O PIO3_5-通用数字输入/输出管脚 VDD (IO) VDD(3V3) 6[4] 1 3.3V 的输入/输出供电电压 供给内部稳压器和 ADC 的 3.3 V 电压。也用作 ADC 参 29[4] 1 考电压 XTALIN 振荡器电路和内部时钟发生器电路的输入。输入电压必 4[5] 1 须超过 1.8 V XTALOUT 5[5] O 振荡器放大器的输出 VSS 33 - 热引脚。连接到地 [1] 5V 容差引脚,提供带可配置滞后的上拉/下拉电阻的数字 I/O 功能。 [2] I2C 总线引脚符合 I2C 标准模式和 I2C 快速模式 plus 的 I2C 总线规格。 [3] 5V 容差引脚。提供带可配置滞后的上拉/下拉电阻和模拟输入(当配置为 ADC 输入时)的数字 I/O 功能,引脚的数字部分被禁能并且管脚不是 5V 的容差。 [4] 外部 VDD(3V3)和 VDD(IO)的组合。如果 VDD(3V3)和 VDD(IO)使用不同的电源,需要保证这两 个电源电压的差别小于等于 0.5 V。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1212 广州周立功单片机发展有限公司 第8章 [5] 不使用系统振荡器时,XTALIN 和 XTALOUT 连接方法如下:XTALIN 可以悬空或接地(接地更 好,因为可以减少噪声干扰),XTALOUT 应该悬空。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1313 广州周立功单片机发展有限公司 目录 第 9 章 通用输入/输出口(GPIO) ...........................................................................2 9.1 本章导读 ................................................................................................................... 2 9.2 简介........................................................................................................................... 2 9.2.1 特性...................................................................................................................2 9.3 寄存器描述 ............................................................................................................... 2 9.3.1 GPIO 数据寄存器 ............................................................................................3 9.3.2 GPIO 数据方向寄存器.....................................................................................3 9.3.3 GPIO 中断触发寄存器.....................................................................................4 9.3.4 GPIO 中断双边沿触发寄存器.........................................................................4 9.3.5 GIPO 中断事件寄存器.....................................................................................4 9.3.6 GPIO 中断屏蔽寄存器.....................................................................................4 9.3.7 GPIO 原始中断状态寄存器.............................................................................4 9.3.8 GPIO 屏蔽中断状态寄存器.............................................................................5 9.3.9 GPIO 中断清除寄存器.....................................................................................5 9.4 功能描述 ................................................................................................................... 5 9.4.1 写/读数据..........................................................................................................5 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第9章 第9章 通用输入/输出口(GPIO) 9.1 本章导读 每个端口上可用的 GPIO 引脚数目取决于 LPC111x 系列 ARM 的器件及其封装,可使用 的 GPIO 引脚见表 9.1: 表 9.1 GPIO 配置 器件 封装 GPIO 引脚 GPIO 端口 0 GPIO 端口 1 GPIO 端口 2 GPIO 端口 3 的总数 PIO3_2 PIO0_0 到 PIO1_0 到 LPC1111 HVQFN33 PIO2_0 PIO3_4 28 PIO0_11 PIO1_11 PIO3_5 PIO3_2 PIO0_0 到 PIO1_0 到 LPC1112 HVQFN33 PIO2_0 PIO3_4 28 PIO0_11 PIO1_11 PIO3_5 PIO3_2 PIO0_0 到 PIO1_0 到 HVQFN33 PIO2_0 PIO3_4 28 PIO0_11 PIO1_11 LPC1113 PIO3_5 PIO0_0 到 PIO1_0 到 PIO2_0 到 PIO3_0 到 LQFP48 42 PIO0_11 PIO1_11 PIO2_11 PIO3_5 PIO3_2 PIO0_0 到 PIO1_0 到 HVQFN33 PIO2_0 PIO3_4 28 PIO0_11 PIO1_11 PIO3_5 LPC1114 PIO0_0 到 PIO1_0 到 PIO2_0 到 PIO3_4 到 PLCC44 38 PIO0_11 PIO1_11 PIO2_11 PIO3_5 PIO0_0 到 PIO1_0 到 PIO2_0 到 PIO3_0 到 LQFP48 42 PIO0_11 PIO1_11 PIO2_11 PIO3_5 9.2 简介 9.2.1 特性  数字端口可以由软件配置为输入/输出;  每个单独引脚可被用作外部中断输入引脚;  每个中断可配置为下降沿、上升沿或边沿产生中断;  可对单独的中断级别编程;  所有 GPIO 引脚默认为输入;  端口引脚的读写数据操作是可屏蔽的。 9.3 寄存器描述 所有 GPIO 寄存器都为 32 位,可以字节、半字和字的形式访问。单个位(例如 GPIO 端口)也可通过直接写入端口管脚地址而设置。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第9章 表 9.2 寄存器总览:GPIO (基址端口 0:0x5000 0000;端口 1:0x5001 0000;端口 2:0x5002 0000;端口 3:0x5003 0000) 名称 访问 地址偏移量 描述 复位值 GPIOnDATA 端口 n 数据寄存器,其中 PIOn_0 到 R/W 0x0000-0x3FFC PIOn_11 引脚可用;4096 个位置;每一 0x00 个数据寄存器都是 32 位宽 - - 0x4000-0x7FFC 保留 - GPIOnDIR R/W 0x8000 端口 n 的数据方向寄存器 0x00 GPIOnIS R/W 0x8004 端口 n 的中断感应寄存器 0x00 GPIOnIBE R/W 0x8008 端口 n 的中断边沿寄存器 0x00 GPIOnIEV R/W 0x800C 端口 n 的中断事件寄存器 0x00 GPIOnIE R/W 0x8010 端口 n 的中断屏蔽寄存器 0x00 GPIOnRIS R 0x8014 端口 n 的原始中断状态寄存器 0x00 GPIOnMIS R 0x8018 端口 n 的屏蔽中断状态寄存器 0x00 GPIOnIC W 0x801C 端口 n 的中断清除寄存器 0x00 - - 0x8020 - 0x8FFF 保留 0x00 9.3.1 GPIO 数据寄存器 数据寄存器允许在编程为输入的管脚上读取数据,并且对配置为输出的管脚编程。在 GPIO 地址空间的 4096 位置有同样的数据寄存器,而 12 位的地址总线可用于位屏蔽(见“写 /读数据操作”)。 表 9.3 GPIOnDATA 寄存器(GPIO0DATA,0x5000 0000-0x5000 3FFC;GPIO1DATA, 地址 0x5001 0000-0x5001 3FFC;GPIO2DATA,地址 0x5002 0000-0x5002 3FFC; GPIO3DATA, 地址 0x5003 0000 -0x5003 3FFC)位描述 位 11:0 31:12 符号 DATA - 访问 R/W - 描述 复位值 管脚 PIOn_0-PIOn_11 输入数据(读)或输出数据(写) 0x00 保留 0x00 9.3.2 GPIO 数据方向寄存器 表 9.4 GPIOnDIR 寄存器(IGPIO0DIR, 地址 0x5000 8000-GPIO3DIR, 地址 0x5003 8000)位描述 位 11:0 31:12 符号 IO - 访问 R/W - 值 描述 选择管脚 x 作为输入或输出(x=0 到 11) 0 引脚 PIOn_x 配置为输入 1 管脚 PIOn_x 配置为输出 - 保留 复位值 0x00 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第9章 9.3.3 GPIO 中断触发寄存器 表 9.5 GPIOnlS 寄存器(IGPIO0IS,0x5000 8004-GPIO3IS,0x5003 8004)位描述 位 11:0 31:12 符号 访问 ISENSE R/W - - 值 描述 复位值 在管脚 x 下选择中断作为电平或边沿触发(x=0 到 11) 0 PIOn_x 管脚上的中断配置为边沿触发 0x00 1 PIOn_x 管脚上的中断配置为电平触发 - 保留 - 9.3.4 GPIO 中断双边沿触发寄存器 表 9.6 GPIOnIBE 寄存器(IGPIO0IBE,0x5000 8008 到 GPIO3IBE,0x5003 8008)位描述 位 11:0 31:12 符号 IBE - 访问 R/W - 值 描述 复位值 在管脚 x 上选择在双边沿上触发的中断(x=0 到 11) 0 通过寄存器 GPIOnlEV 控制管脚 PIOn_x 上的中断 0x00 1 管脚 PIOn_x 上双边沿触发中断 - 保留 - 9.3.5 GIPO 中断事件寄存器 表 9.7 GPIOnIEV 寄存器(IGPIO0IEV,0x5000 800C 到 GPIO3IEV,0x5003 800C)位描述 位 11:0 31:12 符号 IEV - 访问 R/W - 值 描述 复位值 在管脚 x 上选择要触发的上升沿或下降沿中断(x=0 到 11) 0 根据 GPIOnlS 的设置(见表 9.5),上升沿或管脚 0x00 PIOn_x 的高电平触发中断 1 根据 GPIOnlS 的设置(见表 9.5),下降沿或管脚 PIOn_x 的低电平触发中断 - 保留 - 9.3.6 GPIO 中断屏蔽寄存器 如果 GPIOnlE 寄存器中的位设为高,对应的引脚就会触发各自的中断和配套的 GPIOnlNTR 线。清除该位就会禁止对应管脚的中断触发。 表 9.8 GPIOnIE 寄存器(IGPIO0IE,地址 0x5000 8010 到 GPIO3IE,地址 0x5003 8010)位描述 位 11:0 31:12 符号 MASK - 访问 R/W - 值 描述 选择管脚 x 上要被屏蔽的中断(x=0 到 11) 0 管脚 PIOn_x 上的中断被屏蔽 1 管脚 PIOn_x 上的中断不被屏蔽 - 保留 复位值 0x00 - 9.3.7 GPIO 原始中断状态寄存器 GPIOnlRS 寄存器的位读出为高时反映了对应管脚上的原始(屏蔽之前)中断状态,表 示在触发 GPIOIE 之前所有的要求都满足。位读出为 0 时表示对应的输入管脚还未启动中断。 该寄存器为只读。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第9章 表 9.9 GPIOnIRS 寄存器(GPIO0IRS,地址 0x5000 8014 到 GPIO3IRS,地址 0x5003 8014)位描述 位 11:0 31:12 符号 MASK - 访问 R - 值 描述 选择管脚 x 上要屏蔽的中断(x=0 到 11) 0 管脚 PIOn_x 上无中断 1 PIOn_x 上满足的中断要求 - 保留 复位值 0x00 - 9.3.8 GPIO 屏蔽中断状态寄存器 GPIOnMIS 寄存器中的位读为高反映了输入线的状态触发中断。读出为低则表示对应的 输入管脚没有中断产生,或者中断被屏蔽。GPIOMIS 是屏蔽后的中断状态。该寄存器为只 读。 表 9.10 GPIOnMIS 寄存器(GPIO0MIS,地址 0x5000 8018 到 GPIO3MIS,地址 0x5003 8018)位描述 位 11:0 31:12 访问 R - 符号 值 描述 选择管脚 x 上要屏蔽的中断(x=0 到 11) MASK 0 管脚 PIOn_x 上无中断或中断屏蔽 1 PIOn_x 上的中断 - - 保留 9.3.9 GPIO 中断清除寄存器 复位值 0x00 - 表 9.11 GPIOnIC 寄存器(GPIO0IC,地址 0x5000 801C 到 GPIO3IC,地址 0x5003 801C)位描述 位 访问 符号 11:0 W CLR 31:12 - - 值 描述 复位值 选择管脚 x 上要清除的中断(x=0 到 11)。清除中断边沿检 测逻辑。该寄存器为只写 注:GPIO 和 NVIC 块之间的同步装置产生 2 个时钟的延时。 建议在清除中断边沿检测逻辑之后,退出中断服务程序之前 增加 2 个 NOP 0x00 0 无影响 1 清除 PIOn_x 上的边沿检测逻辑 - 保留 - 9.4 功能描述 9.4.1 写/读数据 为了能让软件在一个写操作过程中设置 GPIO 位而又不影响到其他的管脚,我们就需要 用 14 位宽的地址总线中的第 2 到第 13 位来产生 12 位的屏蔽,在每个端口的 12 个 GPIO 管 脚上进行读写操作。屏蔽 GPIODATA 寄存器可以在地址 0x0000 到 0x3FFC 之间任何一个地 址处加载。 写操作 如果与 GPIO 数据位相关的地址位写入了高电平,GPIODATA 寄存器的值就会更新为 GPIO 数据位的值。如果地址位写入了低电平,对应的 GPIODATA 寄存器位不变。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第9章 图 9.1 GPIODATA 寄存器的屏蔽写操作 读操作 如果与 GPIO 数据位相关的地址位都为高电平,则读出该值。如果地址位是低电平,则 GPIO 数据位读出为 0。 图 9.2 屏蔽的读操作 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 目录 第 10 章 通用异步接收器/发送器(UART) ...........................................................2 10.1 本章导读...................................................................................................................2 10.2 特性...........................................................................................................................2 10.3 管脚描述...................................................................................................................2 10.4 计时和功率控制.......................................................................................................2 10.5 寄存器描述...............................................................................................................3 10.5.1 UART 接收器缓冲寄存器 ...............................................................................4 10.5.2 UART 发送保持寄存器 ...................................................................................4 10.5.3 UART 除数锁存 LSB 和 MSB 寄存器............................................................5 10.5.4 UART 中断使能寄存器 ...................................................................................5 10.5.5 UART 中断标识寄存器 ...................................................................................6 10.5.6 UART FIFO 控制寄存器..................................................................................8 10.5.7 UART Modem 控制寄存器..............................................................................8 10.5.8 UART 线控制寄存器 ..................................................................................... 11 10.5.9 UART 线状态寄存器 ..................................................................................... 11 10.5.10 UART Modem 状态寄存器............................................................................12 10.5.11 UART 高速缓存寄存器 .................................................................................13 10.5.12 UART Auto-baud 控制寄存器 .......................................................................13 10.5.13 自动波特率(Auto-baud)............................................................................14 10.5.14 Auto-baud 模式...............................................................................................15 10.5.15 UART 小数分频器寄存器 .............................................................................16 10.5.16 UART 发送使能寄存器 .................................................................................19 10.5.17 UART RS485 控制寄存器 .............................................................................20 10.5.18 UART RS-485 地址匹配寄存器 ....................................................................20 10.5.19 UART1 RS-485 延时值寄存器 ......................................................................21 10.5.20 RS-485/EIA-485 模式的操作.........................................................................21 10.5.21 UART FIFO 深度寄存器................................................................................22 10.6 结构.........................................................................................................................22 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 10 章 第10章 通用异步接收器/发送器(UART) 10.1 本章导读 对于所有 LPC111x 系列 ARM,UART 模块都相同。 DSR 、 DCD 和 RI modem 信号是 只用于 LQFP48 和 PLCC44 封装的管脚配置。 10.2 特性  16 字节收发 FIFO;  寄存器的存储单元符合“550 工业标准”;  接收器 FIFO 触发点位于 1、4、8 和 14 字节;  内置波特率发生器;  UART 支持软件或硬件流控制执行;  支持 RS-458/EIA-485 的 9 位模式和输出使能;  Modem 控制。 10.3 管脚描述 表 10.1 UART 管脚描述 管脚 类型 描述 RXD 输入 串行输入管脚。串行接收数据 TXD 输出 串行输出管脚。串行发送数据 RTS 输出 请求发送。RS-485 方向控制管脚 DTR 输出 数据终端就绪 DSR [1] 输入 数据设置就绪 CTS 输入 清除发送 DCD [1] 输入 数据载波检测 RI [1] 输入 铃响指示 [1] 仅用于 LQFP48 封装。 DSR 、 DCD 和 RI modem 输入在 2 个不同的管脚位置进行多路复用。除了选择 IOCON 寄存器的功能外,还可以使用 IOCON_LOC 寄存器(见第 7 章“IOCON 位置寄存器”小节) 为 LQFP48 管脚封装上的每个功能选择一个物理位置。 DTR 输出在 2 个管脚位置都可以使用。 DTR 管脚的输出值在两个相同的位置被驱动, 并且可通过为该管脚位置选择 IOCON 寄存器的功能来简单选择任意位置的 DTR 功能。 10.4 计时和功率控制 UART 模块通过 AHBCLKCTRL 寄存器进行门控。外设 UART 时钟(由 UART 波特率 发生器使用)通过 UARTCLKDIV 寄存器来控制。 UART_PCLK 可在 UARTCLKDIV 寄存器(见第 3 章“UART 时钟分频器寄存器”小节) 中禁能,并且 UART 模块可通过系统 AHB 时钟控制寄存器的位 12(见第 3 章“系统 AHB 时钟控制寄存器”小节)禁能以节省功耗。 注:在使能 UART 时钟之前,UART 管脚必须在相应的 IOCON 寄存器中配置。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 10 章 10.5 寄存器描述 UART 所包含的寄存器,其结构如表 10.2 所述。除数锁存器访问位(DLAB)包含在 U0LCR[7]中,能够使能除数锁存器的访问。 表 10.2 寄存器概述:UART(基址:0x4000 8000) 名称 U0RBR U0THR U0DLL U0DLM U0IER U0IIR U0FCR U0LCR U0MCR U0LSR U0MSR U0SCR U0ACR U0FDR U0TER - 访问 RO WO R/W R/W R/W RO WO R/W R/W RO RO R/W R/W R/W R/W - 地址偏移量 0x000 0x000 0x000 0x004 0x004 0x008 0x008 0x00C 0x010 0x014 0x018 0x01C 0x020 0x024 0x028 0x02C 0x030 0x034 0x048 描述 接收缓冲寄存器。包含下一个要 读取的已接收字符 发送保持寄存器。在此写入下一 个要发送的字符 除数锁存 LSB。波特率除数值的 最低有效字节。整个分频器用于 产生小数波特率分频器的波特 率 除数锁存 MSB。波特率除数值 的最高有效字节。整个分频器用 于产生小数波特率分频器的波 特率 中断使能寄存器。包含 7 个潜在 的 UART 中断对应的各个中断 使能位 中断 ID 寄存器。识别等待处理 的中断 FIFO 控制寄存器。控制 UART FIFO 的使用和模式 线控制寄存器。包含帧格式控制 和间隔产生控制 Modem 控制寄存器 线状态寄存器。包含发送和接收 状态的标志(包括线错误) Modem 状态寄存器 高速缓存寄存器。8 位的临时存 储空间,供软件使用 自动波特率控制寄存器。包含自 动波特率特性的控制 保留 小数分频器寄存器。为波特率分 频器产生时钟输入 保留 发送使能寄存器。关闭 UART 发送器,使用软件流控制 保留 复位值[1] NA NA 0x01 0x00 0x00 0x01 0x00 0x00 0x00 0x60 0x00 0x00 0x00 0x10 0x80 - 注 当 DLAB=0 当 DLAB=0 当 DLAB=1 当 DLAB=1 当 DLAB=0 - - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 10 章 名称 访问 地址偏移量 描述 RS-485/EIA-485 控制。包含了 U0RS485CTRL R/W 0x04C RS-485/EIA-485 模式多方面的 配置控制 RS-485/EIA-485 地址匹配。包含 U0ADRMATCH R/W 0x050 RS-485/EIA-485 模式的地址匹 配值 U0RS485DLY R/W 0x054 RS-485/EIA-485 方向控制延迟 U0FIFOLVL RO 0x058 FIFO 水平寄存器。提供发送和 接收 FIFO 的当前填充深度 [1] 复位值仅指使用位中保存的数据,并不包括保留位的内容。 复位值[1] 0x00 0x00 0x00 0x00 续上表 注 - - 10.5.1 UART 接收器缓冲寄存器 U0RBR 是 UART RX FIFO 的最高字节。它包含了最早接收到的字符,并且可通过总线 接口进行读取。LSB(位 0)表示最“早”接收的数据位。如果接收到的字符少于 8 位,则 未使用的 MSB 用 0 填充。 如果要访问 U0RBR,U0LCR 中的除数锁存访问位(DLAB)必须为 0。U0RBR 为只读 寄存器。 由于 PE、FE 和 BI 位(见表 10.14)与 RBR FIFO 顶部的字节(即下次读 RBR 时获取 的字节)相关,因此,要正确地成对读出有效的接收字节及其状态位,应先读取 U0LSR 的 内容,然后再读取 U0RBR 中的字节。 表 10.3 UART 接收器缓冲寄存器(U0RBR –0x4000 8000,当 DLAB=0 时,只读)位描述 位 符号 描述 复位值 UART 接收器缓冲寄存器包含了 UART RX FIFO 当中最早接收 7:0 RBR 未定义 到的字节 31:8 - 保留 - 10.5.2 UART 发送保持寄存器 U0THR 是 UART TX FIFO 的最高字节。它是 TX FIFO 中的最新字符,可通过总线接口 进行写入。LSB 代表第一个要发送出去的位。 如果要访问 U0THR,U0LCR 中的除数锁存访问位(DLAB)必须为 0。U0THR 为只写 寄存器。 表 10.4 UART 发送保持寄存器(U0THR –0x4000 8000,当 DLAB=0 时,只写)位描述 位 符号 描述 复位值 写 UART 发送保持寄存器会使数据保存到 UART 发送 FIFO 中。 7:0 THR NA 当字节达到 FIFO 的底部并且发送器可用时,字节就会被发送 31:8 - 保留 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 10 章 10.5.3 UART 除数锁存 LSB 和 MSB 寄存器 UART 除数锁存器是 UART 波特率发生器的一部分并保存使用的值,它与小数分频器 一同使用,来分频 UART_PCLK 时钟以产生波特率时钟,该波特率时钟必须是所需波特率 的 16 倍。U0DLL 和 U0DLM 寄存器一起构成了一个 16 位除数,其中 U0DLL 包含了除数的 低 8 位而 U0DLM 包含了除数的高 8 位。值 0x0000 会被作为 0x0001 处理,因为除数不能为 0。如果要访问 UART 除数锁存寄存器,U0LCR 中的除数锁存器访问位(DLAB)必须为 1。 关于如何为 U0DLL 和 U0DLM 选择正确的分频值的详细内容,请参见“UART 小数分频器 寄存器”小节。 表 10.5 UART 除数锁存器 LSB 寄存器(U0DLL –0x4000 8000)位描述 位 符号 描述 复位值 UART 除数锁存 LSB 寄存器与 U0DLM 寄存器一起决定 UART 7:0 DLLSB 0x01 的波特率 31:8 - 保留 - 表 10.6 UART 除数锁存器 MSB 寄存器(U0DLM –0x4000 8004)位描述 位 符号 描述 UART 除数锁存 MSB 寄存器与 U0DLL 寄存器一起决定 UART 7:0 DLMSB 的波特率 31:8 - 保留 10.5.4 UART 中断使能寄存器 U0IER 用于使能 4 个 UART 中断源。 复位值 0x00 - 表 10.7 UART 中断使能寄存器(U0IER –0x4000 8004)位描述 位 符号 值 描述 复位值 使能 UART 的接收数据可用中断。它还控制着字符接 RBR 收超时中断 0 Interrupt 0 0 禁止 RDA 中断 Enable 1 使能 RDA 中断 使 能 UART 的 THRE 中 断 。 该 中 断 的 状 态 可 从 THRE U0LSR[5]中读出 1 Interrupt 0 0 禁止 THRE 中断 Enable 1 使能 THRE 中断 使能 UART 的 RX 线状态中断。该中断的状态可从 RX Line U0LSR[4:1]中读出 2 Interrupt 0 0 禁止 RX 线状态中断 Enable 1 使能 RX 线状态中断 3 - - 保留 - 6:4 - 保留。用户软件不应对其写入 1。从保留位读出的值未 NA 定义 7 - - 保留 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 10 章 续上表 位 符号 值 描述 复位值 使能 auto-baud 结束中断 8 ABEOIntEn 0 禁止 auto-baud 结束中断 0 1 使能 auto-baud 结束中断 使能 auto-baud 超时中断 9 ABTOIntEn 0 禁止 auto-baud 超时中断 0 1 使能 auto-baud 超时中断 31:10 - 保留,用户软件不应向保留位写入 1。从保留位读出的 NA 值未定义 10.5.5 UART 中断标识寄存器 U0IIR 提供状态代码用于指示一个待处理中断的优先级和中断源。在访问 U0IIR 过程中, 中断被冻结。如果在访问 U0IIR 过程中产生了中断,那么在下次访问 U0IIR 时该中断会被 记录。 表 10.8 UART 中断标识寄存器(U0IIR –0x4004 8008,只读)位描述 位 符号 值 描述 复位值 中断状态。注意 U0IIR[0]为低电平有效。待处理的中 断可通过 U0IIR[3:1]来确定 0 IntStatus 1 0 至少有一个中断正在等待处理 1 没有等待处理的中断 中断标识。U0IER[3:1]指示对应 UART RX FIFO 的中 断。下面未列出的 U0IER[3:1]的其它组合都为保留值 (100、101、111) 011 1 – 接收线状态(RLS) 3:1 Intld 0 010 2a – 接收数据可用(RDA) 110 2b – 字符超时指示器(CTI) 001 3 –THRE 中断 000 4 –Modem 中断 5:4 - 保留。用户软件不应对其写入 1。从保留位读出的值未 NA 定义 FIFO 7:6 Enable 8 ABEOInt 9 ABTOInt 31:10 - 这些位等效于 U0FCR[0] 0 Auto-baud 结束中断。若 auto-baud 已成功结束且中断 0 被使能,则为真 Auto-baud 超时中断。若 auto-baud 已超时且中断被使 0 能,则为真 保留。用户软件不应对其写入 1。从保留位读出的值未 NA 定义 位 U0IIR[9:8]由 auto-baud 功能设置,用于发布超时信号或 auto-baud 结束条件信号。而 Auto-baud 中断条件的清除则是通过设置 Auto-baud 控制寄存器中的相应 Clear(清除)位来 实现。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 10 章 如果 IntStatus 位为 1 且没有中断等待处理,此时 Intld 位为 0。如果 IntStatus 位为 0,表 示有一个非 auto-baud 中断正等待处理,此时 Intld 位会指示中断的类型,中断的处理见表 10.9。给定了 U0IIR[3:0]的状态,中断处理程序就能确定中断源以及如何清除有效的中断。 在退出中断服务程序之前,必须读取 U0IIR 来清除中断。 UART RLS 中断(U0IIR[3:1]=011)是最高优先级中断,只要 UART Rx 输入产生 4 个 错误条件(溢出错误 OE、奇偶错误 PE、帧错误 FE 以及间隔中断 BI)中的任意一个,该位 就会被置位。设置中断的 UART Rx 错误条件可通过 U0LSR[4:1]来查看。当读取 U0LSR 时, 中断就会被清除。 UART RDA 中断(U0IIR[3:1]=010)与 CTI 中断(U0IIR[3:1]=110)共用第二优先级。 当 UART Rx FIFO 深度到达 U0FCR[7:6]所定义的触发点时,RDA 就会被激活;当 UART Rx FIFO 深度低于触发点时,RDA 复位。当 RDA 中断激活时,CPU 可读出由触发点所定义的 数据块。 CTI 中断(U0IIR[3:1]=110)是一个第二优先级中断,当 UART Rx FIFO 内含有至少一 个字符并且在接收到 3.5 到 4.5 字符的时间内没有发生 UART Rx FIFO 操作时,该中断置位。 任何 UART Rx FIFO 操作(UART RSR 的读取或写入)将会清除该中断。当接收到的信息 不是触发点值的倍数时,CTI 中断将会清空 UART RBR。例如:如果外围设备想要发送一 个长度为 105 个字符的信息,而触发值为 10 个字符,那么 CPU 接收 10 个 RDA 中断以使传 输前 100 个字符,CPU 接收 1~5 个 CTI 中断(取决于服务程序)将传输剩下的 5 个字符。 表 10.9 UART 中断处理 U0IIR[3:0]值[1] 优先级 中断类型 中断源 中断复位 0001 - 无 无 - 0110 最高 RX 线状态/ 错误 OE[2]、PE[2]、FE[2]或 BI[2] U0LSR[2] 读 操作 0100 第二 RX 数据可用 Rx 数 据 可 用 或 达 到 FIFO 的 触 发 点 (U0FCR0=1) U0RBR[3] 读 操作或 UART FIFO 低于触发值 RX FIFO 中至少有一个字符,并且在一段 时间内没有字符输入或移出,该时间的长 1100 第二 字符超时指 短取决于 FIFO 中的字符数以及在 3.5 到 4.5 U0RBR[3] 读 示 字符的时间内的触发值 操作 实际时间为:[(字长度)×7-2]×8+[(触发值字符数)×8+1]RCLK U0IIR[4] 读 操 作(如果 0010 第三 THRE THRE[2] U0IIR 是中断 源)或 THR 写操作 [1] “0000”、“0011”、“0101”、“0111”、“1000”、“1001”、“1010”、“1011”、“1101”、“1110”、“1111” 均为保留值。 [2] 详细信息,请参见“UART 线状态寄存器”小节。 [3] 详细信息,请参见“UART 接收缓冲器寄存器”小节。 [4] 详细信息,请参见“UART 中断标识寄存器”小节以及“UART 发送器保持寄存器”小节。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 10 章 UART THRE 中断(U0IIR[3:1]=001)是第三优先级中断。当 UART THR FIFO 为空且 满足特定的初始化条件时,该中断激活。这些初始化条件是为了让 UART THR FIFO 有机会 填入数据,以免在系统启动时产生许多 THRE 中断。当 THRE=1 时,且在上次 LSR 寄存器 的 THRE=1 事件后,U0THR 中没有出现至少两个字符时,这些初始化条件就会实现一个字 符减去停止位的延时。当没有解码和服务 THRE 中断时,该延时为 CPU 提供了写数据到 U0THR 的时间。当 UART THR FIFO 中曾经同时出现两个或更多字符,而当前的 U0THR 为空时,THRE 中断就会立即被设置。当发生 U0THR 写操作或 U0IIR 读操作,并且 THRE 为最高优先级中断(U0IIR[3:1]=001)时,THRE 中断复位。 10.5.6 UART FIFO 控制寄存器 U0FCR 控制 UART RX 和 TX FIFO 的操作。 表 10.10 UART FIFO 控制寄存器(U0FCR –0x4000 8008,只写)位描述 位 符号 值 描述 0 UART FIFO 被禁止。禁止在应用中使用 1 高电平有效,使能对 UART RX FIFO 和 TX FIFO 以 FIFO 0 及 U0FCR[7:1]的访问。该位必须置位以实现正确的 Enable UART 操作。该位的任何变化都将使 UART FIFO 清 空 0 对两个 UART FIFO 均无影响 RX FIFO 1 1 写 1 到 U0FCR[1]将会清零 UART Rx FIFO 中的所有 Reset 字节,并复位指针逻辑,该位可以自动清零 0 对两个 UART FIFO 均无影响 TX FIFO 2 1 写 1 到 U0FCR[2]将会清零 UART Tx FIFO 中的所有 Reset 字节,并复位指针逻辑。该位会自动清零 3 - - 保留 5:4 - 保留。用户软件不应对其写入 1。从保留位读出的值 未定义 这两个位决定了接收 UART FIFO 在激活中断前必须 写入的字符数量 RX Trigger 00 触发点 0(默认 1 字节或 0x01) 7:6 Level 01 触发点 1(默认 4 字节或 0x04) 10 触发点 2(默认 8 字节或 0x08) 11 触发点 3(默认 14 字节或 0x0E) 31:8 - - 保留 10.5.7 UART Modem 控制寄存器 U0MCR 使能 Modem 的回送模式并控制 Modem 的输出信号。 复位值 0 0 0 0 NA 0 - 表 10.11 UART0 Modem 控制寄存器(U0MCR –0x4000 8010,只写)位描述 位 符号 值 描述 复位值 DTR 0 Control 选择 Modem 输出管脚 DTR 。当 Modem 回送模式激 0 活时,该位读出为 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 10 章 续上表 位 符号 值 描述 复位值 RTS 1 Control 选择 Modem 输出管脚 RTS 。当 Modem 回送模式激 0 活时,该位读出为 0 保留。用户软件不应对其写入 1。从保留位读出的值 3:2 - NA 0 未定义 Modem 回送模式提供了执行诊断回送测试的机制。 发送器输出的串行数据在内部连接到接收器的串行 输入端。输入管脚 RXD 对回送操作无影响,而输出 管脚 TXD 保持为标记状态(marking state)。4 个 Modem 输入端( CTS 、 DSR 、 RI 和 DCD )与外部 Loopback 断开连接。从外部看来,Modem 输出端( RTS 、DTR ) 4 Mode 无效。而从内部看来,4 个 Modem 输出都连接到 4 0 Select 个 Modem 输入上。这样连接的结果将导致 U0MSR 的高 4 位由 U0MCR 的低 4 位驱动,而不是在正常模 式下由 4 个 Modem 输入驱动。这样在回送模式下, 写 U0MCR 的低 4 位可产生 Modem 状态中断 0 禁能 Modem 回送模式 1 使能 Modem 回送模式 保留。用户软件不应对其写入 1。从保留位读出的值 5 - NA 0 未定义 0 禁止 auto-rts 流控制 6 RTSen 0 1 使能 auto-rts 流控制 0 禁止 auto-cts 流控制 7 CTSen 0 1 使能 auto-cts 流控制 1. Auto-flow 控制 如果启动了 auto-RTS 模式,UART 的接收 FIFO 硬件将控制 UART 的 RTS 输出。如果 启动的是 auto-CTS 模式,UART 的 U0TSR 硬件只会在 CTS 输入信号有效时启动发送。 (1)Auto-RTS Auto-RTS 功能是通过设置 RTSen 位来启动的。Auto-RTS 数据流控制在 U0RBR 模块中 产生,链接到设定的接收 FIFO 触发点。如果启动了 auto-RTS,数据流的控制如下: 当接收 FIFO 水平达到设定的触发点时, RTS 信号被撤销(变为高值)。在达到触发点 后,发送 UART 可能还会发送额外的字节(假定发送 UART 有另一个字节要发送),因为 UART 在开始发送额外字节之前可能不知道 RTS 信号已撤销。一旦接收 FIFO 达到前面的触 发点, RTS 就会自动重新生效(变为低值)。 RTS 重新生效指示发送 UART 继续发送数据。 如果禁止了 Auto-RTS 模式,RTSen 位控制 UART 的 RTS 输出。如果启动了 Auto-RTS 模式,硬件控制 RTS 输出,并且 RTS 的实际值将会复制到 UART 的 RTS Control 位中。只要 启动了 Auto-RTS 模式,软件就只能够对 RTS Control 位的值进行读取。 示例:假设 UART 工作在‘550 工业标准下,将 U0FCR 中的触发值设置为 0x2,此时 如果启动了 Auto-RTS 模式,当接收 FIFO 内出现了 8 个字节时,UART 将使 RTS 输出无效。 当接收 FIFO 达到先前的触发值(4 个字节)时, RTS 输出将会重新生效。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 UART Rx 起始 N字节 停止 起始 位0..7 停止 第 10 章 起始 位0..7 停止 RTS管脚 UART Rx FIFO 读 UART Rx N-1 FIFO 水平 N-1 N-2 N-1 N-2 M+2 M+1 M M-1 图 10.1 Auto-RTS 功能时序 (2)Auto-CTS Auto-CTS 功能是通过设置 CTSen 位来启动的。如果启动了 Auto-CTS 功能,在发送下 一个数据字节之前,U0TSR 模块中的发送电路会先对 CTS 输入进行检查。当 CTS 有效(低 电平)时,发送器就会将下一个字节发送出去。如果要发送器停止发送后续的字节,必须在 末尾的停止位发送出一半之前释放 CTS 。在 Auto-CTS 模式下,即使 U0MSR 中的 Delta CTS 位被置位, CTS 信号的变化也不会触发 Modem 状态中断,除非 CTS Interrupt Enable 位被置 位。表 10.12 列出了产生 Modem 状态中断的情况。 表 10.12 Modem 状态中断产生 使能 Modem 状态中断 (U0IER[3]) 0 1 1 1 1 1 1 1 1 CTSen (U0MCR[7]) x 0 0 0 1 1 1 1 1 CTS 中断使 Delta CTS 能(U0IER[7]) (U0MSR[0]) x x x 0 x 1 x x 0 x 0 x 1 0 1 1 1 x Delta DCD 或后沿 RI 或 Delta DSR (U0MSR[3]或 U0MSR[2]或 U0MSR[1]) x 0 x 1 0 1 0 x 1 Modem 状态中断 否 否 是 是 否 是 否 是 是 Auto-CTS 功能可减少对主机系统的中断。当流控制被使能时, CTS 状态的改变不会触 发主机中断,因为器件会自动控制其发送器。不使用 Auto-CTS 时,发送器会将任何存放在 发送 FIFO 内的数据都发送出去,从而导致接收器发生溢出错误。图 10.5 给出了 Auto-CTS 的功能时序。 UARTTX 起始 位0..7 停止 起始 位0..7 停止 起始 位0..7 停止 CTS管脚 图 10.2 Auto-CTS 功能时序 开始发送第一个字符时,CTS 信号有效。一旦处理中的数据传输结束了,发送就会停止。 只要 CTS 无效(被拉高)时,UART 会不断地发送“1”。一旦 CTS 变为无效,传输恢复且 发送起始位,然后是下一个字符的数据位。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第 10 章 10.5.8 UART 线控制寄存器 U0LCR 决定了要发送和接收的数据字符格式。 表 10.13 UART 线控制寄存器(U0LCR –0x4000 800C)位描述 位 符号 值 描述 00 5 位字符长度 Word 01 6 位字符长度 1:0 Length 10 7 位字符长度 Select 11 8 位字符长度 Stop Bit 0 1 个停止位 2 Select 1 2 个停止位(若 U0LCR[1:0]=00 时为 1.5 个停止位) Parity 0 禁止校验的产生和检测 3 Enable 1 使能校验的产生和检测 00 奇校验。1s 内的发送字符数和附加校验位为奇数 Parity 01 偶校验。1s 内的发送字符数和附加校验位为偶数 5:4 Select 10 强制“1”奇偶校验(stick parity) 11 强制“0”奇偶校验(stick parity) 0 禁止间隔传输 Break 6 1 使能间隔传输。当 U0LCR[6]是高电平有效时,强制使 Control 输出管脚 UART TXD 为逻辑 0 Divisor Latch 0 禁止对除数锁存器的访问 7 Access Bit 1 使能对除数锁存器的访问 (DLAB) 31:8 - - 保留 10.5.9 UART 线状态寄存器 U0LSR 是一个只读寄存器,提供 UART TX 和 RX 模块的状态信息。 复位值 0 0 0 0 0 0 - 表 10.14 UART 线状态寄存器(U0LSR –0x4000 8014,只读)位描述 位 符号 值 描述 复位值 当 U0RBR 包含未读字符时,U0LSR[0]就会被置位;当 Receiver UART RBR FIFO 为空时,U0LSR[0]就会被清零 0 Data Ready 0 0 U0RBR 为空 (RDR) 1 U0RBR 包含有效数据 一旦发生错误,就设置溢出错误条件。读 U0LSR 会清 Overrun 1 Error(OE) 零 U0LSR[1]。当 UART RSR 已有新的字符就绪,而 UART RBR FIFO 已满时,U0LSR[1]被置位。此时, UART RBR FIFO 将不会被覆盖,UART RSR 内的字符 0 将会丢失 0 溢出错误状态无效 1 溢出错误状态有效 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 第 10 章 续上表 位 符号 值 描述 复位值 当接收字符的校验位处于错误状态时,校验错误就会产 Parity Error 2 (PE) 生。读 U0LSR 会清零 U0LSR[2]。校验错误检测时间 取决于 U0FCR[0] 0 注:校验错误与 UART RBR FIRO 顶部的字符相关 0 校验错误状态无效 1 校验错误状态有效 当接收字符的停止位为逻辑 0 时,就会发生帧错误。读 Framing 3 Error(FE) U0LSR 会清零 U0LSR[3]。帧错误检测时间取决于 U0FCR0。当检测到有帧错误时,RX 会尝试与数据重 新同步,并假设错误的停止位实际是一个超前的起始 位。但即使没有出现帧错误,它也无法假设下一个接收 0 到的字符是正确的 注:帧错误与 UART RBR FIRO 顶部的字符相关 0 帧错误状态无效 1 帧错误状态有效 在发送整个字符(起始位、数据、校验位以及停止位) 过程中,RXD1 如果保持在空闲状态(全“0”),则 产生间隔中断。一旦检测到间隔条件,接收器立即进入 Break 空闲状态,直到 RXD1 进入标记状态(全“1”)。读 4 Interrupt U0LSR 会 清 零 该 状 态 位 。 间 隔 检 测 的 时 间 取 决 于 0 (BI) U0FCR[0] 注:间隔中断与 UART RBR FIRO 顶部的字符相关 0 间隔中断状态无效 1 间隔中断状态有效 Transmitter 当检测到 UART THR 已空时,THRE 就会立即被设置。 Holding 写 U0THR 会清零 THRE 5 Register 1 0 U0THR 包含有效数据 Empty 1 U0THR 为空 (THRE) 当 U0THR 和 U0TSR 同时为空时,TEMT 就会被设置; Transmitter 6 Empty 而当 U0TSR 或 U0THR 任意一个包含有效数据时, TEMT 就会被清零 1 (TEMT) 0 U0THR 和/或 U0TSR 包含有效数据 1 U0THR 和 U0TSR 为空 当一个带有 RX 错误(如:帧错误、校验错误或间隔中 断)的字符载入到 U0RBR 时,U0LSR[7]就会被置位。 Error in RX 当 U0LSR 寄存器被读取并且 UART FIFO 中不再有错 7 FIFO 0 误时,该位就会清零 (RXFE) 0 U0RBR 中没有 UART RX 错误或 U0FCR[0]=0 1 UART RBR 包含至少一个 UART RX 错误 31:8 - - 保留 - 10.5.10 UART Modem 状态寄存器 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1212 广州周立功单片机发展有限公司 第 10 章 U0MSR 是一个只读寄存器,提供 Modem 输入信号的状态信息。读 U0MSR 会清零 U0MSR[3:0]。需要注意的是 Modem 信号不会对 UART 操作有直接影响,它们有助于 modem 信号操作的软件实现。 表 10.15 UART Modem 状态寄存器(U0MSR –0x4000 8018,只读)位描述 位 符号 值 描述 复位值 当输入端 CTS 的状态改变时,该位置位。读 U0MSR 会清零该位 0 Delta CTS 0 0 没有检测到 Modem 输入端 CTS 上的状态变化 1 检测到 Modem 输入端 CTS 上的状态变化 当输入端 DSR 的状态改变时,该位置位。读 U0MSR 会清零该位 1 Delta DSR 0 0 没有检测到 Modem 输入端 DSR 上的状态变化 1 检测到 Modem 输入端 DSR 上的状态变化 当输入端 RI 上低电平到高电平跳变时,该位置位。 Trailing 读 U0MSR 会清零该位 2 0 Edge RI 0 没有检测到 Modem 输入端 RI 上的状态变化 1 检测到 RI 上的低电平往高电平跳变的变化 当输入端 DCD 的状态改变时,该位置位。读 U0MSR 会清零该位 3 Delta DCD 0 0 没有检测到 Modem 输入端 DCD 上的变化 1 检测到 Modem 输入端 DCD 上的变化 4 CTS 清除发送状态。输入信号 CTS 的补码。在 Modem 回 0 送模式下,该位连接到 U0MCR[1] 5 DSR 数据设置就绪状态。输入信号 DSR 的补码。在 Modem 0 回送模式下,该位连接到 U0MCR[0] 6 RI 响铃指示状态。输入 RI 的补码。在 Modem 回送模式 0 下,该位连接到 U0MCR[2] 7 DCD 数据载波检测状态。输入 DCD 的补码。在 Modem 回 0 送模式下,该位连接到 U0MCR[3] 10.5.11 UART 高速缓存寄存器 U0SCR 不会对 UART 操作有影响。用户可自由对该寄存器进行读写。不提供中断接口 向主机指示 U0SCR 所发生的读或写操作。 表 10.16 UART 高速缓存寄存器(U0SCR –0x4000 801C)位描述 位 符号 描述 7:0 Pad 一个可读、可写的字节 31:8 - 保留 复位值 0x00 - 10.5.12 UART Auto-baud 控制寄存器 在用户测量波特率的输入时钟/数据速率期间,整个测量过程就是由 UART Auto-baud 控制寄存器(U0ACR)进行控制的。用户可自由地读写该寄存器。 表 10.17 Auto-baud 控制寄存器(U0ACR –0x4000 8020)位描述 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1313 广州周立功单片机发展有限公司 第 10 章 位 0 1 2 7:3 8 9 31:10 符号 值 描述 在 auto-baud 功能结束后,该位会自动清零 0 Auto-baud 功能停止(auto-baud 功能不运行) Start 1 Auto-baud 功能启动(auto-baud 功能正在运行)。 Auto-baud 运行位。该位会在 auto-baud 功能结束后自 动清零 Mode Auto-baud 模式选择位 0 模式 0 1 模式 1 0 不重新启动 AutoRestart 1 如果超时则重新启动(计数器会在下一个 UART Rx 下降沿重新启动) 保留。用户软件不应对其写入 1。从保留位读出的值 - NA 未定义 Auto-baud 中断结束清零位(仅可写访问) ABEOIntClr 0 写 0 无影响 1 写 1 将 U0IIR 中相应的中断清除 Auto-baud 超时中断清零位(仅可写访问) ABTOIntClr 0 写 0 无影响 1 写 1 将 U0IIR 中相应的中断清除 保留。用户软件不应对其写入 1。从保留位读出的值 - NA 未定义 复位值 0 0 0 0 0 0 0 10.5.13 自动波特率(Auto-baud) UART auto-baud 功能可用于测量基于“AT”协议(Hayes 命令)的输入波特率。如果 auto-baud 特性被使能,那么 auto-baud 特性将测量接收数据流中的位时间,并根据这个结果 来设置除数锁存寄存器 U0DLM 和 U0DLL。 Auto-baud 功能是通过置位 U0ACR 起始位来启动的,并通过清零 U0ACR 起始位来停 止。Auto-baud 一旦结束,起始位就将自动清零,并且对该起始位进行读取将会返回 auto-baud 的状态(等待处理/完成)。 可通过设置 U0ACR 模式位来使用两种 auto-baud 测量模式。在模式 0 下,波特率是通 过对 UART RX 管脚上两个连续的下降沿进行测量(起始位的下降沿和最低有效位的下降 沿)来得到的。而在模式 1 下,波特率则是通过测量 UART RX 管脚上的下降沿和后续的上 升沿之间的时间(起始位的长度)来得到的。 如果出现超时(速率测量计数器溢出),U0ACR AutoRestart 位可用于自动重启波特率 测量。如果该位被置位,速率测量将会在 UART Rx 管脚的下一个下降沿重新启动。 Auto-baud 功能会产生两种中断: [1] 若中断使能,则 U0IIR ABTOInt 中断将置位(U0IER ABTOIntEn 置位且自动波特率 测量计数器溢出); [2] 若中断使能,则 U0IIR ABEOInt 中断将置位(U0IER ABEOIntEn 置位且 auto-baud 已经成功完成)。 Auto-baud 中断必须通过置位相应的 U0ACR ABTOIntClr 位和 ABEOIntEn 位来清零。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1414 广州周立功单片机发展有限公司 第 10 章 在 auto-baud 期间,小数波特率发生器通常被禁用(即 DIVADDVAL = 0)。同时,当 使用 auto-baud 时,任何对 U0DLM 和 U0DLL 寄存器的写操作都必须在写 U0ACR 寄存器之 前完成。UART 支持的最小和最大波特率受 UART_PCLK、数据的位数、停止位以及校验位 的影响。 ratemin = 2  PCLK 16 2 ≤UARTbaudrate≤ PCLK 16 (2  databits  paritybits  stopbits) = ratemax (6) 10.5.14 Auto-baud 模式 当软件期望“AT”命令时,它采用期望的字符格式对 UART 进行配置,并置位 U0ACR 起始位。用户不必关心除数锁存器 U0DLM 和 U0DLM 内的初始值。由于字母“A”或“a” ASCII 编码(“A”= 0x41,“a”= 0x61)的关系,UART Rx 管脚所检测的起始位以及期望 字符的 LSB 是由两个下降沿来限定的。当 U0ACR 起始位被置位时,auto-baud 协议将执行 以下阶段: 第 1 步:U0ACR 起始位一置位,波特率测量计数器立即复位,同时 UART U0RSR 复 位。U0RSR 波特率切换为最高速率。 第 2 步:UART Rx 管脚上的下降沿触发起始位的开始。波特率测量计数器将开始对 UART_PCLK 周期进行计数。 第 3 步:在接收起始位的过程中,RSR 波特率输入端会产生 16 个脉冲,脉冲频率和 UART 输入时钟相同,这样,保证了起始位存放在 U0RSR 中。 第 4 步:在接收起始位的过程中(以及模式 0 下的字符 LSB),速率计数器将随着被预 分频的 UART 输入时钟(UART_PCLK)递增。 第 5 步:如果是模式 0,那么速率计数器将会在 UART Rx 管脚的下一个下降沿停止。 如果是模式 1,那么速率计数器将会在 UART Rx 管脚的下一个上升沿停止。 第 6 步:速率计数器的值被载入到 U0DLM/U0DLL 中,并且波特率将会切换到正常操 作模式。在设置完 U0DLM/U0DLL 后,如果 auto-baud 结束中断被使能,U0IIR ABEOInt 将会被置位。接着 U0RSR 继续接收“A/a”字符剩下的其它位。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1515 广州周立功单片机发展有限公司 UARTn RX 'A' (0x41) 或 'a' (0x61) 起始 位0 位1 位2 位3 位4 位5 位6 位7 校验 停止 起始位 'A' 或'a'的LSB 第 10 章 U0ACR 开始 速率计数器 16x 波特率 16个周期 a. 模式 0 (起始位和LSB均用于auto-baud功 ) 能) 16个周期 UARTn RX 'A' (0x41) 或 'a' (0x61) 起始 位0 位1 位2 位3 位3 位5 位6 位7 校验 停止 起始位 'A' 或'a'的LSB U0ACR 开始 速率计数器 16x 波特率 16个周期 b. 模式1(只有起始位是用于auto-baud功能) 图 10.3 自动波特率 a)模式 0 和 b)模式 1 的波形图 10.5.15 UART 小数分频器寄存器 UART 小数分频寄存器(U0FDR)控制产生波特率的时钟预分频器,并且用户可自由 对该寄存器进行读写操作。该预分频器使用 APB 时钟并根据指定的小数要求产生输出时钟。 要点:如果小数分频器有效(DIVADDVAL > 0)且 DLM = 0,则 DLL 寄存器的值必须大于或等于 3。 表 10.18 UART 小数分频寄存器(U0FDR –0x4000 8028)位描述 位 功能 值 描述 复位值 产生波特率的预分频除数值。如果该字段为 0,小 3:0 DIVADDVAL 0 0 数波特率发生器将不会影响 UART 的波特率 波特率预分频乘数值。不管是否使用小数波特率发 7:4 MULVAL 1 生器,为了让 UART 正常运作,该字段必须大于或 1 等于 1 保留。用户软件不应对其写入 1。从保留位读出的 31:8 - NA 0 值未定义 该寄存器控制产生波特率的时钟预分频器。寄存器的复位值会让 UART 的小数功能保 持在禁用状态,从而确保 UART 在软件和硬件方面能够与不具备该特性的 UART 完全兼容。 可如下计算 UART 波特率: UART波特率  PCLK 16 256 U0DLM  U0DLL 1 DivAddVal   MulVal  (7) LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1616 广州周立功单片机发展有限公司 第 10 章 其中 UART_PCLK 为外设时钟,U0DLM 和 U0DLL 为标准 UART 波特率分频器寄存器, 而 DIVADDVAL 和 MULVAL 为 UART 小数波特率发生器的特定参数。 MULVAL 和 DIVADDVAL 的值应符合以下条件: 1) 1 < MULVAL ≤ 15; 2) 0 ≤ DIVADDVAL ≤ 14; 3) DIVADDVALpCANAPI->init_can(&CanApiCanInitTable[0]); LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 14 章 14.4.3 CAN 中断处理程序 当用户应用程序有效时,中断处理程序会映射在用户 Flash 空间中。用户应用程序必须为 CAN 中断提供中断处理程序。为了能处理 CAN 事件和调用回调函数,应用程序必须直接从中断 处理程序服务中调用 CAN API 中断处理程序。CAN API 中断处理程序根据 CAN 总线上接收到 的数据和检测到的状态来采取相关的操作。 void isr (void) CAN 中断处理程序不可处理 CANopen 报文。 调用范例: (*rom)->pCAND->isr(); 14.4.4 CAN Rx 报文对象配置 CAN API 支持和使用具有 32 个报文对象的完整 CAN 模块。任意报文对象都可以用于 11 位 或 29 位报文的接收或发送。它还支持 RTR 位(远程发送)置位的 CAN 报文。对于报收对象, 报文标识符的屏蔽模式可以允许接收的报文范围,可高至接收单个报文对象里总线上的所有 CAN 报文。 发送报文对象在使用时被自动配置: //CAN_MSG_OBJ.mode_id 的控制位 #define CAN_MSGOBJ_STD 0x00000000UL #define CAN_MSGOBJ_EXT 0x20000000UL #define CAN_MSGOBJ_DAT 0x00000000UL #define CAN_MSGOBJ_RTR 0x40000000UL //CAN 2.0a 11 位 ID //CAN 2.0b 29 位 ID //数据帧 //rtr 帧 typedef struct _CAN_MSG_OBJ { uint32_t mode_id; uint32_t mask; uint8_t data[8]; uint8_t dlc; uint8_t msgobj; } CAN_MSG_OBJ; void config_rxmsgobj (CAN_MSG_OBJ * msg_obj) 调用范例: //配置报文对象 1 来接收所有 11 位报文 0x000-0x00F msg_obj.msgobj = 1; msg_obj.mask = 0x7F0; (*rom)->pCAND-> config_rxmsgobj(&msg_obj); 14.4.5 CAN 接收 CAN 接收函数允许读取 Rx 报文对象接收到的报文。指向报文对象结构的指针会被传递到接 收函数中。在调用之前,必须要在结构体中设置要被读取的报文对象的编号。 void config_rxmsgobj (CAN_MSG_OBJ * msg_obj) LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 14 章 调用范例: // 读出接收到的报文 msg_obj.msgobj = 5; (*rom)->pCAND->can_receive(&msg_obj); 14.4.6 CAN 发送 CAN 发送函数允许设置报文对象,并可在总线上触发 CAN 报文的传送。11 位标准和 29 位 扩展报文对象被看作为标准数据和远程发送(RTR)报文。 void config_txmsgobj (CAN_MSG_OBJ * msg_obj) 调用范例: msg_obj.msgobj = 3; msg_obj.mode_id = 0x123UL; msg_obj.mask = 0x0UL; msg_obj.dlc = 1; msg_obj.data[0] = 0x00; (*rom)->pCAND->can_transmit(&msg_obj); 14.4.7 CANopen 配置 CAN API 支持对象字典接口和 SDO 协议。为了激活它,必须要将指针指向带有 CANopen Node ID(1… 127)、用于接收和发送 SDO 的报文对象编号和二个指向报文字典配置表和它们大 小的指针的结构体来调用 CANopen 配置函数。一个表包含 4 个字节或少于 4 个字节的所有的只 读、常量入口。第二个表包含所有变量和可写以及 SDO 分段的入口。 typedef struct _CAN_ODCONSTENTRY { uint16_t index; uint8_t subindex; uint8_t len; uint32_t val; } CAN_ODCONSTENTRY; //CAN_ODENTRY.entrytype_len 的高位半字节值 #define OD_NONE 0x00 //不存在对象字典入口 define OD_EXP_RO 0x10 //加速的对象字典入口,只读 #define OD_EXP_WO 0x20 #define OD_EXP_RW 0x30 //加速的对象字典入口,只写 //加速的对象字典入口,读写 #define OD_SEG_RO 0x40 //分段的对象字典入口,只读 #define OD_SEG_WO 0x50 #define OD_SEG_RW 0x60 //分段的对象字典入口,只写 //分段的对象字典入口,读-写 typedef struct _CAN_ODENTRY { uint16_t index; uint8_t subindex; uint8_t entrytype_len; uint8_t *val; } CAN_ODENTRY; typedef struct _CAN_CANOPENCFG { uint8_t node_id; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 uint8_t msgobj_rx; uint8_t msgobj_tx; uint32_t od_const_num; CAN_ODCONSTENTRY *od_const_table; uint32_t od_num; CAN_ODENTRY *od_table; } CAN_CANOPENCFG; OD 表和 CANopen 配置结构体的范例: //固定的、只读对象字典(OD)入口的列表 //只有加速的 SDO,长度为 1/2/4 字节 const CAN_ODCONSTENTRY myConstOD [] = { //索引分索引长度值 { 0x1000, 0x00, 4, 0x54534554UL }, //“测试” { 0x1018, 0x00, 1, 0x00000003UL }, { 0x1018, 0x01, 4, 0x00000003UL }, { 0x2000, 0x00, 1, (uint32_t)'M' }, }; //变量 OD 入口的列表 //加速的 SDO,长度为 1/2/4 字节 //分段的 SDO 应用程序处理,长度和值指针无关紧要 const CAN_ODENTRY myOD [] = { //索引分索引访问类型|长度值指针 { 0x1001, 0x00, OD_EXP_RO | 1, (uint8_t *)&error_register }, { 0x1018, 0x02, OD_EXP_RO | 4, (uint8_t *)&device_id }, { 0x1018, 0x03, OD_EXP_RO | 4, (uint8_t *)&fw_ver }, { 0x2001, 0x00, OD_EXP_RW | 2, (uint8_t *)¶m }, { 0x2200, 0x00, OD_SEG_RW, (uint8_t *)NULL }, }; // CANopen 配置结构体 const CAN_CANOPENCFG myCANopen = { 20, // node_id 5, // msgobj_rx 6, // msgobj_tx sizeof(myConstOD)/sizeof(myConstOD[0]), // od_const_num (CAN_ODCONSTENTRY *)myConstOD, // od_const_table sizeof(myOD)/sizeof(myOD[0]), // od_num (CAN_ODENTRY *)myOD, // od_table }; 调用范例: //初始化 CANopen 处理程序 (*rom)->pCAND->config_canopen((CAN_CANOPENCFG *)&myCANopen); 第 14 章 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 14 章 14.4.8 CANopen 处理程序 CANopen 处理程序处理 CANopen SDO 报文来访问对象字典,并在初始化时调用 CANopen 回调函数。只要应用程序有需要,就必须要经常周期性地调用该函数。 在 CANopen 应用程序中,SDO 处理通常具有最低的优先级,并在前台完成,而不是在中断 进程中完成。 调用范例: //调用 CANopen 处理程序 (*rom)->pCAND->canopen_handler(); 14.4.9 CAN/CANopen 回调函数 CAN API 支持各种事件的回调函数。回调函数通过 API 函数来发布。 typedef struct _CAN_CALLBACKS { void (*CAN_rx)(uint8_t msg_obj); void (*CAN_tx)(uint8_t msg_obj); void (*CAN_error)(uint32_t error_info); uint32_t (*CANOPEN_sdo_read)(uint16_t index, uint8_t subindex); uint32_t (*CANOPEN_sdo_write)(uint16_t index, uint8_t subindex, uint8_t *dat_ptr); uint32_t (*CANOPEN_sdo_seg_read)(uint16_t index, uint8_t subindex, uint8_t openclose, uint8_t *length, uint8_t *data, uint8_t *last); uint32_t (*CANOPEN_sdo_seg_write)(uint16_t index, uint8_t subindex, uint8_t openclose, uint8_t length, uint8_t *data, uint8_t *fast_resp); uint8_t (*CANOPEN_sdo_req)(uint8_t length_req, uint8_t *req_ptr, uint8_t *length_resp, uint8_t *resp_ptr); } CAN_CALLBACKS; 回调表定义的范例: //回调函数指针的列表 const CAN_CALLBACKS callbacks = { CAN_rx, CAN_tx, CAN_error, CANOPEN_sdo_exp_read, CANOPEN_sdo_exp_write, CANOPEN_sdo_seg_read, CANOPEN_sdo_seg_write, CANOPEN_sdo_req, }; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 14 章 调用范例: //发布回调 (*rom)->pCAND->config_calb((CAN_CALLBACKS *)&callbacks); 14.4.10 CAN 报文接收的回调 CAN 中断处理程序会按照中断级别来调用 CAN 报文接收的回调函数。 调用范例: //CAN 接收处理程序 void CAN_rx(uint8_t msgobj_num) { //读出接收的报文 msg_obj.msgobj = msgobj_num; (*rom)->pCAND->can_receive(&msg_obj); return; } 注:如果用户 CANopen 处理程序是为用于 SDO 接收的报文对象激活时,不必调用回调函数。 14.4.11 CAN 报文发送回调 CAN 中断处理程序会按照中断级别来调用 CAN 报文发送回调函数。在产生 SDO 回应之前 就要调用回调函数,以便允许修改或更新数据。 调用范例: //CAN 发送处理程序 void CAN_tx(uint8_t msgobj_num) { //复位应用程序使用的标志,等待发送完成 if (wait_for_tx_finished == msgobj_num) wait_for_tx_finished = 0; return; } 14.4.12 CAN 错误回调 CAN 中断处理程序会按照中断级别来调用 CAN 错误回调函数。 //错误状态位 #define CAN_ERROR_NONE 0x00000000UL #define CAN_ERROR_PASS 0x00000001UL #define CAN_ERROR_WARN 0x00000002UL #define CAN_ERROR_BOFF 0x00000004UL #define CAN_ERROR_STUF 0x00000008UL #define CAN_ERROR_FORM 0x00000010UL #define CAN_ERROR_ACK 0x00000020UL #define CAN_ERROR_BIT1 0x00000040UL #define CAN_ERROR_BIT0 0x00000080UL #define CAN_ERROR_CRC 0x00000100UL LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 14 章 调用范例: //CAN 错误处理程序 void CAN_error(uint32_t error_info) //如果用户进入总线关闭状态,可以告诉应用程序重新初始化 CAN 控制器 if (error_info & CAN_ERROR_BOFF) reset_can = TRUE; return; 14.4.13 CANopen SDO 加速的读回调 CANopen SDO 加速的读回调函数由 CANopen 处理程序调用。在产生 SDO 回应之前就要调 用回调函数,以便允许修改或更新数据。 调用范例: //用于加速读访问的 CANopen 回调 uint32_t CANOPEN_sdo_exp_read(uint16_t index, uint8_t subindex) { //每次读取[2001h,0],都会令 param 增加 1 if ((index == 0x2001) && (subindex==0)) param++; return 0; } 14.4.14 CANopen SDO 加速的写回调 CANopen SDO 加速的写回调函数由 CANopen 处理程序调用。在写完新数据之前就要在新 数据上传递回调函数,并调用回调函数,以允许反对或决定数据。 调用范例: //用于加速写访问的 CANopen 回调 uint32_t CANOPEN_sdo_exp_write(uint16_t index, uint8_t subindex, uint8_t *dat_ptr) { //将 0xAA55 写入到入口[2001h,0]以把写配置表的操作解锁 if ((index == 0x2001) && (subindex == 0)) if (*(uint16_t *)dat_ptr == 0xAA55) { write_config_ena = TRUE; return(TRUE); } else return(FALSE); //对其它值不予处理 } LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 14 章 14.4.15 CANopen SDO 分段的读回调 CANopen SDO 分段的读回调函数由 CANopen 处理程序调用。回调函数允许下列操作:  通知打开通读通道;  可向读取的主机提供高达七个字节的数据段;  当读取完所有数据时关闭通道;  可随时中止传送。 //用于 CANOPEN_sdo_seg_read/write() callback 'openclose'参数的值 #define CAN_SDOSEG_SEGMENT 0 //分段读/写 #define CAN_SDOSEG_OPEN 1 //通道打开 #define CAN_SDOSEG_CLOSE 2 //通道关闭 调用范例(读缓冲区): uint8_t read_buffer[0x123]; //用于分段读访问的 CANopen 回调 uint32_t CANOPEN_sdo_seg_read(uint16_t index, uint8_t subindex, uint8_t openclose,uint8_t *length, uint8_t *data, uint8_t *last) { static uint16_t read_ofs; uint16_t i; if ((index == 0x2200) && (subindex==0)) { if (openclose == CAN_SDOSEG_OPEN) { // Initialize the read buffer with "something" for (i=0; i= sizeof(write_buffer))) { return SDO_ABORT_TRANSFER; } } else if (openclose == CAN_SDOSEG_CLOSE) { //已成功完成写入操作:标记缓冲区有效等等 } return 0; } else { return SDO_ABORT_NOT_EXISTS; } } //太多数据要写 //不能被写入的数据 14.4.17 CANopen fall-back SDO 处理程序回调 CANopen fall-back SDO 处理程序回调函数由 CANopen 处理程序调用。只要存在着一个不能 被处理的 SDO 请求或 SDO 请求被 SDO 中止响应结束,都要调用该函数。调用时要使用请求的 完整数据缓冲区,并允许产生任何类型的 SDO 响应。这可用于执行定制的 SDO 处理程序,例如, 执行 SDO 模块传输方式。 //返回用于 CANOPEN_sdo_req() callback 的值 #define CAN_SDOREQ_NOTHANDLED 0 #define CAN_SDOREQ_HANDLED_SEND 1 #define CAN_SDOREQ_HANDLED_NOSEND 2 //正常处理,无影响 //回调处理,自动发送 //回调处理,不发送 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 目录 第 15 章 16 位计数器/定时器(CT16B0/1) ............................................................2 15.1 本章导读...................................................................................................................2 15.2 特性...........................................................................................................................2 15.3 应用...........................................................................................................................2 15.4 描述...........................................................................................................................2 15.5 管脚描述...................................................................................................................2 15.6 时钟和功率控制.......................................................................................................3 15.7 寄存器描述...............................................................................................................3 15.7.1 中断寄存器(TMR16B0IR 和 TMR16B1IR) ..............................................5 15.7.2 定时器控制寄存器(TMR16B0TCR 和 TMR16B1TCR) ...........................5 15.7.3 定时器计数器(TMR16B0TC 和 TMR16B1TC) .......................................6 15.7.4 预分频寄存器(TMR16B0PR 和 TMR16B1PR).........................................6 15.7.5 预分频计数器寄存器(TMR16B0PC 和 TMR16B1PC).............................6 15.7.6 匹配控制寄存器(TMR16B0MCR 和 TMR16B1MCR).............................6 15.7.7 匹配寄存器(TMR16B0MR0/1/2/3 和 TMR16B1MR0/1/2/3) ...................7 15.7.8 捕获控制寄存器(TMR16B0CCR 和 TMR16B1CCR) ..............................7 15.7.9 捕获寄存器(CT16B0CR0 和 CT16B1CR0)...............................................7 15.7.10 外部匹配寄存器(TMR16B0EMR 和 TMR16B1EMR) .....................7 15.7.11 计数控制寄存器(TMR16B0CTCR 和 TMR16B1CTCR)..................9 15.7.12 控制 PWM 寄存器(TMR16B0PWMC 和 TMR16B1PWMC)...........9 15.7.13 单边沿控制的 PWM 输出规则 .............................................................10 15.8 定时器操作示例..................................................................................................... 11 15.9 结构......................................................................................................................... 11 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 15 章 第15章 16 位计数器/定时器(CT16B0/1) 15.1 本章导读 所有 LPC111x 系列 ARM 器件的 16 位定时器块都相同。 15.2 特性  两个带有可编程 16 位预分频器的 16 位计数器/定时器;  计数器/定时器操作;  一个 16 位捕获通道,可在输入信号跳变时捕捉定时器的瞬时值。也可选择捕获事 件产生中断;  4 个 16 位匹配寄存器允许执行以下操作: - 匹配时继续工作,匹配时可选择产生中断 - 匹配时停止定时器运行,可选择产生中断 - 匹配时复位定时器,可选择产生中断;  有多达 3 个(CT16B0)或 2 个(CT16B1)与匹配寄存器相对应的外部输出,这些 输出具有以下功能: - 匹配时输出低电平 - 匹配时输出高电平 - 匹配时翻转电平 - 匹配时不执行任何操作;  对于各定时器,最多 4 个匹配寄存器可配置为 PWM,允许使用最多 3 个匹配输出 作为单独边沿控制的 PWM 输出。 15.3 应用  用于计算内部事件的时间间隔计时器;  通过捕获输入的脉冲宽度解调器;  自由运行的定时器;  通过匹配输出的脉冲宽度调制器。 15.4 描述 计数器/定时器主要用来计算外设时钟(PCLK)或外部供电时钟的周期,并且可根据 4 个匹配寄存器的值在指定时间处产生中断或执行其它操作。每个计数器/定时器都包含 1 个 捕获输入,用来在输入信号跳变时捕捉定时器的瞬时值,同时也可以选择产生中断。 在 PWM 模式下,CT16B0 上的三个匹配寄存器和 CT16B1 上的两个匹配寄存器可向匹 配输出管脚提供单边沿控制的 PWM 输出。建议使用不用于输出的匹配寄存器来控制 PWM 周期长度。 注:16 位计数器/定时器 0(CT16B0)和 16 位计数器/定时器 1(CT16B1)除外设基址不同外,其它 功能相似。 15.5 管脚描述 表 15.1 对各计数器/定时器的相关管脚进行了总结。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 15 章 表 15.1 计数器/定时器管脚描述 管脚 CT16B0_CAP0 CT16B1_CAP0 CT16B0_MAT[2:0] CT16B1_MAT[1:0] 类型 输入 输出 描述 捕获信号: 当捕获管脚上出现跳变时,可以将计数器/定时器中的值载入捕获寄存器 中,也可以选择产生一个中断 计数器/定时器块可选择捕获信号作为时钟源来代替 PCLK。详情请参见 “计数控制寄存器”小节 CT16B0/1 的外部匹配输出: 当 CT16B0/1(MR3:0)匹配寄存器的值与定时器计数器(TC)相等时, 相应的输出可以翻转电平、变低、变高或不执行任何操作。外部匹配寄 存器(EMR)和 PWM 控制寄存器(PWMCON)控制该输出的功能 15.6 时钟和功率控制 输入到 16 位定时器的外设时钟(PCLK)由系统时钟提供,为了节能,可通过 AHBCLKCTRL 寄存器中的位 7 和位 8 将这些时钟禁能。 15.7 寄存器描述 16 位计数器/定时器 0 包含的寄存器如表 15.2 所示,16 位计数器/定时器 1 包含的寄存 器如表 15.3 所示。详细描述如下。 表 15.2 16 位计数器/定时器 0 CT16B0 的寄存器映射(基址 0x4000 C000) 名称 访问 TMR16B0IR R/W TMR16B0TCR R/W TMR16B0TC R/W TMR16B0PR R/W TMR16B0PC R/W TMR16B0MCR R/W TMR16B0MR0 R/W 地址偏移量 0x000 0x004 0x008 0x00C 0x010 0x014 0x018 描述 复位值[1] 中断寄存器(IR)。可向 IR 写入相应值来清除 中断。可以通过读 IR 来识别 5 个中断源中哪个 0 中断源正在被挂起 定时器控制寄存器(TCR)。TCR 用于控制定 时器计数器功能。定时器计数器可通过 TCR 来 0 禁能或复位 定时器计数器(TC)。16 位 TC 每隔 PR+1 0 个 PCLK 周期递增一次。通过 TCR 控制 TC 预分频寄存器(PR)。当预分频计数器与该值 0 相等时,下个时钟 TC 加 1,PC 清零 预分频计数器(PC)。16 位 PC 是一个计数器, 它会增加到与 PR 中存放的值相等。当达到 PR 0 的值时,PC 清零。可通过总线接口来观察和控 制 PC 匹配控制寄存器(MCR)。MCR 用于控制在 匹配出现时是否产生中断及出现匹配时 TC 是 0 否复位 匹配寄存器 0(MR0)。MR0 可通过 MCR 使 能,当 MR0 与 TC 匹配时复位 TC,停止 TC 0 和 PC,和/或产生中断 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 15 章 名称 访问 地址偏移量 描述 TMR16B0MR1 R/W 0x01C 匹配寄存器 1(MR1)。见 MR0 描述 TMR16B0MR2 R/W 0x020 匹配寄存器 2(MR2)。见 MR0 描述 TMR16B0MR3 R/W 0x024 匹配寄存器 3(MR3)。见 MR0 描述 TMR16B0CCR R/W 0x028 捕获控制寄存器(CCR)。CCR 控制捕获时捕 获输入边沿的方式,以及在捕获时是否产生中 断 TMR16B0CR0 RO 0x02C 捕获寄存器 0(CR0)。当 CT16B0_CAP0 输入 上产生捕获事件时,CR0 载入 TC 值 TMR16B0EMR R/W 0x03C 外部匹配寄存器(EMR)。EMR 控制匹配功 能及外部匹配管脚 CT16B0_MAT[2:0] - - 0x040-0x06C 保留 计数控制寄存器(CTCR)。CTCR 选择在定时 TMR16B0CTCR R/W 0x070 器模式还是在计数器模式下工作,在计数器模 式下选择计数的信号和边沿 PWM 控制寄存器(PWMCON)。PWMCON TMR16B0PWMC R/W 0x074 使 能 PWM 模 式 , 用 于 外 部 匹 配 管 脚 CT16B0_MAT[2:0] [1] 复位值只反映了使用位的值。不包括保留位的内容。 续上表 复位值[1] 0 0 0 0 0 0 - 0 0 表 15.3 16 位计数器/定时器 1 CT16B1 的寄存器映射(基址 0x4001 0000) 名称 访问 TMR16B1IR R/W TMR16B1TCR R/W TMR16B1TC R/W TMR16B1PR R/W TMR16B1PC R/W TMR16B1MCR R/W TMR16B1MR0 R/W TMR16B1MR1 R/W TMR16B1MR2 R/W 地址 0x000 0x004 0x008 0x00C 0x010 0x014 0x018 0x01C 0x020 描述 复位值[1] 中断寄存器(IR)。可向 IR 写入相应值来清除中断。 可以通过读 IR 来识别 5 个中断源中哪个中断源正在 0 被挂起 定时器控制寄存器(TCR)。TCR 用于控制定时器 计数器功能。定时器计数器可通过 TCR 来禁能或复 0 位 定时器计数器(TC)。16 位 TC 每隔 PR+1 个 PCLK 0 周期递增一次。通过 TCR 控制 TC 预分频寄存器(PR)。当预分频计数器与该值相等 0 时,下个时钟 TC 加 1,PC 清零 预分频计数器(PC)。16 位 PC 是一个计数器,它 会增加到与 PR 中存放的值相等。当达到 PR 的值时, 0 PC 清零。可通过总线接口来观察和控制 PC 匹配控制寄存器(MCR)。MCR 用于控制在匹配出 0 现时是否产生中断及出现匹配时 TC 是否复位 匹配寄存器 0(MR0)。MR0 可通过 MCR 使能, 当 MR0 和 TC 匹配时复位 TC,停止 TC 和 PC,和/ 0 或产生中断 匹配寄存器 1(MR1)。见 MR0 描述 0 匹配寄存器 2(MR2)。见 MR0 描述 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 15 章 名称 访问 地址 描述 TMR16B1MR3 R/W 0x024 匹配寄存器 3(MR3)。见 MR0 描述 TMR16B1CCR R/W 0x028 捕获控制寄存器(CCR)。CCR 控制捕获时 捕获输入边沿的方式,以及在捕获时是否产生 中断 TMR16B1CR0 RO 0x02C 捕获寄存器 0(CR0)。当 CT16B0/1_CAP0 输入上产生捕获事件时,CR0 载入 TC 值 TMR16B1EMR R/W 0x03C 外部匹配寄存器(EMR)。EMR 控制匹配功 能及外部匹配管脚 CT16B1_MAT[1:0] - - 0x040-0x06C 保留 TMR16B1CTCR R/W 0x070 计数控制寄存器(CTCR)。CTCR 选择在定 时器模式还是在计数器模式下工作,在计数器 模式下选择计数的信号和边沿 TMR16B1PWMC R/W 0x074 PWM 控制寄存器(PWMCON)。PWMCON 使 能 PWM 模 式 , 用 于 外 部 匹 配 管 脚 CT16B1_MAT[1:0] [1] 复位值只反映使用位中保存的数据。不包括保留位的内容。 续上表 复位值[1] 0 0 0 0 0 0 0 15.7.1 中断寄存器(TMR16B0IR 和 TMR16B1IR) 中断寄存器包含 4 个用于匹配中断的位及 1 个用于捕获中断的位。如果有中断产生,IR 中的相应位为高电平。否则,该位为低电平。向对应的 IR 位写 1 会使中断复位。写 0 无效。 表 15.4 中断寄存器位描述 位 符号 描述 复位值 0 MR0 中断 匹配通道 0 的中断标志 0 1 MR1 中断 匹配通道 1 的中断标志 0 2 MR2 中断 匹配通道 2 的中断标志 0 3 MR3 中断 匹配通道 3 的中断标志 0 4 CR0 中断 捕获通道 0 事件的中断标志 0 31:5 - 保留 - 15.7.2 定时器控制寄存器(TMR16B0TCR 和 TMR16B1TCR) 定时器控制寄存器(TCR)用于控制计数器/定时器的操作。 表 15.5 定时器控制寄存器位描述 位 符号 描述 为 1 时,定时器/计数器和分频计数器使能计数。为 0 时,计数器 0 计数器使能 禁能 为 1 时,定时器计数器和预分频计数器在 PCLK 的下一个上升沿 1 计数器复位 同步复位。计数器在 TCR[1]恢复为 0 之前保持复位状态 31:2 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 复位值 0 0 NA LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 15 章 15.7.3 定时器计数器(TMR16B0TC 和 TMR16B1TC) 当预分频器计数器达到计数上限时,16 位定时器计数器加 1。如果 TC 在到达计数器上 限之前没有复位,它将一直计数到 0xFFFF FFFF 然后翻转到 0xE000 0000。该事件不会产生 中断,如果需要,可使用匹配寄存器检测溢出。 15.7.4 预分频寄存器(TMR16B0PR 和 TMR16B1PR) 16 位预分频寄存器指定了预分频计数器的最大计数值。 15.7.5 预分频计数器寄存器(TMR16B0PC 和 TMR16B1PC) 16 位预分频计数器用某个常量来控制 PCLK 的分频,再使其输入到定时器计数器。这 样就可以控制定时器精度和定时器溢出前所能达到的最大值之间的关系。预分频计数器在每 个 PCLK 周期加 1。当它达到预分频寄存器中存储的值时,定时器计数器加 1,预分频计数 器将在下一个 PCLK 复位。这就使当 PR=0 时,TC 每个 PCLK 加 1,PR=1 时,TC 每 2 个 PCLK 加 1,依次类推。 15.7.6 匹配控制寄存器(TMR16B0MCR 和 TMR16B1MCR) 匹配控制寄存器用于控制当其中一个匹配寄存器的值与定时器计数器的值匹配时应执 行的操作。匹配控制寄存器各位的功能如表 15.6 所示。 表 15.6 匹配控制寄存器位描述 位 符号 值 描述 复位值 1 MR0 上的中断:当 MR0 与 TC 值匹配时产生中断 0 MR0I 0 0 中断禁能 1 MR0 上的复位:MR0 与 TC 值匹配将使 TC 复位 1 MR0R 0 0 该特性禁能 1 MR0 上的停止:MR0 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 2 MR0S 0 0 该特性禁能 1 MR1 上的中断:MR1 与 TC 中的值匹配时产生中断 3 MR1I 0 0 该中断禁能 1 MR1 上的复位:MR1 与 TC 匹配时使 TC 复位 4 MR1R 0 0 该特性禁能 1 MR1 上的停止:MR1 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 5 MR1S 0 0 该特性禁能 1 MR2 上的中断:MR2 与 TC 中的值匹配时产生中断 6 MR2I 0 0 该中断禁能 1 MR2 上的复位:MR2 与 TC 匹配时将使 TC 复位 7 MR2R 0 0 该特性禁能 1 MR2 上的停止:MR2 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 8 MR2S 0 0 该特性禁能 1 MR3 上的中断:MR3 与 TC 中的值匹配时产生中断 9 MR3I 0 0 该中断禁能 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 15 章 位 符号 值 描述 1 MR3 上的复位:MR3 与 TC 匹配时将使 TC 复位 10 MR3R 0 该特性禁能 1 MR3 上的停止:MR3 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 11 MR3S 0 该特性禁能 31:12 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 续上表 复位值 0 0 NA 15.7.7 匹配寄存器(TMR16B0MR0/1/2/3 和 TMR16B1MR0/1/2/3) 匹配寄存器值会不断地与定时器计数器值进行比较。当两个值相等时,自动触发相应操 作。这些操作包括产生中断,复位定时器/计数器或停止定时器。所有操作均由 MCR 寄存器 中的设置控制。 15.7.8 捕获控制寄存器(TMR16B0CCR 和 TMR16B1CCR) 捕获控制寄存器用于控制当捕获事件发生时,是否将定时器计数器中的值装入 4 个捕获 寄存器中的一个,以及捕获事件是否产生中断。同时将上升沿位和下降沿位置位是有效配置, 会使两个边沿都产生捕获事件。在下面描述中,“n”表示定时器编号,0 或 1。 表 15.7 捕获控制寄存器位描述 位 符号 值 描述 复位值 CT16Bn_CAP0 上升沿捕获:CT16Bn_CAP0 上“0”到“1” 1 0 CAP0RE 的跳变将使 TC 的内容装入 CR0 0 0 该特性禁能 CT16Bn_CAP0 的下降沿捕获:CT16Bn_CAP0 上“1”到“0” 1 1 CAP0FE 的跳变将使 TC 的内容装入 CR0 0 0 该特性禁能 CT16Bn_CAP0 事件中断:CT16Bn_CAP0 事件所导致的 CR0 1 2 CAP0I 装载将产生一个中断 0 0 该特性禁能 31:3 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA 15.7.9 捕获寄存器(CT16B0CR0 和 CT16B1CR0) 各捕获寄存器与器件管脚相关联,当管脚发生特定的事件时,可将定时器计数器的值装 入该捕获寄存器。捕获控制寄存器中的设置决定是否使能捕获功能,及在相关管脚的上升沿、 下降沿或上升沿和下降沿时是否产生捕获事件。 15.7.10 外部匹配寄存器(TMR16B0EMR 和 TMR16B1EMR) 外部匹配寄存器控制外部匹配管脚 CAP16B0_MAT[2:0]和 CT16B1_MAT[1:0]和外部匹 配通道,并提供它们的状态。 如果 PWMCON 寄存器(见“控制 PWM 寄存器(TMR16B0PWMC 和 TMR16B1PWMC)” 小节)中的匹配输出被配置为 PWM 输出,则外部匹配寄存器的功能由 PWM 规则决定(见 本章“单边沿控制的 PWM 输出规则”小节)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 15 章 表 15.8 外部匹配寄存器位描述 位 0 1 2 3 5:4 7:6 9:8 11:10 31:12 符号 EM0 EM1 EM2 EM3 EMC0 EMC1 EMC2 EMC3 - 描述 复位值 外部匹配 0。该位反映输出 CT16B0_MAT0/CT16B1_MAT0 的状态, 不管该输出是否连接到此管脚。当 TC 和 MR0 匹配时,定时器的输 出可以翻转电平,变为低电平,变为高电平或不执行任何动作。位 0 EMR[5:4]控制该输出的功能。如果选用了 IOCOM 寄存器的匹配功 能 ( 0= 低 电 平 , 1= 高 电 平 ) , 该 位 就 会 被 驱 动 到 CT16B0_MAT0/CT16B1_MAT0 管脚上 外部匹配 1。该位反映输出 CT16B0_MAT1/CT16B1_MAT1 的状态, 不管该输出是否连接到此管脚。当 TC 和 MR1 匹配时,定时器的输 出可以翻转电平,变为低电平,变为高电平或不执行任何动作。位 0 EMR[7:6]控制该输出的功能。如果选用了 IOCOM 寄存器的匹配功 能 ( 0= 低 电 平 , 1= 高 电 平 ) , 该 位 就 会 被 驱 动 到 CT16B0_MAT1/CT16B1_MAT1 管脚上 外部匹配 2。该位反映输出 CT16B0_MAT2 的状态,不管该输出是 否连接到此管脚。当 TC 和 MR2 匹配时,定时器的输出可以翻转电 平,变为低电平,变为高电平或不执行任何动作。位 EMR[9:8]控制 0 该输出的功能。需要注意的是,对于计数器/定时器 0,该匹配通道 不作为输出使用。如果选用了 IOCOM 寄存器的匹配功能(0=低电 平,1=高电平),该位就会被驱动到 CT16B1_MAT2 管脚上 外部匹配 3。该位反映输出匹配通道 3 的状态。当 TC 和 MR3 匹配 时,定时器的输出可以翻转电平,变为低电平,变为高电平或不执 0 行任何动作。位 EMR[11:10]控制该输出的功能。对于任何一个 16 位定时器,输出管脚不与该通道连接 外部匹配控制 0。决定外部匹配 0 的功能。这些位的编码如表 15.9 00 所示 外部匹配控制 1。决定外部匹配 1 的功能。这些位的编码如表 15.9 00 所示 外部匹配控制 2。决定外部匹配 2 的功能。这些位的编码如表 15.9 00 所示 外部匹配控制 3。决定外部匹配 3 的功能。这些位的编码如表 15.9 00 所示 保留,用户软件向保留位写 1。从保留位读出的值未定义 NA 表 15.9 外部匹配控制 EMR[11:10]、EMR[9:8] EMR[7:6]或 EMR[5:4] 00 01 10 11 功能 不执行任何操作 将对应的外部匹配位/输出设置为 0(如果连接到芯片管脚,则 CT16Bn_MATm 脚输出低电平) 将对应的外部匹配位/输出设置为 1(如果连接到芯片管脚,则 CT16Bn_MATm 管脚输出高电平) 使对应的外部匹配位/输出翻转 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 15 章 15.7.11 计数控制寄存器(TMR16B0CTCR 和 TMR16B1CTCR) 计数控制寄存器(CTCR)用于在定时器模式和计数器模式之间进行选择,且在处于计 数器模式时选择进行计数的管脚和边沿。 当选用计数器模式为工作模式时,在 PCLK 时钟的每个上升沿对 CAP 输入(由 CTCR 位 3:2 选择)进行采样。在对这个 CAP 输入的连续两次采样值进行比较之后,可以识别出 下面其中一种事件:上升沿、下降沿、上升/下降沿或所选 CAP 输入的电平不变。如果识别 出的事件与 CTCR 寄存器中位 1:0 选择的一个事件相对应,定时器计数器寄存器的值将增加 1。 要有效地处理计数器的外部源时钟会有一些限制,因为需使用 PCLK 时钟的 2 个连续的 上升沿才能确定 CAP 选择的输入上的一个边沿,CAP 输入的频率不能超过 PCLK 时钟的一 半。因此,在这种情况下,相同 CAP 输入上的高/低电平持续时间不应少于 1/(2×PCLK)。 表 15.10 计数控制寄存器位描述 位 符号 1:0 计数器/定时器模式 3:2 计数输入选择 31:4 - 值 描述 复位值 该字段选择定时器的预分频计数器(PC)在哪个 PCLK 边沿递增,或清零 PC 及使定时器计数器 (TC)递增 00 定时器模式:每个 PCLK 上升沿 计数器模式:TC 在位 3:2 选择的 CAP 输入的上升 01 00 沿时递增 计数器模式:TC 在位 3:2 选择的 CAP 输入的下降 10 沿时递增 计数器模式:TC 在位 3:2 选择的 CAP 输入的两个 11 边沿递增 在计数器模式下(当该寄存器中位 1:0 不为 00 时), 这两位选择哪个 CAP 管脚被采样用于计时: 00 CT16Bn_CAP0 01 保留 00 保留 10 注:如果在 TnCTCR 中选择计数器模式,则捕获 控制寄存器(TnCCR)中的位 2:0 必须编程为 000 11 保留 保留,用户软件不应向保留位写 1。从保留位读出 - NA 的值未定义 15.7.12 控制 PWM 寄存器(TMR16B0PWMC 和 TMR16B1PWMC) PWM 控制寄存器用于将匹配输出配置为 PWM 输出。每个匹配输出均可分别设置,以 决定匹配输出是作为 PWM 输出还是作为功能受外部匹配寄存器(EMR)控制的匹配输出。 对于定时器 0,CT16B0_MAT[2:0]输出可选择 3 个单边沿控制的 PWM 输出。而对于定 时器 1,CT16B1_MAT[1:0]输出可选择 2 个单边沿控制的 PWM 输出。一个附加的匹配寄存 器决定 PWM 的周期长度。当任何其它匹配寄存器出现匹配时,PWM 输出置为高电平。用 于设置 PWM 周期长度的匹配寄存器负责将定时器复位。当定时器复位到 0 时,所有当前配 置为 PWM 输出的高电平匹配输出清零。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 15 章 表 15.11 PWM 控制寄存器位描述 位 符号 描述 复位值 为 1 时,CT16Bn_MAT0 的 PWM 模式使能 0 PWM 使能 0 为 0 时,CT16Bn_MAT0 受 EM0 控制 为 1 时,CT16Bn_MAT1 的 PWM 模式使能 1 PWM 使能 0 为 0 时,CT16Bn_MAT1 受 EM1 控制 为 1 时,匹配通道 2 或管脚 CT16B0_MAT2 的 PWM 模式使能 2 PWM 使能 0 为 0 时,CT16B0_MAT2 受 EM2 控制 为 1 时,匹配通道 3 的 PWM 模式使能 为 0 时,匹配通道 3 受 EM3 控制 3 PWM 使能 0 注:建议使用匹配通道 3 设置 PWM 周期,因为匹配不是管脚输出 通道 4:32 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA 15.7.13 单边沿控制的 PWM 输出规则 (1)所有单边沿控制的 PWM 输出在 PWM 周期开始时都变为低电平(定时器置为 0), 除非它们的匹配值等于 0。 (2)每个 PWM 输出在达到其匹配值时都将变为高电平。如果没有发生匹配(即匹配 值大于 PWM 周期长度),则 PWM 输出将继续保持低电平。 (3)如果将大于 PWM 周期长度的匹配值写入到匹配寄存器,且 PWM 信号已经为高 电平,则在下一个 PWM 周期开始时 PWM 信号将被清零。 (4)如果匹配寄存器中包含与定时器复位值(PWM 周期长度)相同的值,则在定时 器达到匹配值后的下一个时钟节拍时 PWM 输出将复位到低电平。因此,PWM 输 出总是包含一个时钟节拍宽度的正脉冲,周期由 PWM 周期长度决定(即定时器 重载入值)。 (5)如果匹配寄存器置 0,则 PWM 输出将在定时器第一次返回 0 时变为高电平,并 继续保持高电平。 注:当选择匹配输出作为 PWM 输出使用时,除匹配寄存器设置 PWM 周期长度外,匹配控制寄存器 MCR 中的定时器复位(MRnR)和定时器停止(MRnS)位必须置为 0。对于该寄存器,当定时器值与相应 的匹配寄存器值匹配时,将 MRnR 位置 1 以使能定时器复位。 PWM2/MAT2 PWM1/MAT1 PWM0/MAT0 MR2 = 100 MR1 = 41 MR0 = 65 0 41 65 100 (计数器复位) 图 15.1 采样 PWM 波形,其中 PWM 周期长度为 100(MR3 选择), MAT3:0 被 PWCON 寄存器使能为 PWM 输出 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第 15 章 15.8 定时器操作示例 如图 15.2 所示,定时器配置为在匹配时复位计数并产生中断。预分频值为 2,匹配寄存 器值为 6。在发生匹配的定时器周期结束时,定时器计数复位。这样就使匹配值具有完整长 度的周期。在定时器到达匹配值后的下一个时钟产生指示匹配发生的中断。 如图 15.3 所示,定时器配置为在匹配时停止计数并产生中断。预分频器再次置为 2,匹 配寄存器置为 6。在定时器达到匹配值的下一个时钟,TCR 中的定时器使能位清零,中断指 示匹配发生。 PCLK 预分频 计数器 2 0 1 2 0 1 2 0 1 2 0 1 定时器 计数器 4 5 6 0 1 定时器计 数器复位 中断 图 15.2 定时器周期设置为 PR=2,MRx=6,匹配时使能中断和复位 PCLK 预分频计数器 2 0 12 0 定时计数器 4 5 6 TCR[0] 1 0 计数器使能 中断 图 15.3 定时器周期设置为 PR=2,MRx=6,匹配时使能中断和停止 15.9 结构 计数器/定时器 0 和计数器/定时器 1 的结构图如图 15.4 所示。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 匹配寄存器0 匹配寄存器1 匹配寄存器2 匹配寄存器3 匹配控制寄存器 外部匹配寄存器 中断寄存器 控制 MATn[2:0} 中断 CAP0 匹配时停止 匹配时复位 LOAD[3:0] 捕获控制寄存器 捕获寄存器0 第 15 章 = = = = CSN 定时器寄存器 CE 复位 定时器控制寄存器 使能 TCI 预分频计数器 最大值 预分频寄存器 PCLK 图 15.4 16 位计数器/定时器结构图 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1212 广州周立功单片机发展有限公司 目录 第 16 章 32 位计数器/定时器(CT32B0/1) ............................................................2 16.1 本章导读...................................................................................................................2 16.2 特性...........................................................................................................................2 16.3 应用...........................................................................................................................2 16.4 描述...........................................................................................................................2 16.5 管脚描述...................................................................................................................3 16.6 时钟和功率控制.......................................................................................................3 16.7 寄存器描述...............................................................................................................3 16.7.1 中断寄存器(TMR32B0IR 和 TMR32B1IR) ..............................................5 16.7.2 定时器控制寄存器(TMR32B0TCR 和 TMR32B1TCR) ...........................5 16.7.3 定时器计数器(TMR32B0TC 和 TMR32B1TC) ........................................6 16.7.4 预分频寄存器(TMR32B0PR 和 TMR32B1PR).........................................6 16.7.5 预分频计数器寄存器(TMR32B0PC 和 TMR32B1PC).............................6 16.7.6 匹配控制寄存器(TMR32B0MCR 和 TMR32B1MCR).............................6 16.7.7 匹配寄存器(TMR32B0MR0/1/2/3 和 TMR32B1MR0/1/2/3) ...................7 16.7.8 捕获控制寄存器(TMR32B0CCR 和 TMR32B1CCR) ..............................7 16.7.9 捕获寄存器(TMR32B0CR0 和 TMR32B1CR0)........................................7 16.7.10 外部匹配寄存器(TMR32B0EMR 和 TMR32B1EMR) .....................7 16.7.11 计数控制寄存器(TMR32B0CTCR 和 TMR32B1TCR) ....................8 16.7.12 控制 PWM 寄存器(TMR32B0PWMC 和 TMR32B1PWMC)...........9 16.7.13 单边沿控制的 PWM 输出规则 .............................................................10 16.8 定时器操作示例.....................................................................................................10 16.9 结构......................................................................................................................... 11 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 16 章 第16章 32 位计数器/定时器(CT32B0/1) 16.1 本章导读 所有 LPC111x 系列 ARM 的 32 位定时器模块都相同。 16.2 特性  两个 32 位的定时器/计数器,各带有一个可编程的 32 位预分频器;  计数器或定时器操作;  一个 32 位的捕获通道可在输入信号跳变时捕捉定时器的瞬时值。捕获事件也可以 产生中断;  4 个 32 位匹配寄存器,允许执行以下操作: - 匹配时连续工作,在匹配时可选择产生中断; - 在匹配时停止定时器运行,可选择产生中断; - 在匹配时复位定时器,可选择产生中断;  有 4 个与匹配寄存器相对应的外部输出,这些输出具有以下功能: - 匹配时设为低电平; - 匹配时设为高电平; - 匹配时翻转电平; - 匹配时不执行任何操作;  对于各定时器,最多 4 个匹配寄存器可配置为 PWM,允许使用多达 3 个匹配输出 作为单边沿控制的 PWM 输出。 注:除外设基址不同外,32 位计数器/定时器 0 和 32 位计数器/定时器 1 功能相似。 16.3 应用  时间间隔定时器,用于对内部事件进行计数;  脉宽解调器(经捕获输入);  自由运行的定时器;  脉宽调制器(经匹配输出)。 16.4 描述 计数器/定时器用于对外设时钟(PCLK)周期或外部供应时钟周期进行计数,可在规定 的时间处选择产生中断或执行其它操作,取决于 4 个匹配寄存器。每个计数器/定时器还包 含 1 个捕获输入,用来在输入信号跳变时捕捉定时器的瞬时值,也可以选择产生中断。 在 PWM 模式下,其中 3 个匹配寄存器用于向匹配输出管脚提供单边沿控制的 PWM 输 出。而剩下的那个匹配寄存器则用于控制 PWM 周期长度。 注:32 位计数器/定时器 0(CT32B0)和 32 位计数器/定时器 1(CT32B1)除外设基址不同外,其它 功能相似。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 16 章 16.5 管脚描述 表 16.1 所示为各计数器/定时器相关管脚的总结。 表 16.1 计数器/定时器管脚描述 引脚 CT32B0_CAP0 CT32B1_CAP0 CT32B0_MAT[3:0] CT32B1_MAT[3:0] 类型 输入 输出 描述 捕获信号: 当捕获引脚出现跳变时,可以将定时器计数器值装入捕获寄存器中, 也可以选择产生一个中断。 定时器/计数器模块可以选择一个捕获信号作为时钟源(而不是用 PCLK 的衍生时钟)。详情请参考“计数控制寄存器(TMR32B0CTCR 和 TMR32B1TCR)”小节 CT32B0/1 的外部匹配输出: 当匹配寄存器 TMR32B0/1MR3:0 的值与定时器计数器值(TC)相等 时,相应的输出可以翻转电平、变为低电平、变为高电平或不执行 任何操作。外部匹配寄存器(EMR)和 PWM 控制寄存器(PWMCON) 控制着输出的功能 16.6 时钟和功率控制 输入到 32 位定时器的外设时钟(PCLK)由系统时钟提供。为了节能,可通过 AHBCLKCTRL 寄存器中的位 9 和位 10 将这些时钟禁能。 16.7 寄存器描述 32 位计数器/定时器 0 包含的寄存器如表 16.2 所示,32 位计数器/定时器 1 包含的寄存 器如表 16.3 所示。具体描述如下。 表 16.2 32 位计数器/定时器 0 CT32B0 寄存器映射(基址 0x4001 4000) 名称 TMR32B0IR TMR32B0TCR TMR32B0TC TMR32B0PR TMR32B0PC TMR32B0MCR 访问 R/W R/W R/W R/W R/W R/W 地址偏移量 0x000 0x004 0x008 0x00C 0x010 0x014 描述 中断寄存器(IR)。可向 IR 写入相应值来清 除中断。可以通过读取中断寄存器的值来确 定哪个可能的中断源在等待处理 定时器控制寄存器(TCR)。TCR 用于控制 定时器计数器功能。定时器计数器可通过 TCR 来禁能或复位 定时器计数器(TC)。32 位 TC 每隔 PR+1 个 PCLK 周期递增一次。通过 TCR 控制 TC 预分频寄存器(PR)。当预分频计数器与该 值相等时,下个时钟 TC 加 1,PC 清零 预分频计数器(PC)。32 位 PC 是一个计数 器,它会增加到与 PR 中存放的值相等。当达 到 PR 的值时,PC 清零。可通过总线接口来 观察和控制 PC 匹配控制寄存器(MCR)。MCR 用于控制在 匹配出现时是否产生中断及出现匹配时 TC 是否复位 复位值[1] 0 0 0 0 0 0 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 16 章 名称 访问 地址偏移量 描述 续上表 复位值[1] TMR32B0MR0 R/W TMR32B0MR1 R/W TMR32B0MR2 R/W TMR32B0MR3 R/W TMR32B0CCR R/W 匹配寄存器 0(MR0)。MR0 可通过 MCR 0x018 设定为在和 TC 匹配时复位 TC,停止 TC 和 0 PC,和/或产生中断 0x01C 匹配寄存器 1(MR1)。见 MR0 描述 0 0x020 匹配寄存器 2(MR2)。见 MR0 描述 0 0x024 匹配寄存器 3(MR3)。见 MR0 描述 0 捕获控制寄存器(CCR)。CCR 控制捕获时 0x028 捕获输入边沿的方式,以及在捕获时是否产 0 生中断 TMR32B0CR0 RO 捕获寄存器 0(CR0)。当 CT32B0_CAP0 输 0x02C 0 入上产生捕获事件时,CR0 载入 TC 值 TMR32B0EMR R/W 外部匹配寄存器(EMR)。EMR 控制匹配功 0x03C 0 能及外部匹配管脚 CT32B0_MAT[3:0] - - 0x040-0x06C 保留 - 计数控制寄存器(CTCR)。CTCR 选择在定 TMR32B0CTCR R/W 0x070 时器模式还是在计数器模式下工作,在计数 0 器模式下选择计数的信号和边沿 TMR32B0PWMC R/W PWM 控制寄存器(PWMCON)。PWMCON 0x074 使 能 PWM 模 式 , 用 于 外 部 匹 配 管 脚 0 CT32B0_MAT[3:0] [1] 保留值只反映保存在使用位中的数据,不包含保留位的内容。 表 16.3 32 位计数器/定时器 1 CT32B1 寄存器映射 名称 访问 TMR32B1IR R/W TMR32B1TCR R/W TMR32B1TC R/W TMR32B1PR R/W TMR32B1PC R/W TMR32B1MCR R/W 地址偏移量 0x000 0x004 0x008 0x00C 0x010 0x014 描述 复位值[1] 中断寄存器(IR)。可向 IR 写入相应值来清除 中断。可以通过读取中断寄存器的值来确定哪个 0 可能的中断源正在等待处理 定时器控制寄存器(TCR)。TCR 用于控制定时 器计数器功能。定时器计数器可通过 TCR 来禁 0 能或复位 定时器计数(TC)。32 位 TC 每隔 PR+1 个 PCLK 0 周期递增一次。通过 TCR 控制 TC 预分频寄存器(PR)。当预分频计数器与该值相 0 等时,下个时钟 TC 加 1,PC 清零 预分频计数器(PC)。32 位 PC 是一个计数器, 它会增加到与 PR 中存放的值相等。当达到 PR 0 的值时,PC 清零。可通过总线接口来观察和控 制 PC 匹配控制寄存器(MCR)。MCR 用于控制在匹配出 0 现时是否产生中断及出现匹配时 TC 是否复位 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 16 章 名称 访问 地址偏移量 描述 续上表 复位值[1] TMR32B1MR0 R/W 0x018 匹配寄存器 0(MR0)。MR0 可通过 MCR 设 定为在和 TC 匹配时复位 TC,停止 TC 和 PC, 0 和/或产生中断 TMR32B1MR1 R/W 0x01C 匹配寄存器 1(MR1)。见 MR0 描述 0 TMR32B1MR2 R/W 0x020 匹配寄存器 2(MR2)。见 MR0 描述 0 TMR32B1MR3 R/W 0x024 匹配寄存器 3(MR3)。见 MR0 描述 0 TMR32B1CCR R/W 捕获控制寄存器(CCR)。CCR 控制捕获时捕 0x028 获输入边沿的方式,以及在捕获时是否产生中 0 断 TMR32B1CR0 RO 捕获寄存器 0(CR0)。当 CT32B1_CAP0 输 0x02C 0 入上产生捕获事件时,CR0 载入 TC 值 外部匹配寄存器(EMR)。EMR 控制匹配功 TMR32B1EMR R/W 0x03C 0 能及外部匹配管脚 CT32B1_MAT[3:0] - - 0x040-0x06C 保留 - 计数控制寄存器(CTCR)。CTCR 选择在定 TMR32B1CTCR R/W 0x070 时器模式还是在计数器模式下工作,在计数器 0 模式下选择计数的信号和边沿 TMR32B1PWM R/W C PWM 控制寄存器(PWMCON)。PWMCON 0x074 使 能 PWM 模 式 , 用 于 外 部 匹 配 管 脚 0 CT32B1_MAT[3:0] [1] 复位值只反映使用位中保存的数据,不包含保留位的内容。 16.7.1 中断寄存器(TMR32B0IR 和 TMR32B1IR) 中断寄存器包含 4 个用于匹配中断的位及 1 个用于捕获中断的位。如果有中断产生,则 IR 中的相应位为高电平。否则,该位为低电平。向对应 IR 位写 1 会使中断复位。写 0 无效。 表 16.4 中断寄存器位描述 位 符号 描述 0 MR0 中断 匹配通道 0 的中断标志 1 MR1 中断 匹配通道 1 的中断标志 2 MR2 中断 匹配通道 2 的中断标志 3 MR3 中断 匹配通道 3 的中断标志 4 CR0 中断 捕获通道 0 事件的中断标志 31:5 - 保留 16.7.2 定时器控制寄存器(TMR32B0TCR 和 TMR32B1TCR) 定时器控制寄存器(TCR)用于控制计数器/定时器的操作。 复位值 0 0 0 0 0 - 表 16.5 定时器控制寄存器位描述 位 符号 描述 复位值 为 1 时,定时器/计数器和分频计数器使能计数。为 0 时,计数器 0 计数器使能 0 禁能 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 16 章 续上表 位 符号 描述 复位值 为 1 时,定时器计数器和预分频计数器在 PCLK 的下一个上升沿 1 计数器复位 0 同步复位。计数器在 TCR[1]恢复为 0 之前保持复位状态 31:2 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA 16.7.3 定时器计数器(TMR32B0TC 和 TMR32B1TC) 当预分频器计数器达到计数上限时,32 位定时器计数器加 1。如果 TC 在到达计数器上 限之前没有复位,它将一直计数到 0xFFFF FFFF 然后翻转到 0x0000 0000。该事件不会产生 中断,如果需要,可使用匹配寄存器检测溢出。 16.7.4 预分频寄存器(TMR32B0PR 和 TMR32B1PR) 32 位预分频寄存器指定了预分频计数器的最大计数值。 16.7.5 预分频计数器寄存器(TMR32B0PC 和 TMR32B1PC) 32 位预分频计数器用某个常量值来控制 PCLK 的分频,再使其输入到定时器计数器。 这样就可以控制定时器精度和定时器溢出前所能达到的最大值之间的关系。预分频计数器在 每个 PCLK 周期加 1。当它达到预分频寄存器中存储的值时,定时器计数器加 1,预分频计 数器将在下一个 PCLK 复位。这就使当 PR=0 时,TC 每个 PCLK 加 1,PR=1 时,TC 每 2 个 PCLK 加 1,依次类推。 16.7.6 匹配控制寄存器(TMR32B0MCR 和 TMR32B1MCR) 匹配控制寄存器用于控制当其中一个匹配寄存器的值与定时器计数器的值相等时应执 行的操作。匹配寄存器各位的功能如表 16.6 所示。 表 16.6 匹配控制寄存器位描述 位 符号 值 描述 复位值 1 MR0 的上的中断:当 MR0 与 TC 值匹配时产生中断 0 MR0I 0 0 中断禁能 1 MR0 上的复位:MR0 与 TC 值匹配将使 TC 复位 1 MR0R 0 0 该特性禁能 1 MR0 上的停止:MR0 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 2 MR0S 0 0 该特性禁能 1 MR1 上的中断:MR1 与 TC 中的值匹配时产生中断 3 MR1I 0 0 该中断禁能 1 MR1 上的复位:MR1 与 TC 匹配时使 TC 复位 4 MR1R 0 0 该特性禁能 1 MR1 上的停止:MR1 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 5 MR1S 0 0 该特性禁能 1 MR2 上的中断:MR2 与 TC 中的值匹配时产生中断 6 MR2I 0 0 该中断禁能 1 MR2 上的复位:MR2 与 TC 匹配时将使 TC 复位 7 MR2R 0 0 该特性禁能 1 MR2 上的停止:MR2 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 8 MR2S 0 0 该特性禁能 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 16 章 续上表 位 符号 值 描述 复位值 1 MR3 上的中断:MR3 与 TC 中的值匹配时产生中断 9 MR3I 0 0 该中断禁能 1 MR3 上的复位:MR3 与 TC 匹配时将使 TC 复位 10 MR3R 0 0 该特性禁能 1 MR3 上的停止:MR3 与 TC 匹配时将使 TC 和 PC 停止,TCR[0]置 0 11 MR3S 0 0 该特性禁能 31:12 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA 16.7.7 匹配寄存器(TMR32B0MR0/1/2/3 和 TMR32B1MR0/1/2/3) 匹配寄存器值会不断地与定时器计数器值进行比较。当两个值相等时,自动触发相应动 作。这些动作包括产生中断,复位定时器/计数器或停止定时器。所有动作均由 MCR 寄存器 控制。 16.7.8 捕获控制寄存器(TMR32B0CCR 和 TMR32B1CCR) 捕获控制寄存器用于控制当捕获事件发生时,是否将定时器计数器中的值装入 4 个捕获 寄存器中的一个,以及捕获事件是否产生中断。同时将上升沿位和下降沿位置位是有效的配 置,这样会使两个边沿都产生捕获事件。在下面描述中,“n”表示定时器编号,0 或 1。 表 16.7 捕获控制寄存器位描述 位 符号 值 描述 复位值 CT32Bn_CAP0 上升沿捕获:CT32Bn_CAP0 上“0”到“1”的 1 0 CAP0RE 跳变将使 TC 的内容装入 CR0 0 0 该特性禁能 CT32Bn_CAP0 的下降沿捕获:CT32Bn_CAP0 上“1”到“0” 1 1 CAP0FE 的跳变将使 TC 的内容装入 CR0 0 0 该特性禁能 CT32Bn_CAP0 事件中断:CT32Bn_CAP0 事件所导致的 CR0 装 1 2 CAP0I 载将产生一个中断 0 0 该特性禁能 31:3 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA 16.7.9 捕获寄存器(TMR32B0CR0 和 TMR32B1CR0) 各捕获寄存器与器件管脚相关联,当管脚发生特定的事件时,可将定时器计数器的值装 入该捕获寄存器。捕获控制寄存器中的设置决定是否使能捕获功能,及在相关管脚的上升沿、 下降沿或上升沿和下降沿时是否产生捕获事件。 16.7.10 外部匹配寄存器(TMR32B0EMR 和 TMR32B1EMR) 外部匹配寄存器控制外部匹配管脚 CAP32Bn_MAT[3:0]并提供外部匹配管脚的状态。 如果匹配输出配置为 PWM 输出,则外部匹配寄存器的功能由 PWM 规则决定(见本章 的“单边沿控制的 PWM 输出规则”小节)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 16 章 表 16.8 外部匹配寄存器位描述 位 0 1 2 3 5:4 7:6 9:8 11:10 15:12 符号 EM0 EM1 EM2 EM3 EMC0 EMC1 EMC2 EMC3 - 描述 外部匹配 0。该位反映输出 CT32Bn_MAT0 的状态,不管该输出是否连接 到此管脚。当 TC 和 MR0 匹配时,定时器的输出可以翻转电平,变为低 电平,变为高电平或不执行任何动作。位 EMR[5:4]控制该输出的功能 外部匹配 1。该位反映输出 CT32Bn_MAT1 的状态,不管该输出是否连接 到此管脚。当 TC 和 MR1 匹配时,定时器的输出可以翻转电平,变为低 电平,变为高电平或不执行任何动作。位 EMR[7:6]控制该输出的功能 外部匹配 2。该位反映输出 CT32Bn_MAT2 的状态,不管该输出是否连接 到此管脚。当 TC 和 MR2 匹配时,定时器的输出可以翻转电平,变为低 电平,变为高电平或不执行任何动作。位 EMR[9:8]控制该输出的功能 外部匹配 3。该位反映输出 CT32Bn_MAT3 的状态,不管该输出是否连接 到管脚。当 TC 和 MR3 匹配时,定时器的输出可以翻转电平,变为低电 平,变为高电平或不执行任何动作。位 EMR[11:10]控制该输出的功能 外部匹配控制 0。决定外部匹配 0 的功能。这些位的编码如表 16.9 所示 外部匹配控制 1。决定外部匹配 1 的功能。这些位的编码如表 16.9 所示 外部匹配控制 2。决定外部匹配 2 的功能。这些位的编码如表 16.9 所示 外部匹配控制 3。决定外部匹配 3 的功能。这些位的编码如表 16.9 所示 保留,用户软件向保留位写 1。从保留位读出的值未定义 复位值 0 0 0 0 00 00 00 00 NA 表 16.9 外部匹配控制 EMR[11:10]、EMR[9:8] EMR[7:6]或 EMR[5:4] 00 01 10 11 功能 不执行任何操作 将对应的外部匹配位/输出设置为 0(如果连接到芯片管脚,则 CT32Bn_MATm 脚输出低电平) 将对应的外部匹配位/输出设置为 1(如果连接到芯片管脚,则 CT32Bn_MATm 管脚输出高电平) 使对应的外部匹配位/输出翻转 16.7.11 计数控制寄存器(TMR32B0CTCR 和 TMR32B1TCR) 计数控制寄存器(CTCR)用于在定时器模式和计数器模式之间进行选择,且在处于计 数器模式时选择进行计数的管脚和边沿。 当选用计数器模式为工作模式时,在 PCLK 时钟的每个上升沿对 CAP 输入(由 CTCR 位 3:2 选择)进行采样。在对这个 CAP 输入的连续两次采样值进行比较之后,可以识别出 下面其中一种事件:上升沿、下降沿、上升/下降沿或所选 CAP 输入的电平不变。如果识别 出的事件与 CTCR 寄存器中位 1:0 选择的一个事件相对应,则定时器计数器寄存器的值将增 加 1。 要有效地处理计数器的外部源时钟会有一些限制,由于需使用 PCLK 时钟的 2 个连续的 上升沿才能确定 CAP 选择的输入上的一个边沿,因此 CAP 输入的频率不能超过 PCLK 时钟 的一半。从而,相同 CAP 输入上的高/低电平持续时间不应少于 1/(2×PCLK)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 16 章 表 16.10 计数控制寄存器位描述 位 符号 1:0 计数器/定时器模式 3:2 计数输入选择 31:4 - 值 描述 复位值 该字段选择定时器的预分频计数器(PC)在哪 个 PCLK 边沿增值,或清零 PC 以及使定时器 计数器(TC)增值 00 定时器模式:每个 PCLK 上升沿 计数器模式:TC 在位 3:2 选择的 CAP 输入的 01 00 上升沿时递增 计数器模式:TC 在位 3:2 选择的 CAP 输入的 10 下降沿时递增 计数器模式:TC 在位 3:2 选择的 CAP 输入的 11 两个边沿递增 当该寄存器中位 1:0 不为 00 时,这两位选择哪 个 CAP 管脚被采样用于计时: 00 CT32Bn_CAP0 01 保留 10 保留 00 保留 注:如果在 TnCTCR 中选择计数器模式,则捕 11 获控制寄存器(TnCCR)中的 3 位必须编程为 000 保留,用户软件不应向保留位写 1。从保留位 - NA 读出的值未定义 16.7.12 控制 PWM 寄存器(TMR32B0PWMC 和 TMR32B1PWMC) PWM 控制寄存器用于将匹配输出配置为 PWM 输出。每个匹配输出均可分别设置,以 决定匹配输出是作为 PWM 输出还是作为功能受外部匹配寄存器(EMR)控制的匹配输出。 对于各定时器,MATn.2:0 输出最多可选择 3 个单边沿控制的 PWM 输出。一个附加的 匹配寄存器决定 PWM 的周期长度。当任何其它匹配寄存器出现匹配时,PWM 输出置为高 电平。用于设置 PWM 周期长度的匹配寄存器负责将定时器复位。当定时器复位到 0 时,所 有当前配置为 PWM 输出的高电平匹配输出清零。 表 16.11 PWM 控制寄存器位描述 位 符号 描述 复位值 为 1 时,CT32Bn_MAT0 的 PWM 模式使能 0 PWM 使能 0 为 0 时,CT32Bn_MAT0 受 EM0 控制 为 1 时,CT32Bn_MAT1 的 PWM 模式使能 1 PWM 使能 0 为 0 时,CT32Bn_MAT1 受 EM1 控制 为 1 时,CT32Bn_MAT2 的 PWM 模式使能 2 PWM 使能 0 为 0 时,CT32Bn_MAT2 受 EM2 控制 为 1 时,CT32Bn_MAT3 的 PWM 模式使能 3 PWM 使能 为 0 时,CT32Bn_MAT3 受 EM3 控制 0 注:建议使能匹配通道 3 设置 PWM 周期 4:32 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 16 章 16.7.13 单边沿控制的 PWM 输出规则 (1)所有单边沿控制的 PWM 输出在 PWM 周期开始时都变为低电平(定时器置为 0), 除非它们的匹配值等于 0。 (2)每个 PWM 输出在达到其匹配值时都将变为高电平。如果没有发生匹配(即匹配 值大于 PWM 周期长度),则 PWM 输出将继续保持低电平。 (3)如果将大于 PWM 周期长度的匹配值写入到匹配寄存器,且 PWM 信号已经为高 电平,则在下一个 PWM 周期开始时 PWM 信号将被清零。 (4)如果匹配寄存器中包含与定时器复位值(PWM 周期长度)相同的值,则在定时 器达到匹配值后的下一个时钟节拍时 PWM 输出将复位到低电平。因此,PWM 输 出总是包含一个时钟节拍宽度的正脉冲,周期由 PWM 周期长度决定(即定时器 重载入值)。 (5)如果匹配寄存器置 0,则 PWM 输出将在定时器第一次返回 0 时变为高电平,并 继续保持高电平。 注意:当选择匹配输出用作 PWM 输出时,除匹配寄存器设置 PWM 周期长度外,匹配控制寄存器 MCR 中的定时器复位(MRnR)和定时器停止(MRnS)位必须置为 0。对于该寄存器,当定时器值与相应 的匹配寄存器值匹配时,将 MRnR 位置 1 以使能定时器复位。 PWM2/MAT2 PWM1/MAT1 PWM0/MAT0 MR2 = 100 MR1 = 41 MR0 = 65 0 41 65 100 (计数器复位) 图 16.1 采样 PWM 波形,其中 PWM 周期长度为 100(MR3 选择), MAT3:0 被 PWCON 寄存器使能为 PWM 输出 16.8 定时器操作示例 如图 16.2 所示,定时器配置为在匹配时复位计数并产生中断。预分频值为 2,匹配寄存 器值为 6。在发生匹配的定时器周期结束时,定时器计数复位。这样就使匹配值具有完整长 度的周期。在定时器到达匹配值后的下一个时钟产生指示匹配发生的中断。 如图 16.3 所示,定时器配置为在匹配时停止计数并产生中断。预分频器再次置为 2,匹 配寄存器置为 6。在定时器达到匹配值的下一个时钟,TCR 中的定时器使能位清零,中断指 示匹配发生。 PCLK 预分频 计数器 2 0 1 2 0 1 2 0 1 2 0 1 定时器 计数器 4 5 6 0 1 定时器计 数器复位 中断 图 16.2 定时器周期设置为 PR=2,MRx=6,匹配时使能中断和复位 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第 16 章 PCLK 预分频计数器 2 定时计数器 4 TCR[0] 计数器使能 中断 0 12 5 1 0 6 0 图 16.3 定时器周期设置为 PR=2,MRx=6,匹配时使能中断和停止 16.9 结构 32 位计数器/定时器 0 和 32 位计数器/定时器 1 的结构图如图 16.4 所示。 匹配寄存器0 匹配寄存器1 匹配寄存器2 匹配寄存器3 匹配控制寄存器 外部匹配寄存器 中断寄存器 控制 MATn[3:0] 中断 CAP0 匹配时停止 匹配时复位 LOAD[3:0] = = = = 捕获控制寄存器 捕获寄存器0 CSN 定时器计数器 CE 复位 使能 定时器控制寄存器 TCI 预分频计数器 最大值 预分频寄存器 PCLK 图 16.4 32 位计数器/定时器结构图 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 目录 第 17 章 看门狗定时器(WDT) ..............................................................................2 17.1 本章导读...................................................................................................................2 17.2 特性...........................................................................................................................2 17.3 应用...........................................................................................................................2 17.4 描述...........................................................................................................................2 17.5 时钟和功率控制.......................................................................................................2 17.6 寄存器描述...............................................................................................................3 17.6.1 看门狗模式寄存器...........................................................................................3 17.6.2 看门狗定时器常数寄存器...............................................................................4 17.6.3 看门狗喂狗寄存器...........................................................................................4 17.6.4 看门狗定时器值寄存器...................................................................................4 17.7 结构图.......................................................................................................................5 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 17 章 第17章 看门狗定时器(WDT) 17.1 本章导读 所有 LPC111x 系列 ARM 器件的 WDT 块都相同。 17.2 特性  如果没有周期性重装,则产生片内复位;  具有调试模式;  可通过软件使能,但需要硬件复位或禁能看门狗复位/中断;  错误/不完整的喂狗时序会令看门狗产生复位/中断(如果使能);  具有指示看门狗复位的标志;  带内置预分频器的可编程 32 位定时器;  可选择 TWDCLK×4 倍数的时间周期:从(TWDCLK×256×4)到(TWDCLK×232×4) 中选择;  看门狗时钟(WDCLK)源可以选择内部 RC 振荡器(IRC)、主时钟或看门狗振荡 器。这为看门狗在不同功率下提供了较宽的时序选择范围。为了提高可靠性,它还 可以使看门狗定时器在与外部晶振及其相关元件无关的内部时钟源下运行。 17.3 应用 看门狗定时器的作用是使微控制器在进入错误状态后的一定时间内复位。当看门狗使能 时,如果用户程序没有在预定时间内喂狗(或给看门狗将定时器重装定时值),则看门狗将 产生系统复位。 17.4 描述 看门狗定时器包括一个 4 分频的预分频器和一个 32 位计数器。时钟通过预分频器输入 到定时器。定时器递减计时。计数器递减的最小值为 0xFF。如果设置一个小于 0xFF 的值, 系统会将 0xFF 装入计数器。因此,看门狗定时器的最小间隔为(TWDCLK×256×4),最大间 隔为(TWDCLK×232×4),两者都是(TWDCLK×4)的倍数。 看门狗应按照下面方法来使用:  在 WDTC 寄存器中设置看门狗定时器固定的重装值;  在 WDMOD 寄存器中设置看门狗定时器的工作模式;  通过向 WDFEED 寄存器写入 0xAA 和 0x55 启动看门狗;  在看门狗计数器溢出前应再次喂狗,以免发生复位/中断。 当看门狗处于复位模式且计数器溢出时,CPU 将复位,并从向量表中加载堆栈指针和 编程计数器(与外部复位情况相同)。检查看门狗超时标志(WDTOF)以决定看门狗是否 已引起复位条件。WDTOF 标志必须通过软件清零。 17.5 时钟和功率控制 看门狗定时器块使用两个时钟:PCLK 和 WDCLK。PCLK 由系统时钟生成,供 APB 访 问看门狗寄存器使用。WDCLK 由 wdt_clk 生成,供看门狗定时器计数使用。有些时钟可用 作 wdt_clk 的时钟源,它们分别是:IRC、看门狗振荡器以及主时钟。时钟源在系统终端模 块(syscon block)中选择(见第 3 章“WDT 时钟源选择寄存器”小节)。WDCLK 有自己 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 17 章 的时钟分频器(见第 3 章“WDT 时钟源选择寄存器”小节),该时钟分频器也可将 WDCLK 禁能。 这两个时钟域之间有同步逻辑。当 WDMOD 和 WDTC 寄存器通过 APB 操作更新时, 新的值将在 WDCLK 时钟域逻辑的 3 个 WDCLK 周期后生效。当看门狗定时器在 WDCLK 频率下运行时,同步逻辑会先锁存 WDCLK 上计数器的值,然后使其与 PCLK 同步,再作 为 WDTV 寄存器的值,供 CPU 读取。 如果没有使用看门狗振荡器,则可在 PDRUNCFG 寄存器中(见第 3 章“掉电配置寄存 器”小节)将其关闭。为了节能,可在 AHBCLKCRTL 寄存器(见第 3 章“系统 AHB 时钟 控制寄存器”小节)将输入到看门狗寄存器模块的时钟(PCLK)禁能。 17.6 寄存器描述 看门狗包含 4 个寄存器,如表 17.1 所示。 表 17.1 看门狗寄存器映射(基址:0x4000 4000) 名称 WDMOD WDTC WDFEED WDTV 访问 R/W R/W WO RO 地址偏移量 0x000 0x004 0x008 0x00C 描述 看门狗模式寄存器。该寄存器包含看门狗定时器的 基本模式和状态 看门狗定时器常数寄存器。该寄存器确定超时值 看门狗喂狗序列寄存器。向该寄存器顺序写入 0xAA 和 0x55 使看门狗定时器重新装入 WDTC 的值 看门狗定时器值寄存器。该寄存器读出看门狗定时 器的当前值 [1] 复位值只反映使用位中保存的值。不包含保留位的内容。 复位值[1] 0 0xFF NA 0xFF 17.6.1 看门狗模式寄存器 WDMOD 寄存器通过 WDEN 和 RESET 位的组合来控制看门的操作。注意在任何 WDMOD 寄存器改变生效前,必须先喂狗。 表 17.2 看门狗模式寄存器(WDMOD – 地址 0x4000 4000)位描述 位 符号 描述 复位值 0 WDEN WDEN 看门狗使能位(只能置位)。为 1 时,看门狗运行 0 WDRESET 看门狗复位使能位(只能置位)。为 1 时,看门狗超 1 WDRESET 0 时会引起芯片复位 WDTOF 看门狗超时标志。只在看门狗定时器超时时置位,由软 0(只在外部复 2 WDTOF 件清零 位后为 0) 3 WDINT WDINT 看门狗中断标志(只读,不能被软件清零) 0 7:4 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA 31:8 - 保留 - 一旦 WDEN 和/或 WDRESET 位置位,就无法使用软件将其清零。这两个标志通过外 部复位或看门狗定时器溢出清零。 WDTOF:若看门狗定时器溢出,看门狗超时标志置位。该标志通过软件清零。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 17 章 WDINT:当看门狗超时时,看门狗中断标志置位。该标志仅能通过复位来清零。只要 看门狗中断被响应,它就可以在 NVIC 中禁止或不停地产生看门狗中断请求。看门狗中断的 用途就是在不进行芯片复位的前提下允许在看门狗溢出时对其活动进行调整。 在看门狗运行时可随时产生看门复位或中断,看门狗复位或中断还具有工作时钟源。每 个时钟源都可以在睡眠模式下运行,IRC 可以在深度睡眠模式中工作。如果在睡眠或深度睡 眠模式中出现看门狗中断,那么看门狗中断会唤醒器件。 表 17.3 看门狗工作模式选择 WDEN 0 1 1 WDRESET X(0 或 1) 0 1 工作模式 调试/操作模式(看门狗关闭) 看门狗中断模式:调试看门狗中断,但不使能 WDRESET。 当选择这种模式时,看门狗计数器向下溢出时会置位 WDINT 标志,并产 生看门狗中断请求 看门狗复位模式:看门狗中断和 WDRESET 都使能时的操作 当选择这种模式时,看门狗计数器向下溢出会使微控制器复位。尽管在这 种 情 况 下 看 门 狗 中 断 也 使 能 ( WDEN = 1 ) , 但 由 于 看 门 狗 复 位 会 清 零 WDINT 标志,所以无法判断出看门狗中断 17.6.2 看门狗定时器常数寄存器 WDTC 寄存器决定看门狗定时器的超时值。每当喂狗时序产生时,WDTC 的内容就会 被重新装入看门狗定时器。它是一个 32 位寄存器,低 8 位在复位时置 1。写入一个小于 0xFF 的值会使 0x0000 00FF 装入 WDTC。因此超时的最小时间间隔为 TWDCLK×256×4。 表 17.4 看门狗常数寄存器(WDTC – 地址 0x4000 4004)位描述 位 符号 描述 31:0 计数值 看门狗超时间隔 复位值 0x0000 00FF 17.6.3 看门狗喂狗寄存器 向该寄存器写 0xAA,然后写入 0x55 会使 WDTC 的值重新装入看门狗定时器。如果看 门狗已通过 WDMOD 寄存器使能,那么该操作也会启动看门狗。设置 WDMOD 寄存器中的 WDEN 位不足以使能看门狗。设置 WDEN 位后,还必须完成一次有效的喂狗时序,看门狗 才能产生复位。在看门狗真正启动前,看门狗将忽略错误的喂狗。看门狗启动后,如果向 WDFEED 写入 0xAA 之后的下一个操作不是向 WDFEED 写入 0x55,而是访问任一看门狗 寄存器,那么会立即造成复位/中断。在喂狗时序中,在一次对看门狗寄存器的不正确访问 后的第二个 PCLK 周期将产生复位。 在喂狗时序期间中断应禁能。如果在喂狗时序期间发生中断,则会产生一个中止条件。 表 17.5 看门狗喂狗寄存器位描述 位 符号 描述 7:0 喂狗 喂狗值应为 0xAA,然后是 0x55 31:8 - 保留 17.6.4 看门狗定时器值寄存器 WDTV 寄存器用于读取看门狗定时器的当前值。 复位值 NA - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 17 章 当读取 32 位定时器的值时,锁定和同步过程需要占用 6 个 WDCLK 周期和 6 个 PCLK 周期,因此,WDTV 的值比 CPU 正在读取的定时器的值要“旧”。 表 17.6 看门狗定时器值寄存器(WDTV – 地址 0x4000 400C)位描述 位 符号 描述 31:0 计数值 计数器定时器值 复位值 0x0000 00FF 17.7 结构图 看门狗的结构图如图 17.1 所示。结构图中不显示同步逻辑(PCLK/WDCLK)。 Wdt_clk 喂狗时序 WDFEED 喂狗正确 喂狗错误 /4 WDTC 32位倒计时计数器 向下溢出 使能 计数 屏蔽位 WMOD寄存器 WDINT WDTOF WDRESET WDEN 复位 中断 图 17.1 看门狗结构图 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 目录 第 18 章 系统节拍定时器 ...........................................................................................2 18.1 本章导读...................................................................................................................2 18.2 特性...........................................................................................................................2 18.3 描述...........................................................................................................................2 18.4 操作...........................................................................................................................2 18.5 寄存器描述...............................................................................................................3 18.5.1 系统定时器控制和状态寄存器 .......................................................................3 18.5.2 系统定时器重载值寄存器...............................................................................3 18.5.3 系统定时器当前值寄存器...............................................................................3 18.5.4 系统定时器校准值寄存器...............................................................................4 18.5.5 定时器计算示例...............................................................................................4 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 18 章 第18章 系统节拍定时器 18.1 本章导读 系统节拍定时器(Sys Tick timer)是 ARM Cortex-M0 内核的组成部分,所有 LPC111x 系列 ARM 的系统节拍定时器都相同。 18.2 特性  10 毫秒时间间隔;  专用的异常向量;  由专门的系统节拍定时器时钟提供内部时钟。 18.3 描述 系统节拍时钟是 Cortex-M0 的组成部分。系统节拍定时器为操作系统或其它系统管理软 件提供固定 10 毫秒的中断。 由于系统节拍定时器是 Cortex-M0 的一部分,因此可通过提供一个标准的定时器(可用 于基于 Cortex-M0 的器件)来配合软件的移植 如需了解详情,请见 Cortex-M0 用户手册。 18.4 操作 系统节拍定时器是 24 位定时器,当倒计时值达到 0 时产生一个中断。系统节拍定时器 的作用就是为每次中断之间提供 10 毫秒的固定时间间隔。系统节拍定时器的时钟信号可由 CPU 时钟提供。要在指定时间间隔重复产生中断,就必须使用指定的时间间隔值对 STRELOAD 寄存器进行初始化。默认值保存在 STCALIB 寄存器中,可通过软件改变默认 值。如果 CPU 时钟置为,则默认时间间隔为 10 毫秒。 系统节拍定时器结构图如图 18.1 所示。 CCLK STCALIB STRELOAD 装入数据 STCURR 24位倒计时计数器 时钟 装载 下溢 计数使能 私有 外设 总线 STCTRL 使能 计数标志 节拍中断 系统节拍中断 图 18.1 系统节拍定时器结构图 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 18 章 18.5 寄存器描述 表 18.1 系统节拍定时器寄存器映射 名称 访问 地址偏移量 描述 STCTRL R/W 0x010 系统定时器控制和状态寄存器 STRELOAD R/W 0x014 系统定时器重载值寄存器 STCURR R/W 0x018 系统定时器当前值寄存器 STCALIB R/W 0x01C 系统定时器校准值寄存器 [1] 复位值只反映使用位中存放的数据。不包括保留位的内容。 18.5.1 系统定时器控制和状态寄存器 STCTRL 寄存器包含系统节拍定时器的控制信息,并提供状态标志。 复位值[1] 0x4 0 0 表 18.2 系统定时器控制和状态寄存器(STCTRL – 地址 0xE000 E010)位描述 位 0 1 2 15:3 16 31:17 符号 ENABLE TICKINT COUNTFLAG - 描述 系统节拍计数器使能。为 1 时,计数器使能;为 0 时,计数器禁 能 系统节拍中断使能。为 1 时,系统节拍中断使能。为 0 时,系统 节拍中断禁能。使能时,在系统节拍计数器计数器倒计数到 0 时 产生中断 保留 保留,用户软件不应向保留位写 1,从保留位读出的值未定义 系统节拍计数器标志。当系统节拍计数器倒计数到 0 时该标志置 位,读取该寄存器时该标志清零 保留,用户软件不应向保留位写 1,从保留位读出的值未定义 复位值 0 0 1 NA 0 NA 18.5.2 系统定时器重载值寄存器 系统节拍定时器倒计数到 0 时,STRELOAD 寄存器设置为将要装入系统节拍定时器的 值。使用软件将该值装入寄存器,作为定时器初始化的一部分。如果 CPU 或外部时钟运行 频率适合用 STCALIB 值,则可读取 STCALIB 寄存器的值并用作 STRELOAD 的值。 表 18.3 系统定时器重载值寄存器(STRELOAD – 地址 0xE000 E014)位描述 位 23:0 31:24 符号 RELOAD - 描述 该值在系统节拍计数器倒计数到 0 时装入该计数器 保留,用户软件不应向保留位写 1,从保留位读出的值未定义 复位值 0 NA 18.5.3 系统定时器当前值寄存器 当软件读系统节拍计数器值时,STCURR 寄存器将返回系统节拍计数器的当前计数值。 表 18.4 系统定时器当前值寄存器(STCURR – 地址 0xE000 E018)位描述 位 23:0 31:24 符号 CURRENT - 描述 读该寄存器会返回系统节拍计数器的当前值。写任意位都可清零 系统节拍计数器和 STCTRL 中的 COUNTFLAG 位 保留,用户软件不应向保留位写 1,从保留位读出的值未定义 复位值 0 NA LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 18 章 18.5.4 系统定时器校准值寄存器 表 18.5 系统定时器校准值寄存器(STCALIB – 地址 0xE000 E01C)位描述 位 23:0 29:24 30 31 符号 TENMS - SKEW NOREF 值 描述 复位值 保留,用户软件不应向保留位写 1。从保 留位读出的值未定义 NA 0 0 18.5.5 定时器计算示例 下面例子描述了为不同系统配置选择系统节拍定时器值。所有这些例子所用的中断时间 间隔都为 10 毫秒,这正是系统节拍定时器所要使用的时间间隔。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 目录 第 19 章 模数转换器(ADC) ........................................................................................2 19.1 本章导读...................................................................................................................2 19.2 特性...........................................................................................................................2 19.3 管脚描述...................................................................................................................2 19.4 时钟供应和功率控制...............................................................................................2 19.5 寄存器描述...............................................................................................................2 19.5.1 A/D 控制寄存器...............................................................................................3 19.5.2 A/D 全局数据寄存器 .......................................................................................5 19.5.3 A/D 状态寄存器...............................................................................................5 19.5.4 A/D 中断使能寄存器 .......................................................................................5 19.5.5 A/D 数据寄存器...............................................................................................6 19.6 操作...........................................................................................................................6 19.6.1 硬件触发转换...................................................................................................6 19.6.2 中断...................................................................................................................6 19.6.3 精度和数字接收器...........................................................................................6 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 19 章 第19章 模数转换器(ADC) 19.1 本章导读 所有 LPC1100 系列 ARM 的 ADC 块都相同。 19.2 特性  10 位逐次逼近式模数转换器;  在 8 个管脚间实现输入多路复用;  掉电模式;  测量范围:0~3.6V,不超出 VDD(3V3)的电压;  10 位转换时间≥2.44μs;  一个或多个输入的突发转换模式;  可选择由输入跳变或定时器匹配信号触发转换;  每个 A/D 通道的独立结果寄存器减少了中断开销。 19.3 管脚描述 ADC 各相关管脚的描述见表 19.1。 表 19.1 ADC 管脚描述 管脚 类型 描述 模拟输入。A/D 转换器单元可测量所有这些输入信号上的电压。 AD[7:0] 输入 注意:尽管这些管脚在数字模式下具备 5V 的耐压能力,但是,当他们被配置为模 VDD(3V3) 输入 拟输入的时候最大的输入电压不得超过 VDD(3V3)的大小 VREF;参考电压 若要通过监控的管脚获得准确的电压读数,必须事先通过 IOCON 寄存器选用 ADC 功 能。对于作为 ADC 输入的管脚来说,在选用数字功能的情况下仍能获得 ADC 读取值的情 况是不可能存在的。在选用数字功能的情况下,内部电路会切断该管脚与 ADC 硬件的连接。 19.4 时钟供应和功率控制 系统时钟负责向 ADC 以及可编程 ADC 时钟分频器提供外部时钟信号(见本章“A/D 控制寄存器”小节)。可通过 AHBCLKCTRL 寄存器的位 13(见第 3 章“系统 AHB 时钟控 制寄存器”小节)来禁能该时钟信号,从而达到节省功耗的目的。 通过 PDRUNCFG 寄存器(见第 3 章“掉电配置寄存器”小节),可以在运行的时候可 以使 ADC 下电。 A/D 转换器的基本时钟信号供应取决于 APB 时钟(PCLK)。每个转换器都带有一个可 编程的分频器,可对时钟频率进行分频以便使频率达到逐次逼近过程所需的 4.5MHz(最大 值)。一次准确的转换需要占用 11 个时钟周期。 19.5 寄存器描述 ADC 所包含的寄存器如表 19.2 所示 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 19 章 表 19.2 ADC 寄存器一览(基地址 4001 C000) 名称 访问 地址偏移量 描述 A/D 控制寄存器。A/D 转换开始前,必须写 AD0CR R/W 0x000 AD0CR 寄存器来选择工作模式 AD0GDR R/W 0x004 A/D 全局数据寄存器。包含最近一次 A/D 转换的 结果 - - 0x008 保留 AD0INTEN R/W 0x00C A/D 中断使能寄存器。该寄存器包含的使能位控 制每个 A/D 通道的 DONE 标志是否用于产生 A/D 中断 AD0DR0 R/W 0x010 A/D 通道 0 数据寄存器。该通道包含在通道 0 上 完成的最近一次转换的结果 AD0DR1 R/W 0x014 A/D 通道 1 数据寄存器。该通道包含在通道 1 上 完成的最近一次转换的结果 AD0DR2 R/W 0x018 A/D 通道 2 数据寄存器。该通道包含在通道 2 上 完成的最近一次转换的结果 AD0DR3 R/W 0x01C A/D 通道 3 数据寄存器。该通道包含在通道 3 上 完成的最近一次转换的结果 AD0DR4 R/W 0x020 A/D 通道 4 数据寄存器。该通道包含在通道 4 上 完成的最近一次转换的结果 AD0DR5 R/W 0x024 A/D 通道 5 数据寄存器。该通道包含在通道 5 上 完成的最近一次转换的结果 AD0DR6 R/W 0x028 A/D 通道 6 数据寄存器。该通道包含在通道 6 上 完成的最近一次转换的结果 AD0DR7 R/W 0x02C A/D 通道 7 数据寄存器。该通道包含在通道 7 上 完成的最近一次转换的结果 AD0STAT RO 0x030 A/D 状态寄存器。该寄存器包含所有 A/D 通道的 DONE 和 OVERRUN 标志,以及 A/D 中断标志 [1] 保留值只反映使用位中所保存的数据。不包括保留位内容。 复位值[1] 0x0000 0001 NA - 0x0000 0100 NA NA NA NA NA NA NA NA 0 19.5.1 A/D 控制寄存器 A/D 控制寄存器中的位可用于选择要转换的 A/D 通道、A/D 转换时间、A/D 模式和 A/D 启动触发。 表 19.3 A/D 控制寄存器(AD0CR – 0x4001 C000)位描述 位 符号 值 描述 复位值 从 AD7:0 中选择采样和转换的输入脚。对于 ADC,bit0 选择管 7:0 SEL 脚 AD0,bit1 选择引脚 AD1… bit7 选择引脚 AD7。 软件控制模式下(BURST=0),只能选择一个通道,也就是说, 这些位中只有一个位可置为 1。 0x01 硬件扫描模式下(BURST=1),可选用任意数目的通道,也就 是说,可以把任意的位或者全部的位都置为 1。但若全部位都 为零,那么将自动选用通道 0(SEL=0x01)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 19 章 续上表 位 符号 值 描述 复位值 将 APB 时钟(PCLK)进行(CLKDIV 值+1)分频得到 A/D 转 15:8 CLKDIV 换时钟,该时钟必须小于或等于 4.5 MHz。通常软件将 CLKDIV 0 编程为最小值来得到 4.5 MHz 或稍低于 4.5 MHz 的时钟,但某 些情况下(例如高阻抗模拟信号源)可能需要更低的时钟 0 软件控制模式:转换由软件控制,需要 11 个时钟才能完成 硬件扫描模式:A/D 转换器以 CLKS 字段选择的速率重复执行 转换,并扫描所有 SEL 字段中被置为 1 的位所对应的管脚(如 有必要)。启动后首先转换的是 SEL 字段中被置为 1 的最低位 16 BURST 0 1 所对应的通道,然后,若较高位中还存在被置为 1 的位,那么 由低到高进行扫描。清零该位可终止这个轮流重复转换的过程, 但是该位清零时并不能终止正在进行的转换 注:当 BURST=1 时 START 位必须为 000,否则转换无法启动 该字段选择 Burst 模式下每次转换占用时钟数以及 ADDR 的 LS 位中转换结果的有效位数,设定的范围在 11 个时钟(10 位) 和 4 个时钟(3 位)之间 000 11 个时钟/10 位 001 10 个时钟/9 位 19:17 CLKS 101 9 个时钟/8 位 000 011 8 个时钟/7 位 100 7 个时钟/6 位 101 6 个时钟/5 位 110 5 个时钟/4 位 111 4 个时钟/3 位 23:20 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA 当 BURST 位为 0 时,这些位控制 A/D 转换器是否启动及何时 启动: 000 不启动(PDN 清零时使用该值) 001 立即启动转换 当位 27 选择的边沿出现在 PIO0_2/SSEL/CT16B0_CAP0 时启动 010 转换 26:24 START 0 当位 27 选择的边沿出现在 PIO1_5/DIR/CT32B0_CAP0 时启动 011 转换 100 当位 27 选择的边沿出现在 CT32B0_MAT0[1]时启动转换 101 当位 27 选择的边沿出现在 CT32B0_MAT1[1]时启动转换 110 当位 27 选择的边沿出现在 CT16B0_MAT0[1]时启动转换 111 当位 27 选择的边沿出现在 CT16B0_MAT1[1]时启动转换 该位只有在 START 字段为 010~111 时有效。在这种情况下: 27 EDGE 1 在所选 CAP/MAT 信号的下降沿启动转换 0 0 在所选 CAP/MAT 信号的上升沿启动转换 31:28 - 保留,用户软件不应向保留位写 1。从保留位读出的值未定义 NA [1] 注意,这并不需要定时器匹配功能在器件管脚上出现。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 19 章 19.5.2 A/D 全局数据寄存器 A/D 全局数据寄存器包含最近一次 A/D 转换的结果。其中包含数据、DONE 和 Overrun 标志以及与数据相关的 A/D 通道的数目。 表 19.4 A/D 全局数据寄存器(AD0GDR –0x4001 C004)位描述 位 5:0 15:6 23:16 26:24 29:27 30 31 符号 未使用 V/VREF 未使用 CHN 未使用 OVERRUN DONE 描述 复位值 这些位读出时为 0。用于兼容未来的扩展和分辨率更高的 A/D 转换器 0 当 DONE 为 1 时,该字段包含的是一个二进制小数,表示的是 SEL 字段所选定的 ADn 管脚的电压除以 VDDA 管脚上的电压。该字段为 0 X 表示 ADn 脚的电压小于、等于或接近于 VSSA,而该字段为 0x3FF 表 明 ADn 脚的电压接近于、等于或大于 VREF 这些位读出时为 0。这些位的存在允许累计至少 256 个连续的 A/D 值 0 而无需使用 AND 屏蔽操作来防止其结果溢出到 CHN 字段 这些位包含 LS 位转换通道 X 这些位读出为 0。可用于未来 CHN 字段的扩展,使之兼容可以转换 0 更多通道的 A/D 转换器 Burst 模式下,如果在产生 LS 位结果转换之前一个或多个转换结果 丢失或被覆盖,则该位置 1。在非 FIFO 操作中,该位通过读该寄存 0 器清零 A/D 转换结束时该位置 1。该位在读取该寄存器和写 ADCR 时清零。 0 如果在转换过程中写 ADCR,则该位置位并启动新的转换 19.5.3 A/D 状态寄存器 A/D 状态寄存器允许同时检查所有 A/D 通道的状态。每个 A/D 通道的 ADDRn 寄存器 中的 DONE 和 OVERRUN 标志都反映在 ADSTAT 中。在 ADSTAT 中还可以找到中断标志 (所有 DONE 标志逻辑或的结果)。 表 19.5 A/D 状态寄存器(AD0STAT –0x4001 C030)位描述 位 7:0 15:8 16 31:17 符号 Done7:0 Overrun7:0 ADINT 未使用 描述 这些位反映了每个 A/D 通道的结果寄存器中的 DONE 状态标志 这些位反映各 A/D 通道的结果寄存器中的 OVERRUN 状态标志。读 ADSTAT 允许同时检查所有 A/D 通道的状态 该位为 A/D 中断标志。当任何一条 A/D 通道的 Done 标志置 1 且使能 A/D 产生中断(通过 ADINTEN 寄存器设置)时,该位置 1 未使用,始终为 0 复位值 0 0 0 0 19.5.4 A/D 中断使能寄存器 该寄存器用来控制转换完成时哪个 A/D 通道产生中断。例如,可能需要对一些 A/D 通 道进行连续转换来监控传感器。应用程序可根据需要读出最近一次转换的结果。这种情况下, 这些 A/D 通道的各转换结束时都不需要产生中断。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 19 章 表 19.6 A/D 中断使能寄存器(AD0INTEN –0x4001 C00C)位描述 位 符号 描述 复位值 这些位用来控制哪个 A/D 通道在转换结束时产生中断。当位 0 为 7:0 ADINTEN 7:0 1 时,A/D 通道 0 转换结束将产生中断,当位 1 为 1 时,A/D 通 0x00 道 1 转换结束将产生中断,依次类推 为 1 时,使能 ADDR 中的全局 DONE 标志产生中断。为 0 时, 8 ADGINTEN 1 只有个别由 ADINTEN 7:0 使能的 A/D 通道产生中断 31:9 未使用 未使用,始终为 0 0 19.5.5 A/D 数据寄存器 A/D 转换完成时,A/D 数据寄存器保存转换结果,还包含指示转换结束及转换溢出发生 的标志。 表 19.7 A/D 数据寄存器(AD0DR0 ~ AD0DR7 –0x4001 C010 ~ 0x4001 C02C)位描述 位 5:0 15:6 29:16 30 31 符号 未使用 V/VREF 未使用 OVERRUN DONE 描述 未使用,始终为 0 这些位读出为 0。用于兼容未来扩展和分辨率更高的 ADC 当 DONE 为 1 时,该字段为 ADC 转换结果(二进制表示),表示 ADn 管脚电压通过对 VREF脚上的电压分压得到。该字段为 0 表明 ADn 脚上的电压小于、等于或接近于 VREF,而该字段为 0x3FF 表明 AD 输入上的电压接近于、等于或大于 VREF 上的电压 这些位读出时总为 0。这些位可不使用 AND 屏蔽而累积连续的 A/D 值,至少可将 256 个值装入 CHN 字段,而不产生溢出 Burst 模式下,如果在产生 LS 位结果的转换前一个或多个转换结果 丢失或被覆盖,则该位置 1。通过读该寄存器清零该位 A/D 转换完成时该位置 1。该位在读寄存器时清零 复位值 0 NA 0 0 0 19.6 操作 19.6.1 硬件触发转换 如果 ADCR 中的 BURST 位为 0 且 START 字段的值包含在 010-111 之间,则当所选管 脚或定时器匹配的信号发生跳变时,A/D 转换器将启动一次转换。 19.6.2 中断 当 ADSTAT 寄存器中的 ADINT 位为 1 时,会向中断控制器发出一个中断请求。一旦已 使能中断(通过 ADINTEN 寄存器)的 A/D 通道的任一个 DONE 标志位变为 1,ADINT 位 就置 1。软件可通过中断控制器中对应 ADC 的中断使能位来控制是否因此而产生中断。要 清零相应的 DONE 标志,必须读取产生中断的 A/D 通道的结果寄存器。 19.6.3 精度和数字接收器 无论 IOCON 块中管脚的设置如何,A/D 转换器都能够测量任何 ADC 输入管脚的电压, 尽管如此,但若在 IOCON 寄存器中将管脚选为 ADC 功能,会使管脚的数字接收器禁能, 从而提高转换的精度(请见第 7 章“A/D 模式”小节)。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 目录 第 20 章 Flash 存储器编程固件 .................................................................................2 20.1 本章导读...................................................................................................................2 20.2 BOOT loader.............................................................................................................2 20.3 特性...........................................................................................................................2 20.4 应用...........................................................................................................................2 20.5 描述...........................................................................................................................2 20.5.1 复位后的存储器映射.......................................................................................2 20.5.2 通信协议...........................................................................................................3 20.5.3 Boot 处理流程图 ..............................................................................................4 20.5.4 扇区号...............................................................................................................5 20.6 代码读保护(CRP) ...............................................................................................6 20.6.1 ISP 入口保护 ....................................................................................................7 20.7 ISP 命令....................................................................................................................7 20.7.1 解锁<解锁代码>...........................................................................................8 20.7.2 设置波特率<波特率><停止位> ...............................................................8 20.7.3 回应<设定>...................................................................................................8 20.7.4 写 RAM<起始地址><字节数>........................................................................9 20.7.5 读存储器<地址><字节数>..............................................................................9 20.7.6 准备写操作的扇区<起始扇区号> <结束扇区号> .......................................10 20.7.7 将 RAM 内容复制到 Flash<字节数> ...............10 20.7.8 运行<地址><模式>........................................................................................ 11 20.7.9 擦除扇区<起始扇区号><结束扇区号> ........................................................ 11 20.7.10 扇区查空<起始扇区号><结束扇区号> ................................................ 11 20.7.11 读器件标识号 ......................................................................................... 12 20.7.12 读 Boot 代码版本号 ...............................................................................12 20.7.13 比较<地址 1><地址 2><字节数> ...............................................12 20.7.14 读 UID.....................................................................................................13 20.7.15 ISP 返回代码 ..................................................................................................13 20.8 IAP 命令 .................................................................................................................14 20.8.1 准备写操作扇区.............................................................................................15 20.8.2 将 RAM 内容复制到 Flash ............................................................................16 20.8.3 擦除扇区.........................................................................................................16 20.8.4 扇区查空.........................................................................................................17 20.8.5 读器件标识号.................................................................................................17 20.8.6 读 Boot 代码版本号 .......................................................................................17 20.8.7 比较<地址 1><地址 2><字节数> .................................................................18 20.8.8 重新调用 ISP ..................................................................................................18 20.8.9 读 UID.............................................................................................................18 20.8.10 IAP 状态代码 .................................................................................................18 20.9 串行调试(SWD)Flash 编程接口 ......................................................................19 20.10 Flash 存储器访问 ...................................................................................................19 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 20 章 第20章 Flash 存储器编程固件 20.1 本章导读 各种 Flash 配置和功能见表 20.1。 表 20.1 LPC111x 的 Flash 配置 类型编号 Flash LPC1111 8 KB LPC1112 16KB LPC1113 32KB 配置 Flash 存储器访问时间相关的内容见本章“Flash 存储器访问”小节。 20.2 BOOT loader BOOT loader 控制芯片复位后的初始化操作,并提供对 Flash 存储器编程的方法。这可 以对空片进行初始编程、对事先已编程的芯片进行擦除和再编程或者是在系统运行时通过系 统中的应用程序对 Flash 存储器进行编程。 20.3 特性  在系统编程:在系统编程(ISP)是通过使用 BOOT loader 软件和 UART0 串口对片 内 Falsh 存储器进行编程/再编程的方法。这种方法也可以在芯片位于终端用户板时 使用;  在应用编程:在应用编程(IAP)是通过终端用户的应用代码对片内 Flash 存储器 进行擦除/写操作的方法; 20.4 应用 Boot loader 提供了在系统与在应用编程的接口,以便对片上 Flash 进行编程。 20.5 描述 每次芯片上电或复位都会执行 BOOT loader 代码。BOOT loader 可以执行 ISP 命令处理 程序或用户的应用代码。复位后若 PIO0_1 脚为低电平,会被系统认为是外部硬件请求执行 ISP 命令处理程序。假设在 RESET 管脚上出现上升沿时,电源引脚正处于标称的水平,那么 在最多 3ms 后,会对 PIO0_1 管脚信号进行采样并确定是否继续用户代码还是进入 ISP 处理 程序。如果对 PIO0_1 管脚采样的结果为低电平,同时看门狗溢出标志被置位,那么外部硬 件启动 ISP 命令处理程序的请求将被忽略。如果并不存在执行 ISP 命令处理程序的请求 (PIO0_1 在复位后的采样结果为高电平),那么会搜寻有效的用户程序。如果找到有效的 用户程序,那么执行控制将由此程序接管。如果并未找到有效的用户程序,那么会调用自动 波特率例程。 20.5.1 复位后的存储器映射 引导块的大小为 16 KB,起始地址为存储器单元中的 0x1FFF 0000。Boot loader 被设计 为从该存储器区域运行,但 ISP 和 IAP 软件都会占用部分的片内 RAM。本章后面部分描述 RAM 的使用情况。复位后,驻留在片内 Flash 存储器的引导块中的中断向量也变为有效。 也就是说,引导块底部的 512 个字节的内容,将出现在起始地址为 0x0000 0000 的存储区域 中。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 20 章 1. 有效用户代码的判定标准 有效用户代码判定标准:保留的 ARM Cortex-M0 异常向量单元 7(在向量表中的偏移 量为 0x0000 001C)应当包含表入口 0~6 的校验和的 2 的补码。这样就使前 8 个表入口的校 验和为 0。Boot loader 代码校验 Flash 扇区 0 中的前 8 个单元。如果结果为 0,执行控制权 便转移给用户代码。 如果信号为无效,那么自动波特率程序通过串口 0 与主机进行同步。主机应当发送一个 同步字符“?”(0x3F)并等待响应。主机的串口应设定为 8 个数据位、1 个停止位且无校 验位。自动波特率程序根据自身的频率测量接收到的同步字符的位时间并对串口波特率发生 器进行编程。它还向主机发送一个 ASCII 字符串(“Synchronized”),作为响 应,主机应当发送接收到的字符串(“Synchronized”)。自动波特率程序通过 观察接收到的字符来验证是否同步。如果通过验证,则向主机发送“OK”。主 机应当通过发送正在运行部分的晶振频率(单位为 KHz)作为响应。例如,如果运行在 10MHz,主机的响应当为“10000”。在接收到晶振频率后再向主机发送 “OK”。如果同步验证没有通过,那么自动波特率程序再次等待一个同步字符。 在用户调用 ISP 的情况下要使自动波特率正确工作,CCLK 频率应当大于或等于 10MHz。 在接收到晶振频率后,器件初始化并调用 ISP 命令处理程序。出于安全性的考虑,在执 行 Flash 擦除/写操作命令和“Go”命令之前必须执行“Unlock(解锁)”命令。执行其它 命令时不需要执行解锁命令。每次 ISP 命令处理都要执行一次“Unlock(解锁)”命令。解 锁命令在本章“ISP 命令”小节中介绍。 20.5.2 通信协议 所有 ISP 命令都以单个 ASCII 字符串形式发送。字符串应当以回车(CR)和/或换行(LF) 控制字符作为结束符。多余的将被忽略。所有 ISP 响应都是以结束 的 ASCII 字符串形式发送。数据是以 UU 编码格式发送和接收。 1. ISP 命令格式 “命令 参数_0 参数_1 ... 参数_n”“数据”(只适用于写命令)。 2. ISP 响应格式 “返回_代码响应_0响应_1 ... 响应_n”“数 据”(数据只适用于读命令) 3. ISP 数据格式 数据流采用 UU 编码格式。UU 编码算法将 3 字节的二进制数据转换成 4 字节可打印的 ASCII 字符集,该编码的效率高于 Hex 格式(Hex 格式将 1 字节的二进制数据转换成 2 字节 的 ASCII Hex 数据)。发送器在发送 20 个 UU 编码行之后发送校验和。任何 UU 编码行的 长度都不应超过 61 个字符(字节),也就是说它可以保持 45 个数据字节。接收器应当将该 校验和与接收字节的校验和进行比较。如果校验和匹配,接收器响应“OK”来 继续下一次发送。如果校验和不匹配,接收器响应“RESEND”。作为响应,发 送器还应当重新发送字节。 UU 编码的描述可以再 wotsit 的网页上找到。 4. ISP 流量控制 软件 XON/XOFF 流程控制机制可防止缓冲区溢出时的数据丢失。当数据快速到达时, 发送 ASCII 控制字符 DC3(停止)使数据流停止。发送 ASCII 控制字符 DC1(启动)恢复 数据流。主机也应支持相同的流控制机制。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 20 章 5. ISP 命令中止 命令可通过发送 ASCII 控制字符“ESC”来中止。该特性在“ISP 命令”一节中并没有 作为一个命令。一旦接收到退出代码,ISP 命令处理器就会等待新的命令。 6. ISP 过程中的中断 在任何复位后,位于 Flash 引导块内的引导块中断向量都有效。 7. IAP 过程中的中断 在擦除/写操作过程中,片内 Flash 存储器不可访问。只有当用户应用程序代码启动执行 时,用户 Flash 区的中断向量才有效。在调用 Flash 擦除/写 IAP 之前,用户应当禁止中断或 确保用户中断向量在 RAM 中有效且中断处理程序位于 RAM 中。IAP 代码不能使用或禁止 中断。 8. ISP 命令处理器使用的 RAM ISP 命令使用片内地址 0x1000 017C 到 0x1000 025B 范围内的 RAM。用户可以使用该区 域,但是在复位时内容可能会丢失。Flash 编程命令使用片内 RAM 最顶端的 32 字节。堆栈 位于 RAM 顶端减去 32 字节。可使用的最大堆栈为 256 字节,堆栈是向下递增的。 9. IAP 命令处理器使用的 RAM Flash 编程命令使用片内 RAM 最顶端的 32 字节。可使用的最大堆栈为 128 字节,堆栈 是向下递增的。 20.5.3 Boot 处理流程图 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 20 章 复位 初始化 CRP1/2/3 否 使能? 是 使能调试 是 A 看门狗标志置位? 否 CRP3/NO_ISP 否 使能? 是 进入ISP 模式? 否 (PIO0_1 = LO W) 是 用户代码有效? 否 执行内部用户代码 用户代码有效? 否 是 是 否 运行自动波特率程序 A 否 自动波特率程序 执行成功? 是 接收晶振频率 执行ISP 命令处理程序 (1) 有关晶振频率处理的细节,请参考本章“重新调用ISP程序”小节的内容。 图 20.1 Boot 处理流程图 20.5.4 扇区号 有些 IAP 和 ISP 命令以“扇区”为单位进行操作,同时还指定扇区号。下表列出了 LPC111x 系列 ARM 的扇区号和存储器地址之间的对应关系。 表 20.2 LPC111x 系列 ARM 器件的扇区 扇区号 0 1 2 3 4 5 6 7 扇区大小(KB) 4 4 4 4 4 4 4 4 地址范围 0x0000 0000 –0x0000 0FFF 0x0000 1000 –0x0000 1FFF 0x0000 2000 –0x0000 2FFF 0x0000 3000 –0x0000 3FFF 0x0000 4000 –0x0000 4FFF 0x0000 5000 –0x0000 5FFF 0x0000 6000 –0x0000 6FFF 0x0000 7000 –0x0000 7FFF LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 20 章 20.6 代码读保护(CRP) 代码读保护是允许用户在系统中通过使能不同的安全级别来限制对片内 Flash 的访问和 ISP 的使用的一种机制。需要时,可通过在 Flash 地址单元 0x0000 02FC 编程特定的格式来 调用 CRP。IAP 命令不受代码读保护的影响。 要点:CRP 所作出的任何改变只有在器件经过一个电源周期之后才会生效。 表 20.3 代码读保护选项 名称 NO_ISP CRP1 CRP2 CRP3 在 0x000002FC 处编程的格式 0x4E64 7370 0x12345678 0x87654321 0x43218765 描述 阻止对 PIO0_1 管脚进行采样而进入 ISP 模式。PIO0_1 管脚作其他用途 禁止通过 JTAG 引脚访问芯片。该模式允许在下列条件约束下使用下列 ISP 命令来进行局部的 Flash 更新: 写 RAM 命令不能访问在 0x10000200 以下的 RAM; 将 RAM 内容复制到 Flash 命令不能写扇区 0; 只有在选择擦除所有扇区时,擦除命令才能擦除扇区 0; 比较命令禁能。 禁能读取存储器命令 当需要 CRP 且要更新 Flash 字段时可使用该模式,但不能擦除所有扇区。 由于在 Flash 部分更新的情况下比较命令禁能,因此次级装载程序应执 行校验和机制来验证 Flash 的完整性 禁止通过 JTAG 引脚访问芯片。下列的 ISP 命令被禁能: 读存储器; 写 RAM; 运行; 将 RAM 内容复制到 Flash; 比较。 使能 CRP2 时,ISP 擦除命令仅允许擦除所有用户扇区的内容 禁止通过 JTAG 引脚访问芯片。如果 Flash 扇区 0 中存在有效用户代码, 则禁止通过拉低 PIO0_1 来进入 ISP。 该模式有效的禁止了通过 PIO0_1 脚来强行进入 ISP 的行为。用户的应 用程序可决定是调用 IAP 来进行 Flash 更新还是通过 UART0 重新调用 ISP 命令来进行 Flash 更新 注:如果选择了 CRP3,此后该器件将无法执行厂商测试 表 20.4 代码读保护硬件/软件的相互作用 CRP 用户代码 是否有效 否 否 否 是 否 是 CRP1 是 CRP1 是 复位时 PIO0_1 脚电平 X 高 低 高 低 JTAG LPC1700 系列 ARM 是 ISP 模式下部分 Flash 是否使能 否进入 ISP 模式 是否更新 是 是 是 是 否 NA 是 是 是 否 否 NA 否 是 是 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 20 章 CRP 用户代码 是否有效 CRP2 是 CRP2 是 CRP3 是 CRP1 否 CRP2 否 CRP3 否 复位时 PIO0_1 脚电平 高 低 X X X X 续上表 JTAG LPC1700 系列 ARM 是 ISP 模式下部分 Flash 是否使能 否进入 ISP 模式 是否更新 否 否 NA 否 是 否 否 否 NA 否 是 是 否 是 否 否 是 否 表 20.5 不同 CRP 等级下允许使用的 ISP 命令 ISP 命令 解锁 CRP1 是 CRP2 是 CRP3 否 设置波特率 是 是 否 回应 是 是 否 是;只在 0x1000 0200 以 写 RAM 否 否 上 读存储器 否 否 否 准备写保护扇区 是 是 否 将 RAM 复制到 Flash 是;不到扇区 0 否 否 运行 否 否 否 是;当有在擦除所有扇区 擦除扇区 是;只有所有扇区 否 时才能擦除扇区 0 扇区查空 否 否 否 读器件 ID 否 读 Boot 代码版本 否 比较 否 否 否 否 否 否 否 读 UID 否 否 否 若 CRP 模式使能,并且允许通过 ISP 访问芯片,不支持或受限制的 ISP 命令将被终止 执行并同时返回代码 CODE_READ_PROTECTION_ENABLED。 20.6.1 ISP 入口保护 除了 3 种 CRP 模式外,用户可防止对 PIO0_1 采样进入 ISP 模式,从而释放 PIO0_1 脚, 使其用于其它方面。这称为 NO_ISP 模式。可通过对 0x0000 02FC 单元的 0x4E69 7370 编程 进入 NO_ISP 模式。 20.7 ISP 命令 下面的命令是 ISP 命令处理器所接受的命令。每个命令都支持具体的状态代码。当接收 到未定义命令时,命令处理程序会发送返回代码 INVALID_COMMAND。命令和返回代码 为 ASCII 格式。 只有当接收到的 ISP 命令执行完毕时,ISP 命令处理器才会发送 CMD_SUCCESS,这时 主机才能发送新的 ISP 命令。但“设置波特率”、“写 RAM”、“读存储器”和“运行” 命令除外。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 20 章 表 20.6 ISP 命令总结 ISP 命令 解锁 设置波特率 回应 写 RAM 读存储器 准备写操作的扇区 将 RAM 内容复制到 Flash 运行 擦除扇区 扇区查空 读器件 ID 读 Boot 代码版本 比较 读 UID 用法 U<解锁代码> B<波特率><停止位> A<设定> W<起始地址><字节数> R<地址><字节数> P<起始扇区号><结束扇区号> C<字节数> G<地址><模式> E<起始扇区号><结束扇区号> I<起始扇区号><结束扇区号> J K M<地址 1><地址 2><字节数> N 20.7.1 解锁<解锁代码> 描述 见表 20.7 见表 20.8 见表 20.9 见表 20.10 见表 20.11 见表 20.12 见表 20.13 见表 20.14 见表 20.15 见表 20.16 见表 20.17 见表 20.19 见表 20.20 见表 20.21 表 20.7 ISP 解锁命令 命令 输入 返回代码 描述 举例 U 解锁代码:2313010 CMD_SUCCESS | INVALID_CODE | PARAM_ERROR 该命令用于解锁 Flash 写、擦除和运行命令 “U 23130”解锁 Flash 写/擦除和运行命令 20.7.2 设置波特率<波特率><停止位> 表 20.8 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”设置串口波特率 57600bps 和 1 个停止位 20.7.3 回应<设定> 表 20.9 ISP 回应命令 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 20 章 命令 输入 返回代码 描述 举例 A 设定:打开=1 | 关闭=0 CMD_SUCCESS | PARAM_ERROR 回应命令的默认设定是打开。当打开时,ISP 命令处理器将接收到的串行数据发送回主机 "A 0"回应关闭 20.7.4 写 RAM<起始地址><字节数> 主机应只在接收到 CMD_SUCCESS 返回代码后才发送数据。当发送完 20 个 UU 编码行 之后主机应当发送校验和。校验和是通过把原始数据(UU 编码前)字节的值叠加起来产生 的,当发送完 20 个 UU 编码行后该值会重置。任何 UU 编码行的长度不应超过 61 个字符(字 节),也就是说,它可以携带 45 个数据字节。当数据少于 20 个 UU 编码行时,校验和按照 实际发送的字节数进行计算。ISP 命令处理器将它与接收字节的校验和进行比较。如果校验 和匹配,那么 ISP 命令处理器响应“OK”来继续下一次发送。如果校验和不匹 配,那么 ISP 命令处理器响应“RESEND”。作为响应,主机应当重新发送字节。 表 20.10 ISP 写 RAM 命令 命令 输入 返回代码 描述 举例 W 起始地址:要写入数据字节的 RAM 地址。该地址应当以字为边界 字节数:写入的字节数。计数值应当为 4 的倍数 CMD_SUCCESS | ADDR_ERROR(地址不是以字为边界)| ADDR_NOT_MAPPED | COUNT_ERROR(字节计数值不是 4 的倍数)| PARAM_ERROR | CODE_READ_PROTECTION_ENABLED 该命令用于将数据下载到 RAM。数据应当为 UU 编码格式。当代码读保护使能时该命令 被禁止 "W 268436224 4"向地址 0x1000 0300 写入 4 个字节数据 20.7.5 读存储器<地址><字节数> 数据流之后是命令成功返回代码。发送完 20 个 UU 编码行之后发送校验和。校验和是 通过把原始数据(UU 编码前)字节的值叠加起来产生的,当发送完 20 个 UU 编码行后该 值会重置。任何 UU 编码行的长度不应超过 61 个字符(字节),也就是说,它可以携带 45 个数据字节。当数据少于 20 个 UU 编码行时,校验和按照实际发送的字节数进行计算。主 机将它与接收字节的校验和进行比较。如果校验和匹配,那么主机响应“OK” 来继续下一次发送。如果校验和不匹配,主机响应“RESEND”。作为响应,ISP 命令处理器应当重新发送字节。 表 20.11 ISP 读存储器命令 命令 输入 R 起始地址:被读出数据字节的地址,该地址应当以字为边界 字节数:读出的字节数。计数值应该为 4 的倍数 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 20 章 命令 返回代码 描述 举例 续上表 R CMD_SUCCESS,后面是<实际数据(UU 编码)>| ADDR_ERROR(地址不是以字为边界)| ADDR_NOT_MAPPED | COUNT_ERROR(字节计数值不是 4 的倍数)| PARAM_ERROR | CODE_READ_PROTECTION_ENABLED 该命令用于读出 RAM 或 Flash 存储器的数据。当代码读保护使能时该命令禁能 "R 268435456 4"从地址 0x1000 0000 读出 4 个字节数据 20.7.6 准备写操作的扇区<起始扇区号> <结束扇区号> 该命令使 Flash 写/擦除操作分成两个步骤处理。 表 20.12 ISP 准备写操作命令的扇区 命令 输入 返回代码 描述 举例 P 起始扇区号 结束扇区号:应当大于或等于起始扇区号 CMD_SUCCESS | BUSY | INVALID_SECTOR | PARAM_ERROR 该命令必须在执行“将 RAM 内容复制到 Flash”或“擦除扇区”命令之前执行。“将 RAM 内容复制到 Flash”或“擦除扇区”命令的成功执行会使相关的扇区再次被保护。该命令 不能用于引导块。要准备单个扇区,可将“起始”和“结束”扇区号设置为相同值 "P 0 0"准备 Flash 扇区 0 20.7.7 将 RAM 内容复制到 Flash<字节数> 表 20.13 ISP 复制命令 命令 输入 返回 代码 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_ENABLED LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第 20 章 命令 描述 举例 续上表 C 该命令用于编程 Flash 存储器。“准备写操作的扇区”命令应当在该命令之前被执行。当 成功执行复制命令后,受影响的扇区将自动再次受到保护。不能通过该命令来写引导块。 当代码读保护使能时该命令被禁止 "C 0 268468224 512"将 RAM 地址 0x1000 8000 开始的 512 字节复制到 Flash 地 址0 20.7.8 运行<地址><模式> 表 20.14 ISP 运行命令 命令 输入 返回代码 描述 举例 G 地址:代码执行起始的 Flash 或 RAM 地址。该地址应当以字为边界 模式:T(执行 Thumb 模式下的程序)|A(执行 ARM 模式下的程序) CMD_SUCCESS | ADDR_ERROR | ADDR_NOT_MAPPED | CMD_LOCKED | PARAM_ERROR | CODE_READ_PROTECTION_ENABLED 该命令用于执行位于 RAM 或 Flash 存储器当中的程序。一旦成功执行该命令,就有可能 不再返回 ISP 命令处理程序。当代码读保护使能时该命令禁能 “G 0 A”跳转到 ARM 模式下的地址 0x0000 0000 处 20.7.9 擦除扇区<起始扇区号><结束扇区号> 表 20.15 ISP 擦除扇区命令 命令 输入 E 起始扇区号 结束扇区号:应当大于或等于起始扇区号 CMD_SUCCESS | BUSY | INVALID_SECTOR | 返回代码 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | CMD_LOCKED | PARAM_ERROR | 描述 CODE_READ_PROTECTION_ENABLED 该命令用于擦除片内 Flash 存储器的一个或多个扇区。引导块不能使用该命令来擦除。当 代码读保护使能时,该命令只允许擦除所有用户扇区的内容 举例 "E 2 3"擦除 Flash 扇区 2 和 3 20.7.10 扇区查空<起始扇区号><结束扇区号> LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 第 20 章 表 20.16 ISP 扇区查空命令 命令 输入 I 起始扇区号: 结束扇区号:应当大于或等于起始扇区号 返回代码 CMD_SUCCESS | SECTOR_NOT_BLANK(后跟<第一个非空字的偏移量> <非空字的内容>)| INVALID_SECTOR | 描述 举例 PARAM_ERROR | 该命令用于对片内 Flash 存储器的一个或多个扇区进行查空 对扇区 0 查空总是失败,这是由于前 64 字节重新映射到 Flash 引导块 "I 2 3"对 Flash 扇区 2 和 3 进行查空 20.7.11 读器件标识号 表 20.17 ISP 读器件标识命令 命令 输入 返回代码 描述 J 无 CMD_SUCCESS 后跟 ASCII 格式的器件标识号(见表 20.18) 该命令用于读取器件的标识号 表 20.18 LPC111x 系列 ARM 器件标识号 器件 LPC1111FHN33/101 LPC1111FHN33/201 LPC1112FHN33/101 LPC1112FHN33/201 LPC1113FHN33/201 LPC1113FHN33/301 LPC1113FBD48/301 LPC1114FHN33/201 LPC1114FHN33/301 LPC1114FBD48/301 LPC1114FA44/301 ASCII/dec 编码 68571179 68571179 69554219 69554219 70537259 70520875 70520875 71585835 71569451 71569451 71569451 Hex 编码 0x0416 502B 0x0416 502B 0x0425 502B 0x0425 502B 0x0434 502B 0x0434 102B 0x0434 102B 0x0444 502B 0x0444 102B 0x0444 102B 0x0444 102B 20.7.12 读 Boot 代码版本号 命令 输入 返回代码 描述 表 20.19 ISP 读 Boot 代码版本号命令 K 无 CMD_SUCCESS 后跟 2 字节 ASCII 格式的 Boot 代码版本号 将其解释为<字节 1(主)>.<字节 0(次)> 该命令用于读取 Boot 代码版本号 20.7.13 比较<地址 1><地址 2><字节数> LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1212 广州周立功单片机发展有限公司 第 20 章 命令 输入 返回代码 描述 举例 表 20.20 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 发起的前 512 个字节时,比较结果可能不正确。前 512 个 字节重新映射到 boot ROM "M 8192 268468224 4"将 RAM 地址 0x1000 8000 开始的 4 个字节与 Flash 地址 0x2000 开始的 4 个字节进行比较 20.7.14 读 UID 命令 输入 返回代码 描述 表 20.21 读 UID 命令 N 无 CMD_SUCCESS 后跟 E 类测试信息的 32 位字(ASCII 格式)。先发送低位地址的字 该命令用于读唯一的 ID 20.7.15 ISP 返回代码 返回代码 0 1 2 3 4 5 6 7 8 9 10 11 12 表 20.22 ISP 返回代码总览 符号 描述 CMD_SUCCESS 成功执行命令。只有成功执行了主机发出的命令后,才由 ISP 处理器发送该代码 INVALID_COMMAND 无效命令 SRC_ADDR_ERROR 源地址没有以字为边界 DST_ADDR_ERROR 目标地址的边界错误 SRC_ADDR_NOT_MAPPED 源地址的映射不在存储器映射中。无法考证运算值适用之 处 DST_ADDR_NOT_MAPPED 目标地址的映射不在存储器映射中。无法考证运算值适用 之处 COUNT_ERROR 字节计数值不是 4 的倍数或是一个非法值 INVALID_SECTOR 扇区号无效或结束扇区号大于起始扇区号 SECTOR_NOT_BLANK 扇区非空 SECTOR_NOT_PREPARED_ 为写操作准备扇区的命令未执行 FOR_WRITE_OPERATION COMPARE_ERROR 源和目标数据不相等 BUSY Flash 编程硬件接口忙 PARAM_ERROR 参数不足或无效参数 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1313 广州周立功单片机发展有限公司 第 20 章 返回代码 13 14 15 16 17 18 19 符号 ADDR_ERROR ADDR_NOT_MAPPED CMD_LOCKED INVALID_CODE INVALID_BAUD_RATE INVALID_STOP_BIT CODE_READ_PROTECTION _ENABLED 续上表 描述 地址没有以字为边界 地址的映射不在存储器映射中。无法考证运算值的适用之 处 命令被锁定 解锁代码无效 无效波特率设定 无效停止位设定 代码读保护使能 20.8 IAP 命令 对于在应用编程来说,应当通过寄存器 r0 中的字指针来调用 IAP 程序,该字指针指向 含有命令代码和参数的存储器(RAM)。IAP 命令的结果返回到寄存器 r1 所指向的结果表。 用户可以把寄存器 r0 和 r1 中的指针赋予相同的值,如此便能将命令表复用来存放结果。参 数表应当大到足够保存所有的结果以防结果的数目大于参数的数目。参数传递见图 20.2。参 数和结果的数目根据 IAP 命令而有所不同。参数的最大数目为 5,传送到“将 RAM 内容复 制到 Flash”命令。结果的最大数目为 4,由“读 UID”命令返回。命令处理器在接收到一 个未定义的命令时发送状态代码 INVALID_COMMAND。IAP 程序是 Thumb 代码,驻留在 地址 0x1FFF 1FF0。 可按下面方式使用 C 调用 IAP 函数。 定义 IAP 程序的入口地址。由于 IAP 地址的第 0 位是 1,因此,当程序计数器转移到该 地址时会使当前指令集变为 Thumb 指令集。 #define IAP_LOCATION 0x1ffff1ff1 定义数据结构或指针,将 IAP 命令表和结果表传递给 IAP 函数: unsigned long unsigned long 或 command[5]; result[4]; unsigned long * command; unsigned long * result; command = (unsigned long *) 0x… . result = (unsigned long *) 0x… . 定义函数类型指针,其包含 2 个参数,无返回值。需要注意的是 IAP 将函数结果和 R1 中的表格基址一同返回。 typedef void (*IAP) (unsigned int [ ] , unsigned int [ ]); IAP iap_entry; 设置函数指针: iap_entry=(IAP) IAP_LOCATION; 可使用下面的语句来调用 IAP iap_entry (command , result); LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1414 广州周立功单片机发展有限公司 第 20 章 根据 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 编程,那么用户 程序不应使用该空间。 表 20.23 IAP 命令总览 IAP 命令 准备写操作的扇区 将 RAM 内容复制到 Flash 擦除扇区 扇区查空 读器件 ID 读 Boot 代码版本 比较 重新调用 ISP 读 UID 命令代码 5010 5110 5210 5310 5410 5510 5610 5710 5810 描述 见表 20.24 见表 20.25 见表 20.26 见表 20.27 见表 20.28 见表 20.29 见表 20.30 见表 20.31 见表 20.32 ARM寄存器 r0 命令代码 参数1 参数2 命令参数表 ARM寄存器 r1 参数n 状态代码 结果1 结果2 结果n 图 20.2 IAP 参数传递 20.8.1 准备写操作扇区 该命令使 Flash 写/擦除操作分两步执行。 命令结果表 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1515 广州周立功单片机发展有限公司 第 20 章 表 20.24 IAP 为写操作准备扇区命令描述 命令 输入 返回代码 结果 描述 准备写操作扇区 命令代码:5010 参数 0:起始扇区号 参数 1:结束扇区号(应当大于或等于起始扇区号) CMD_SUCCESS | BUSY | INVALID_SECTOR 无 该命令必须在执行“将 RAM 内容复制到 Flash”或“擦除扇区”命令之前执行。“将 RAM 内容复制到 Flash”或“擦除扇区”命令的成功执行会导致相关的扇区再次被保护。不能 使用该命令准备启动扇区。要准备单个扇区,可将起始和结束扇区号设为相同值 20.8.2 将 RAM 内容复制到 Flash 表 20.25 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 存储器。受影响的扇区应先通过调用“准备写操作扇区”命令准备 好。当成功执行复制命令后,扇区将自动受到保护。该命令不能写引导扇区 20.8.3 擦除扇区 表 20.26 IAP 擦除扇区命令 命令 输入 擦除扇区 命令代码:5210 参数 0:起始扇区号 参数 1:结束扇区号(应当大于或等于起始扇区号) 参数 2:系统时钟频率(CCLK)(单位:KHz) LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1616 广州周立功单片机发展有限公司 第 20 章 续上表 命令 擦除扇区 CMD_SUCCESS | BUSY | 返回代码 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | 结果 INVALID_SECTOR 无 描述 该命令用于擦除片内 Flash 存储器的一个或多个扇区。该命令不能擦除引导扇区。要擦除 单个扇区可将“起始”和“结束”扇区号设定为相同值 20.8.4 扇区查空 表 20.27 IAP 扇区查空命令描述 命令 输入 返回代码 结果 描述 扇区查空 命令代码:5310 参数 0:起始扇区号 参数 1:结束扇区号(应当大于或等于起始扇区号) CMD_SUCCESS | BUSY | SECTOR_NOT_BLANK | INVALID_SECTOR | 结果 0:状态代码为 SECTOR_NOT_BLANK 时第一个非空字位置的偏移量 结果 1:非空字位置的内容 该命令用于对片内 Flash 存储器的一个或多个扇区进行查空。要查空单个扇区可将“起始” 和“结束”扇区号设定为相同值 20.8.5 读器件标识号 表 20.28 IAP 读器件标识命令描述 命令 输入 返回代码 结果 描述 命令代码:5410 参数:无 CMD_SUCCESS | 结果 0:器件标识号 该命令用于读取器件的标识号 读器件标识号 20.8.6 读 Boot 代码版本号 表 20.29 IAP 读 Boot 代码版本号命令 命令 输入 返回代码 结果 命令代码:5510 参数:无 读 Boot 代码版本号 CMD_SUCCESS | 结果 0:2 字节 Boot 代码版本号(ASCII 格式) 将其解释为<字节 1(主)>.<字节 0(次)> LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1717 广州周立功单片机发展有限公司 第 20 章 命令 描述 读 Boot 代码版本号 该命令用于读取引导代码版本号 续上表 20.8.7 比较<地址 1><地址 2><字节数> 命令 输入 返回代 码 结果 描述 表 20.30 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 开始的前 512 字节中的任意一个地址时,比较的结果可能不 正确。因为前 512 字节是可以重新映射到 RAM 中的 20.8.8 重新调用 ISP 表 20.31 重新调用 ISP 命令 输入 返回代码 结果 描述 比较 命令代码:5710 无 无 该命令用来调用 ISP 模式中的引导装载程序。它会映射引导向量,设定 PCLK= CCLK,配置 UART 管脚 RXD 和 TXD,复位计数器/定时器 CT32B1 和 U0FDR。当 内部 Flash 存储器中出现有效的用户程序且 PIO0_1 脚不可访问时,可使用该指令强 制进入 ISP 模式 20.8.9 读 UID 表 20.32 IAP 读 UID 命令 命令 输入 返回代码 结果 描述 20.8.10 IAP 状态代码 比较 命令代码:5810 CMD_SUCCESS 结果 0:第 1 个 32 位字(在最低地址) 结果 1:第 2 个 32 位字 结果 2:第 3 个 32 位字 结果 3:第 4 个 32 位字 该命令用于读唯一 ID LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1818 广州周立功单片机发展有限公司 第 20 章 返回代码 0 1 2 3 4 5 6 7 8 9 10 11 表 20.33 IAP 状态代码总结 符号 描述 CMD_SUCCESS 成功执行命令 INVALID_COMMAND 无效命令 SRC_ADDR_ERROR 源地址不是以字为边界 DST_ADDR_ERROR 目标地址的边界错误 SRC_ADDR_NOT_MAPPED 源地址的映射不在存储器映射中。无法得到运算值适用 对象的位置 DST_ADDR_NOT_MAPPED 目标地址的映射不在存储器映射中。无法得到运算值适 用对象的位置 COUNT_ERROR 字节计数值不是 4 的倍数或是一个非法值 INVALID_SECTOR 扇区号无效 SECTOR_NOT_BLANK 扇区非空 SECTOR_NOT_PREPARED_ 为写操作准备扇区命令未执行 FOR_WRITE_OPERATION COMPARE_ERROR 源和目标数据不相同 BUSY Flash 编程硬件接口忙 20.9 串行调试(SWD)Flash 编程接口 调试工具可将一部分 Flash 映像写入 RAM,然后按照正确的偏移地址重复调用 IAP 命 令“将 RAM 内容复制到 Flash”。 20.10 Flash 存储器访问 根据系统时钟频率,通过写入位于 0x4003 C010 地址的 FLASHCFG 寄存器,可以对 Flash 存储器访问的访问时间作出多种不同的配置。 注:若此寄存器设置不当,将导致 LPC111x 的 Flash 存储器的不正确运行。 表 20.34 Flash 配置寄存器(FLASHCFG,地址 0x4003 C010)各个位的描述 位 标识 值 描述 Flash 存储器访问时间。FLASHTIM+1 等于 Flash 访 问所占用的系统时钟数目 1 个系统时钟的 Flash 访问时间(用于高于 20MHz 00 的系统时钟) 1:0 FLASHTIM 2 个系统时钟的 Flash 访问时间(用于高于 40MHz 01 的系统时钟) 3 个系统时钟的 Flash 访问时间(用于高于 50MHz 10 的系统时钟) 11 保留 31:2 - 保留。用户软件不可更改这些位的值。位 31:2 必须 - 以所读取的原值写回。 复位值 10 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1919 广州周立功单片机发展有限公司 目录 第 21 章 串行线调试(SWD)........................................................................................2 21.1 本章导读...................................................................................................................2 21.2 特性...........................................................................................................................2 21.3 简介...........................................................................................................................2 21.4 描述...........................................................................................................................2 21.5 管脚描述...................................................................................................................2 21.6 调试注意事项...........................................................................................................2 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 21 章 第21章 串行线调试(SWD) 21.1 本章导读 所有 LPC111x 系列 ARM 的调试功能都相同。 21.2 特性  支持 ARM 串行线调试模式;  可直接对所有存储器、寄存器和外设进行调试;  调试阶段不需目标资源;  4 个断点。4 个指令断点,可以用来重映射修补代码的指令地址。2 个数据比较器, 可用来重映射修补文字的地址;  2 个数据观察点,可用作跟踪触发器; 21.3 简介 ARM Cortex-M0 集成了调试的功能。支持串行线调试功能。ARM Cortex-M0 被配置为 支持多达 4 个断点和 2 个观察点。 21.4 描述 LPC111x 系列 ARM 使用串行线调试模式进行调试。 21.5 管脚描述 下表列出了与调试和跟踪相关的不同管脚功能。有些功能与其它功能共用管脚,因此这 些功能不能同时使用。 表 21.1 JTAG 管脚描述 管脚名称 TCK TMS TDI TDO TRST SWCLK SWDIO 类型 输入 输入 输入 输出 输入 输入 输入/输出 描述 JTAG 测试时钟。该管脚在 JTAG 模式下是调试逻辑的时钟 JTAG 测试模式选择。TMS 管脚负责选择 TAP 状态机的下一个状态 JTAG 测试数据输入。这是移位寄存器的串行数据输入 JTAG 测试数据输出。这是移位寄存器的串行数据输出。在 TCK 信号 的下降沿,数据将通过移位寄存器从器件向外输出 JTAG 测试复位。可用 TRST 管脚来复位调试逻辑中的测试逻辑 串行线时钟。这个管脚在串行线调试模式下是调试逻辑的时钟 (SWDCLK)。在 JTAG 模式下该管脚为 TCK 管脚 串行线调试数据输入/输出。外部调试工具可通过 SWDIO 管脚来与 LPC111x 通讯,并对其进行控制。 21.6 调试注意事项 重要:用户必须知道调试期间的某些限制。最关键的一点就是:由于 ARM Cortex-M0 集成特性的限制,LPC1300 系列 ARM 不能通过常规方法从深度睡眠模式中唤醒。建议在调 试期间不要使用这些模式。 另一个问题是,调试模式改变了 ARM Cortex-M0 CPU 内部的低功耗工作模式,这波及 到了整个系统。这些差别意味着在调试期间不应对功耗进行测量,在测试期间测量的功耗值 会比在普通操作期间测量的值高。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 21 章 在调试阶段中,只要 CPU 停止,系统节拍定时器就会自动停止。其它外设不受影响。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 目录 第 22 章 ARM Cortex-M0 参考资料 ..........................................................................2 22.1 简介...........................................................................................................................2 22.2 Cortex-M0 的处理器和内核外设 ............................................................................2 22.2.1 系统级接口.......................................................................................................3 22.2.2 集成的可配置调试...........................................................................................3 22.2.3 Cortex-M0 处理器的特性小结 ........................................................................3 22.2.4 Cortex-M0 内核外设 ........................................................................................3 22.3 处理器.......................................................................................................................3 22.3.1 编程模型...........................................................................................................3 22.3.2 存储器模型.......................................................................................................9 22.3.3 异常模型.........................................................................................................13 22.3.4 故障处理.........................................................................................................17 22.3.5 电源管理.........................................................................................................18 22.4 指令集.....................................................................................................................20 22.4.1 指令集汇总.....................................................................................................20 22.4.2 内部函数.........................................................................................................22 22.4.3 关于指令的描述.............................................................................................22 22.4.4 存储器访问指令.............................................................................................26 22.4.5 跳转和控制指令.............................................................................................39 22.4.6 综合指令.........................................................................................................40 22.5 外设.........................................................................................................................46 22.5.1 关于 ARM Cortex-M0 ....................................................................................46 22.5.2 嵌套向量中断控制器.....................................................................................46 22.5.3 系统控制块.....................................................................................................50 22.5.4 系统定时器,SysTick....................................................................................54 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. ii 广州周立功单片机发展有限公司 第 22 章 第22章 ARM Cortex-M0 参考资料 22.1 简介 下面的参考资料以 ARM Cortex-M0 用户指南(ARM Cortex-M0 User Guide)为蓝本。 只针对 LPC111x Cortex-M0 的具体实现做了细微的改动。 22.2 Cortex-M0 的处理器和内核外设 Cortex-M0 处理器是一个入门级(entry-level)的 32 位 ARM Cortex 处理器,设计用在 更宽范围的嵌入式应用中。该处理器包含以下特性,给开发者提供了极大的便利:  结构简单,容易学习和编程;  功耗极低,运算效率高;  出色的代码密度;  确定、高性能的中断处理;  向上与 Cortex-M 处理器系列兼容。 图 22.1 Cortex-M0 的具体实现 Cortex-M0 处理器基于一个高集成度、低功耗的 32 位处理器内核,采用一个 3 级流水 线冯·诺伊曼结构(von Neumann architecture)。通过简单、功能强大的指令集以及全面优化 的设计(提供包括一个单周期乘法器在内的高端处理硬件),Cortex-M0 处理器可实现极高 的能效。 Cortex-M0 处理器采用 ARMv6-M 结构,基于 16 位的 Thumb 指令集,并包含 Thumb-2 技术。提供了一个现代 32 位结构所希望的出色性能,代码密度比其他 8 位和 16 位微控制器 都要高。 Cortex-M0 处理器紧密集成了一个可配置的嵌套向量中断处理器(NVIC),提供业界 领先的中断性能。NVIC 具有以下功能:  包含一个不可屏蔽的中断(NMI)。NMI 在 LPC111x 上不能实现;  提供零抖动中断选项;  提供 4 个中断优先级。 处理器内核和 NVIC 的紧密结合使得中断服务程序(ISR)可以快速执行,极大地缩短 了中断延迟。这是通过寄存器的硬件堆栈以及加载-乘和存储-乘操作的停止和重启来获得 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 22 章 的。中断处理程序不需要任何汇编封装代码,不用消耗任何 ISR 代码。末尾连锁的优化还极 大地降低了一个 ISR 切换到另一个 ISR 时的开销。 为了优化低功耗设计,NVIC 还与睡眠模式相结合,提供一个深度睡眠功能,使整个器 件迅速掉电。 22.2.1 系统级接口 Cortex-M0 处理器提供一个简单的系统级接口,使用 AMBA 技术来提供高速、低延迟 的存储器访问。 22.2.2 集成的可配置调试 Cortex-M0 处理器执行一个完整的硬件调试方案,带有大量的硬件断点和观察点选项。 通过一个非常适合微控制器和其他小型封装器件的 2 脚串行线调试(SWD)端口,提供了 高系统透明度的处理器、存储器和外设执行。 22.2.3 Cortex-M0 处理器的特性小结  高代码集成度,具有 32 位的性能;  工具和二进制代码与 Cortex-M 处理器系列向上兼容;  集成了极低功耗的睡眠模式;  高效的代码执行允许处理器时钟更低,或者延长睡眠模式的时间;  单周期的 32 位硬件乘法器;  零抖动的中断处理;  宽范围的调试功能。 22.2.4 Cortex-M0 内核外设 Cortex-M0 内核外设有: NVIC —— NVIC 是一个嵌入式中断控制器,支持低延迟的中断处理。 系统控制块 —— 系统控制块(SCB)是到处理器的编程模型接口。它提供系统执行信 息和系统控制,包括配置、控制和系统异常的报告。 系统定时器 —— 系统定时器,SysTick,是一个 24 位的递减定时器。可以将其用作一 个实时操作系统(RTOS)的节拍定时器,或者用作一个简单的计数器。 22.3 处理器 22.3.1 编程模型 本节描述了 Cortex-M0 的编程模型。除了个别内核寄存器的描述之外,本节还包含处理 器模式和堆栈的相关信息。 1. 处理器模式 处理器模式有: 线程模式 —— 用来执行应用软件。处理器在退出复位时进入线程模式。 处理器模式 —— 用来处理异常。处理器在完成所有的异常处理后返回到线程模式。 2. 堆栈 处理器使用一个满递减堆栈。这就意味着堆栈指针指向堆栈存储器中的最后一个堆栈 项。当处理器将一个新的项压入堆栈时,堆栈指针递减,然后将该项写入新的存储器单元。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 22 章 处理器执行两个堆栈,主堆栈和进程堆栈,两个堆栈有自己独立的堆栈指针副本,见本章“堆 栈指针”小节。 在线程模式下,CONTROL 寄存器控制着处理器使用主堆栈还是进程堆栈,见本章 “CONTROL 寄存器”小节。在处理器模式下,处理器总是使用主堆栈。处理器操作的选择 如下: 处理器模式 线程模式 处理器模式 表 22.1 处理器模式和堆栈使用的选择 用来执行 使用的堆栈 应用程序 主堆栈或进程堆栈,见本章“CONTROL 寄存器”小节 异常处理程序 主堆栈 3. 内核寄存器 处理器内核寄存器有: 名称 类型[1] 表 22.2 内核寄存器组小结 复位值 描述 R0-R12 R/W 不可知 见本章“通用寄存器”小节 MSP R/W 见文中描述 见本章“堆栈指针”小节 PSP R/W 不可知 见本章“堆栈指针”小节 LR R/W 不可知 见本章“链接寄存器”小节 PC R/W 见文中描述 见本章“程序计数器”小节 PSR R/W 不可知[2] 见表 22.3 APSR R/W 不可知 见表 22.4 IPSR EPSR RO 0x00000000 RO 不可知[2] 见表 22.5 见表 22.6 PRIMASK R/W 0x00000000 见表 22.7 CONTROL R/W 0x00000000 见表 22.8 [1] 描述线程模式和处理器模式下程序执行过程中的访问类型。调试访问可以不同。 [2] Bit[24]是 T-bit,从复位向量的 bit[0]加载进来。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 22 章 图 22.2 处理器内核寄存器组 (1)通用寄存器 R0-R12 是供数据操作使用的 32 位通用寄存器。 (2)堆栈指针 堆栈指针(SP)是寄存器 R13。在线程模式中,CONTROL 寄存器的 bit[1]指示了堆栈 指针的使用情况:  0 = 主堆栈指针(MSP)。这是复位值。  1 = 进程堆栈指针(PSP)。 复位时,处理器将地址 0x00000000 的值加载到 MSP 中。 (3)链接寄存器 链接寄存器(LR)是寄存器 R14。它保存子程序、函数调用和异常的返回信息。复位 时,LR 的值不可知。 (4)程序计数器 程序计数器(PC)是寄存器 R15。它包含当前的程序地址。复位时,处理器将复位向 量(地址:0x00000004)的值加载到 PC。值的 bit[0]复位时被加载到 EPSR 的 T 位,必须为 1。 (5)程序状态寄存器 程序状态寄存器(PSR)由下列 3 种寄存器组合而成:  应用程序状态寄存器(APSR)  中断程序状态寄存器(IPSR)  执行程序状态寄存器(EPSR) 在 32 位的 PSR 中,这 3 个寄存器的位域分配互斥。PSR 的位域分配如下: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 22 章 图 22.3 APSR、IPSR、EPSR 寄存器的位分配 这 3 个寄存器可以单独访问,也可以 2 个一组或 3 个一组进行访问,访问时,将寄存器 名称作为 MSR 或 MRS 指令的一个变量。例如:  使用寄存器名称 PSR,用 MRS 指令来读所有寄存器  使用寄存器名称 APSR,用 MSR 指令来写 APSR PSR 的组合和属性如下所示: 表 22.3 PSR 寄存器组合 寄存器 类型 组合 PSR R/W[1][2] APSR,EPSR 和 IPSR IEPSR RO EPSR 和 IPSR IAPSR R/W[1] APSR 和 IPSR EAPSR R/W[2] APSR 和 EPSR [1] 处理器忽略对 IPSR 位的写操作。 [2] 读 EPSR 位时返回零,处理器忽略对 EPSR 位的写操作。 有关访问程序状态寄存器的更多信息请参考本章“指令”一节中的描述。 应用程序状态寄存器:APSR 包含执行完前面的指令后条件标志的当前状态。有关寄存 器的属性请见表 22.2。寄存器的位分配如下所示: 表 22.4 APSR 的位分配 位 名称 功能 [31] N [30] Z [29] C [28] V [27:0] - 负值标志 零值标志 进位或借位标志 溢出标志 保留 有关 APSR 的负值、零值、进位或借位以及溢出标志的更多信息请参考本章“指令”一 节。 中断程序状态寄存器:ISP 包含当前中断服务程序(ISR)的异常编号。有关寄存器的 属性请见表 22.2。寄存器的位分配如下: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 22 章 位 [31:6] [5:0] 名称 - 异常编号 表 22.5 IPSR 的位分配 功能 保留 这是当前异常的编号: 0 = 线程模式 1 = 保留 2 = NMI 3 = HardFault 4-10 = 保留 11 = SVCall 12,13 = 保留 14 = PendSV 15 = SysTick 16 = IRQ0 . . . 47 = IRQ31 48-63 = 保留。 更多信息请见本章“异常类型”小节。 执行程序状态寄存器:EPSR 包含 Thumb 状态位。 有关 EPSR 属性请见表 22.2。EPSR 的位分配如下: 位 [31:25] [24] [23:0] 表 22.6 EPSR 的位分配 名称 功能 - 保留 T Thumb 状态位 - 保留 如果应用软件使用 MRS 指令直接读取 EPSR 将始终返回零。利用 MSR 指令来写 EPSR 的操作会被忽略。故障处理程序可以检查入栈的 PSR 的 EPSR 值来确定故障的原因。请见 本章“异常的进入和返回”小节。下面的操作可以清除 T~0 位: [1] 指令 BLX,BX 和 POP{PC} [2] 异常返回时恢复被压入栈中的 xPSR 值 [3] 进入异常时向量值的 bit[0] 在 T 位为 0 时尝试执行指令会导致 HardFault 或锁定故障,更多信息请见本章“锁定” 小节。 可中断-可重启的指令:可中断-可重启的指令有 LDM 和 STM。如果在执行这两条中的 其中一条指令的过程中出现中断,处理器就终止指令的执行。 在处理完中断后,处理器再从头开始重新执行指令。 (6)异常屏蔽寄存器 异常屏蔽寄存器禁止处理器处理异常。当异常可能影响到实时任务或要求连续执行的代 码序列时,异常就被禁能。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 22 章 可以使用 MSR 和 MRS 指令、或 CPS 指令改变 PRIMASK 的值来禁能或重新使能异常。 更多信息本章“MRS”和“MSR”和“CPS”小节。 优先级屏蔽寄存器:PRIMASK 寄存器阻止优先级可配置的所有异常被激活。有关寄存 器的属性请见表 22.2。寄存器的位分配如下: 表 22.7 PRIMASK 寄存器的位分配 位 名称 功能 [31:1] [0] PRIMASK 保留 0 = 无影响。 1 = 阻止优先级可配置的所有异常被激活。 (7)CONTROL 寄存器 CONTROL 寄存器控制着处理器处于线程模式时所使用的堆栈。寄存器的属性请见表 22.2。CONTROL 寄存器的位分配如下: 表 22.8 CONTROL 寄存器的位分配 位 名称 功能 [31:2] [1] [0] 有效堆栈指针 - 保留 定义当前的堆栈: 0 = MSP 是当前的堆栈指针 1 = PSP 是当前的堆栈指针 在处理器模式中,这个位读出为零,写操作被忽略。 保留 处理器模式始终使用 MSP,因此,在处理器模式下,处理器忽略对 CONTROL 寄存器 的有效堆栈指针位执行的明确的写操作。异常进入和返回机制会将 CONTROL 寄存器更新。 在一个 OS 环境中,推荐运行在线程模式中的线程使用进程堆栈,内核和异常处理器使 用主堆栈。 默认情况下,线程模式使用 MSP。要将线程模式中使用的堆栈指针切换成 PSP,只需 要使用 MSR 指令将有效堆栈位设置为 1,见本章“MRS”小节。 备注:当更改堆栈指针时,软件必须在 MSR 指令后立刻使用一个 ISB 指令。这样来保证 ISB 之后的 指令执行时使用新的堆栈指针,见本章“ISB”小节。 4. 异常和中断 Cortex-M0 处理器支持中断和系统异常。处理器和嵌套向量中断控制器(NVIC)划分 所有异常的优先级,并对所有异常进行处理。一个中断或异常会改变软件控制的正常流程。 处理器使用处理器模式来处理除复位之外的所有异常,更多信息见本章“异常的进入”小节 和本章“异常返回”小节。 NVIC 寄存器控制中断处理。更多信息请见“嵌套向量中断控制器”小节。 5. 数据类型 处理器: [1] 支持下列数据类型: — 32 位字 — 16 位半字 — 8 位字节 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 22 章 [2] 管理所有数据存储器访问都采用小端模式。指令存储器和专用外设总线(PPB)访 问始终是小端模式。更多信息请见本章“存储区、类型和属性”小节。 6. Cortex 微控制器软件接口标准 ARM 为编程 Cortex-M0 微控制器提供了 Cortex 微控制器软件接口标准(CMSIS)。 CMSIS 是器件驱动库的一个组成部分。 CMSIS 为 Cortex-M0 微控制器系统定义了: [1] 一种通用的方法来: — 访问外设寄存器 — 定义异常向量 [2] 内核外设寄存器的名称和内核异常向量的名称 [3] 一个 RTOS 内核的器件独立的接口 CMSIS 包含 Cortex-M0 处理器中内核外设的地址定义和数据结构。还包含有组成 TCP/IP 堆栈和 Flash 文件系统的中间件元件的可选接口。 通过使能模板代码的重复使用以及将不同中间件厂商提供的符合 CMSIS 的软件组件组 合起来,CMSIS 大大简化了整个软件开发过程。软件厂商可以扩展 CMSIS,使其包含各个 厂商的外设定义以及这些外设的访问函数。 本文档包含了 CMSIS 定义的寄存器名称,并对处理器内核和内核外设相关的 CMSIS 函数进行了简单描述。 备注:本文档使用 CMSIS 定义的寄存器缩略名称。在某些情况下,这些名称与其它文档中可能用到 的结构缩略名称不同。 下面各节给出了有关 CMSIS 的更多信息: [1] 本章“电源管理编程提示”小节; [2] 本章“内部函数”小节; [3] 本章“使用 CMSIS 访问和 Cortex-M0 NVIC 寄存器”小节; [4] 本章“NVIC 编程提示”小节。 22.3.2 存储器模型 本节描述处理器存储器映射以及存储器访问的行为。处理器有一个固定的存储器映射, 提供有高达 4GB 的可寻址存储空间。存储器映射是: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 22 章 图 22.4 Cortex-M3 存储器映射 处理器为内核外设寄存器保留了专用外设总线(PPB)地址范围空间,见本章的 “Cortex-M0 的处理器和内核外设”一节。 1. 存储区、类型和属性 存储器映射分成多个区域。每个区域有一个定义好的存储器类型,某些区域还有附加的 存储器属性。存储器类型和属性决定了各个区域的访问行为。 存储器类型是: 常规存储器 — 处理器为了提高效率,可以重新对交易进行排序,或者刻意地进行读取。 Device 存储器 — 处理器保护与 Device 或强秩序存储器(Strong-ordered memory)的 其它交易相关的交易秩序。 强秩序存储器 — 处理器保护与所有其他交易相关的交易秩序。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1010 广州周立功单片机发展有限公司 第 22 章 Device 存储器和强秩序存储器的不同秩序要求意味着,存储器系统可以缓冲一个对 Device 存储器的写操作,但不准缓冲对强秩序存储器的写操作。 附加的存储器属性包括: 永不执行(XN) — 表示处理器阻止指令访问。当执行从存储器的 XN 区提取出来的 指令时,产生一个 HardFault 异常。 2. 存储器系统的存储器访问秩序 对于大多数由明确的存储器访问指令引发的存储器访问,存储器系统都不保证访问秩序 与指令的编写顺序完全一致,只要所有访问秩序的重新安排不影响指令序列的操作就行。一 般情况下,如果两个存储器访问的顺序必须与两条存储器访问指令编写的顺序完全一致程序 才能正确执行,软件就必须在两条存储器访问指令之间插入一条内存屏障指令,见本章“软 件的存储器访问秩序”小节。 但是,存储器系统不保证 Device 存储器和强秩序存储器的一些访问秩序。对于两条存 储器访问指令 A1 和 A2,如果 A1 的编写顺序在前,两条指令所引发的存储器访问顺序为: 图 22.5 存储器排序限制 在表中: - — 表示存储器系统不保证访问秩序。 < — 表示观察到访问顺序与指令编写顺序一致,即,A1 总是在 A2 之前。 3. 存储器访问的行为 存储器映射中每个区域的访问行为如下: 地址范围 表 22.9 存储器访问的行为 存储区域 存储器类型[1] XN[1] 0x00000000-0x1FFFFFFF Code 常规存储器 - 0x20000000-0x3FFFFFFF SRAM 常规存储器 - 0x40000000-0x5FFFFFFF 外设 Device 存储器 XN 0x60000000-0x9FFFFFFF 外部 RAM 常规存储器 - 0xA0000000-0xDFFFFFFF 外部设备 Device 存储器 XN 专用外设总 0xE0000000-0xE00FFFFF 强秩序存储器 XN 线 0xE0100000-0xFFFFFFFF Device Device 存储器 XN 描述 程序代码的可执行区域。也可以 把数据保存到这里 数据的可执行区域。也可以把代 码保存到这里 外部设备存储器 数据的可执行区域 外部设备存储器 这个区域包括 NVIC、系统定时 器和系统控制块。这个区域只能 使用字访问 厂商提供的特定存储器 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1111 广州周立功单片机发展有限公司 第 22 章 [1] 更多信息请见本章“存储区、类型和属性”小节。 Code、SRAM 和外部 RAM 区域可以保存程序。 4. 软件的存储器访问秩序 程序流程的指令顺序不能担保相应的存储器交易顺序。这是因为: [1] 为了提高效率,处理器可以将一些存储器访问的顺序重新安排,只要不影响指令序 列的操作就行; [2] 存储器映射中的存储器或设备可能有不同的等待状态; [3] 某些存储器访问被缓冲,或者是刻意为之的。 “存储器系统的存储器访问秩序”小节描述了存储器系统在哪些情况下能保证存储器访 问的秩序。但是,如果存储器访问的秩序十分重要,软件就必须插入一些内存屏障指令来强 制保持存储器访问的秩序。处理器提供了以下内存屏障指令: DMB — 数据存储器屏障(DMB)指令保证先完成未处理的存储器交易,再执行后面 的存储器交易,见本章“DMB”小节。 DSB — 数据同步屏障(DSB)指令保证先完成未处理的存储器交易,再执行后面的指 令,见本章“DSB”小节。 ISB — 指令同步屏障(ISB)保证所有已完成的存储器交易的结果后面的指令都能辨 认出来,见本章“ISB”小节。 下面是内存屏障指令使用的一些例子: 向量表 — 如果程序改变了向量表中的一项,然后又使能了相应的异常,那么就在两个 操作之间插入一条 DMB 指令。这就确保了,如果异常在被使能后立刻被采纳,处理器能使 用新的异常向量。 自修改代码 — 如果一个程序包含自修改代码,代码修改之后在程序中立刻使用一条 ISB 指令。这就确保了后面的指令执行使用的是更新后的程序。 存储器映射切换 — 如果系统包含一个存储器映射切换机制,在切换存储器映射之后使 用一条 DSB 指令。这就确保了后面的指令执行使用的是更新后的存储器映射。 对强秩序存储器(例如,系统控制块)执行的存储器访问不需要使用 DMB 指令。 处理器保护与所有其他交易相关的交易秩序。 5. 存储器的字节存储顺序(Memory endianness) 处理器看到的存储器是一个从零开始、编号逐次递增的字节集合。例如,字节 0~3 存放 第一个保存的字,字节 4~7 存放第二个保存的字。“(1)小端格式”小节描述了数据的字 在存储器中是如何存放的。 (1)小端格式 在小端格式中,处理器将字的最低有效字节(lsbyte)保存在编号最小的字节中,最高 有效字节(msbyte)保存在编号最大的字节中。例如: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1212 广州周立功单片机发展有限公司 第 22 章 图 22.6 小端格式 22.3.3 异常模型 本节描述异常模型。 1. 异常状态 每个异常都处于下面其中一种状态: 无效 — 异常无效,未挂起。 挂起 — 异常正在等待处理器处理。 一个外设或软件的中断请求可以改变相应的挂起中断的状态。 有效 — 一个异常正在被处理器处理,但处理尚未结束。 一个异常处理程序可以中止另一个异常处理程序的执行。在这种情况下,两个异常都处 于有效状态。 有效和挂起 — 异常正在被处理器处理,而且有一个来自同一个异常源的异常正在等待 处理。 2. 异常类型 异常类型有: 备注:LPC111x 没有 NMI。 复位 — 复位在上电或热复位时启动。异常模型将复位当做一种特殊形式的异常来对 待。当复位产生时,处理器的操作停止(可能停止在一条指令的任何一点上)。当复位撤销 时,从向量表中复位项提供的地址处重新起动执行。执行在线程模式下重新起动。 NMI — 一个不可屏蔽中断(NMI)可以由外设产生,也可以由软件来触发。这是除复 位之外优先级最高的异常。NMI 永远使能,优先级固定为 2。NMI 不能: [1] 被屏蔽,它的执行也不能被其他任何异常中止; [2] 被除复位之外的任何异常抢占。 HardFault — HardFault 是由于在正常操作过程中或在异常处理过程中出错而出现的一 个异常。HardFault 的优先级固定为-1,表明它的优先级要高于任何优先级可配置的异常。 SVCall — 管理程序调用(SVC)异常是一个由 SVC 指令触发的异常。在 OS 环境下, 应用程序可以使用 SVC 指令来访问 OS 内核函数和器件驱动。 PendSV — PendSV 是一个中断驱动的系统级服务请求。在 OS 环境下,当没有其它 异常有效时,使用 PendSV 来进行任务切换。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1313 广州周立功单片机发展有限公司 第 22 章 SysTick — SysTick 是一个系统定时器到达零时产生的异常。软件也可以产生一个 SysTick 异常。在 OS 环境下,处理器可以将这个异常用作系统节拍。 中断(IRQ) — 中断(或 IRQ)是外设发出的一个异常,或者是由软件请求产生的一 个异常。所有中断都与指令执行不同步。在系统中,外设使用中断来与处理器通信。 异常编号[1] 1 表 22.10 各种异常类型的特性 IRQ 编号[1] 异常类型 优先级 - 复位 -3,优先级最高 向量地址[2] 0x00000004 2 -14 NMI -2 0x00000008 3 4-10 11 12-13 14 15 -13 HardFault - 保留 -5 SVCall - 保留 -2 PendSV -1 SysTick 16 和大于 16 的值 0 和大于 0 的值 中断(IRQ) -1 可配置[3] 可配置[3] 可配置[3] 可配置[3] 0x0000000C - 0x0000002C - 0x00000038 0x0000003C 0x00000040 以及更高 的地址[4] [1] 为了简化软件层,CMSIS 只使用 IRQ 编号,因此,对除中断外的其他异常都使用负值。IPSR 返 回异常编号,请见表 22.5。 [2] 更多信息请见“向量表”小节。 [3] 见“中断优先级寄存器”小节。 [4] 地址值以 4 为步长,逐次递增。 对于除复位之外的异步异常,在异常被触发和处理器进入异常处理程序之间,处理器可 以执行条件指令。 被特许的软件可以将表 22.10 中列出的优先级可配置的异常禁能,见本章“中断清除使能寄存器”小节。 有关 HardFault 的更多信息,请见本章“故障处理”小节。 3. 异常处理程序 处理器使用以下处理程序来处理异常: 中断服务程序(ISR)— 中断 IRQ0~IRQ31 是由 ISR 来处理的异常。 故障处理程序 — HardFault 是唯一一个由故障处理程序来处理的异常。 系统处理程序 — NMI、PendSV,SVCall、SysTick 和 HardFault 是由系统处理程序来 处理的全部异常。 4. 向量表 向量表包含堆栈指针的复位值以及所有向量处理程序的起始地址(也称为异常向量)。 图 22.7 显示了异常向量在向量表中的放置顺序。每个向量的最低有效位必须为 1,表明异常 处理程序都是用 Thumb 代码编写的。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1414 广州周立功单片机发展有限公司 第 22 章 图 22.7 向量表 向量表的地址固定为 0x00000000。 5. 异常优先级 如表 22.10 所示,每个异常都有对应的优先级: [1] 越小的优先级值指示一个更高的优先级; [2] 除复位、HardFault 和 NMI 之外,所有异常的优先级都是可配置的; 如果软件不配置任何优先级,那么,所有优先级可配置的异常的优先级就都为 0。有关 配置异常优先级的信息请见: [1] 本章“系统处理程序优先级寄存器”小节 [2] 本章“中断优先级寄存器”小节 优先级值的配置范围为 0 –192,各值以 64 为间距。复位、HardFault 和 NMI 这些有固 定的负优先级值的异常的优先级高于任何其他的异常。 给 IRQ[0]分配一个高优先级值、给 IRQ[1]分配一个低优先级值就意味着 IRQ[1]的优先 级高于 IRQ[0]。如果 IRQ[1]和 IRQ[0]都有效,先处理 IRQ[1]。 如果多个挂起的异常具有相同的优先级,异常编号越小的挂起异常优先处理。例如,如 果 IRQ[0]和 IRQ[1]正在挂起,并且两者的优先级相同,那么先处理 IRQ[0]。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1515 广州周立功单片机发展有限公司 第 22 章 当处理器正在执行一个异常处理程序时,如果出现一个更高优先级的异常,那么这个异 常就被抢占。如果出现的异常的优先级和正在处理的异常的优先级相同,这个异常就不会被 抢占,与异常的编号大小无关。但是,新中断的状态就变为挂起。 6. 异常的进入和返回 描述异常处理时使用了下列术语: 抢占 — 当处理器正在执行一个异常处理程序时,如果一个异常的优先级比正在处理的 异常的优先级更高,那么低优先级的异常就被抢占。 当一个异常抢占另一个异常时,这些异常就被称为嵌套异常。更多信息请见本章“异常 的进入”小节。 返回 — 当异常处理程序结束,并且满足以下条件时,异常就返回。 [1] 没有优先级足够高的挂起异常要处理 [2] 已结束的异常处理程序没有在处理一个迟来的异常 处理器弹出堆栈,处理器状态恢复到中断出现之前的状态,更多信息请见“(2)异常 返回”小节。 末尾连锁 — 这个机制加速了异常的处理。当一个异常处理程序结束时,如果一个挂起 的异常满足异常进入的要求,就跳过堆栈弹出,控制权移交给新的异常处理程序。 迟来(Late-arriving) — 这个机制加速了抢占的处理。如果一个高优先级的异常在前 一个异常正在保存状态的过程中出现,处理器就转去处理更高优先级的异常,开始提取这个 异常的向量。状态保存不受迟来异常的影响,因为两个异常保存的状态相同。从迟来异常的 异常处理程序返回时,要遵守正常的末尾连锁规则。 (1)异常的进入 当有一个优先级足够高的挂起异常存在,并且满足下面的任何一个条件,就进入异常处 理: [1] 处理器处于线程模式 [2] 新异常的优先级高于正在处理的异常,这时,新异常就抢占了正在处理的异常 当一个异常抢占了另一个异常时,异常就被嵌套。 优先级足够高的意思是该异常的优先级比屏蔽寄存器中所限制的任何一个异常组的优 先级都要高,见本章“异常屏蔽寄存器”小节。优先级比这个异常要低的异常被挂起,但不 被处理器处理。 当处理器处理异常时,除非异常是一个末尾连锁异常或迟来的异常,否则,处理器都把 信息压入到当前的堆栈中。这个操作被称为入栈(stacking),8 个数据字的结构被称为栈 帧(stack frame)。栈帧包含以下信息: 图 22.8 异常进入时堆栈的内容 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1616 广州周立功单片机发展有限公司 第 22 章 入栈后,堆栈指针立刻指向栈帧的最低地址单元。栈帧按照双字地址对齐。 栈帧包含返回地址。这是被中止的程序中下条指令的地址。这个值在异常返回时返还给 PC,使被中止的程序恢复执行。 处理器执行一次向量提取,从向量表中读出异常处理程序的起始地址。当入栈结束时, 处理器开始执行异常处理程序。同时,处理器向 LR 写入一个 EXC_RETURN 值。这个值指 示了栈帧对应哪个堆栈指针以及在异常出现之前处理器处于什么工作模式。 如果在异常进入的过程中没有更高优先级的异常出现,处理器就开始执行异常处理程 序,并自动将相应的挂起中断的状态变为有效。 如果在异常进入的过程中有另一个优先级更高的异常出现,处理器就开始执行这个高优 先级异常的异常处理程序,不改变前一个异常的挂起状态。这是一个迟来异常的情况。 (2)异常返回 当处理器处于处理器模式并且执行下面其中一条指令尝试将 PC 设为 EXC_RETURN 值 时,出现异常返回: [1] POP 指令,用来加载 PC [2] BX 指令,用来使用任意的寄存器 在异常进入时处理器将一个 EXC_RETURN 值保存到 LR 中。异常机制依靠这个值来检 测处理器何时执行完一个异常处理程序。EXC_RETURN 值的 bit[31:4]为 0xFFFFFFF。当处 理器将一个相应的这种形式的值加载到 PC 时,它将检测到这个操作并不是一个正常的分支 操作,而是异常已经结束。因此,处理器启动异常返回序列。EXC_RETURN 的 bit[3:0]指出 了所需的返回堆栈和处理器模式,如表 22.11 所示。 EXC_RETURN 0xFFFFFFF1 0xFFFFFFF9 0xFFFFFFFD 所有其他值 表 22.11 异常返回的行为 描述 返回到处理器模式 异常返回获得主堆栈的状态 返回后执行使用 MSP 返回到线程模式 异常返回获得 MSP 的状态 返回后执行使用 MSP 返回到线程模式 异常返回获得 PSP 的状态 返回后执行使用 PSP 保留 22.3.4 故障处理 故障是异常的一个子集,见 22.3.3 节。所有的故障都导致 HardFault 异常被处理,或者, 如果故障在 NMI 或 HardFault 处理程序中出现,会导致锁定。发生以下情况会导致出现故障: [1] 在一个优先级等于或高于 SVCall 的地方执行 SVC 指令; [2] 在没有调试器的情况下执行 BKPT 指令; [3] 在加载或存储时出现一个系统产生的总线错误; [4] 执行一个 XN 存储器地址中的指令; [5] 从系统产生了一个总线故障的地址单元中执行指令; [6] 在提取向量时出现了一个系统产生的总线错误; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1717 广州周立功单片机发展有限公司 第 22 章 [7] 执行一个未定义的指令; [8] 由于 T 位之前被清零而导致不再处于 Thumb 状态的情况下执行一条指令; [9] 尝试对一个不对齐的地址执行加载或存储操作。 只有复位和 NMI 可以抢占优先级固定的 HardFault 处理程序。HardFault 可以抢占除复 位、NMI 或其他硬故障之外的任何异常。 1. 锁定 如果在执行 NMI 或 HardFault 处理程序时出现故障,或者,在一个使用 MSP 的异常返 回时出栈的却是 PSR 的时候系统产生一个总线错误,处理器进入一个锁定状态。当处理器 处于锁定状态时,它不执行任何指令。处理器保持处于锁定状态,直到下面任何一种情况出 现: [1] 出现复位; [2] 调试器将锁定状态终止; [3] 出现一个 NMI,以及当前的锁定处于 HardFault 处理程序中。 如果锁定状态出现在 NMI 处理程序中,后面的 NMI 就无法使处理器离开锁定状态。 22.3.5 电源管理 Cortex-M0 处理器的睡眠模式可以降低功耗,睡眠模式包含 2 种: [1] 睡眠模式:停止处理器时钟 [2] 深度睡眠模式(见第 3 章“电源管理”小节) SCR 的 SLEEPDEEP 位选择使用哪种睡眠模式,见本章“系统控制寄存器”小节。 本节描述了进入睡眠模式的机制和将器件从睡眠模式唤醒的条件。 1. 进入睡眠模式 本节描述了软件可以用来使处理器进入睡眠模式的一种机制。 系统可以产生伪唤醒事件,例如,一个调试操作唤醒处理器。因此,软件必须能够在这 样的事件之后使处理器重新回到睡眠模式。程序中可以有一个空闲循环使得器件回到睡眠模 式。 (1)等待中断 等待中断指令(WFI)使器件立刻进入睡眠模式。当执行一个 WFI 指令时,处理器停 止执行指令,进入睡眠模式。更多信息见本章“WFI”小节。 (2)等待事件 备注:WFE 指令不能在 LPC111x 上使用。 等待事件指令(WFE)根据一个一位的事件寄存器的值来进入睡眠模式。处理器执行 一个 WFE 指令时检查事件寄存器的值: 0 — 处理器停止执行指令,进入睡眠模式 1 — 处理器将寄存器的值设为 0,并继续执行指令,不进入睡眠模式 更多信息请见本章“WFE”小节。 如果事件寄存器为 1,表明处理器在执行 WFE 指令时不必进入睡眠模式。通常的原因 是出现了一个外部事件,或者系统中的另一个处理器已经执行了 SEV 指令,见本章“SEV” 小节。软件不能直接访问这个寄存器。 (3)Sleep-on-exit LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1818 广州周立功单片机发展有限公司 第 22 章 如果 SCR 的 SLEEPONEXIT 位被设为 1,当处理器完成一个异常处理程序的执行并返 回到线程模式时,处理器立刻进入睡眠模式。如果应用只要求处理器在中断出现时运行,就 可以使用这种机制。 2. 从睡眠模式唤醒 处理器的唤醒条件取决于使处理器进入睡眠模式所采用的机制。 (1)从 WFI 或 sleep-on-exit 唤醒 通常,只有当检测到一个优先级足够高的异常导致进入异常处理时,处理器才唤醒。 某些嵌入式系统在处理器唤醒之后可能必须先执行系统恢复任务,然后再执行中断处理 程序。通过将 PRIMASK 位置位来实现这个操作。如果到来的中断被使能,并且优先级高于 当前的异常优先级,处理器就唤醒,但不执行中断处理程序,直至处理器将 PRIMASK 设为 0,见本章“异常屏蔽寄存器”小节。 (2)从 WFE 唤醒 如果出现以下情况,处理器就唤醒: [1] 处理器检测到一个优先级足够高的异常导致进入异常处理 [2] 在一个多处理器的系统中,系统中的另一个处理器执行了 SEV 指令 另外,如果 SCR 的 SEVONPEND 位被设为 1,那么任何新的挂起中断都能触发一个事 件和唤醒处理器,即使这个中断被禁能,或者这个中断的优先级不够高而导致无法进入异常 处理。有关 SCR 的更多信息请见本章“系统控制寄存器”小节。 3. 电源管理编程提示 ISO/IEC C 不能直接产生 WFI、WFE 和 SEV 指令。CMSIS 为这些指令提供了以下内在 函数: void __WFE(void) void __WFI(void) void __SEV(void) /* 等待事件 */ /* 等待中断 */ /* 发送事件 */ LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 1919 广州周立功单片机发展有限公司 第 22 章 22.4 指令集 22.4.1 指令集汇总 处理器执行这种版本的指令集。表 22.12 列出了所支持的指令。 表 22.12 的备注如下:  尖括号< >括着操作数的备用格式;  大括号{}括着可选的操作数和助记符部分;  操作数列所列出的操作数不完全。 有关指令和操作数的信息,详见指令描述。 助记符 ADCS ADD{S} ADR ANDS ASRS B{cc} BICS BKPT BL BLX BX CMN CMP CPSID CPSIE DMB DSB EORS ISB LDM LDR LDR LDRB 表 22.12 Cortex-M0 指令 操作数 简述 标志 {Rd,} Rn, Rm 进位加法 N,Z,C,V {Rd,} Rn, Rd, label 加法 N,Z,C,V 将基于 PC 相对偏移的地址读到寄存 - 器 {Rd,} Rn, Rm 位与操作 N,Z {Rd,}Rm, label {Rd,} Rn, Rm #imm label Rm Rm Rn, Rm Rn, i i {Rd,} Rn, Rm - Rn{!}, reglist 算术右移 N,Z,C 跳转{有条件} 位清除 断点 带链接的跳转 带链接的间接跳转 间接跳转 比较负值 比较 更改处理器状态,关闭中断 更改处理器状态,使能中断 数据内存屏障 数据同步屏障 异或 指令同步屏障 加载多个寄存器,访问之后会递增地 址 N,Z N,Z,C,V N,Z,C,V N,Z - - Rt, label 从基于 PC 相对偏移地址上加载寄存 - 器 Rt, 用字加载寄存器 - [Rn, ] Rt, 用字节加载寄存器 - [Rn, ] LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2020 广州周立功单片机发展有限公司 第 22 章 助记符 LDRH LDRSB LDRSH LSLS U MOV{S} MRS MSR MULS MVNS NOP ORRS POP PUSH REV REV16 REVSH RORS RSBS SBCS SEV STM STR STRB STRH SUB{S} SVC SXTB SXTH TST UXTB UXTH 操作数 Rt, [Rn, ] Rt, [Rn, ] Rt, [Rn, ] {Rd,} Rn, {Rd,} Rn, Rd, Rm Rd, spec_reg spec_reg, Rm Rd, Rn, Rm Rd, Rm {Rd,} Rn, Rm reglist reglist Rd, Rm Rd, Rm Rd, Rm {Rd,} Rn, Rs {Rd,} Rn, #0 {Rd,} Rn, Rm Rn!, reglist Rt, [Rn, ] Rt, [Rn, ] Rt, [Rn, ] {Rd,} Rn, #imm Rd, Rm Rd, Rm Rn, Rm Rd, Rm Rd, Rm 简述 用半字加载寄存器 续上表 标志 - 用有符号的字节加载寄存器 - 用有符号的半字加载寄存器 - 逻辑左移 N,Z,C 逻辑右移 N,Z,C 传输 从特别寄存器传输到通用寄存器 从通用寄存器传输到特别寄存器 乘法,32 位结果值 位非 无操作 逻辑或 出栈,将堆栈的内容放入寄存器 压栈,将寄存器的内容压入堆栈 反转字时面的字节顺序 反转每半字里面的字节顺序 反转有符号半字里面的字节顺序 循环右移 反向减法 进位减法 发送事件 存储多个寄存器,在访问后地址递增 N,Z N,Z,C,V N,Z N,Z N,Z N,Z,C N,Z,C,V N,Z,C,V - 将寄存器作为字来存储 - 将寄存器作为字节来存储 - 将寄存器作为半字来存储 - 减法 超级用户调用 符号扩展字节 符号扩展半字 基于测试的逻辑与 0 扩展字节 0 扩展半字 N,Z,C,V N,Z - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2121 广州周立功单片机发展有限公司 第 22 章 助记符 WFE WFI 操作数 - 等待事件 等待中断 简述 续上表 标志 - 22.4.2 内部函数 ISO/IEC C 代码不能直接访问某些 Cortex-M0 指令。本章节对可以产生这些指令的内部 函数进行了描述,内部函数可由 CMSIS 或有可能由 C 编译器提供。若 C 编译器不支持相关 的内部函数,则用户可能需要使用内联汇编程序来访问相关的指令。 CMSIS 提供下列的内部函数来产生 ISO/IEC C 代码不能直接访问的指令: 指令 表 22.13 产生某些 Cortex-M0 指令的 CMSIS 内部函数 CMSIS 指令集 CPSIE i void __enable_irq(void) CPSID i void __disable_irq(void) ISB void __ISB(void) DSB void __DSB(void) DMB void __DMB(void) NOP void __NOP(void) REV uint32_t __REV(uint32_t int value) REV16 uint32_t __REV16(uint32_t int value) REVSH uint32_t __REVSH(uint32_t int value) SEV void __SEV(void) WFE void __WFE(void) WFI void __WFI(void) CMSIS 还提供使用 MRS 和 MSR 指令来访问特别寄存器的函数: 特定寄存器 PRIMASK CONTROL MSP PSP 表 22.14 访问特别寄存器的内部函数 访问 CMSIS 函数 读 uint32_t __get_PRIMASK (void) 写 void __set_PRIMASK (uint32_t value) 读 uint32_t __get_CONTROL (void) 写 void __set_CONTROL (uint32_t value) 读 uint32_t __get_MSP (void) 写 void __set_MSP (uint32_t TopOfMainStack) 读 uint32_t __get_PSP (void) 写 void __set_PSP (uint32_t TopOfProcStack) 22.4.3 关于指令的描述 下列小节对如何使用指令进行了更为详细的描述: [1] 操作数; [2] 使用 PC 或 SP 时的限制; [3] 移位操作; [4] 地址对齐; [5] PC 相对的表达式; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2222 广州周立功单片机发展有限公司 第 22 章 [6] 条件执行。 1. 操作数 指令操作数可以是 ARM 寄存器,常量或其它的指令特定参数。指令在操作数上操作, 并经常将结果存放在目的寄存器中。当指令中存在目的寄存器时,它通常会在其它操作数之 前被指定。 2. 使用 PC 或 SP 时的限制 对于用于操作数或目的寄的程序计数器(PC)或堆栈指针,许多指令都不能使用它们, 或者存在着用户能否使用它们的限制。更多信息,详见指令的描述。 备注:当使用 BX、BLX 或 POP 指令来更新 PC 时,为正确执行程序,任何地址的位 0 都必须为 1.这 是因为该位指示目标指令集,且 Cortex-M0 处理器只支持 Thumb 指令。当 BL 或 BLX 指令将位 0 的值写入 LR 时,值 1 会被自动分配。 3. 移位操作 寄存器移位操作通过特定的位数(移位长度)来实现寄存器位的左右移位操作。寄存器 移位可以由指令 ASR、LSR、LSL 和 ROR 直接执行,且结果会被写入到目的寄存器中。允 许的移位长度由移位类型和指令决定,请参考各个指令的描述。若移位长度为 0,则不发生 移位操作。寄存器移位操作会更新进位标志,当移位长度被指定为 0 时除外。下列各子节描 述了各种的移位操作以及它们是如何影响进位标志。在这些描述中,Rm 是包含着移位值的 寄存器,n 是移位长度。 (1)ASR 算术右移 n 位的操作是将 Rm 寄存器左边的 32-n 个位向右移动 n 位,结果是寄存器右 边有 32-n 个位,然后再将寄存器位[31]的原始值复制到结果寄存器左边的 n 个位中。请参考 图 22.9。 用户可以使用 ASR 对寄存器 Rm 的符号值进行 2n 除法操作,得到的结果为负无穷大。 当指令为 ASRS 时,进位标志会被更新为最后移出的位值,即寄存器 Rm 的位[n-1]。 备注:  如果 n 为 32 或大于 32,那么结果中的所有位都会被置为 Rm 中位[31]的值。  如果 n 为 32 或大于 32,那么进位标志被更新为 Rm 位[31]的值。 图 22.9 ASR #3 (2)LSR 逻辑右移 n 位的操作是将 Rm 寄存器 Rm 左边的 32-n 个位向右移动 n 位,结果是寄存 器右边有 32-n 个位,然后再将结果寄存器左边的 n 个位设为 0。请参考图 22.10。 用户可以使用 LSR 操作来对寄存器 Rm 的值进行 2n 除法操作,如果值为无符号的整数。 当指令为 LSRS 时,进位标志会被更新为最后移出的位值,即寄存器 Rm 的位[n-1]。 备注: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2323 广州周立功单片机发展有限公司  如果 n 为 32 或大于 32,那么结果中的所有位都会被清除为 0。  如果 n 为 33 或大于 33,那么进位标志被更新为 0。 第 22 章 图 22.10 LSR #3 (3)LSL 逻辑左移 n 位的操作是将 Rm 寄存器右边的 32-n 个位向左移动 n 位,结果是寄存器左 边有 32-n 个位,然后将结果中的寄存器右边的 n 个位设为 0。请参考图 22.11。 用户可以使用 LSL 操作来对寄存器 Rm 的值与 2n 进行乘法操作,如果值为无符号的整 数或是有符号 2 的补码整数值。溢出会在无警告的提示下发生。 当指令为 LSLS 时,进位标志会被更新为最后移出的位值,即寄存器 Rm 的位[32-n]。 当使用 LSL #0 时,这些指令不会影响进位标志。 备注:  如果 n 为 32 或大于 32,那么结果中的所有位都会被清除为 0。  如果 n 为 33 或大于 33,那么进位标志被更新为 0。 图 22.11 LSL #3 (4)ROR 循环右移 n 位的操作是将 Rm 寄存器左边的 32-n 个位向右移动 n 位,结果是寄存器右 边有 32-n 个位,然后再将寄存器右边的 n 个位移动到结果寄存器的左边的 n 个位中。请参 考图 22.12。 当指令为 RORS 时,进位标志会被更新为最后循环出的位值,即寄存器 Rm 的位[n-1]。 备注:  如果 n 为 32,那么结果中的所有位值都相同于 Rm 中的值,且如果进位标志被更新,则会被更 新为 Rm 的位[31]的值。  移位长度 n 大于 32 的 ROR 与移位长度为 n-32 的 ROR 操作得到的结果相同。 LPC1100 系列微控制器用户手册 图 22.12 ROR #3 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2424 广州周立功单片机发展有限公司 第 22 章 4. 地址对齐 对齐访问是这样的一个操作:字对齐地址是用于字或多字访问,或者半字对齐地址是用 于半字访问。字节访问通常是对齐访问的。 Cortex-M0 处理器不支持非对齐地址的访问。任何尝试执行一个非对齐的存储器访问操 作都会导致 HardFault 异常。 5. PC 相对的表达式 相对 PC 表达或标签是一个代表着指令或文字数据的地址的符号。在指令中它被表示为 PC 值加上或减去一个数字偏移量。汇编器从标签和当前指令的地址中计算出所要求的偏移 量。如果偏移量太大,则汇编器会产生一个错误。 备注:  对于大数多指令,PC 的值就是当前指令的地址加上 4 个字节;  汇编器可能允许用其它语法来表示 PC 相对表达式,如标签加上或减去一个数值,或者用[PC, #imm]格式表示。 6. 条件执行 大多数数据处理指令依据操作的结果在应用程序状态寄存器(APSR)中更新条件标志。 某些指令更新所有标志,而某些指令则仅更新子集。如果标志不被更新,则原始值被保留。 指令对标志的影响,请参考指令的描述。 在如下的情况里,用户可以在另一个指令中设置条件标志的基础上: [1] 在指令更新标志后可立即执行条件性的跳转指令; [2] 在经过任意数量的不会更新标志的间隔数指令后,可以执行条件性的跳性指令。 在 Cortex-M0 处理器上,通过使用条件性的跳转指令,就可以实现条件性的执行操作。 本小节描述了以下内容: [1] 条件标志; [2] 条件代码后缀。 (1)条件标志 APSR 包含了下列的条件标志: N — 当操作的结果为负值时置为 1,否则清除为 0。 Z — 当操作的结果为 0 时置为 1,否则清除为 0。 C — 当操作的结果导致要进位时置为 1,否则清除为 0 V — 当操作引发溢出时置为 1,否则清除为 0。 有关 APSR 的信息,详情请参考本章“程序状态寄存器”小节。 当出现下列情况时,会发生进位操作: [1] 如果加法的结果大于或等于 232; [2] 如果减法的结果为正或等于 0; [3] 由于移位指令或循环指令而发生的进位操作。 当位[31]中结果的符号值不与在无穷精度中所执行操作的结果符号值匹配时,溢出发 生,例如: [1] 如果二个负值相加得出一个正值; [2] 如果二个正值相加得出一个负值; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2525 广州周立功单片机发展有限公司 第 22 章 [3] 如果从一个负值减去一个正值得到一个正值; [4] 如果从一个正值减去一个负值得到一个负值。 对于 CMP,比较操作与减法操作相同,对于 CMN,则加法操作相同,结果值会被丢弃 除外。更多信息,详情请参考指令描述。 (2)条件代码后缀 条件性跳转在语法描述显示为 B{cond}。只有 APSR 的条件代码标志符合指定的条件时, 才能执行带有条件代码的跳转指令,否则要忽略跳转指令。表 22.15 显示了使用的条件代码, 同时还显示了条件代码后缀和 N、Z、C 和 V 标志之关的联系。 后缀 标志 表 22.15 条件代码后缀 所表示的意思 EQ NE CS 或 HS CC 或 LO MI PL VS VC HI LS GE LT GT LE AL Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1和Z=0 C=0或Z=1 N=V N != V Z=0和N=V Z = 1 和 N != V 可以为任意值 等效,最后标志设置结果为 0 不等效,最后标志设置结果为非 0 更高或相同,无符号 更低,无符号 负数 正数或 0 溢出 无溢出 更高,无符号 更低或相同,无符号 大于或等效,有符号 少于,有符号 大于,有符号 少于或等于,有符号 总是。当没有指定后缀时,这是默认的操作 22.4.4 存储器访问指令 表 22.16 所示为存储器访问指令: 助记符 表 22.16 访问指令 简述 LDR{type} LDR POP PUSH STM STR{type} STR{type} 使用寄存器偏移量来加载寄存器 基于 PC 相对地址来加载寄存器 出栈,将栈中的内容放入寄存器 压栈,将寄存器的内容压入堆栈 存储多个寄存器 使用立即数偏移量来存储寄存器 使用寄存器偏移量来存储寄存器 1. ADR 产生一个 PC 相对地址。 (1)语法 ADR Rd, label 其中: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2626 广州周立功单片机发展有限公司 第 22 章 Rd 是目标寄存器。 Label 是 PC 相对表达式。见本章“相对 PC 的表达式”小节。 (2)操作 ADR 通过将立即数值加入到 PC 中来产生一个地址,并将得到的地址结果写入到目的 寄存器中。 ADR 产生区域独立代码非常便利,因为地址是 PC 相对地址。 如果用户使用 ADR 来产生 BX 或 BLX 指令的目标地址,为了能正确执行程序,必须要 保证将产生的地址的位[0]设置为 1。 (3)限制 在该指令中,Rd 必须指定 R0-R7。地址数据值必须是字对齐,且不能超出当前 PC 的 1020 字节。 (4)条件标志 该指令不会改变标志。 (5)示例 ADR R1, TextMessage ADR R3, [PC,#996] ; 将被标签为 TextMessage 单元上的地址值写入到 R1 中 ;将 R3 的值设为 PC + 996。 2. LDR 和 STR,立即数偏移量 具有立即数偏移量的加载和存储。 (1)语法 LDR Rt, [ {, #imm}] LDR Rt, [Rn {, #imm}] STR Rt, [, {,#imm}] STR Rt, [Rn {,#imm}] 其中: Rt 是加载或存储的寄存器。 Rn 是基于存储器地址上的寄存器。 Imm 是 Rn 的偏移量。如果 imm 被省略,则假设它为 0。 (2)操作 LDR、LDRB 和 LDRH 指令将存储器中的字、字节或半字数据值加载到 Rt 指定的寄存 器中。在将数据写入 Rt 指定的寄存器之前,长度少于字的数据要用 0 扩充到 32 位的长度。 STR、STRB 和 STRH 指令将 Rt 寄存器指定的单个寄存器中所包含的字,最低位字节 或低半字存放到存储器中。从加载的存储器地址或用于存放的存储器地址是 Rn 或 SP 所指 定的寄存器的值与立即数 imm 的和。 (3)限制 在这些指令中, [1] Rt 和 Rn 必须只指定 R0-R7 的值; [2] Imm 的值必须要符合下列要求: –0 到 1020 之间,对于 LDR 和 STR 操作,在将 SP 用作基址寄存器时,其值必须 是 4 的整数倍; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2727 广州周立功单片机发展有限公司 第 22 章 –0 到 124 之间,对于 LDR 和 STR 操作,在将 R0-R7 用作基址寄存器时,其值必 须是 4 的整数倍; –0 到 62 之间,对于 LDRH 和 STRH 操作,其值必须是 2 的整数倍; –0 到 31 之间,对于 LDRB 和 STRB; [3] 计算出的地址必须能够被事务中的字节数整除,见“地址对齐”小节。 (4)条件标志 这些指令不会改变标志。 (5)示例 LDR R4, [R7 STR R2, [R0,#const-struc] ;将 R7 的地址载入到 R4。 ; const-struc 是评估处于 0-1020 范围内的常量的表达式。 3. LDR 和 STR,寄存器偏移量 带寄存器偏移量的加载和存储。 (1)语法 LDR Rt, [Rn, Rm] LDR Rt, [Rn, Rm] LDR Rt, [Rn, Rm] STR Rt, [Rn, Rm] STR Rt, [Rn, Rm] 其中: Rt 是加载或存储的寄存器。 Rn 是基于存储器地址的寄存器。 Rm 是含有用作偏移量的值的寄存器。 (2)操作 LDR、LDRB、U、LDRSB 和 LDRSH 将存储器中的字、0 扩展字节、0 扩展半字、符 号扩展字节或符号扩展半字加载到 Rt 指定的寄存器中。 STR、STRB 和 STRH 指令将 Rt 寄存器指定的单个寄存器中所包含的字,最低位字节 或低半字存放到存储器中。 从加载的存储器地址或用于存放的存储器地址是 Rn 和 Rm 所指定的寄存器中的值之 和。 (3)限制 在这些指令中, [1] Rt、Rn 和 Rm 必须指定 R0-R7; [2] 计算出的地址必须能够被加载或存储的字节数整除。见“地址对齐”小节。 (4)条件标志 这些指令不会改变标志。 (5)示例 STR R0, [R5, R1] LDRSH R1, [R2, R3] ; 将 R0 的值存储到 R5 加 R1 得出的地址中; ; 从(R2 + R3)所指定的存储器地址中加载半字数据,符号扩展到 32 位并将 ; 其写入到 R1 中。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2828 广州周立功单片机发展有限公司 第 22 章 4. LDR,PC 相对 从存储器中加载寄存器(文字数据)。 (1)语法 LDR Rt, label 其中: Rt 是加载的寄存器。 Label 是 PC 相对表达式,见“相对 PC 的表达式”小节。 (2)操作 将 label 所指定的存储器中的字加载到 Rt 所指定的寄存器中。 (3)限制 在这些指令中,label 的大小必须位于当前 PC 的 1020 字节范围之内,且是字对齐的。 (4)条件标志 这些指令不会更改标志。 (5)示例 LDR R0, LookUpTable LDR R3, [PC, #100] ;将标签为 LookUpTable 的地址中的字数据加载到 R0 中; ;将(PC + 100)上的存储器字加载到 R3 中。 5. LDM 和 STM 加载和存储多个寄存器。 (1)语法 LDM Rn{!}, reglist STM Rn!, reglist 其中: Rn 是基于存储器地址的寄存器。 !回写后缀。 reglist 是被加载或存储的一个或多个寄存器的列表,用大括号括住。它包含着寄存器范 围。若它包含着多于一个的寄存器或寄存器范围,必须要将其用逗号隔开,见本小节的“示 例”。 对于 LDM,LDMIA 和 LDMFD 相近。LDMIA 为每次访问后都会递增的基址寄存器。 LDMFD 用法是将数据从满的递减堆栈中移出。 对于 STM,STMIA 和 STMEA 相近。STMIA 为每次访问后都会递增的基址寄存器。 STMEA 用法是将数据压入空的递增堆栈中。 (2)操作 LDM 指令将基于 Rn 上的存储器地址的字值加载到 reglist 的寄存器中。 STM 指令将 reglist 中的寄存器的字值存放到基于 Rn 的存储器地址中。 用于访问的存储器地址为 4 字节间隔,其范围为 Rn 所指定的寄存器的值至 Rn + 4 * (n-1) 所指定的寄存器的值,这里的 n 是 reglist 中的寄存器数量。访问的顺序是按照寄存器的编号 从低到高发生,最低编号的寄存器使用最低的存储器地址,最高编号的寄存器使用最高的存 储器地址。如果写回后缀被指定,则 Rn + 4 *n 所指定的寄存器的值会被写回到 Rn 所指定 的寄存器中。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 2929 广州周立功单片机发展有限公司 第 22 章 (3)限制 在这些指令中: [1] reglist 和 Rn 限制为 R0-R7; [2] 必须要使用写回后缀,除非指令是 LDM 指令,在 LDM 里,reglist 也含有 Rn,在 这种情况下,要紧记不能使用写回后缀; [3] Rn 所指定的寄存器的值必须是字对齐的。详情请参考“地址对齐”小节; [4] 对于 STM,如果 reglist 中存在着 Rn,那么 Rn 必须是列表中的第一个寄存器。 (4)条件标志 这些指令不会更改标志。 (5)示例 LDM R0,{R0,R3,R4} ; LDMIA 相近于 LDM STMIA R1!,{R2-R4,R6} (6)错误示例 STM R5!,{R4,R5,R6} ; 存放于 R5 的值是不可预测的 LDM R2,{} ; 在列表中至少要存在着一个寄存器。 6. PUSH 和 POP 将寄存器压入满递减堆栈和将满递减堆栈中的内容移入寄存器。 (1)语法 PUSH reglist POP reglist 其中: Reglist 是非空的寄存器列表。用大括号括着。它包含着寄存器范围。若它包含着多于 一个的寄存器或寄存器范围,必须要将其用逗号隔开。 (2)操作 PUSH 将寄存器存放到堆栈中,最低编号的寄存器使用低存储器地址,最高编号的寄存 器使用高存储器地址。 POP 将堆栈中的内容加载到寄存器中,最低编号的寄存器使用最低存储器地址,最高 编号的寄存器使用最高存储器地址。 PUSH 将 SP 寄存器的值减去 4 所得的值用作最高存储器地址,POP 将 SP 寄存器的值 用作最低的存储器地址来执行满递减堆栈操作。当操作完成时,PUSH 会更新 SP 寄存器来 指向最低存储值的单元,而 POP 则会更新 SP 寄存器来指向高于所加载的最高单元的单元。 如果 POP 在它的 reglist 中包含了 PC,则当 POP 指令完成时,会在该单元上执行一个 跳转操作。为 PC 所读出的 Bit[0 值用来更新 APSR T-位。该位必须为 1,以确保能正确执行 程序。 (3)限制 在这些指令中: [1] reglist 必须只为 R0-R7; [2] 对于 PUSH 和 POP,异常情况分别是 LR 和 PC。 (4)条件标志 这些指令不会更改标志。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3030 广州周立功单片机发展有限公司 第 22 章 (5)示例 PUSH {R0,R4-R7} PUSH {R2,LR} POP {R0,R6,PC} ; 将 R0,R4,R5,R6,R7 压入堆栈 ;将 R2 和链接寄存器压入堆栈 ;令 r0,r6 和 PC 出栈,然后跳转到新的 PC 值. 通用数据处理指令表 22.17 显示了数据处理指令: 助记符 ADCS ADD{S} ANDS ASRS BICS CMN CMP EORS LSLS LSRS MOV{S} MULS MVNS ORRS REV REV16 REVSH RORS RSBS SBCS SUBS SXTB SXTH UXTB UXTH TST 表 22.17 数据处理指令 简述 进位加法 加法 逻辑与 算术右移 位清零 比较负值 比较 异或 逻辑左移 逻辑右移 传输 乘法 取反传输 逻辑或 反转字里面的字节顺序 反转每半字里面的字节顺序 反转低半字中的字节顺序,并进行符号扩展 循环右移 反向减法 带进位的减法 减法 符号扩展字节 符号扩展半字 零扩展字节 零扩展半字 测试 7. ADC、ADD、RSB 和 SUB 进位加法、加法、反向减法、进位减法、减法。 (1)语法 ADCS {Rd,} Rn, Rm ADD{S} {Rd,} Rn, RSBS {Rd,} Rn, Rm, #0 SBCS {Rd,} Rn, Rm SUB{S} {Rd,} Rn, LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3131 广州周立功单片机发展有限公司 第 22 章 其中: S 会令 ADD 或 SUB 指令更新标志 Rd 指定结果寄存器 Rn 指定首个源寄存器 Rm 指定第二个源寄存器 Imm 指定一个常量立即数值 当省略了可选的 Rd 寄存器限定符时,会假定其值与 Rn 相同,例如,ADDS R1,R2 与 ADDS R1、R1、R2 相同。 (2)操作 ADCS 指令将 Rn 中的值加到 Rm 的值中,如果进位标志被置位,则加多一个 1,并将 结果存放在 Rd 所指定寄存器里,同时更新 N、Z、C 和 V 标志。 ADD 指令将 Rn 的值加到 Rm 的值或 imm 指定的立即数中,并将结果存放到 Rd 所指定 的寄存器中。 ADDS 指令执行的操作与 ADD 相同,并还可以更新 N、Z、C 和 V 标志。 RSBS 指令是用 0 减去 Rn 中的值,得到一个负数,然后将结果值存放在 Rd 所指定的寄 存器中,并更新 N、Z、C 和 V 标志。 SBCS 指令是用 Rn 的值减去 Rm 的值,如果进位标志置位,则减去一个 1。指令会将结 果值存放到 Rd 所指定的寄存器中,并更新 N、Z、C 和 V 标志。 SUB 指令会减去 Rm 的值或 imm 所指定的立即数。指令把结果值存放到 Rd 所指定的 寄存器中。 SUBS 指令执行的操作与 SUB 相同,同时它还可以更新 N、Z、C 和 V 标志。 如何使用 ADC 和 SBC 来综合处理多字算术,请参考下面的“示例”小节。 还可以参考“ADR”小节。 (3)限制 表 22.18 列出了寄存器指示符的合法组合和每一个指令可以使用的立即数。 指令 ADCS ADD Rd R0-R7 R0-R15 R0-R7 SP 表 22.18 ADC、ADD、RSB、SBC 和 SUB 操作数限制 Rn Rm imm 限制 R0-R7 R0-R7 - Rd 和 Rn 必须指定相同的寄存器 R0-R15 R0-PC - Rd 和 Rn 必须指定相同的寄存器 Rd 和 Rm 必须不能同时指定 PC SP 或 PC - 0-1020 立即数必须为 4 的整数倍 SP - 0-508 立即数必须为 4 的整数倍 R0-R7 R0-R7 - ADDS R0-R7 R0-R7 - 0-7 0-255 Rd 和 Rn 必须指定相同的寄存器 R0-R7 R0-R7 R0-R7 - - RSBS SBCS SUB R0-R7 R0-R7 SP R0-R7 R0-R7 SP R0-R7 - 0-508 Rd 和 Rn 必须指定相同的寄存器 立即数必须为 4 的整数倍 SUBS R0-R7 R0-R7 - 0-7 - LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3232 广州周立功单片机发展有限公司 第 22 章 指令 Rd R0-R7 Rn R0-R7 Rm - imm 0-255 续上表 限制 Rd 和 Rn 必须指定相同的寄存器 R0-R7 R0-R7 R0-R7 - - (4)示例 下例所示为二个指令将 R0 和 R1 所包含的 64 位整数值加到 R2 和 R3 所包含的另一个 64 位整数值中,并将结果存放到 R0 和 R1 中。 64 位加法: ADDS R0, R0, R2 ; 加上最低位的字 ADCS R1, R1, R3 ;加上最高位的字,带进位 多字的值无需要使用连续的寄存器。下面示例为指令会令 R4、R5 和 R6 所包含的 96 位整数值减去 R1、R2 和 R3 所包含的 96 位整数值。该例将结果值存放在 R4、R5 和 R6 中。 96 位减法: SUBS R4, R4, R1 ; 减去最低位字 SBCS R5, R5, R2 ; 减去中间的字,带进位 SBCS R6, R6, R3 ; 减去最高位字,带进位 下列所示的 RSBS 指令是用来执行单个寄存器 1 的补码的操作。 算术负值运算: RSBS R7, R7, #0 ; 用 0 减去 R7 8. AND、ORR、EOR 和 BIC 逻辑 AND、OR、异或和位清除。 (1)语法 ANDS {Rd,} Rn, Rm ORRS {Rd,} Rn, Rm EORS {Rd,} Rn, Rm BICS {Rd,} Rn, Rm 其中: Rd 是目标寄存器。 Rn 是保存第一个操作数的寄存器,且还是与目标寄存器相同的寄存器。 Rm 是第二个寄存器。 (2)操作 AND、EOR 和 ORR 对 Rn 和 Rm 的值按位执行 AND、异或、或操作。 BIC 指令对 Rn 上的位执行 AND 操作,对 Rm 值上的相应位执行逻辑非操作。 条件代码标志会根据操作的结果被更新,见“条件标志”小节。 (3)限制 在这些指令中,Rd、Rn 和 Rm 必须指定 R0-R7。 (4)条件标志 这些指令会: [1] 根据结果值来更新 N 和 Z 标志; LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3333 广州周立功单片机发展有限公司 第 22 章 [2] 不会影响 C 或 V 标志。 (5)示例 ANDS ORRS ANDS EORS BICS R2, R2, R1 R2, R2, R5 R5, R5, R8 R7, R7, R6 R0, R0, R1 9. ASR, LSL, LSR 和 ROR 算术右移,逻辑左移,逻辑右移,循环右移。 (1)语法 ASRS {Rd,} Rm, Rs ASRS {Rd,} Rm, #imm LSLS {Rd,} Rm, Rs LSLS {Rd,} Rm, #imm LSRS {Rd,} Rm, Rs LSRS {Rd,} Rm, #imm RORS {Rd,} Rm, Rs 其中: Rd 是目的寄存器。如果 Rd 被省略,则假定它的值与 Rm 相同。 Rm 是保存要移位的值的寄存器。 Rs 是保存着移位长度(该长度要应用到 Rm 中的值)的寄存器 Imm 是移位长度。 移位长度要由指令来决定: ASR — 移位长度为 1 到 32 LSL — 移位长度为 0 到 31 LSR — 移位长度为 1 到 32. 注:MOVS Rd, Rm 是 LSLS Rd, Rm, #0 的假名。 (2)操作 ASR、LSL、LSR 和 ROR 对立即数 imm 所指定的长度而锁定的 Rm 寄存器的位或者 Rs 所指定的寄存器的最低位字节值执行算术左移、逻辑左移、逻辑右移或循环右移。 关于不同的指令会产生什么样的结果,详情请参考“移位操作”小节。 (3)限制 在这些指令中,Rd、Rm 和 Rs 必须只可以指定 R0-R7。对于非立即数指令,Rd 和 Rm 必须指定相同的寄存器。 (4)条件标志 这些指令根据结果值来更新 N 和 Z 标志。 C 标志被更新为最后移出的位。当移位长度为 0 时例外,见“移位操作”小节。V 标志 不变。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3434 广州周立功单片机发展有限公司 第 22 章 (5)示例 ASRS LSLS LSRS RORS R7, R5, #9 ; 算术右移 9 位 R1, R2, #3 ; 逻辑左移 3 位,并更新标志 R4, R5, #6 ; 逻辑右移 6 位 R4, R4, R6 ; 循环右移 R6 低字节中的值 10. CMP 和 CMN 比较和比较负值。 (1)语法 CMN Rn, Rm CMP Rn, #imm CMP Rn, Rm 其中: Rn 是保存第一个操作数的寄存器。 Rm 是用于比较的寄存器。 Imm 是用于比较的立即数值。 (2)操作 这些指令将一个寄存器中的值与另一个寄存器中的值或立即数进行比较。指令会根据结 果值来更新条件标志,但不会将结果写入寄存器。 CMP 指令将 Rn 的值减去 Rm 所指定的寄存器值或立即数 imm,并更新标志。这操作与 SUBS 指令相同,不同的是结果值会被丢弃。 CMN 指令将 Rm 的值加到 Rn 的值中,并更新标志。这操作与 ADDS 指令相同,不同 的是结果值会被丢弃。 (3)限制 对于: [1] CMN 指令 指令 Rn、Rm 必须只能指定 R0-R7; [2] CMP 指令: – Rn 和 Rm 可以指定 R0-R14; – 立即数的范围为 0-255。 (4)条件标志 这些指令根据结果值来更新 N、Z、C 和 V 标志。 (5)示例 CMP R2, R9 CMN R0, R2 11. MOV 和 MVN 传输和取反传输。 (1)语法 MOV{S} Rd, Rm MOVS Rd, #imm LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3535 广州周立功单片机发展有限公司 第 22 章 MVNS Rd, Rm 其中: S 是可选后缀。如果指定了 S,则会根据操作的结果值来更新条件代码标志,见“条件 执行”小节。 Rd 是目的寄存器。 Rm 是寄存器。 Imm 可以是 0-255 范围内的任何一个值。 (2)操作 MOV 指令将 Rm 的值复制到 Rd 中。 MOVS 指令执行的操作与 MOV 指令相同,但是它会更新 N 和 Z 标志。 MVNS 指令采用 Rm 的值,对该值执行按位的逻辑取反操作,并将结果存放到 Rd 中。 (3)限制 在这些指令中,Rd 和 Rm 必须指定 R0-R7。 当在 MOV 指令里 Rd 是 PC 时: [1] 结果值的位[0]被丢弃; [2] 在通过将结果值的位[0]强制为 0 来所创造的地址上执行跳转操作。T-位保持不变。 备注:尽管可以将 MOV 用作跳转指令,但是为了软件的可移植性,AMR 强烈建推荐使用 BX 或 BLX 指令来执行跳转操作。 (4)条件标志 如果 S 被指定,则这些指令会: [1] 根据结果值更新 N 和 Z 标志; [2] 不会影响 C 或 V 标志。 (5)示例 MOVS R0, #0x000B MOVS R1, #0x0 MOV R10, R12 MOVS R3, #23 MOV R8, SP MVNS R2, R0 ; 将 0x000B 写入 R0,更新标志 ; 将 0 写入 R1,更新标志 ; 将 R12 的值写入 R10,不更新标志 ; 将 23 写入 R3 ; 将堆栈指针的值写入 R8 ; 将 R0 取反写入 R2 并更新标志 12. MULS 使用 32 位操作数的乘法,产生 32 位的结果值。 (1)语法 MULS Rd, Rn, Rm 其中: Rd 是目的寄存器。 Rn、Rm 是保存进行乘法操作值的寄存器。 (2)操作 MUL 指令将 Rn 和 Rm 所指定的寄存器的值进行乘法操作,并将结果值的最低 32 位存 放在 Rd 中。条件代码标志会按照操作的结果值而被更新,见“条件执行”小节。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3636 广州周立功单片机发展有限公司 第 22 章 该指令的结果并不是由操作数是有符号还是无符号来决定。 (3)限制 在该指令中: [1] Rd、Rn 和 Rm 必须只能指定 R0-R7; [2] Rd 必须要和 Rm 相同。 (4)条件标志 该指令会: [1] 根据结果值来更新 N 和 Z 标志; [2] 不会影响 C 或 V 标志。 (5)示例 MULS R0, R2, R0 ;乘法操作,标志被更新, R0 = R0 x R2 13. REV、REV16 和 REVSH 反转字节。 (1)语法 REV Rd, Rn REV16 Rd, Rn REVSH Rd, Rn 其中: Rd 是目的寄存器。 Rn 是源寄存器。 (2)操作 使用这些指令来改变数据的端点排序: REV — 将 32 位大端数据转换成小端的数据或将 32 位小端的数据转换成大端数据。 REV16 — 将二个打包的 16 位大端数据转换成小端的数据或将二个打包的小端的数据 转换成大端数据。 REVSH — 将 16 位有符号的大端数据转换成 32 位有符号小端数据或将 16 位有符号小 端数据转换 32 位有符号大端数据。 (3)限制 在这些指令中,Rd 和 Rn 必须只可以指定 R0-R7。 (4)条件标志 这些指令不会更改标志。 (5)示例 REV R3, R7 REV16 R0, R0 REVSH R0, R5 ; 反转 R7 值的字节顺序,并将其写入 R3 ; 反转 R0 中的每一个 16 位半字的字节顺序 ; 反转有符号的半字 14. SXT and UXT 符号扩展和 0 扩展。 (1)语法 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3737 广州周立功单片机发展有限公司 第 22 章 SXTB Rd, Rm SXTH Rd, Rm UXTB Rd, Rm UXTH Rd, Rm 其中: Rd 是目的寄存器。 Rm 是寄存器,其保存的值会被扩展。 (2)操作 这些指令从结果值中提取位: [1] SXTB 提取位[7:0]并将值进行符号扩展到 32 位; [2] UXTB 提取位[7:0]并将值用 0 扩展到 32 位; [3] SXTH 提取[15:0]并将值进行符号扩展到 32 位; [4] UXTH 提取[15:0]并将值用 0 扩展到 32 位。 (3)限制 在这些指令中,Rd 和 Rm 必须只可以指定 R0-R7。 (4)条件标志 这些指令不会影响标志。 (5)示例 SXTH R4, R6 UXTB R3, R1 ;获取 R6 的低半字,然后将其进行符号扩展到 32 位,并将结果写入 R4 ;获取 R10 最低位字节,并用 0 扩展,最后将结果写入 R3 15. TST 测试位。 (1)语法 TST Rn, Rm 其中: Rn 是保存第一个操作数的寄存器。 Rm 是测试的寄存器。 (2)操作 该指令将一个寄存器的值与别一个寄存器中的值进行测试。它会根据结果值来更新条件 标志,但是不会将结果值写入寄存器。 TST 指令对 Rn 中的值和 Rm 中的值执行位与操作。这是与 ANDS 指令相同的操作,不 同的是它会丢弃结果值。 为了测试 Rn 中的某个位是 0 还是 1,要使用 TST 指令,且寄存器的该位要设为 1,其 它所有位被清除为 0。 (3)限制 在这些指令中,Rn 和 Rm 必须只能指定 R0-R7。 (4)条件标志 这些指令: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3838 广州周立功单片机发展有限公司 第 22 章 [1] 会根据结果来更新 N 和 Z 标志; [2] 不会影响 C 或 V 标志。 (5)示例 TST R0, R1 ; 对 R0 值和 R1 值执行位与操作,更新条件代码标志,但结果值会被丢弃。 22.4.5 跳转和控制指令 表 22.19 所示为跳转和控制指令。 助记符 B{cc} BL BLX BX 表 22.19 跳转和控制指令 简述 跳转(有条件) 带链接的跳转 带链接的间接跳转 间接跳转 1. B、BL、BX 和 BLX 跳转指令。 (1)语法 B{cond} label BL label BX Rm BLX Rm 其中: Cond 是可选的条件代码,见“条件执行”小节。 Label 是 PC 相对表达式,见“相对 PC 的表达式”小节。 Rm 是提供跳转地址的寄存器。 (2)操作 所有这些指令都会对 label 所指示的地址或在 Rm 所指定的寄存器中包含地址上执行跳 转操作。另外: [1] BL 和 BLX 指令将下一个指令的地址写入 LR,链接寄存器 R14; [2] 如果 Rm 的位[0]是 0,则 BX 和 BLX 指令会导致 HardFault 异常。 BL 和 BLX 指令还会将 LR 的位[0]设置为 1。这就确保了该值适合由后续 POP {PC}或 BX 指令使用其来执行成功的返回跳转操作。 表 22.20 所示为适用于各种跳转指令的跳转范围。 指令 B label Bcond label BL label BX Rm 表 22.20 跳转范围 跳转范围 −2 KB 至+2 KB −256 字节至+254 字节 −16 MB 至+16 MB 寄存器中的任意值 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 3939 广州周立功单片机发展有限公司 第 22 章 续上表 指令 跳转范围 BLX Rm 寄存器中的任意值 (3)限制 在这些指令里: [1] 不要在 BX 或 BLX 指令里使用 SP 或 PC; [2] 对于 BX 和 BLX,为实现正确的执行操作,Rm 的位[0]必须为 1。位[0]用于更新 EPSR T-位,并会被从目标地址上丢弃。 备注:Bcond 是在 Cortex-M0 处理器上唯一的条件指令。 (4)条件标志 这些指令不会更改标志。 (5)示例 B loopA ;跳转到 loopA BL funC ;对函数 funC 进行带链接的跳转(调用),返回存放在 LR 的地址 BX LR ; 从函数调用中返回 BLX R0 ; 带链接的跳转,并从(调用)中更改为存放在 R0 所存放的地址 BEQ labelD ; 条件跳转到 abelD,如果最后的标志被设置,指令设置 Z 标志,否则不执行跳转 22.4.6 综合指令 表 22.21 所示为余下的 Cortex-M0 指令: 表 22.21 综合指令 助记符 简述 BKPT CPSID CPSIE 断点 更改处理器状态,禁止中断 更改处理器状态,使能中断 DMB 数据内存屏障 DSB 数据同步屏障 ISB MRS MSR 指令同步屏障 从特别寄存器传输到寄存器 从寄存器传输到特别寄存器 NOP 无操作 SEV 发送事件 SVC WFE WFI 超级用户调用 等待事件 等待中断 1. BKPT 断点。 (1)语法 BKPT #imm 其中: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4040 广州周立功单片机发展有限公司 第 22 章 imm 是 0-255 范围内的整数。 (2)操作 BKPT 指令会令处理器进入调试状态。当指令到达特定的地址时,调试工具可以使用该 指令来调查系统状态。处理器会忽略 imm。如有需要,调试器可以使用它来存放断点的其 它信息。 如果在执行 BKPT 指令时调试器没有连接上,那么处理器还有可能会产生 HardFault 或 进入锁定状态。详情见本章“锁定”小节。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 BKPT #0 ; 立即数值设为 0x0 的断点。 2. CPS 更改处理器状态。 (1)语法 CPSID i CPSIE i (2)操作 CPS 更改 PRIMASK 特别寄存器值。通过设置 PRIMASK,CPSID 可令中断被关闭。而 通过清除 PRIMASK,CPSIE 则可使能中断。关于这些寄存器的详细描述,请参考本章“异 常屏蔽寄存器”小节。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改条件标志。 (5)示例 CPSID i CPSIE i ;关闭所有的中断,NMI 除外(设置 PRIMASK) ; 使能中断 (清除 PRIMASK) 3. DMB 数据内存屏障。 (1)语法 DMB (2)操作 DMB 用作数据内存屏障。它可确保会先检测到程序中位于 DMB 指令前的所有显式内 存访问指令,然后再检测到程序中位于 DMB 指令后的显式内存访问指令。它不影响其他指 令(不访问内存的指令)在处理器上的执行顺序。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4141 广州周立功单片机发展有限公司 第 22 章 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 DMB ; 数据内存屏障 4. DSB 数据同步屏障。 (1)语法 DSB (2)操作 DSB 用作特别数据同步内存屏障,只有当此指令执行完毕后,才会执行程序中位于此 指令后的指令。位于此指令前的所有显式内存访问均完成时,DSB 指令才会完成。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 DSB ; 数据同步屏障 5. ISB 指令同步屏障。 (1)语法 ISB (2)操作 ISB 用作指令同步屏障。它会刷新处理器的管道,因此在完成了 ISB 指令后,需要再次 将 ISB 之后的所有指令从高速缓存或内存中提取出来。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 ISB ; 指令同步屏障 6. MRS 将特别寄存器的内容移动到通用寄存器中。 (1)语法 MRS Rd, spec_reg 其中: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4242 广州周立功单片机发展有限公司 第 22 章 Rd 是通用目的寄存器。 spec_reg 是其中一个特别寄存器:APSR、IPSR、EPSR、IEPSR、IAPSR、 EAPSR、PSR、MSP、PSP、PRIMASK 或 CONTROL。 (2)操作 MRS 将特别寄存器的内容存放到通用寄存器中。MRS 指令可以结合 MR 指令来产生读 -修改-写序列,这适用于在 PSR 中修改特别标志。 见“MSR”小节。 (3)限制 在该指令中,Rd 必须不能是 SP 或 PC。 (4)条件标志 该指令不会更改标志。 (5)示例 MRS R0, PRIMASK ; 读取 PRIMASK 值并将其写入 R0 7. MSR 将通用寄存器的内容传移到指定的特别寄存器中。 (1)语法 MSR spec_reg, Rn 其中: Rn 是通用源寄存器。 spec_reg 是特别目的寄存器:APSR,、IPSR、EPSR、IEPSR、IAPSR、EAPSR、PSR、 MSP、PSP、PRIMASK 或 CONTROL。 (2)操作 MSR 使用 Rn 所指定的寄存器的值来更新其中一个特别寄存器。 见“MRS”小节。 (3)限制 在该指令里,Rn 必须不能为 SP 和 PC。 (4)条件标志 该指令明确地根据 Rn 中的值来更新标志。 (5)示例 MSR CONTROL, R1 ;读取 R1 的值,并将其写入 CONTROL 寄存器。 8. NOP 空操作 (1)语法 NOP (2)操作 NOP 执行的是无操作,且不能保证会占用指令时间。处理器可在它到达执行阶段之前 将其从管道中移除。 使用 NOP 指令来进行填充,例如,在 64 位边界上放置后续指令。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4343 广州周立功单片机发展有限公司 第 22 章 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 NOP ; 无操作 9. SEV 发送事件。 (1)语法 SEV (2)操作 SEV 将事件信号发送到一个多处理器系统内的所有处理器中。它还可设置局部事件寄 存器。见本章“电源管理”小节。 也可参考“WFE”小节。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 SEV ; 发送事件 10. SVC 超级用户调用。 (1)语法 SVC #imm 其中: Imm 是 0-255 范围内的整数。 (2)操作 SVC 指令会引发 SVC 异常。 处理器会忽略 imm。如果有需要,可以通过异常处理程序获取 imm 来决定要请求什么 样的服务程序。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 SVC #0x32 ; 超级用户调用(SVC 处理程度使用堆栈的 PC 来锁定立即数的位置,然后将其提取出来) LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4444 广州周立功单片机发展有限公司 第 22 章 11. WFE 等待事件。 备注:WFE 指令不会在 LPCIdesit 上执行。 (1)语法 WFE (2)操作 如果事件寄存器为 0,则 WFE 挂起执行,直至发生下列其中的一个事件: [1] 出现异常,除非异常屏蔽寄存器或当前优先级级别将其屏蔽; [2] 异常进入挂起状态,如果系统控制寄存器的 SEVONPEND 置位; [3] 存在调试进入请求,如果调试使能的话; [4] 外设或多处理器系统里另一个处理器通过使用 SEV 指令来发出事件信号。 如果事件寄存器为 1,则 WFE 将其清除为 0 并立即完成操作。 详情请参考本章“电源管理”小节。 备注:WFE 的目的只是用于节约功率。当写软件时,假定 WFE 作为 NOP 运行。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 WFE ; 等待事件 12. WFI 等待中断。 (1)语法 WFI (2)操作 WFI 挂起执行,直至发生下列其中的一个事件: [1] 异常; [2] 中断变为挂起状态,如果 PRIMASK 被清除,则该中断占用优先权; [3] 存在调试进入请求,无论调试是否使能。 备注:WFI 的目的只是用于节约功率。当写软件时,假定 WFI 作为 NOP 运行。 (3)限制 该指令没有限制。 (4)条件标志 该指令不会更改标志。 (5)示例 WFI ; 等待中断。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4545 广州周立功单片机发展有限公司 第 22 章 22.5 外设 22.5.1 关于 ARM Cortex-M0 专用外设总线(PPB)的地址映射为: 地址 表 22.22 内核外设寄存器区 内核外设 0xE000E008-0xE000E00F 0xE000E010-0xE000E01F 0xE000E100-0xE000E4EF 0xE000ED00-0xE000ED3F 0xE000EF00-0xE000EF03 系统控制块 系统定时器 嵌套向量中断控制器 系统控制块 嵌套向量中断控制器 在寄存器描述中,寄存器的类型有以下几种: 描述 表 22.31 表 22.40 表 22.23 表 22.31 表 22.23 R/W — 可读和可写 RO — 只读 WO — 只写 22.5.2 嵌套向量中断控制器 本节描述嵌套向量中断控制器(NVIC)以及它使用的寄存器。NVIC 支持: [1] 32 个中断; [2] 每个中断的优先级可编程为 0~3 四种级别。级别越高对应的优先级越低。因此,级 别 0 是最高的中断优先级。 [3] 中断信号的电平和脉冲检测; [4] 中断末尾连锁; [5] 一个外部不可屏蔽中断(NMI)。LPC111x 没有 NMI。 处理器在异常进入时自动使它的状态入栈,在异常退出时自动使它的状态出栈,无需采 用任何指令。这就实现了低延迟的异常处理。NVIC 的硬件寄存器有: 表 22.23 NVIC 寄存器小结 地址 名称 类型 复位值 描述 0xE000E100 ISER 本章“中断设置-使能寄存 R/W 0x00000000 器”小节 0xE000E180 ICER 本章“中断清除-使能寄存 R/W 0x00000000 器”小节 0xE000E200 ISPR 本章“中断设置-挂起寄存 R/W 0x00000000 器”小节 0xE000E280 ICPR 本章“中断清除-挂起寄存 R/W 0x00000000 器”小节 0xE000E400-0xE000E41C IPR0-7 本章“中断优先级寄存器” R/W 0x00000000 小节 1. 使用 CMSIS 访问 Cortex-M0 NVIC 寄存器 CMSIS 函数允许在不同的 Cortex-M 系列中进行软件移植。 当利用 CMSIS 来访问 NVIC 寄存器时要用到以下函数: 表 22.24 CMSIS 访问 NVIC 函数 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4646 广州周立功单片机发展有限公司 第 22 章 CMSIS 函数 void NVIC_EnableIRQ(IRQn_Type IRQn)[1] void NVIC_DisableIRQ(IRQn_Type IRQn) [1] void NVIC_SetPendingIRQ(IRQn_Type IRQn) [1] void NVIC_ClearPendingIRQ(IRQn_Type IRQn) [1] uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) [1] void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) [1] uint32_t NVIC_GetPriority(IRQn_Type IRQn) [1] 描述 使能一个中断或异常 禁能一个中断或异常 将中断或异常的挂起状态设为 1 将中断或异常的挂起状态清零 读取中断或异常的挂起状态。如果挂起状 态被设为 1,这个函数就返回非零值 将一个优先级可配置的中断或异常的优先 级设置为级别 1 读取一个优先级可配置的中断或异常的优 先级。这个函数返回当前的优先级级别。 [1] 输入参数 IRQn 是 IRQ 编号,更多信息请见表 22.10。 2. 中断设置-使能寄存器 ISER 使能中断,并显示哪些中断被使能。有关寄存器属性请见表 22.23 的寄存器小结。 该寄存器的位分配如下: 位 [31:0] 名称 SETENA 表 22.25 ISER 的位分配 功能 中断设置-使能位。 写:0 = 无影响 1 = 使能中断 读:0 = 中断被禁能 1 = 中断被使能 如果一个挂起中断被使能,NVIC 就根据它的优先级来激活该中断。如果一个中断未被 使能,使该中断的中断信号有效可将中断的状态变成挂起,但是,不管这个中断的优先级如 何,NVIC 都不会激活该中断。 3. 中断清除-使能寄存器 ICER 禁能中断,并显示哪些中断被使能。有关寄存器属性请见表 22.23 的寄存器小结。 这个寄存器的位分配如下: 位 [31:0] 名称 CLRENA 表 22.26 ICER 的位分配 功能 中断清除-使能位。 写:0 = 无影响 1 = 禁能中断 读:0 = 中断被禁能 1 = 中断被使能 4. 中断设置-挂起寄存器 ISPR 强制中断进入挂起状态,并显示哪些中断正在挂起。有关寄存器属性请见表 22.23 的寄存器小结。 这个寄存器的位分配如下: 位 [31:0] 名称 SETPEND 表 22.27 ISPR 的位分配 功能 中断设置-挂起位。 写:0 = 无影响 1 = 将中断状态变为挂起 读:0 = 中断没有挂起 1 = 中断正在挂起 备注:向 ISPR 位写 1 相当于下面两种情况: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4747 广州周立功单片机发展有限公司 第 22 章  正在挂起的中断不会有任何影响  被禁能的中断会将中断的状态设置成挂起 5. 中断清除-挂起寄存器 ICPR 使中断离开挂起状态,并显示哪些中断正在挂起。寄存器属性请见表 22.23 的寄 存器小结。 这个寄存器的位分配如下: 位 [31:0] 名称 CLRPEND 表 22.28 ICPR 的位分配 功能 中断清除-挂起位。 写:0 = 无影响 1 = 清除中断的挂起状态 读:0 = 中断没有挂起 1 = 中断正在挂起 备注:向 ICPR 位写 1 不影响相应中断的有效状态。 6. 中断优先级寄存器 IPR0-IPR7 寄存器为每个中断提供了一个两位的优先级域。这些寄存器只能字访问。关 于它们的属性请见表 22.23 的寄存器小结。 每个寄存器包含 4 个优先级域,如下所示: 图 22.13 IPR 寄存器 表 22.29 IPR 的位分配 位 名称 功能 [31:24] [23:16] [15:8] [7:0] 优先级,字节偏移量 3 优先级,字节偏移量 2 优先级,字节偏移量 1 优先级,字节偏移量 0 每个优先级域保存一个优先级值(0~3)。值越小,对应中断的 优先级越高。处理器只使用每个域的 bit[7:6],bit[5:0]读出为 0, 写操作被忽略。 有关中断优先级阵列(提供了中断优先级的软件视角)访问的更多信息请参考本章“使 用 CMSIS 访问 Cortex-M0 NVIC 寄存器”小节。 使用下面的方法为中断 M 找出 IPR 编号和字节偏移量:  相应的 IPR 编号 N,通过等式 N = N/4 得出  这个寄存器中所需优先级域的字节偏移量是 M MOD 4(M 除以 4 取余),在这里: — 字节偏移量 0 指的是寄存器位[7:0] LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4848 广州周立功单片机发展有限公司 第 22 章 — 字节偏移量 1 指的是寄存器位[15:8] — 字节偏移量 2 指的是寄存器位[23:16] — 字节偏移量 3 指的是寄存器位[31:24] 7. 电平有效的中断和脉冲中断 处理器支持电平有效的中断和脉冲中断。脉冲中断也被描述成边沿触发的中断。 一个电平有效的中断一直保持有效,直至外设将中断信号撤销。通常,发生这种情况的 原因是 ISR 访问外设导致外设将中断请求清除。脉冲中断是在处理器时钟的上升沿同时采样 到的一个中断信号。为了确保 NVIC 检测到中断,外设必须使中断信号至少在一个时钟周期 内保持有效,在这段时间内 NVIC 检测脉冲并锁存中断。 当处理器进入 ISP 时,它自动消除中断的挂起状态,见“(1)中断的硬件和软件控制” 小节。对于一个电平有效的中断,如果在处理器从 ISR 返回之前中断信号未被撤销,中断就 再次变成挂起,处理器必须再次执行 ISR。这就表示,外设可以一直使中断信号保持有效, 直到它不再需要服务为止。 (1)中断的硬件和软件控制 Cortex-M0 锁存所有的中断。外设中断会由于下面的其中一个原因而变为挂起:  NVIC 检测到中断信号有效,而相应的中断无效;  NVIC 检测到中断信号的一个上升沿;  软件向相应的中断设置-挂起寄存器位写入值,见本章“中断设置-挂起寄存器”小 节。 挂起的中断一直保持挂起,直到出现以下其中一种情况:  处理器进入中断的 ISR。这就使中断的状态从挂起变为有效。而且: — 对于电平有效的中断,当处理器从 ISR 返回时,NVIC 采样中断信号。如果中 断信号有效,中断的状态变回挂起,这可能使得处理器立刻再次进入 ISR。否 则,中断的状态变为无效。 — 对于脉冲中断,NVIC 继续监测中断信号,如果这个中断信号一直处于脉冲状态, 中断的状态就变成挂起和有效。在这种情况下,当处理器从 ISR 返回时,中断的 状态变为挂起,这可能使得处理器立刻重新进入 ISR。 如果当处理器在处理 ISR 时中断信号的脉冲就不存在了,那么,当处理器从 ISR 返回时中断的状态变为无效。  利用软件向相应的中断清除-挂起寄存器位写入值。 对于电平有效的中断,如果中断信号仍然有效,中断的状态不改变。否则,中断的 状态变为无效。 对于脉冲中断,中断的状态变为: — 无效(如果中断之前的状态是挂起) — 有效(如果中断之前的状态是有效和挂起) 8. NVIC 的使用提示和技巧 保证软件正确使用对齐的寄存器访问。处理器不支持非对齐的 NVIC 寄存器访问。 中断即使被禁能也可以进入挂起状态。禁能一个中断只阻止处理器处理中断。 (1)NVIC 编程提示 软件使用 CPSIE i 和指令来使能和禁能中断。CMSIS 为这些指令提供以下内在函数: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 4949 广州周立功单片机发展有限公司 第 22 章 void __disable_irq(void) // 禁能中断 void __enable_irq(void) // 使能中断 另外,CMSIS 提供了许多 NVIC 控制函数,包括: 表 22.30 CMSIS 的 NVIC 控制函数 CMSIS 中断控制函数 描述 void NVIC_EnableIRQ(IRQn_t IRQn) 使能 IRQn void NVIC_DisableIRQ(IRQn_t IRQn) 禁能 IRQn uint32_t NVIC_GetPendingIRQ (IRQn_t IRQn) 如果 IRQn 正在挂起,返回真(1) void NVIC_SetPendingIRQ (IRQn_t IRQn) 设置 IRQn 挂起状态 void NVIC_ClearPendingIRQ (IRQn_t IRQn) 清除 IRQn 挂起状态 void NVIC_SetPriority (IRQn_t IRQn, uint32_t priority) 设置 IRQn 的优先级 uint32_t NVIC_GetPriority (IRQn_t IRQn) 读取 IRQn 的优先级 void NVIC_SystemReset (void) 复位系统 输入参数 IRQn 是 IRQ 编号,更多信息请见表 22.10。有关这些函数的更多信息,请见 CMSIS 的资料。 22.5.3 系统控制块 系统控制块(SCB)提供了系统执行信息和系统控制,包括配置、控制和系统异常的报 告。SCB 寄存器有: 表 22.31 SCB 寄存器小结 地址 名称 类型 复位值 描述 0xE000ED00 0xE000ED04 0xE000ED0C CPUID ICSR AIRCR RO RW[1] RW[1] 0x410CC200 0x00000000 0xFA050000 本章“CPUID 寄存器”小节 本章“中断控制和状态寄存器”小节 本章“应用中断和复位控制寄存器” 小节 0xE000ED10 SCR RW 0xE000ED14 CCR RO 0xE000ED1C SHPR2 RW 0x00000000 0x00000204 0x00000000 本章“系统控制寄存器”小节 本章“配置和控制寄存器”小节 本章“系统处理程序优先级寄存器 2” 小节 0xE000ED20 SHPR3 RW 0x00000000 本章“系统处理程序优先级寄存器 3” 小节 [1] 更多信息请见寄存器描述。 1. Cortex-M0 SCB 寄存器的 CMSIS 映射 为了提高软件效率,CMSIS 简化了 SCB 寄存器的表现形式。在 CMSIS 中,阵列 SHP[1] 对应寄存器 SHPR2-SHPR3。 2. CPUID 寄存器 CPUID 寄存器包含处理器的型号、版本和实现信息。有关它的属性请见寄存器小结。 CPUID 的位分配如下: 表 22.32 CPUID 寄存器的位分配 位 名称 功能 [31:24] Implementer 实现代码:0x41 = ARM LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5050 广州周立功单片机发展有限公司 第 22 章 位 名称 功能 [23:20] [19:16] [15:4] [3:0] Variant Constant Partno Revision 更新编号,产品版本标识符 rnpn 中 r 的值:0x0 = 版本 0 定义处理器结构的常量;读取的结果是:0xC = ARMv6-M 结构 处理器的型号:0xC20 = Cortex-M0 修订编号,产品版本标识符 rnpn 中 p 的值:0x0 = Patch 0 3. 中断控制和状态寄存器 ICSR: [6] 提供了: — 为不可屏蔽中断(NMI)异常提供了一个设置-挂起位; — 为 PendSV 和 SysTick 异常提供了设置-挂起位和清除-挂起位。 [7] 指明了: — 正在处理的异常的异常编号; — 是否有被抢占的有效异常; — 最高优先级挂起异常的异常编号; — 是否有任何异常正在挂起。 有关 ICSR 的属性请见表 22.31 的寄存器小结。ICSR 的位分配如下: 表 22.33 ICSR 的位分配 位 名称 类型 功能 [31] NMIPENDSET[2] [30:29] - [28] PENDSVSET [27] PENDSVCLR [26] PENDSTSET NMI 设置-挂起位。 写:0 = 无影响 1 = 将 NMI 异常的状态变为挂起 读:0 = NMI 异常未挂起 1 = NMI 异常正在挂起 由于 NMI 是优先级最高的异常,因此,一般情况下,处 R/W 理器一旦检测到向该位写 1 就立刻进入 NMI 异常处理程 序。处理器进入处理程序后将该位清零。这就表示,只 有当 NMI 信号在处理器正在执行 NMI 异常处理程序的 过程中再次有效,通过异常处理程序读取这个位才返回 1。 - 保留。 PendSV 设置-挂起位。 写:0 = 无影响 1 = 将 PendSV 异常的状态变为挂起 R/W 读:0 = PendSV 异常未挂起 1 = PendSV 异常正在挂 起 向该位写 1 是将 PendSV 异常状态设为挂起的唯一方法。 PendSV 清除-挂起位。 WO 写:0 = 无影响 1 = 撤销 PendSV 异常的挂起状态 SysTick 异常设置-挂起位。 写:0 = 无影响 1 = 将 SysTick 异常的状态变为挂起 R/W 读:0 = SysTick 异常未挂起 1 = SysTick 异常正在挂 起 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5151 广州周立功单片机发展有限公司 第 22 章 位 名称 类型 续上表 功能 [25] PENDSTCLR SysTick 异常清除-挂起位。 写:0 = 无影响 1 = 撤销 SysTick 异常的挂起状态 WO 该位只可写。当对这个寄存器执行读操作时,该位读出 的值不可知。 [24:23] [22] [21:18] ISRPENDING - [17:12] VECTPENDING RO - RO 保留。 除 NMI 和故障之外的中断的挂起标志: 0 = 中断未挂起 1 = 中断正在挂起 保留 指示优先级最高的、正在挂起的并且使能的异常的异常 编号: 0 = 没有正在挂起的异常 非零 = 优先级最高的、正在挂起的并且使能的异常的 异常编号。 [11:6] - [5:0] VECTACTIVE[1] RO 保留 包含有效的异常编号: 0 = 线程模式 非零 = 当前有效异常的异常编号[1]。 备注:这个值减去 16 得到 CMSIS IRQ 编号,编号标识 出对应在中断清除-使能、设置-使能、清除-挂起、设置 -挂起以及优先级寄存器中的位,请见表 22.5。 [1] 这个值与 IPSR 位[5:0]的值相同,请见表 22.5。 [2] NMI 不能在 LPC111x 上实现。 写 ICSR 时,如果执行下列操作,结果将不可知: [1] 写 1 到 PENDSVSET 位和写 1 到 PENDSVCLR 位 [2] 写 1 到 PENDSTSET 位和写 1 到 PENDSTCLR 位 4. 应用中断和复位控制寄存器 AIRCR 提供了数据访问的字节顺序状态和系统的复位控制信息。有关寄存器的属性请 见表 22.31 和表 22.34 的寄存器小结。 如果要写这个寄存器,必须先向 VECTKEY 域写入 0x05FA,否则,处理器会将写操作 忽略。 AIRCR 的位分配如下: 表 22.34 AIRCR 的位分配 位 名称 类型 功能 [31:16] 读:保留 写:VECTKEY [15] ENDIANESS 寄存器码: RW 读出的值不可知。 执行写操作时将 0x05FA 写入 VECTKEY,否则写操作被忽略。 采用的数据字节存储顺序: RO 0 = 小端 1 = 大端 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5252 广州周立功单片机发展有限公司 第 22 章 续上表 位 名称 类型 功能 [14:3] - - 保留 系统复位请求: 0 = 无影响 [2] SYSRESETREQ WO 1 = 请求一个系统级复位 这个位读出为 0。 保留供调试使用。这个位读出为 0。当写这个寄存器时,必须向 [1] VECTCLRACTIVE WO 这个位写 0,否则操作将不可预知。 [0] - - 保留 5. 系统控制寄存器 SCR 控制着低功耗状态的进入和退出特性。有关寄存器的属性请见表 22.31 的寄存器小 结。SCR 的位分配如下: 表 22.35 SCR 的位分配 位 名称 功能 [31:5] - 保留 挂起时发送事件位: [4] SEVONPEND 0 = 只有使能的中断或事件能够唤醒处理器。不接受禁能中断的唤醒。 1 = 使能的事件和包括禁能中断在内的所有中断都能唤醒处理器。 当一个事件或中断进入挂起状态时,事件信号将处理器从 WFE 唤醒。 如果处理器并未在等待一个事件,事件被记录,影响下个 WFE。 处理器也可以在执行 SEV 指令时唤醒。 [3] - 保留 控制处理器是将睡眠模式还是深度睡眠模式作为低功耗模式: [2] SLEEPDEEP 0 = 睡眠 1 = 深度睡眠 指示当从处理器模式返回到线程模式时 sleep-on-exit(退出时进入睡 眠): [1] SLEEPONEXIT 0 = 处理器返回到线程模式时不进入睡眠 1 = 处理器从 ISR 返回到线程模式时进入睡眠或深度睡眠 将该位设为 1 允许一个中断驱动的应用程序避免返回到一个空的主应 用程序。 [0] - 保留 6. 配置和控制寄存器 CCR 是一个只读寄存器,指出了 Cortex-M0 处理器行为的一些情况。有关 CCR 属性请 见表 22.31 的寄存器小结。 CCR 的位分配如下: LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5353 广州周立功单片机发展有限公司 第 22 章 表 22.36 CCR 的位分配 位 名称 功能 [31:10] - [9] STKALIGN 保留 该位读出总是为 0,指示进入异常时堆栈按 8 字节对齐。 进入异常时,处理器使用入栈的 PSR 的 bit[9]来指示栈对齐。从异常 中返回时,处理器使用这个入栈的位来恢复正确的栈对齐。 [8:4] - [3] UNALIGN_TRP [2:0] - 保留 该位读出总是为 0,指示所有未对齐的访问产生一个 HardFault。 保留 7. 系统处理程序优先级寄存器 SHPR2-SHPR3 寄存器设置优先级可配置的异常处理程序的优先级级别(0~3)。 SHPR2-SHPR3 是字可访问的。有关它们的属性请见表 22.31 的寄存器小结。 利用 CMSIS 访问系统异常的优先级级别要用到以下 CMSIS 函数: [1] uint32_t NVIC_GetPriority(IRQn_Type IRQn) [2] void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) 输入参数 IRQn 是 IRQ 编号,更多信息请见表 22.10。 系统故障处理程序、优先级域以及每个处理程序的寄存器如下所示: 处理程序 表 22.37 系统故障处理程序优先级域 域 寄存器描述 SVCall PendSV PRI_11 PRI_14 见本章“系统处理程序优先级寄存器”小节。 见本章“系统处理程序优先级寄存器”小节。 SysTick PRI_15 每个 PRI_N 域 8 位宽,但处理器只使用每个域的 bit[7:6];bit[5:0]读出为 0,写操作被 忽略。 (1)系统处理程序优先级寄存器 2 该寄存器的位分配如下: 表 22.38 SHPR2 寄存器的位分配 位 名称 功能 [31:24] [23:0] PRI_11 - 系统处理程序 11(SVCall)的优先级 保留 (2)系统处理程序优先级寄存器 3 该寄存器的位分配如下: 表 22.39 SYST_CSR 的位分配 位 名称 功能 [31:24] [23:16] [15:0] PRI_15 PRI_14 - 系统处理程序 15(SysTick 异常)的优先级 系统处理程序 14(PendSV)的优先级 保留 8. SCB 使用的提示和技巧 保证软件使用对齐的 32 位字大小传输来访问所有的 SCB 寄存器。 22.5.4 系统定时器,SysTick LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5454 广州周立功单片机发展有限公司 第 22 章 当系统定时器被使能时,定时器从重装值开始递减计数到零,下个时钟周期再将 SYST_RVR 的值重新加载到定时器(一个回合),然后在后面的时钟周期下继续开始递减 计数。向 SYST_RVR 写零会使计数器在下个回合禁能。当计数器跳变到零时,COUNTFLAG 状态位被设为 1。读 SYST_CSR 将 COUNTFLAG 位清零。 写 SYST_CVR 会将该寄存器和 COUNTFLAG 状态位都清零。这个写操作不触发 SysTick 异常逻辑。读取 SYST_CVR 寄存器返回的是读取操作执行当下的寄存器值。 备注:当寄存器由于调试而被终止时,计数器不递减计数。 系统定时器寄存器有: 地址 名称 表 22.40 系统定时器寄存器小结 类型 复位值 描述 0xE000E010 SYST_CSR R/W 0x00000000 本章“SysTick 控制和状态寄存器” 小节 0xE000E014 0xE000E018 0xE000E01C SYST_RVR R/W 不可知 本章“SysTick 重装值寄存器”小节 SYST_CVR R/W 不可知 本章“SysTick 当前值寄存器”小节 SYST_CALIB RO 0xC0000000[1] 本章“SysTick 校准值寄存器”小节 [1] SysTick 的校准值 1. SysTick 控制和状态寄存器 SYST_CSR 使能 SysTick 特性。有关寄存器的属性请见表 22.40 的寄存器小结。该寄存 器的位分配为: 位 [31:17] [16] [15:3] 名称 COUNTFLAG - [2] CLKSOURCE [1] TICKINT [0] ENABLE 表 22.41 SYST_CSR 的位分配 功能 保留 如果自从上次读这个寄存器之后定时器计数到 0,该位就返回 1 保留 选择 SysTick 定时器的时钟源: 0 = 外部基准时钟 1 = 处理器时钟 使能 SysTick 异常请求: 0 = 计数到零不提交 SysTick 异常请求 1 = 计数到零提交 SysTick 异常请求 使能计数器: 0 = 计数器被禁能 1 = 计数器被使能 2. SysTick 重装值寄存器 SYST_RVR 设定了加载到 SYST_CVR 的起始值。有关寄存器的属性请见表 22.40 的寄 存器小结。该寄存器的位分配为: 位 [31:24] - 名称 [23:0] RELOAD 表 22.42 SYST_RVR 的位分配 功能 保留 当计数器被使能且计数值到达 0 时加载到 SYST_CVR 的值,请见本章“计 算 RELOAD 值”小节。 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5555 广州周立功单片机发展有限公司 第 22 章 (1)计算 RELOAD 值 RELOAD 值可以是 0x00000001-0x00FFFFFF 范围内的任何值。您可以将 RELOAD 的值 设为 0,这不会产生任何影响,因为计数值从 1 变为 0 时 SysTick 异常请求和 COUNTFLAG 都被激活了。 如果要产生一个周期为 N 个处理器时钟周期的多次触发定时器,就可以将 RELOAD 值 设为 N-1。例如,如果要求每隔 100 个时钟脉冲就触发一次 SysTick 中断,RELOAD 就被设 为 99。 3. SysTick 当前值寄存器 SYST_VCR 包含 SysTick 计数器的当前值。有关寄存器的属性请见表 22.40 的寄存器小 结。该寄存器的位分配如下: 位 [31:24] - 名称 [23:0] CURRENT 表 22.43 SYST_CVR 的位分配 功能 保留 读取时返回 SysTick 计数器的当前值。 向 这 个 域 写 入 任 何 值 都 会 将 该 域 清 零 , 还 会 清 零 SYST_CSR 的 COUNTFLAG 位。 4. SysTick 校准值寄存器 SYST_CALIB 寄存器指明了 SysTick 的校准特性。有关寄存器的属性请见表 22.40 的寄 存器小结。该寄存器的位分配如下: 位 [31] 名称 NOREF [30] SKEW [29:24] [23:0] TENMS 表 22.44 SYST_CALIB 寄存器的位分配 功能 该位读出为 0。该位指明不提供独立的基准时钟 该位读出为 0。由于 TENMS 不可知,因此,10ms 不精确计时的校准值不 能确定。这会影响 SysTick 作为软件实时时钟的适用性 保留 该位读出为 0。该域指明校准值不可知。 如果校准信息不可知,就通过处理器时钟或外部时钟的频率来计算所需的校准值。 5. SysTick 使用的提示和技巧 利用中断控制器时钟来更新 SysTick 计数器。如果这个时钟信号由于进入低功耗模式而 终止,SysTick 计数器就停止计数。 确保软件使用字访问来访问 SysTick 寄存器。 如果在复位时没有定义 SysTick 计数器的重装值和当前值,正确的 SysTick 计数器初始 化序列如下: 第 1 步:设置重装值 第 2 步:清除当前值 第 3 步:设置控制和状态寄存器 LPC1100 系列微控制器用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 5656

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。