广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 请注意:LPC2134 没有 AD1 功能,本文章中有关 LPC2134 AD1 功能的内容请 不要理会,更不要在您设计中使用此功能。 LPC2131/2132/2138 使用指南 1. 简介 概述 LPC2131/2132/2138 是基于一个支持实时仿真和嵌入式跟踪的 32/16 位 ARM7TDMI-STM CPU 的微控制 器,并带有 32kB、64kB、512 kB 的嵌入的高速 Flash 存储器。128 位宽度的存储器接口和独特的加速结构 使 32 位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用 16 位 Thumb®模式将代码 规模降低超过 30%,而性能的损失却很小。 较小的封装和极低的功耗使 LPC2131/2132/2138 可理想地用于小型系统中,如访问控制和 POS 机。宽 范围的串行通信接口和片内 8/16/32kB 的 SRAM 使 LPC2131/2132/2138 非常适用于通信网关、协议转换器、 软 modem、声音辨别和低端成像,为它们提供巨大的缓冲区空间和强大的处理功能。多个 32 位定时器、1 个或 2 个 10 位 8 路 ADC、10 位 DAC、PWM 通道和 47 个 GPIO 以及多达 9 个边沿或电平触发的外部中断 使它们特别适用于工业控制和医疗系统。 特性 小型 LQFP64 封装的 16/32 位 ARM7TDMI-S 微控制器。 8/16/32kB 片内静态 RAM。 片内 Boot 装载软件实现在系统/在应用中编程(ISP/IAP)。扇区擦除或整片擦除的时间为 400ms, 1ms 可编程 256 字节。 EmbeddedICE®RT 和嵌入式跟踪接口可实时调试(利用片内 RealMonitor 软件)和高速跟踪执行 代码。 1 个(LPC2132/2132)或 2 个(LPC2138)8 路 10 位 A/D 转换器共包含 16 个模拟输入,每个通 道的转换时间低至 2.44us。 1 个 10 位 D/A 转换器,可提供不同的模拟输出(LPC2132/2138)。 2 个 32 位定时器/计数器(带 4 路捕获和 4 路比较通道)、PWM 单元(6 路输出)和看门狗。 实时时钟具有独立的电源和时钟源,在节电模式下极大地降低了功耗。 多个串行接口,包括 2 个 16C550 工业标准 UART、2 个高速 I2C 接口(400 kbit/s)、SPITM 和 SSP (具有缓冲功能,数据长度可变) 。 向量中断控制器。可配置优先级和向量地址。 多达 47 个 5V 的通用 I/O 口(LQFP64 封装)。 9 个边沿或电平触发的外部中断引脚。 通过片内 PLL 可实现最大为 60MHz 的 CPU 操作频率,PLL 的稳定时间为 100us。 片内晶振频率范围:1~30 MHz。 2 个低功耗模式:空闲和掉电。 可通过个别使能/禁止外部功能和降低外部时钟来优化功耗。 通过外部中断将处理器从掉电模式中唤醒。 单个电源供电,含有上电复位(POR)和掉电检测(BOD)电路: -CPU 操作电压范围:3.0~3.6 V (3.3 V+/- 10%),I/O 口可承受 5V 的最大电压。 1 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 应用 工业控制 医疗系统 访问控制 POS 机 通信网关 嵌入式软 moderm 一般性应用 器件信息 表1 LPC2131/2132/2138 器件信息 器件 管脚数 片内 RAM 片内 FLASH 10 位 A/D 通道数 10 位 D/A 通道数 注 LPC2131 64 8kB 32kB 8 - - LPC2132 64 16 kB 64 kB 8 - - LPC2138 64 32 kB 512 kB 16 1 - 结构概述 LPC2131/2132/2138 包含一个支持仿真的 ARM7TDMI-S CPU、与片内存储器控制器接口的 ARM7 局部 总线、与中断控制器接口的 AMBA 高性能总线(AHB)和连接片内外设功能的 VLSI 外设总线(VPB,ARM AMBA 总线的兼容超集)。LPC2131/2132/2138 将 ARM7TDMI-S 配置为小端(little-endian)字节顺序。 AHB 外设分配了 2M 字节的地址范围,它位于 4G 字节 ARM 存储器空间的最顶端。每个 AHB 外设都 分配了 16k 字节的地址空间。LPC2131/2132/2138 的外设功能(中断控制器除外)都连接到 VPB 总线。AHB 到 VPB 的桥将 VPB 总线与 AHB 总线相连。VPB 外设也分配了 2M 字节的地址范围,从 3.5GB 地址点开 始。每个 VPB 外设在 VPB 地址空间内都分配了 16k 字节地址空间。 片内外设与器件管脚的连接由管脚连接模块控制。该模块必须由软件进行控制以符合外设功能与管脚 在特定应用中的需求。 ARM7TDMI-S 处理器 ARM7TDMI-S 是通用的 32 位微处理器,它具有高性能和低功耗的特性。ARM 结构是基于精简指令集 计算机(RISC)原理而设计的。指令集和相关的译码机制比复杂指令集计算机要简单得多。这样使用一个小 的、廉价的处理器核就可实现很高的指令吞吐量和实时的中断响应。 由于使用了流水线技术,处理和存储系统的所有部分都可连续工作。通常在执行一条指令的同时对下 一条指令进行译码,并将第三条指令从存储器中取出。 ARM7TDMI-S 处理器使用了一个被称为 THUMB 的独特结构化策略,它非常适用于那些对存储器有限 制或者需要较高代码密度的大批量产品的应用。 在 THUMB 后面一个关键的概念是“超精简指令集” 。基本上,ARM7TDMI-S 处理器具有两个指令集: 标准 32 位 ARM 指令集 16 位 THUMB 指令集 THUMB 指令集的 16 位指令长度使其可以达到标准 ARM 代码两倍的密度,却仍然保持 ARM 的大多 数性能上的优势,这些优势是使用 16 位寄存器的 16 位处理器所不具备的。因为 THUMB 代码和 ARM 代 码一样,在相同的 32 位寄存器上进行操作。 THUMB 代码仅为 ARM 代码规模的 65%,但其性能却相当于连接到 16 位存储器系统的相同 ARM 处 理器性能的 160%。 关于 ARM7TDMI-S 处理器的详细内容请参阅 ARM 官方网站上的 ARM7TDMI-S 数据手册。 2 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 片内 FLASH 程序存储器 LPC2131/2132/2138 分别含有 32kB、64kB 和 512kB 的 FLASH 存储器系统。该存储器可用作代码和数 据的存储。对 FLASH 存储器的编程可通过几种方法来实现:通过内置的串行 JTAG 接口,通过在系统编程 (ISP)和 UART0,或通过在应用编程(IAP)。使用在应用编程的应用程序也可以在应用程序运行时对 FLAH 进 行 擦 除 和 / 或 编 程 , 这 样 就 为 数 据 存 储 和 现 场 固 件 的 升 级 都 带 来 了 极 大 的 灵 活 性 。 如 果 LPC2131/2132/2138 使用了片内引导装载程序(bootloader),32/64/512kB 的 Flash 存储器就可用来存放用 户代码。 LPC2131/2132/2138 的 Flash 存储器至少可擦除/编程 10,000 次,保存数据的时间长达 10 年。 片内静态 RAM 片内静态 RAM(SRAM) 可用作代码和/或数据的存储,支持 8 位、16 位和 32 位的访问。 LPC2131/2132/2138 含有 8/16/32kB 的静态 RAM。 LPC2131/2132/2138 SRAM 是一个字节寻址的存储器。对存储器进行字和半字访问时将忽略地址对准, 访问被寻址的自然对准值(因此,对存储器进行字访问时将忽略地址位 0 和 1,半字访问时将忽略地址位 0)。 因此,有效的读写操作要求半字数据访问的地址线 0 为 0(地址以 0、2、4、6、8、A、C 和 E 结尾),字 数据访问的地址线 0 和 1 都为 0(地址以 0、4、8 和 C 结尾)。该原则同样用于片外和片内存储器。 SRAM 控制器包含一个回写缓冲区,它用于防止 CPU 在连续的写操作时停止运行。回写缓冲区总是保 存着软件发送到 SRAM 的最后一个字节。该数据只有在软件请求下一次写操作时才写入 SRAM(数据只有 在软件执行另外一次写操作时被写入 SRAM)。如果发生芯片复位,实际的 SRAM 内容将不会反映最近一 次的写请求(即:在一次“热”芯片复位后,SRAM 不会反映最后一次写入的内容)。任何在复位后检查 SRAM 内容的程序都必须注意这一点。通过对一个单元执行两次相同的写操作可保证复位后数据的写入。 或者,也可通过在进入空闲或掉电模式前执行虚写(dummy write)操作来保证最后的数据在复位后被真正 写入到 SRAM。 3 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 功能框图 测试/调试接口 PLL ARM7TDMI-S 系统时钟 AHB 桥 内部Flash 控制器 8/16/32 kB SRAM 32/64/512 kB FLASH 向量中断控制器 AMBA AH B (先进的高性能总线) ARM7 局部总线 内部SRAM 控制器 系统功能 AHB 译码器 AHB 到 VPB 桥 VPB 分频器 VPB ( VLSI 外围总线) EI NT3:0 8 x CAP0 8 x MA T I2C 串行 接口0和1 外部中断 捕获/比较 ( w/外部时钟) 定时器0&1 AD0.7:0 SP I 和 SSP 串行接口 AD1.7:02 UART 0 & 1 Aout3 D/A 转换器 2 实时时钟 P0 .31:0 P1.31:1 6, 1:0 2 通用I/O口 PWM6:1 PWM 0 与 GPIO 共用。 2 仅适用于 LPC2138。 3 仅 LPC2132/2138。 DSR1 2,CTS12,RTS12 DTR12, DC D1 2,RI1 2 RT XC1 RT XC2 Vbat 看门狗定时器 系统控制 图1 2. SCK0 ,1 MOSI0,1 MISO0,1 SSEL 0,1 Tx D0,1 RxD0,1 A/D 转换器 0 和1 2 1 SCL 0,1 SDA0 ,1 LPC2131/2132/2138 方框图 LPC2131/2132/2138 存储器寻址 存储器映射 LPC2131/2132/2138 包含几个不同的存储器组,见以下各图。图 2 所示为复位后从用户角度所看到的整 个地址空间映射。中断向量支持地址的重新映射,详见后面的章节。 4 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 4.0 GB AHB 外设 http://www.zlgmcu.com 0xFFFF FF FF 0xF0 00 000 0 3.75 GB VPB 外设 0xE00 0 0000 3.5 GB 0xC000 0000 3.0 GB 保留地址空间 2.0 GB 0x8000 000 0 Bo ot Bl ock (从片内Flash 存储器重新映射) 保留地址空间 32 kB 片内静态RAM (LPC2138 ) 16 kB 片内静态RAM (LPC2132 ) 8 kB 片内静态RAM (LPC2131 ) 1.0 GB 0x40 00 8000 0x4000 7FF F 0x4000 400 0 0x4000 3FFF 0x4000 20 00 0x4000 1FFF 0x4000 0000 保留地址空间 512 kB 片内非易失性存储器(LPC2138 ) 64 kB 片内非易失性存储器(LPC2132 ) 32 kB 片内非易失性存储器(LPC2131 ) 0x0008 000 0 0x0007 FF FF 0x0001 000 0 0x0000 FFFF 0x0000 8000 0x0000 7 FFF 0x0000 000 0 0.0 GB 图2 系统存储器映射 5 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 4.0 GB Fax: 38730925 http://www.zlgmcu.com 0xFFFF FFFF AHB 外设 4.0 GB - 2 MB 0xFFE0 0000 0xFFDF FFFF 保留 0xF000 0000 0xEFFF FFFF 3.75 GB 保留 0xE020 0000 0xE01F FFFF 3.5 GB + 2 MB VPB 外设 0xE000 0000 3.5 GB 注: -AHB 部分是 128×16kB 的范围(共 2MB)。 -VPB 部分是 128×16kB 的范围(共 2MB)。 图3 外设存储器映射 图 3~5 显示了从不同角度所观察到的外设地址空间。AHB 和 VPB 外设区域都为 2M 字节,可各自分 配最多 128 个外设。每个外设空间的规格都为 16k 字节。这样可简化每个外设的地址译码。所有外设寄存 器不管规格大小,都按照字地址进行分配(32 位边界)。这样就不再需要使用字节定位的硬件来进行小边 界的字节(8 位)或半字(16 位)访问。不管字还是半字寄存器都是一次性访问。例如,不可能对一个字 寄存器的最高字节执行单独的读或写操作。 6 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 向量中断控制器 Fax: 38730925 0xFFFF F000 (4G - 4K) 0xFFFF C000 (AHB 外设 #126) 0xFFFF 8000 (AHB 外设 #125) 0xFFFF 4000 (AHB 外设 #124) 0xFFFF 0000 0xFFE1 0000 (AHB 外设 # 3) 0xFFE0 C000 (AHB 外设 # 2) 0xFFE0 8000 (AHB 外设 # 1) 0xFFE0 4000 (AHB 外设 # 0) 0xFFE0 0000 图4 http://www.zlgmcu.com AHB 外设映射 7 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 系统控制模块 (VPB外设#127) Fax: 38730925 http://www.zlgmcu.com 0xE01F FFFF 0xE01F C000 (VPB外设#28-126) 未使用 0xE007 0000 DAC (VPB外设#27) SSP (VPB外设#26) 未使用 (VPB外设#25) 10 位 AD1 (LPC2138) (VPB外设#24) I2 C1 (VPB外设#23) 未使用 (VPB外设#14-22) 10 位 AD0 (VPB外设#13) 未使用 (VPB外设#12) 管脚连接模块 (VPB外设#11) GPIO (VPB外设#10) RTC (VPB外设#9) SPI0 (VPB外设#8) I2C0 (VPB外设#7) 未使用 (VPB外设#6) PWM (VPB外设#5) UART1 (VPB外设#4) UART0 (VPB外设#3) TIMER1 (VPB外设#2) TIMER0 (VPB外设#1) 看门狗定时器 (VPB外设#0) 0xE006 C000 0xE006 8000 0xE006 4000 0xE006 0000 0xE005 C000 0xE003 8000 0xE003 4000 0xE003 0000 0xE002 C000 0xE002 8000 0xE002 4000 0xE002 0000 0xE001 C000 0xE001 8000 0xE001 4000 0xE001 0000 0xE000 C000 0xE000 8000 0xE000 4000 0xE000 0000 图 5 VPB 外设映射 LPC2131/2132/2138 存储器重新映射和 BOOT BLOCK 存储器映射概念和操作模式 LPC2131/2132/2138 的基本的概念是:每个存储器组在存储器映射中都有一个“物理上的”位置。它是 一个地址范围,该范围内可写入程序代码。每一个存储器空间的容量都永久固定在同一个位置,这样就不 需要将代码设计成在不同地址范围内运行。 8 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 由于 ARM7 处理器上的中断向量位置(地址 0x0000 0000~0x0000 001C,见表 2),Boot Block 和 SRAM 空间的一小部分需要重新映射来实现在不同操作模式下对中断的使用,见表 3。中断的重新映射通过存储 器映射控制特性来实现,详见系统控制模块一节。 表2 ARM 异常向量位置 地址 异常 0x0000 0000 复位 0x0000 0004 未定义指令 0x0000 0008 软件中断 0x0000 000C 预取指中止(从存储器取指出错) 0x0000 0010 数据中止(数据访问存储器出错) 0x0000 0014 保留 * 0x0000 0018 IRQ 0x0000 001C FIQ * 在 ARM 文档中标识为保留,该位置被 Boot 装载程序用作有效的用户程序关键字。详见 Flash 存储 器系统和编程的相关内容。 表3 LPC2131/2132/2138 存储器映射模式 模式 激活 用途 Boot 装载程序 由任何复位硬件激活 在任何复位后都会执行 Boot 装载程序。Boot Block 中断向量映射 模式 到存储器的底部以允许处理异常并在 Boot 装载过程中使用中断。 用户 Flash 模式 由 Boot 代码软件激活 当在存储器中识别了一个有效的用户程序标识并且 Boot 装载操 作未被执行时,由 Boot 装载程序启动。中断向量没有重新映射, 它位于 Flash 存储器的底部。 用户 RAM 模式 由用户程序软件激活 由用户程序激活。中断向量重新映射到静态 RAM 的底部。 存储器的重新映射 为了与将来器件相兼容,整个 Boot Block 都被映射到片内存储器空间的顶端。在这种方式下,使用较 大或较小的 Flash 模块都不需要改变 Boot Block(需要改变 Boot 装载程序自身的代码)的位置或改变 Boot Block 中断向量的映射。除了中断向量之外的存储器空间都保持固定的位置。图 6 所示为使用上述定义的模 式映射的片内存储器。 存储器重新映射的部分允许在不同模式下处理中断,它包括中断向量区(32 字节)和额外的 32 字节, 一共是 64 字节。重新映射的代码位置与地址 0x0000 0000~0x0000 003F 重叠。一个位于 Flash 存储器中的 典型用户程序可以将整个 FIQ 处理程序放置在地址 0x0000 001C 而不需要考虑存储器的边界。包含在 SRAM、外部存储器和 Boot Block 中的向量必须包含跳转到实际中断处理程序的分支或者其它执行跳转到 中断处理程序的转移指令。 选择这种配置有三个原因: 1. 使 Flash 存储器中的 FIQ 处理程序不必考虑因为重新映射所导致的存储器边界问题。 2. 用来处理代码空间中段边界仲裁的 SRAM 和 Boot Block 向量的使用大大减少。 3. 为超过单字转移指令范围的跳转提供空间来保存常量 重新映射的存储器组,包括 Boot Block 和中断向量,除了重新映射的地址外,仍然继续出现在它们最 初的位置。 有关重新映射及其举例详见系统控制模块。 9 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 12K 字节 Boot Block 2.0 GB http://www.zlgmcu.com 0x8000 0000 0x7FFF FFFF (从Flash存储器顶端重新映射) (Boot Block 中断向量) 2.0 GB - 8K 保留地址空间 0x4000 8000 0x4000 7FFF 32 kB 片内 SRAM 1.0 GB (SRAM中断向量) 0x4000 0000 0x3FFF FFFF 保留地址空间 (12k字节 Boot Block重新映射到更高的地址范围) 0x0008 0000 0x0007 FFFF 512字节Flash 存储器 0.0 GB 有效的中断向量( Flash,SRAM或Boot Block) 0x0000 0000 注:存储器组并不是按比例绘制的。 图 6 显示已重新映射和可重新映射区域的低存储器空间(带 512kB Flash 的 LPC2138) 预取指中止和数据中止异常 如果试图访问一个保留地址或未分配区域的地址,LPC2131/2132/2138 将产生适当的总线周期中止异 常。这些区域包括: 特定的 ARM 器件所没有的存储器映射区域。对于 LPC2131/2132/2138,它们是: -片内非易失性存储器与片内 SRAM 之间的地址空间,在图 2 和图 6 中标为“保留地址空间” 。 对于 32kB Flash 器件来说,它们是 0x0000 8000 到 0x3FFF FFFF 的存储器地址空间;对于 64kB Flash 器件来说,它们是 0x0001 0000 到 0x3FFF FFFF 的存储器地址空间;而对于 512kB Flash 10 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 器件来说,它们是 0x0008 0000 到 0x3FFF FFFF 的存储器地址空间。 -片内静态 RAM 与外部存储器之间的地址空间,在图 2 中标为“保留地址空间” 。对于 8kB SRAM 器件,地址范围从 0x4000 1FFF 到 0x7FFF DFFF;对于 16kB SRAM 器件,地址范围从 0x4000 3FFF 到 0x7FFF DFFF;而对于 32kB SRAM 器件,它们从 0x4000 7FFF 到 0x7FFF D000。整个 地址空间范围是 0x4000 3FFF 到 0x7FFF D000。 -AHB 和 VPB 空间的保留区域,见图 3。 未分配的 AHB 外设空间,见图 4。 未分配的 VPB 外设空间,见图 5。 对于这些区域,对数据的访问和对指令的取指都会产生异常。此外,对 AHB 或 VPB 外设地址执行任 何指令取指都会导致产生预取指中止异常。 在现有的 VPB 外设地址空间内,对未定义地址的访问不会产生数据中止异常。每个外设内的地址译码 被限制为外设内部需要判别的已定义寄存器。例如,对地址 0xE000D000(UART0 空间内一个未定义的地 址)的访问可能导致对定义在地址 0xE000C000 处的寄存器进行访问。一个外设内的这样一种地址混淆在 LPC2131/2132/2138 文档中没有定义,并且它也不是一个被 LPC2131/2132/2138 支持的特性。 需要注意的是,只有在试图执行从非法地址取指的指令时,ARM 才会将预取指中止标志与相关的指令 (没有意义的指令)一起保存到流水线并对中止进行处理。当代码在非常靠近存储器边界执行时,这样防 止了由预取指所导致的意外中止。 3. 系统控制模块 系统控制模块功能汇总 系统控制模块包括几个系统特性和控制寄存器,这些寄存器具有众多与特定外设器件无关的功能。它 们包括: 晶体振荡器 外部中断输入 存储器映射控制 PLL 功率控制 复位 VPB 分频器 唤醒定时器 每种类型的功能都有其自身的寄存器,不需要的位则定义为保留位。为了满足将来扩展的需要,无关 的功能不共用相同的寄存器地址。 管脚描述 表 4 所示为系统控制模块功能相关的管脚。 表4 管脚汇总 管脚名称 管脚方向 管脚描述 X1 输入 晶振输入-振荡器和内部时钟发生器电路的输入 X2 输出 晶振输出-振荡器放大器的输出 外部中断输入 0-低有效的通用中断输入。该管脚可用于将处理器从空 EINT0 输入 闲或掉电模式中唤醒。 P0.1 和 P0.16 可用作 EINT0 功能。 11 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 续上表 管脚名称 管脚方向 管脚描述 外部中断输入 1-见上面的 EINT0 描述。 P0.3 和 P0.14 可用作 EINT1 功能。 EINT1 输入 复位后管脚 P0.14 上立即出现的低电平被看作是一个启动 ISP 命令处理 器的外部硬件请求。有关 ISP 和串行 Boot Loader 的详细情况见“Flash 存储器系统和编程”一章。 EINT2 输入 EINT3 输入 RESET 输入 外部中断输入 2-见上面的 EINT0 描述。 P0.7 和 P0.15 可用作 EINT2 功能。 外部中断输入 3-见上面的 EINT0 描述。 P0.9, P0.20 和 P0.30 可用作 EINT3 功能。 外部复位输入-该管脚上的低电平将芯片复位,使 I/O 口和外设恢复其 默认状态,并使处理器从地址 0 开始执行程序。 寄存器描述 所有寄存器不管规格大小都以字地址作为边界。这些寄存器的详细信息见相关功能的描述。 表5 系统控制寄存器汇总 名称 描述 访问 复位值* 地址 EXTINT 外部中断标志寄存器 R/W 0 0xE01FC140 EXTWAKE 外部中断唤醒寄存器 R/W 0 0xE01FC144 EXTMODE 外部中断方式寄存器 R/W 0 0xE01FC148 EXTPOLAR 外部中断极性寄存器 R/W 0 0xE01FC14C 存储器映射控制 R/W 0 0xE01FC040 PLLCON PLL 控制寄存器 R/W 0 0xE01FC080 PLLCFG PLL 配置寄存器 R/W 0 0xE01FC084 PLLSTAT PLL 状态寄存器 RO 0 0xE01FC088 PLLFEED PLL 馈送寄存器 WO NA 0xE01FC08C PCON 功率控制寄存器 R/W 0 0xE01FC0C0 PCONP 外设功率控制 R/W 0x3BE 0xE01FC0C4 VPB 分频器控制 R/W 0 0xE01FC100 复位源识别寄存器 R/W 0 0xE01FC180 代码安全保护寄存器 RO 0 0xE01FC184 外部中断 存储器映射控制 MEMMAP 锁相环 功率控制 VPB 分频器 VPBDIV 复位 RSID 代码安全/调试 CSPR * 复位值仅指已使用位中保存的数据,不包括保留位的内容。 晶体振荡器 当 1MHz ~ 50MHz 频 率 范 围 内 的 一 个 占 空 比 因 数 为 50-50 的 信 号 从 XTAL1 脚 输 入 到 12 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com LPC2131/2132/2138 时,微控制器的内部振荡电路支持 1MHz~30MHz 的外部晶体。如果片内 PLL 系统或 引导装载程序被使用,输入时钟频率将被限制到 10MHz~25MHz。 振荡器输出频率称为 FOSC,为了便于频率等式的书写及本文档的描述,ARM 处理器时钟频率称为 cclk。 FOSC 和 cclk 的值相同,除非 PLL 运行连接。详见 PLL 一节。 LPC2131/2132/2138 的振荡器可工作在两种模式下:从属模式和振荡模式。 从属模式下,输入时钟信号与一个 100pF(图 7 Cc)相连,其幅值不少于 200mVrms。X2 管脚不连接。 如果选择从属模式,Fosc 信号(占空因数为 50-50)的频率被限制在 1MHz~50MHz。 振荡模式中使用的外部元件和模型见图 7 中的 b 和 c 图以及表 6。由于片内集成了反馈电阻,只需在 。图 7 中 外部连接一个晶体和电容 Cx1、Cx2 就可形成基本模式的振荡(基本频率用 L、CL 和 Rs 来表示) c 图的电容 Cp 是并联封装电容,其值不能大于 7pF。参数 Fc、CL、Rs 和 Cp 都由晶体制造商提供。 如果器件振荡器工作在振荡模式,Fosc 时钟限制在 1MHz~30MHz。 LPC2131/2132/2138 X1 LPC2131/2132/2138 X2 X1 X2 L <=> CC CL Clock CX1 a) Xtal RS CX2 b) CP c) 图 7 振荡器模式和模型:a)从属模式,b)振荡模式,c)外部晶体模型(用来评估 CX1/X2 的值) 表6 振荡模式下 CX1/X2 的建议取值(晶体和外部元件参数) 基本振荡频率 Fc 晶体负载电容 CL 最大晶体串联电阻 Rs 外部负载 电容 Cx1,Cx2 1~5MHz 5~10MHz 10~15MHz 15~20MHz 20~25MHz 25~30MHz 10pF n.a. n.a. 20pF n.a. n.a. 30pF <300Ω 58pF,58pF 10pF <300Ω 18pF,18pF 20pF <300Ω 38pF,38pF 30pF <300Ω 58pF,58pF 10pF <300Ω 18pF,18pF 20pF <220Ω 38pF,38pF 30pF <140Ω 58pF,58pF 10pF <220Ω 18pF,18pF 20pF <140Ω 38pF,38pF 30pF <80Ω 58pF,58pF 10pF <160Ω 18pF,18pF 20pF <90Ω 38pF,38pF 30pF <50Ω 58pF,58pF 10pF <130Ω 18pF,18pF 20pF <50Ω 38pF,38pF 30pF n.a. n.a. 13 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com f OSC 选择 True 使用了片内PLL? False True 通过ISP下载初始代码? False 使用外部晶振? True False min fOSC = 10 MHz max fOSC = 25 MHz min fOSC = 1 MHz max fOSC = 50 MHz (图7,模式a和/或b) (图7,模式a) min fOSC = 1 MHz max fOSC = 30 MHz (图7,模式b) 图 8 Fosc 的选择 外部中断输入 LPC2131/2132/2138 含有 4 个外部中断输入(作为可选的管脚功能) 。外部中断输入可用于将处理器从 掉电模式唤醒。 寄存器描述 外部中断功能具有 4 个相关的寄存器。EXTINT 寄存器包含中断标志。EXTWAKEUP 寄存器包含使能 唤醒位,可使能独立的外部中断输入将 LPC2131/2132/2138 从掉电模式唤醒。EXTMODE 和 EXTPOLAR 寄存器用来指定管脚使用电平或边沿激活方式。 表 7 外部中断寄存器 地址 名称 0xE01FC140 EXTINT 0xE01FC144 EXTWAKE 0xE01FC148 EXTMODE 0xE01FC14C EXTPOLAR 描述 访问 外部中断标志寄存器包含 ENIT0,EINT1 和 EINT2 的中断标 志。见表 8。 外部中断唤醒寄存器包含 3 个用于控制外部中断是否将处 理器从掉电模式唤醒的使能位,见表 9。 外部中断方式寄存器控制每个管脚的边沿或电平激活。 R/W R/W R/W 外部中断极性寄存器控制由每个管脚的哪种电平或边沿来 R/W 产生中断。 外部中断标志寄存器(EXTINT - 0xE01FC140) 当一个管脚选择使用外部中断功能时,对应在 EXTPOLAR 和 EXTMODE 寄存器中的位选择的电平或 边沿将置位 EXTINT 寄存器中的中断标志。这样来向 VIC 提出中断请求,如果管脚中断使能,则产生中断。 通过向 EXTINT 寄存器的位 EINT0~位 EINT3 写入 1 来将其清零。电平激活方式下,该操作只有在管 脚处于无效状态时才有效。 一旦 EINT0~EINT3 中的一位被置位并开始执行相应的代码(处理唤醒和/或外部中断) ,该位必须清 零。否则 EINT 管脚刚触发的事件以后将不会被识别。 例如,如果外部中断 0 管脚的低电平将系统从掉电模式唤醒,为了将来还能进入掉电模式,唤醒后的 程序必须将 EINT0 位复位。如果 EINT0 位仍保持置位状态,后来的唤醒掉电模式的任何操作都将失败。外 部中断也不例外。 有关掉电模式的详细信息见后面章节的描述。 14 广州周立功单片机发展有限公司 Tel: (020)38730976 表8 38730977 Fax: 38730925 http://www.zlgmcu.com 外部中断标志寄存器(EXTINT- 0xE01FC140) 功能 EXTINT 描述 复位值 电平激活方式下,如果管脚的 EINT0 功能被选用且管脚处于有效状态时, 该位置位;边沿激活方式下,如果管脚的 EINT0 功能被选用且管脚上出 现所选极性,该位置位。 0 EINT0 0 有 2 个 I/O 口可选择用作 EINT0 功能(见 “管脚配置” 中有关 P0.1 和 P0.16 的描述) 。 该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。 电平激活方式下,如果管脚的 EINT1 功能被选用且管脚处于有效状态时, 该位置位;边沿激活方式下,如果管脚的 EINT1 功能被选用且管脚上出 现所选极性,该位置位。 1 EINT1 0 有 2 个 I/O 口可选择用作 EINT1 功能(见 “管脚配置” 中有关 P0.3 和 P0.14 的描述) 。 该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。 电平激活方式下,如果管脚的 EINT2 功能被选用且管脚处于有效状态时, 该位置位;边沿激活方式下,如果管脚的 EINT2 功能被选用且管脚上出 现所选极性,该位置位。 2 EINT2 0 有 2 个 I/O 口可选择用作 EINT2 功能(见 “管脚配置” 中有关 P0.7 和 P0.15 的描述) 。 该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。 电平激活方式下,如果管脚的 EINT3 功能被选用且管脚处于有效状态时, 该位置位;边沿激活方式下,如果管脚的 EINT3 功能被选用且管脚上出 现所选极性,该位置位。 3 EINT3 0 有 3 个 I/O 口可选择用作 EINT3 功能 (见“管脚配置”中有关 P0.9, P0.20 和 P0.30 的描述) 。 该位通过写入 1 清除,但电平激活方式下管脚处于有效状态的情况除外。 保留 7:4 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA 中断唤醒寄存器(INTWAKE - 0xE01FC144) EXTWAKE 寄存器中的使能位允许外部中断将处理器从掉电模式唤醒。相关的 EINTn 功能必须映射到 管脚才能实现掉电唤醒。但中断并不必要为了实现唤醒操作而在向量中断控制器中被使能。这样做的好处 是允许外部中断输入将处理器从掉电模式唤醒,但不产生中断(只是简单地恢复操作) ,或者在掉电模式下 使能中断而不会将处理器唤醒(这样,当应用中并不需要唤醒特性时,也不必关闭中断) 。 表9 外部中断唤醒寄存器(INTWAKE – 0xE01FC144) INTWAKE 功能 描述 0 EXTWAKE0 该位为 1 时,使能 EINT0 将处理器从掉电模式唤醒。 0 1 EXTWAKE1 该位为 1 时,使能 EINT1 将处理器从掉电模式唤醒。 0 2 EXTWAKE2 该位为 1 时,使能 EINT2 将处理器从掉电模式唤醒。 0 3 EXTWAKE3 该位为 1 时,使能 EINT3 将处理器从掉电模式唤醒。 0 13:4 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 14 BODWAKE 该位为 1 时,BOD 中断产生时可将处理器从掉电模式唤醒。 15 RTCWAKE 该位为 1 时,RTC 中断产生时可将处理器从掉电模式唤醒。 15 复位值 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 外部中断方式寄存器(EXTMODE – 0xE01FC148) EXTMODE 寄存器中的位用来选择每个 EINT 脚是电平或边沿激活。只有选择用作 EINT 功能(见管 脚连接模块一章)并已通过 VICIntEnable(见向量中断控制器(VIC)一章)使能的管脚才能产生外部中断 功能的中断(当然,如果管脚选择用作其它功能,则产生其它功能的中断) 。 注:当某个中断在 VICIntEnable 中被禁能时,软件应该只改变 EXTMODE 寄存器中相应位的值。中断 重新使能前,软件向 EXTINT 写入 1 来清除 EXTINT 位,EXTINT 位可通过改变激活方式来置位。 表 10 外部中断方式寄存器(EXTMODE – 0xE01FC148) EXTMODE 功能 0 EXTMODE0 描述 复位值 该位为 0 时,EINT0 使用电平激活;该位为 1 时,EINT0 使用边 0 沿激活。 1 EXTMODE1 该位为 0 时,EINT1 使用电平激活;该位为 1 时,EINT1 使用边 0 沿激活。 2 EXTMODE2 该位为 0 时,EINT2 使用电平激活;该位为 1 时,EINT2 使用边 0 沿激活。 3 EXTMODE3 该位为 0 时,EINT3 使用电平激活;该位为 1 时,EINT3 使用边 0 沿激活。 保留 7:4 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA 外部中断极性寄存器(EXTPOLAR – 0xE01FC14C) 在电平激活方式中,EXTPOLAR 寄存器用来选择相应管脚是高电平或低电平有效。在边沿激活方式中, EXTPOLAR 寄存器用来选择管脚上升沿或下降沿有效。只有选择用作 EINT 功能(见管脚连接模块一章) 并已通过 VICIntEnable(见向量中断控制器(VIC)一章)使能的管脚才能产生外部中断功能的中断(当然, 如果管脚选择用作其它功能,则产生其它功能的中断) 。 注:当某个中断在 VICIntEnable 中被禁能时,软件应该只改变 EXTPOLAR 寄存器中相应位的值。中 断重新使能前,软件向 EXTINT 写入 1 来清除 EXTINT 位,EXTINT 位可通过改变中断极性来置位。 表 11 外部中断极性寄存器(EXTPOLAR – 0xE01FC14C) EXTPOLAR 功能 0 EXTPOLAR0 描述 复位值 该位为 0 时,EINT0 低电平或下降沿有效(由 EXTMODE0 决 0 定) 。 该位为 1 时,EINT0 高电平或上升沿有效(由 EXTMODE0 决 定) 1 EXTPOLAR1 该位为 0 时,EINT1 低电平或下降沿有效(由 EXTMODE1 决 0 定) 。 该位为 1 时,EINT1 高电平或上升沿有效(由 EXTMODE1 决 定) 。 2 EXTPOLAR2 该位为 0 时,EINT2 低电平或下降沿有效(由 EXTMODE2 决 0 定) 。 该位为 1 时,EINT2 高电平或上升沿有效(由 EXTMODE2 决 定) 。 3 EXTPOLAR3 该位为 0 时,EINT3 低电平或下降沿有效(由 EXTMODE3 决 0 定) 。 该位为 1 时,EINT3 高电平或上升沿有效(由 EXTMODE3 决 定) 。 7:4 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 16 NA 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 多个外部中断管脚 通过软件可选择使用管脚选择寄存器中 EINT3:0 的多个管脚,见管脚连接模块一章的描述。每个 EINT3:0 的外部中断逻辑从管脚的接收装置中接收与之相连的所有管脚的状态和信号(用来指示管脚是否 。当多个管脚根据其方式位和极性位的不同进行选择时,由外部中断逻辑来处理: 选用 EINT 功能) 低有效电平激活方式中,选用 EINT 功能的全部管脚的状态都连接到一个正逻辑与门。 高有效电平激活方式中,选用 EINT 功能的全部管脚的状态都连接到一个正逻辑或门。 边沿激活方式中,使用 GPIO 端口号最低的管脚,与管脚的极性无关。 (边沿激活方式中选择使 用多个 EINT 管脚被看作编程出错。 ) 外部中断逻辑获取的是 EINTi 信号,见下面的逻辑原理图(图 9) 。 当多个 EINT 管脚逻辑或时,可在中断服务程序中通过 IO0PIN 和 IO1PIN 寄存器从 GPIO 端口读出管 脚状态来判断产生中断的管脚。 唤醒使能 (EXTWAKE的一位) VPB 总线数据 D 干扰滤波 EINTi EXTWAKE的VPB读 EINTi到 唤醒定时器 (图11) Q pclk 中断标志 (EXINT的一位) EXTPOLARi 1 D S S Q R R EXTMODEi S Q Q 到 VIC R EXINT的VPB读 pclk pclk 复位 向EXTINTi写1 图 9 外部中断逻辑 存储器映射控制 存储器映射控制用于改变从地址 0x00000000 开始的中断向量的映射。这允许运行在不同存储器空间中 的代码对中断进行控制。 存储器映射控制寄存器(MEMMAP – 0xE01FC040) 表 12 MEMMAP 寄存器 地址 名称 0xE01FC040 MEMMAP 表 13 描述 访问 存储器映射控制。选择从 Flash Boot Block、用户 Flash 或 RAM 中读取 ARM 中断向量。 R/W 存储器映射控制寄存器(MEMMAP – 0xE01FC040) MEMMAP 功能 描述 复位值 00: Boot 装载程序模式。中断向量从 Boot Block 重新映射。 01: 用户 Flash 模式。中断向量不重新映射,它位于 Flash 中。 1:0 MAP1:0 10: 用户 RAM 模式。中断向量从静态 RAM 重新映射。 0 11: 保留。不使用该选项。 警告:不正确的设定会导致器件的错误操作。 7:2 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 17 NA 广州周立功单片机发展有限公司 Tel: (020)38730976 * 38730977 Fax: 38730925 http://www.zlgmcu.com LPC2131/2132/2138 的 MAP 位的硬件复位值为 00。Boot 装载程序会将用户看到的复位值更改,该 程序总是在复位后立即运行。用户文档将反映这一区别。 存储器映射控制的使用注意事项 存储器映射控制只从处理 ARM 异常(中断)必需的 3 个数据源(每个 64 字节)中选择一个使用。 例如,每当产生一个软件中断请求,ARM 内核就从 0x0000 0008 处取出 32 位数据(见表 2, “ARM 异 常向量位置” )。这就意味着当 MEMMAP[1:0]=10(用户 RAM 模式)时,从 0x0000 0008 的读数/取指是对 0x4000 0008 单元进行操作。当 MEMMAP[1:0]=00(Boot 装载程序模式)时,从 0x0000 0008 的读数/取指 (Boot Block 从片内 ROM 存储器重新映射) 。如果 MEMMAP[1:0]=11 是对 0x7FFF E008 单元的数据进行操作 (用户外部存储器模式) ,从地址为 0x8000 0008 的片外存储器中读取数据。 PLL(锁相环) PLL 接受的输入时钟频率范围为 10MHz~25MHz。输入频率通过一个电流控制振荡器(CCO)倍增到 范 围 10MHz~60MHz 。 倍 频 器 可 以 是 从 1 到 32 的 整 数 ( 实 际 上 , 由 于 CPU 最 高 频 率 的 限 制 , LPC2131/2132/2138 的倍频值不能高于 6) 。CCO 的操作频率范围为 156MHz~320MHz,因此在环中有一个 额外的分频器在 PLL 提供所需要的输出频率时使 CCO 保持在频率范围内。输出分频器可设置为 2,4,8 或 16 分频。由于输出分频器的最小值为 2,它保证了 PLL 输出有 50%的占空比。图 10 为 PLL 的方框图。 PLL 的激活由 PLLCON 寄存器控制。PLL 倍频器和分频器的值由 PLLCFG 寄存器控制。为了防止 PLL 参数发生意外改变或 PLL 失效,对这两个寄存器进行了保护。当 PLL 提供芯片时钟时,由于芯片的所有操 作,包括看门狗定时器在内都依赖于它,因此 PLL 设置的意外改变将导致 CPU 执行不期望的动作。对它 们的保护由一个类似于操作看门狗定时器的代码序列来实现。详情请参阅 PLLFEED 寄存器的描述。 PLL 在芯片复位和进入掉电模式时被关闭并旁路。PLL 只能通过软件使能。程序必须在配置并激活 PLL 后等待其锁定,然后作为时钟源连接到 PLL。 寄存器描述 PLL 由表 14 所示的寄存器进行控制。 警告:PLL 值的不正确设定会导致芯片的错误操作。 表 14 PLL 寄存器 地址 名称 0xE01FC080 PLLCON 0xE01FC084 PLLCFG 描述 访问 PLL 控制寄存器。最新的 PLL 控制位的保持寄存器。写入该寄 存器的值在有效的 PLL 馈送序列执行之前不起作用。 PLL 配置寄存器。最新的 PLL 配置值的保持寄存器。写入该寄 存器的值在有效的 PLL 馈送序列执行之前不起作用。 R/W R/W PLL 状态寄存器。PLL 控制和配置信息的读回寄存器。如果曾对 0xE01FC088 PLLSTAT PLLCON 或 PLLCFG 执行了写操作,但没有产生 PLL 馈送序列, 这些值将不会反映 PLL 的当前状态。读取该寄存器提供了控制 RO PLL 和 PLL 状态的真实值。 PLL 馈送寄存器。该寄存器使能装载 PLL 控制和配置信息,该 0xE01FC08C PLLFEED 配置信息从 PLLCON 和 PLLCFG 寄存器装入实际影响 PLL 操作 的映像寄存器。 18 WO 广州周立功单片机发展有限公司 Tel: (020)38730976 PLLC PLLE 38730977 Fax: 38730925 http://www.zlgmcu.com 时钟同步 Direct 0 PSEL[1:0] pd pd 旁路 0 1 FOSC 相位频率 检测器 PLOCK FCCO CCO cd 0 /2P 0 0 1 cclk 1 pd cd fout M分频 msel<4:0> MSEL[4:0] 图 10 PLL 方框图 PLL 控制寄存器(PLLCON – 0xE01FC080) PLLCON 寄存器包含使能和连接 PLL 的位,使能 PLL 锁定到当前倍频器和分频器值的设定频率上。 连接 PLL 将使处理器和所有片内功能都根据 PLL 输出时钟来运行。对 PLLCON 的更改只有在对 PLLFEED 寄存器执行了正确的 PLL 馈送序列后才生效(见 PLL 馈送寄存器(PLLFEED - 0xE01FC08C)一节的描述) 。 表 15 PLL 控制寄存器(PLLCON – 0xE01FC080) PLLCON 功能 描述 复位值 PLL 使能。当该位为 1 并且在有效的 PLL 馈送之后,该位将 0 PLLE 激活 PLL 并允许其锁定到指定的频率。见表 17 的 PLLSTAT 0 寄存器。 PLL 连接。当 PLLC 和 PLLE 都为 1 并且在有效的 PLL 馈送 1 PLLC 后,将 PLL 作为时钟源连接到 LPC2131/2132/2138。否则, LPC2131/2132/2138 直接使用振荡器时钟。 见表 17 的 PLLSTAT 0 寄存器描述。 7:2 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA PLL 在作为时钟源之前必须进行设置、使能并锁定。将振荡器时钟切换到 PLL 输出或反过来操作时, 内部电路对操作进行同步以确保不会产生干扰。硬件不能确保 PLL 在连接之前锁定或在 PLL 在失去锁定时 自动断开连接。在 PLL 失去锁定的情况下,振荡器很可能已经变得不稳定,这样断开 PLL 也挽救不了这种 状况。 PLL 配置寄存器(PLLCFG – 0xE01FC084) PLLCFG 寄存器包含 PLL 倍频器和分频器值。在执行正确的 PLL 馈送序列之前改变 PLLCFG 寄存器 的值不会生效(见 PLL 馈送寄存器(PLLFEED – 0xE01FC08C)的描述。PLL 频率和倍频器以及分频器值 的计算详见 PLL 频率计算一节。 19 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 16 PLL 配置寄存器(PLLCFG – 0xE01FC084) PLLCFG 功能 4:0 MSEL4:0 描述 复位值 PLL 倍频器值。在 PLL 频率计算中其值为 M。 0 注:有关 MSEL4:0 值的正确选取见“PLL 频率计算” 。 6:5 PSEL1:0 PLL 分频器值。在 PLL 频率计算中其值为 P。 0 注:有关 PSEL1:0 值的正确选取见“PLL 频率计算” 。 保留 7 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA PLL 状态寄存器(PLLSTAT - 0xE01FC088) 从只读 PLLSTAT 寄存器读出的是正在使用的真实 PLL 参数和状态。PLLSTAT 可能与 PLLCON 和 PLLCFG 中的值不同,这是因为没有执行正确的 PLL 馈送序列,这两个寄存器中的值并未生效。详见 PLL 馈送寄存器(PLLFEED – 0xE01FC08C)寄存器的描述。 表 17 PLL 状态寄存器(PLLSTAT – 0xE01FC088) PLLSTAT 功能 描述 复位值 4:0 MSEL4:0 读出的 PLL 倍增器值。这是 PLL 当前使用的值。 0 6:5 PSEL1:0 读出的 PLL 分频器值。这是 PLL 当前使用的值。 0 7 保留 8 PLLE 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 读出的 PLL 使能位。当该位为 1 时,PLL 处于激活状态;为 0 时,PLL 关闭。当进入掉电模式时,该位自动清零。 NA 0 读出的 PLL 连接位。当 PLLC 和 PLLE 都为 1 时,PLL 作为 9 PLLC 时钟源连接到 LPC2131/2132/2138;当 PLLC 或 PLLE 位为 0 时,PLL 被旁路,LPC2131/2132/2138 直接使用振荡器时钟。 0 当进入掉电模式时,该位自动清零。 10 PLOCK 15:11 保留 反映 PLL 的锁定状态。为 0 时,PLL 未锁定;为 1 时,PLL 锁定到指定的频率。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 NA PLL 中断 PLLSTAT 寄存器中的 PLOCK 位连接到中断控制器。这样可使用软件打开 PLL 并连接到其它功能,不 需要等待 PLL 锁定。当发生中断时(PLOCK=1) ,可以连接 PLL 并禁止中断。 PLL 模式 PLLE 和 PLLC 的组合见表 18。 表 18 PLL 控制位组合 PLL 功能 PLLC PLLE 0 0 PLL 被关闭并断开连接。系统使用未更改的时钟输入。 0 1 PLL 被激活但是尚未连接。PLL 可在 PLOCK 置位后连接。 1 0 与 00 组合相同。这样消除了 PLL 已连接但没有使能的可能性。 1 1 PLL 已使能并连接到处理器作为系统时钟源。 PLL 馈送寄存器(PLLFEED – 0xE01FC08C) 必须将正确的馈送序列写入 PLLFEED 寄存器才能使 PLLCON 和 PLLCFG 寄存器的更改生效。馈送序 列如下: 1. 将值 0xAA 写入 PLLFEED 20 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 将值 0x55 写入 PLLFEED。 2. 这两个写操作的顺序必须正确,而且必须是连续的 VPB 总线周期。后面一个要求表明在执行 PLL 馈 送操作时必须禁止中断。不管是写入的值不正确还是没有满足前两个条件,对 PLLCON 或 PLLCFG 寄存器 的更改都不会生效。 表 19 PLL 馈送寄存器(PLLFEED – 0xE01FC08C) PLLFEED 功能 7:0 PLLFEED 描述 复位值 PLL 馈送序列必须写入该寄存器才能使 PLL 配置和控制寄存 器的更改生效。 未定义 PLL 和掉电模式 掉电模式会自动关闭并断开 PLL。从掉电模式唤醒不会自动恢复 PLL 的设定,PLL 的恢复必须由软件 来完成。通常,一个将 PLL 激活并等待锁定,然后将 PLL 连接的子程序可以在任何中断服务程序的开始调 用。有一点非常重要,那就是不要试图在掉电唤醒之后简单地执行馈送序列来重新启动 PLL。这会在 PLL 锁定建立之前同时使能并连接 PLL。 PLL 频率计算 PLL 等式使用下列参数: FOSC 晶振频率 FCCO PLL 电流控制振荡器的频率 cclk PLL 输出频率(也是处理器的时钟频率) M PLLCFG 寄存器中 MSEL 位的倍增器值 P PLLCFG 寄存器中 PSEL 位的分频器值 PLL 输出频率(当 PLL 激活并连接时)由下式得到: cclk = M * FOSC 或 cclk = FCCO / (2*P) CCO 频率可由下式得到: FCCO = cclk * 2 * P 或 FCCO = FOSC * M * 2 * P PLL 输入和设定必须满足下面的条件: FOSC 的范围:10MHz~25MHz cclk 的范围:10MHz~Fmax(LPC2131/2132/2138 的最大允许频率) FCCO 的范围:156MHz~320MHz 确定 PLL 设定的过程 如果一个特定的应用使用 PLL,它的配置必须依照下面的原则: 1. 选择处理器的操作频率(cclk) 。这可以根据处理器的整体要求、UART 波特率的支持等因素来决 。 定。记住外围器件的时钟频率可以低于处理器频率(见 VPB 分频器描述) 2. 选择振荡器频率(FOSC) 。cclk 一定是 FOSC 的整数(非小数)倍。 3. 计算 M 值以配置 MSEL 位。M = cclk/FOSC,M 的取值范围为 1~32。写入 MSEL 位的值为 M-1(见 表 21)。 4. 选择 P 值以配置 PSEL 位,使 FCCO 在定义的频率限制范围内,FCCO 可通过前面的等式计算。P 必 须是 1, 2, 4 或 8 其中的一个。写入 PSEL 位的值 00 表示 P=1;01 表示 P=2;10 表示 P=4;11 表 示 P=8 (见表 20)。 21 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 20 PLL 分频器值 PSEL 位 PLLCFG[6:5] P值 00 1 01 2 10 4 11 8 表 21 PLL 倍增器值 MSEL 位 PLLCFG[4:0] M值 00000 1 00001 2 00010 3 00011 4 ... ... 11110 31 11111 32 PLL 举例 例如系统要求 Fosc=10MHz,cclk=60MHz。 根据这些要求,可得出 M=cclk/Fosc=60MHz/10MHz=6。因此,M-1=5 写入 PLLCFG4:0。 P 值可由 P=Fcco/(cclk*2)得出,Fcco 必须在 156MHz~320MHz 内。假设 Fcco 取最低频率 156MHz,则 P=156MHz/(2*60MHz)=1.3。Fcco 取最高频率可得出 P=2.67。因此,同时满足 Fcco 最低和最高频率要求 的 P 值只能为 2,见表 20。所以,PLLCFG=6:5=1。 功率控制 LPC2131/2132/2138 支持两种节电模式:空闲模式和掉电模式。在空闲模式下,指令的执行被挂起直到 发生复位或中断为止。外设功能在空闲模式下继续保持并可产生中断使处理器恢复运行。空闲模式使处理 器、存储器系统和相关控制器以及内部总线不再消耗功率。 在掉电模式下,振荡器关闭,这样芯片没有任何内部时钟。处理器状态和寄存器、外设寄存器以及内 部 SRAM 值在掉电模式下被保持。芯片管脚的逻辑电平保持静态。复位或特定的不需要时钟仍能工作的中 断可终止掉电模式并使芯片恢复正常运行。由于掉电模式使芯片所有的动态操作都挂起,因此芯片的功耗 降低到几乎为零。 掉电和空闲模式的进入必须与程序的执行同步进行。通过中断唤醒掉电模式不会使指令丢失、不完整 或重复。从掉电模式唤醒将在唤醒定时器一节中作进一步讨论。 外设的功率控制特性允许独立关闭应用中不需要的外设,这样进一步降低了功耗。 寄存器描述 功率控制功能包含两个寄存器,如表 22 所示。更详细的内容见后面的描述。 表 29 功率控制 寄存器 地址 名称 0xE01FC0C0 PCON 0xE01FC0C4 PCONP 描述 访问 功率控制寄存器。该寄存器包含 LPC2131/2132/2138 两种节电模 式的控制位。见表 23。 R/W 外设功率控制寄存器。该寄存器包含使能和禁止单个外设功能的 控制位。该寄存器可使未被使用的外设不消耗功率。 22 R/W 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 功率控制寄存器(PCON – 0xE01FC0C0) PCON 寄存器包含两个位。置位其中一个位,将会进入掉电或空闲模式。如果两位都置位,则进入掉 电模式。 表 23 功率控制寄存器(PCON – 0xE01FC0C0) 功能 PCON 描述 复位值 空闲模式-当该位置位时,处理器时钟停止,但外围功能保持 0 工作状态。外设或外部中断源所产生的任何中断都会使处理器 IDL 0 恢复运行。 掉电模式-当该位置位时,振荡器和所有片内时钟都停止。外 1 部中断所产生的唤醒条件可使振荡器重新启动并使 PD 位清 PD 0 零,处理器恢复运行。 当 PD 为 1 PDBOD 位为 0 时,掉电模式下掉电检测继续运行, 以致它的复位使 LPC2131/2132/2138 退出掉电模式(见注释) 。 2 PDBOD 当 PD 和 PDBOD 都为 1 时,掉电模式中 BOD 电路禁能以节 省功耗。当 PD 为 0 时, PDBOD 的状态对上述操作不会产生 影响。 保留 7:3 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA 注:由于直到唤醒定时器允许主振荡器恢复稳定运行后才能执行操作,因此不能保证操作在 Vdd 降到低于 BOD 阈值之前(这个条件将阻止操作的执行)恢复。如果操作确实恢复了,也不能保证在低 BOD 阈值终 止 操 作 之 前 LPC2131/2132/2138 的 操 作 可 以 持 续 多 长 时 间 。 这 些 都 取 决 于 Vdd 下 降 的 幅 度 。 LPC2131/2132/2138 附近的高去耦电容(Vdd 和地之间)可以使情况得以改善,使得软件可能在掉电模式下 实现所需的操作。 外设功率控制寄存器(PCONP – 0xE01FC0C4) PCONP 寄存器允许将所选的外设功能关闭以实现节电的目的。这可通过关断特定外围模块的时钟源来 实现。有少数外设功能不能被关闭(看门狗定时器、GPIO、管脚连接模块和系统控制模块)。某些外设, 特别是包含模拟功能的外设,它们的操作无需时钟。这些外设包含独立的禁能控制位,通过它们来关闭电 路以降低功耗。PCONP 中的每个位都控制一个外设。每个位所对应的外设编号见 LPC2131/2132/2138 存储 器寻址部分的 VPB 外设映射一节。 表 24 LPC2131/2132/2138 的外设功率控制寄存器(PCONP – 0Xe01FC0C4) PCONP 功能 描述 0 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 1 PCTIM0 该位为 1 时,定时器 0 使能。为 0 时,定时器 0 被关闭以实现节电。 1 2 PCTIM1 该位为 1 时,定时器 1 使能。为 0 时,定时器 1 被关闭以实现节电。 1 3 PCURT0 该位为 1 时,UART0 使能。为 0 时,UART0 被关闭以实现节电。 1 4 PCURT1 该位为 1 时,UART1 使能。为 0 时,UART1 被关闭以实现节电。 1 5 PCPWM0 该位为 1 时,PWM0 使能。为 0 时,PWM0 被关闭以实现节电。 6 保留 复位值 用户软件不要向其写入 1。从保留位读出的值未被定义。 2 2 1 0 7 PCI2C0 该位为 1 时,I C0 接口使能。为 0 时,I C0 接口被关闭以实现节电。 1 8 PCSPI0 该位为 1 时,SPI0 接口使能。为 0 时,SPI0 接口被关闭以实现节电。 1 9 PCRTC 该位为 1 时,RTC 使能。为 0 时,RTC 被关闭以实现节电。 1 10 PCSPI1 该位为 1 时,SSP 接口使能。为 0 时,SSP 接口被关闭以实现节电。 1 11 保留 用户软件写入 0 来实现节电。 1 23 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 续上表 PCONP 功能 12 PCAD0 描述 复位值 该位为 1 时,A/D 转换器 0 使能。为 0 时,A/D 0 被关闭以实现节能。清 1 零该位前先清零 AD0CR 寄存器的 PDN 位,该位应当在置位 PDN 前被置 位。 18:13 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 2 2 0 19 PCI2C1 该位为 1 时,I C1 接口使能。为 0 时,I C1 接口被关闭以实现节电。 1 20 PCAD1 该位为 1 时,A/D 转换器 1 使能。为 0 时,A/D 1 被关闭以实现节能。清 1 零该位前先清零 AD0CR 寄存器的 PDN 位,该位应当在置位 PDN 前被置 位。 31:21 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 功率控制注意事项 复位后,PCONP 的值设置成使能所有接口和外围功能(受 PCONP 控制的) 。除了对外围功能相关的 寄存器进行配置外,用户应用程序不要访问 PCONP 寄存器以便启动使用片内的任何外围功能。 在需要控制功率的系统中,只要将应用中用到的外围功能的对应在 PCONP 寄存器的位置 1,寄存器的 其它“保留”位或当前无需使用的外围功能对应在寄存器中的位都必须清零。 复位 LPC2131/2132/2138 有两个复位源: RESET 管脚和看门狗复位。 RESET 管脚为施密特触发输入管脚, 带有一个额外的干扰滤波器。任何复位源提供的芯片复位都会启动唤醒定时器(详见唤醒定时器的描述) , 复位将保持有效直至外部复位撤除,振荡器开始运行。当计数达到一个固定个数的时钟时,片内电路完成 其初始化。复位、振荡器以及唤醒定时器之间的关系见图 11。 复位干扰滤波器使处理器可以忽略非常短的外部复位脉冲并决定 RESET 保证芯片复位所必须保持的 最短时间。 RESET 一旦有效,只有当晶振运行稳定并且 LPC2131/2132/2138 的 X1 脚上出现适当的信号时 才能撤除。如果晶振子系统使用的是外部晶体,上电后 RESET 脚的信号必须保持 10ms。对于晶振已经稳 定运行且 X1 脚上已出现稳定信号时出现的复位, RESET 脚的信号只需保持 300ns。 当内部复位撤除时,处理器从地址 0 开始运行,此处为从 Boot Block 映射的复位向量。此时所有的处 理器和外设寄存器都恢复为默认状态。 外部复位和内部复位有一些小的区别。外部复位使特定管脚的值被锁存以实现配置。外部电路无法确 定内部复位什么时候发生进而对特定管脚的值进行配置,因此那些锁存在内部复位过程中不会重新装载。 在外部复位时对管脚 P1.20/TRACESYNC,P1.26/RTCK(见管脚配置和管脚连接模块)进行检测以实现不同 的目的。当复位后执行引导装载程序时,片内引导装载程序将对 P0.14 进行检测(见 Flash 存储器系统和编 程)。 芯片复位可以发生在 Flash 编程或擦除操作过程中。Flash 存储器会中断正在进行的操作并使 CPU 复位 延迟到内部 Flash 高电压降低后才完成。 24 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 外部复位 复位片内电路 C Q S 看门狗复位 复位PCON.PD 掉电 唤醒定时器 计数 2n Start EINT0唤醒 EINT1唤醒 EINT2唤醒 EINT3唤醒 C Q 振荡器输出 (FOSC) S PCON PD位 的VPB读 从 VPB写“1” 复位 FOSC 到 PLL 图 11 包括唤醒定时器的复位方框图 复位源识别寄存器(RSIR – 0xE01FC180) 每个复位源都在该寄存器中对应一位。置位这些位中的任何一个将使其读出时为 0。4 个复位源相互之 间的关系见下表的描述。 表 25 复位源识别寄存器(RSIR – 0xE01FC180) RSIR 功能 描述 复位值 0 POR POR 信号有效时该位置位,并清除 RSIR 寄存器的其它位。但是如 见文中 果 POR 信号撤销后另一个复位信号(如外部复位)仍然保持有效 描述 时,则这个复位信号对应的位置位。POR 位不受其它任何其它复位 源的影响。 1 EXTR RESET 信号有效时该位置位。该位由 POR 来清除,但不受 WDT 或 BOD 复位的影响。 2 WDTR 当看门狗定时器溢出和看门狗方式寄存器的 WDTRESET 位为 1 时,该位置位。该位可被其它任何一个复位源清除。 3 BODR 当 3.3V 的电源降到低于 2.6V 时该位置位。如果电压继续下降到 POR 有效电平(通常为 1V)时,该位清零,但如果电压恢复时不 能到达这个电平时,该位仍然为 1。该位不受外部复位和看门狗复 位的影响。 7:4 保留 保留。用户软件不要向其写入 1。从保留位读出的值未被定义。 0 VPB 分频器 VPB 分频器决定处理器时钟(cclk)与外设器件所使用的时钟(pclk)之间的关系。VPB 分频器有两 个用途。第一个是通过 VPB 总线为外设提供所需的 pclk 时钟以便外设以为满足 ARM 处理器而调整的速度 下工作。为了实现此目的,VPB 总线可以降低到 1/2 或 1/4 处理器时钟速率。由于 VPB 总线必须在上电后 正常工作(并且如果由于 VPB 分频器控制器位于 VPB 总线上而使上电时 VPB 总线不工作,其时序就不能 改变) ,VPB 总线在复位后默认的状态是以 1/4 速度运行。VPB 分频器的第二个用途是在应用不需要任何 外设全速运行时使功耗降低。 VPB 分频器与振荡器和处理器时钟的连接见图 12。由于 VPB 分频器连接到 PLL 输出,PLL 在空闲模 。 式下保持有效(如果 PLL 处于运行状态) 25 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com VPBDIV 寄存器(VPBDIV - 0xE01FC100) VPB 分频器寄存器包含两个位,可以设定 3 个分频值,详见表 27。 表 26 VPBDIV 寄存器映射 地址 名称 0xE01FC100 VPBDIV 描述 访问 控制 VPB 时钟速率与处理器时钟之间的关系 R/W 表 27 VPBDIV 寄存器(VPBDIV - 0xE01FC100) VPBDIV 功能 1:0 VPBDIV 描述 复位值 VPB 时钟速率如下: 0 00:VPB 总线时钟为处理器时钟的 1/4。 01:VPB 总线时钟与处理器时钟相同。 10:VPB 总线时钟为处理器时钟的 1/2。 11:保留。将该值写入 VPBDIV 寄存器无效(保留原来的设定) 。 保留 7:2 晶振或外部时钟源 (Fosc) 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 处理器时钟 (cclk) PLL VPB 分频器 VPB 时钟 (pclk) 图 12 VPB 分频器连接 唤醒定时器 唤醒定时器的用途是确保振荡器和芯片所需要的其它模拟功能在处理器开始执行指令之前能够正确工 作。这在上电、所有类型的复位以及任何原因所导致上述功能关闭时非常重要。由于振荡器和其它功能在 掉电模式下关闭,使处理器从掉电模式中唤醒都必须使用唤醒定时器。 唤醒定时器通过检测晶振是否能可靠地开始代码的执行来对其进行监视。当给芯片加电或某个事件使 芯片退出掉电模式,振荡器需要一段时间来产生足够振幅的信号驱动时钟逻辑。时间的长度取决于许多因 素,包括 Vdd 的上升速率(上电时) 、晶振的类型及其电气特性(如果使用石英晶振) 、任何其它外部电路 (例如电容)和振荡器在现有环境下自身的特性。 一旦检测到一个时钟,唤醒定时器则对 4096 个时钟计数,这段时间可使片内电路进行初始化。当片内 电路初始化完毕时,如果外部复位已撤除,处理器开始执行指令。当系统使用外部时钟源(与晶振连接的 管脚相反)时,需要考虑的振荡器的启动延时可能很短甚至没有。唤醒定时器的设计确保了芯片所需要的 任何其它功能在程序运行之前都能够进行操作。 任何复位、外部中断 EINT3:0 和 RTC 中断(如果 RTC 工作在其自身的 RTCX1-2 管脚的振荡器下)都 可使 LPC2131/2132/2138 退出掉电模式。如果一个中断使能产生唤醒并且所选中断事件出现,那么必须启 动振荡器唤醒。实际的中断(如果有)在唤醒定时器停止后产生,由向量中断控制器进行处理。 但是,LPC2131/2132/2138 的复用管脚(见管脚配置和管脚连接模块)允许其它外设起作用,使器件退 出掉电模式。下面的管脚功能对允许 UART0 或 1、SPI0 或 1、I2C 相关事件来产生中断:RxD0/EINT0、 SDA/EINT1、SSEL0/EINT2、RxD1/EINT3、DCD1/EINT1、RI1/EINT2、SSEL1/EINT3。 要使器件进入掉电模式并允许总线或管脚上的一个或多个事件能使其恢复正常操作,软件应该对管脚 的外部中断功能重新编程,选择中断合适的方式和极性以及掉电模式。唤醒时软件应恢复管脚复用的外围 26 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 功能。 上述的所有总线或管脚活动都是低电平有效。如果软件要使器件退出掉电模式来响应多个管脚共用的 同一个 EINTi 通道的事件,中断通道必须编程设定为低电平激活方式,因为只有在电平方式中通道才能使 信号逻辑或来唤醒器件。 这种方法的唯一缺陷就是振荡器的重新启动会阻止 LPC2131/2132/2138 对总线或管脚上唤醒事件的捕 获。空闲模式比掉电模式更适用于器件,使器件能及时地捕获和响应外部活动。 总之,LPC2131/2132/2138 唤醒定时器根据晶振执行最短时间的复位,它在从掉电模式中唤醒或任何复 位产生时激活。 掉电检测 LPC2131/2132/2138 包含一个 Vdd 管脚电压的 2 级检测。如果 Vdd 电压低于 2.9V,掉电检测器(BOD) ; 向向量中断控制器声明一个中断。该信号可通过中断使能寄存器(VICIntEnable – 0xFFFFF010,读/写) 或者,也可由软件通过读所有中断状态寄存器(VICRawIntr – 0xFFFFF008,只读)检测信号来使能。 当 V3 管脚的电压低于 2.6V 时,这个第二级的低电压检测将产生复位,禁能 LPC2131/2132/2138。该 复位可以防止 Flash 的内容发生改变,因为低电压下芯片的各种功能部件的操作都将变得不可靠。BOD 电 路将使电压降低到 1V 以下来维持复位,这个电压下上电复位电路也可保持复位。 2.9V 和 2.6V 阈值都有滞后。正常工作时,这个滞后可使 2.9V 的检测能产生可靠的中断或使正常反复 执行的事件能检测到掉电条件。 但是,当掉电检测使能使得 LPC2131/2132/2138 退出掉电模式时(器件本身的操作也不能得到保证), 电源电压可能在唤醒定时器完成延时前已经从瞬时变化中恢复。这时,BOD 产生的结果是:功能部件唤醒 并在设置好掉电模式后继续工作、不产生任何中断、RISR 寄存器的 BOD 位清零。由于所有其它唤醒条件 ,因此,这种没有任何原因的唤醒,可以确定是已 都有一个保存的标志位(见 EXTINT 寄存器和 RTC ILR) 经结束的掉电唤醒。 代码安全和调试 开发应用中非常需要 LPC2131/2132/2138 的调试和跟踪功能。在一个应用后面的使用过程中,保护应 用代码以防对手或竞争者盗用变得更加重要。LPC2131/2132/2138 下述特性允许应用控制代码是否被调试或 被保护以防盗用。 有关代码读保护的详细信息请参考 Flash 存储器系统和编程一章。 4. 存储器加速模块(MAM) 简介 当 LPC2131/2132/2138 运行 Flash 存储器的代码时,器件内部的 MAM 模块极大地提高了 ARM 处理器 的性能,只需要使用一个简单的 Flash 组就可实现。 操作 存储器加速模块(MAM)将需要的下一个 ARM 指令锁存以防止 CPU 取指暂停。与以前的其它器件 使用 2 个 Flash 组相比,LPC2131/2132/2138 只使用一组 Flash 存储器。Flash 组包含预取指缓冲区(3 个 128 位的缓冲区) 、分支跟踪缓冲区和数据缓冲区。当预取指缓冲区和分支跟踪缓冲区不能满足一次指令取指的 需要,并且此行的预取指还没有启动时,ARM 在启动 128 位行的取指时暂停。如果预取指已经启动但还未 完成,则 ARM 暂停的时间会更短一些。预取指在 Flash 结束前面的访问后立即启动,除非被数据访问终止。 预取指行被 Flash 模块锁存,但 MAM 不能在预取指缓冲区中捕获该行,直到 ARM 内核给出预取指开始的 地址。如果内核给出的地址与预取指地址不同,则预取指行丢弃。 27 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 每个预取指缓冲区和分支跟踪缓冲区包含 4 个 32 位 ARM 指令或 8 个 16 位 Thumb 指令。在连续执行 代码时,通常预取指缓冲区包含当前指令和含有该指令的整个 Flash 行。 MAM 利用 LPROT[0]行来区分指令和数据访问。代码和数据访问分别使用独立的 128 位缓冲区。每 4 个连续 32 位代码中的 3 个代码或数据访问都在缓冲区中完成,无需访问 Flash(每 8 个连续 16 位代码中的 7 个,每 16 个连续字节访问中的 15 个) 。第 4 个(第 8 个,第 16 个)连续数据的访问必须访问 Flash,终 止正在执行的任何预取指。Flash 数据访问结束后,重新启动被终止的正在执行的预取指。 Flash 读操作时序的编程和描述见本节后面的内容。 这样,当 CPU 时钟周期大于或等于 1/4 的 Flash 访问时间时,连续指令的执行不会影响代码取指。其 ,在 ARM 代码中,利用 ARM 指令(不是 Thumb)的条 中用于程序分支的平均时间相对较短(少于 25﹪) 件执行特性,这个时间会变得最短。这种条件执行通常用来防止不必要的较短的前向分支。 分支和其它程序流的变化导致前面所讲述的连续指令取指出现中断。分支跟踪缓冲区捕获发生非连续 中断的行。如果相同的分支再次出现,则从分支跟踪缓冲区内取出下条指令。当分支超出了预取指和分支 跟踪缓冲区内容时,需要终止几个时钟来装载分支跟踪缓冲区。这样,不会再出现指令取指延时,直到一 个新的和不同的分支出现。 存储器加速器模块 存储器加速器模块分成以下几个功能块: 1 个 Flash 地址锁存和 1 个增量器功能用于预取指地址。 1 个 128 位的预取指缓冲区及其相关的地址锁存和比较器。 1 个 128 位的分支跟踪缓冲区及其相关的地址锁存和比较器。 1 个 128 位的数据缓冲区及其相关的地址锁存和比较器。 控制逻辑 等待逻辑 图 13 所示为存储器加速器模块数据通路的一个简化框图。 在下面的描述中, “取指”一词表示 ARM 发出的一个直接的 Flash 读请求。 “预取指”一词表示对当前 处理器取指地址之后的地址执行 Flash 读操作。 Flash 存储器组 LPC2131/2132/2138 MAM 含有一个 Flash 存储器组。 Flash 编程功能不受 MAM 的控制,而是作为一个独立的功能进行处理。 “boot block”扇区包含作为应 用程序的一部分调用的 Flash 编程算法和一个可对 Flash 存储器进行串行编程的装载程序。 存储器地址 ARM 局部总线 Flash 存储器组 总线 接口 缓冲区 存储器数据 图 13 存储器加速器模块的简化框图 指令锁存和数据锁存 代码和数据的访问由存储器加速器模块分别进行处理。每个缓冲区(预取指、分支跟踪和数据缓冲区) 28 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 都由 1 套 128 位锁存、15 位地址锁存和 15 位比较器。每个 128 位锁存保存 4 个代码字(4 条 ARM 指令或 8 条 Thumb 指令) 。每个缓冲区还有 32 个 4:1 多路复用器,用来从 128 位行中选择所需的字。 对数据锁存中没有的数据进行访问会导致读取 Flash 的 4 个数据字,它们由数据锁存所捕获。使用数 据锁存加速了连续数据的访问,但对于随机数据访问几乎没什么影响。 Flash 编程问题 由于在编程和擦除操作过程中不允许访问 Flash 存储器,那么如果在 Flash 模块忙时存储器请求访问 Flash 地址,MAM 就必须强制 CPU 等待(这通过声明 ARM7TDMI-S 局部总线信号 CLKEN 来实现)。在 某些情况下,代码执行的延迟会导致看门狗超时。用户必须注意到这种可能性并采取措施来确保不会在编 程或擦除 Flash 存储器时出现非预期的看门狗复位而导致系统故障。 为了防止从 Flash 存储器中读取无效的数据,LPC2131/2132/2138 MAM 使锁存在 Flash 编程或擦除操 作的开始自动失效。在 Flash 操作结束后,任何对 Flash 地址的读操作将启动新的取指。 存储器加速器模块的操作模式 MAM 定义了 3 种操作模式,可以在性能和可预测性之间进行选择: 0)MAM 关闭。所有存储器请求都会导致 Flash 的读操作(见下面的注 2) 。无指令预取指。 1)MAM 部分使能。如果数据可用,则从保持锁存区执行连续的指令访问。指令预取指使能。非连续 。这意味着所有的转移指令都会导致对存储器的取指。 的指令访问启动 Flash 读操作(见下面的注 2) 由于缓冲的数据访问时序很难预测并且非常依赖于所处的状况,因此所有数据操作都会导致 Flash 读操作。 2)MAM 完全使能。任何存储器请求(代码或数据),如果其值已经包含在其中一个保持锁存当中, 那么从缓冲区执行该代码或数据的访问。指令预取指使能。Flash 读操作用于指令的预取指和当前缓 冲区所没有的代码或数据的访问。 表 28 MAM 响应的不同类型的程序访问 MAM 模式 程序存储器请求类型 0 1 2 2 使用锁存的数据 1 使用锁存的数据 1 连续访问,数据位于 MAM 锁存当中 启动取指 连续访问,数据不在 MAM 锁存当中 启动取指 启动取指 1 启动取指 1 非连续访问,数据位于 MAM 锁存当中 启动取指 2 启动取指 1,2 使用锁存的数据 1 非连续访问,数据不在 MAM 锁存当中 启动取指 启动取指 1 启动取指 1 表 29 MAM 响应的不同类型的数据和 DMA 访问 MAM 模式 数据存储器请求类型 0 1 2 连续访问,数据位于 MAM 锁存当中 启动取指 连续访问,数据不在 MAM 锁存当中 启动取指 2 非连续访问,数据位于 MAM 锁存当中 启动取指 非连续访问,数据不在 MAM 锁存当中 启动取指 启动取指 2 2 启动取指 启动取指 2 启动取指 使用锁存的数据 启动取指 使用锁存的数据 启动取指 1. 指令预取指在模式 1 和 2 中使能。 2. 只要锁存的数据可用,MAM 则使用锁存的数据,但模仿 Flash 读操作的时序。这样虽然使用相 同的执行时序,但却降低了功耗。将 MAMTIM 中的取指时间设置为 1 个时钟可关闭 MAM。 MAM 配置 在复位后,MAM 默认为禁止状态。软件可以随时将存储器访问加速打开或关闭。这样就可使大多数 29 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 应用程序以最高速度运行,而某些要求更精确定时的功能可以较慢但更可预测的速度运行。 寄存器描述 所有寄存器不管规格如何,都以字地址为边界。详细的寄存器内容见各个功能的描述。 表 30 名称 系统控制寄存器汇总 描述 访问 复位值* 地址 R/W 0 0xE01FC000 R/W 0x07 0xE01FC004 MAM MAMCR MAMTIM 存储器加速器模块控制寄存器。决定 MAM 的操作模式。 也就是说 MAM 性能增强的程度,见表 31。 存储器加速器定时控制。决定 Flash 存储器取指所使用的 时钟个数(1 到 7 个处理器时钟)。 * 复位值仅指已使用位中保存的数据,不包括保留位的内容。 MAM 控制寄存器(MAMCR – 0xE01FC000) 两个配置位选择 MAM 的 3 种操作模式,见表 31。在复位后,MAM 功能被禁止。改变 MAM 操作模 式会导致 MAM 所有的保持锁存内容无效,因此需要执行新的 Flash 读操作。 表 31 MAM 控制寄存器(MAMCR – 0xE01FC000) MAMCR 功能 描述 复位值 这两个位决定 MAM 的操作模式: 00-MAM 功能被禁止 1:0 MAM 模式控制 01-MAM 功能部分使能 0 10-MAM 功能完全使能 11-保留 7:2 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA MAM 定时寄存器(MAMTIM – 0xE01FC004) MAM 定时寄存器决定使用多少个 cclk 周期访问 Flash 存储器。这样可调整 MAM 时序使其匹配处理器 操作频率。Flash 访问时间可以从 1 到 7 个时钟。单个时钟的 Flash 访问实际上关闭了 MAM。这种情况下 可以选择 MAM 模式对功耗进行优化。 30 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 32 MAM 定时寄存器(MAMTIM – 0xE01FC004) MAMTIM 功能 描述 复位值 这几个位决定 MAM Flash 取指操作的时间: 000=0-保留 001=1-一段时间内只有 1 个处理器时钟(cclk)用于 MAM 取 指。 010=2-一段时间内只有 2 个处理器时钟(cclk)用于 MAM 取 指。 011=3-一段时间内只有 3 个处理器时钟(cclk)用于 MAM 取 指。 2:0 MAM 取指周期 100=4-一段时间内只有 4 个处理器时钟(cclk)用于 MAM 取 0x07 指。 101=5-一段时间内只有 5 个处理器时钟(cclk)用于 MAM 取 指。 110=6-一段时间内只有 6 个处理器时钟(cclk)用于 MAM 取 指。 111=7-一段时间内只有 7 个处理器时钟(cclk)用于 MAM 取 指。 警告:不正确的设定会导致器件的错误操作。 7:3 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA MAM 使用注意事项 当改变 MAM 定时值时,必须先通过向 MAMCR 写入 0 来关闭 MAM,然后将新值写入 MAMTIM。 最后,将需要的操作模式的对应值(1 或 2)写入 MAMCR,再次打开 MAM。 对于低于 20MHz 的系统时钟,MAMTIM 设定为 001。对于 20MHz 到 40MHz 之间的系统时钟,建议 将 Flash 访问时间设定为 2cclk,而在高于 40MHz 的系统时钟下,建议使用 3cclk。 向量中断控制器(VIC) 5. 特性 ARM PrimeCell TM 向量中断控制器 32 个中断请求输入 16 个向量 IRQ 中断 16 个优先级,可动态分配给中断请求 软件中断产生 描述 向量中断控制器(VIC)具有 32 个中断请求输入,可将其编程分为 3 类:FIQ、向量 IRQ 和非向量 IRQ。 可编程分配机制意味着不同外设的中断优先级可以动态分配并调整。 快速中断请求(FIQ)要求具有最高优先级。如果分配给 FIQ 的请求多于 1 个,VIC 将中断请求“相 或”后向 ARM 处理器产生 FIQ 信号。当只有一个中断被分配为 FIQ 时可实现最短的 FIQ 等待时间,因为 FIQ 服务程序只要简单地启动器件的处理就可以了。但如果分配给 FIQ 级的中断多于 1 个,FIQ 服务程序 从 VIC 中读出一个字来识别产生中断请求的 FIQ 中断源是哪一个。 向量 IRQ 具有中等优先级。该级别可分配 32 个请求中的 16 个。32 个请求中的任意一个都可分配到 31 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 16 个向量 IRQ slot 中的任意一个,其中 slot0 具有最高优先级,而 slot15 则为最低优先级。 非向量 IRQ 的优先级最低。 VIC 将所有向量和非向量 IRQ“相或”向 ARM 处理器产生 IRQ 信号。IRQ 服务程序可通过读取 VIC 的一个寄存器立即启动并跳转到相应地址。如果有任意一个向量 IRQ 发出请求,VIC 则提供最高优先级请 求 IRQ 服务程序的地址,否则提供所默认程序的地址。该默认程序由所有非向量 IRQ 共用。默认程序可读 取另一个 VIC 寄存器以确定哪个 IRQ 被激活。 VIC 中所有的寄存器都为字寄存器。不支持字节和半字的读和写操作。 关于向量中断控制器的其它信息请参阅 ARM PrimeCell TM 向量中断控制器(PL190)的相关文档。 寄存器描述 VIC 所包含的寄存器如表 33 所示。详细内容见后面的描述。 表 33 VIC 寄存器映射 名称 VICIRQStatus VICFIQStatus VICRawIntr VICIntSelect VICIntEnable 描述 该寄存器读出定义为 IRQ 并使能的 IRQ 状态寄存器。 中断的状态。 FIQ 状态请求。该寄存器读出定义为 FIQ 并使能的中 断的状态。 所有中断的状态寄存器。该寄存器读出 32 个中断请 求/软件中断的状态,不管中断是否使能或分类。 中断选择寄存器。该寄存器将 32 个中断请求的每个 都分配为 FIQ 或 IRQ。 中断使能寄存器。该寄存器控制将 32 个中断请求和 软件中断中的哪些使能为 FIQ 或 IRQ。 访问 复位值* 地址 RO 0 0xFFFF F000 RO 0 0xFFFF F004 RO 0 0xFFFF F008 R/W 0 0xFFFF F00C R/W 0 0xFFFF F010 W 0 0xFFFF F014 R/W 0 0xFFFF F018 W 0 0xFFFF F01C R/W 0 0xFFFF F020 R/W 0 0xFFFF F030 R/W 0 0xFFFF F034 R/W 0 0xFFFF F100 中断使能清零寄存器。该寄存器允许软件将中断使能 VICIntEnClr VICSoftInt 寄存器中的一个或多个位清零。 软件中断寄存器。该寄存器的内容与 32 个不同外设 的中断请求“相或” 。 软件中断清零寄存器。该寄存器允许软件将软件中断 VICSoftIntClear 寄存器中的一个或多个位清零。 保护使能寄存器。该寄存器允许特权模式下运行的软 VICProtection VICVectAddr VICDefVectAddr VICVectAddr0 件对 VIC 寄存器进行有限的访问。 向量地址寄存器。当发生一个 IRQ 中断时,IRQ 服务 程序可读出该寄存器并跳转到读出的地址。 默认向量地址寄存器。该寄存器保存了非向量 IRQ 的中断服务程序(ISR)地址。 向量地址 0 寄存器。向量地址寄存器 0-15 保存了 16 个向量 IRQ slot 的中断服务程序地址。 VICVectAddr1 向量地址 1 寄存器 R/W 0 0xFFFF F104 VICVectAddr2 向量地址 2 寄存器 R/W 0 0xFFFF F108 VICVectAddr3 向量地址 3 寄存器 R/W 0 0xFFFF F10C VICVectAddr4 向量地址 4 寄存器 R/W 0 0xFFFF F110 VICVectAddr5 向量地址 5 寄存器 R/W 0 0xFFFF F114 VICVectAddr6 向量地址 6 寄存器 R/W 0 0xFFFF F118 VICVectAddr7 向量地址 7 寄存器 R/W 0 0xFFFF F11C 32 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 续上表 名称 描述 访问 复位值* 地址 VICVectAddr8 向量地址 8 寄存器 R/W 0 0xFFFF F120 VICVectAddr9 向量地址 9 寄存器 R/W 0 0xFFFF F124 VICVectAddr10 向量地址 10 寄存器 R/W 0 0xFFFF F128 VICVectAddr11 向量地址 11 寄存器 R/W 0 0xFFFF F12C VICVectAddr12 向量地址 12 寄存器 R/W 0 0xFFFF F130 VICVectAddr13 向量地址 13 寄存器 R/W 0 0xFFFF F134 VICVectAddr14 向量地址 14 寄存器 R/W 0 0xFFFF F138 VICVectAddr15 向量地址 15 寄存器 R/W 0 0xFFFF F13C R/W 0 0xFFFF F200 向量控制 0 寄存器。向量控制寄存器 0-15 分别控制 VICVectCntl0 16 个向量 IRQ slot 中的一个。Slot0 优先级最高,而 Slot15 优先级最低。 VICVectCntl1 向量控制 1 寄存器 R/W 0 0xFFFF F204 VICVectCntl2 向量控制 2 寄存器 R/W 0 0xFFFF F208 VICVectCntl3 向量控制 3 寄存器 R/W 0 0xFFFF F20C VICVectCntl4 向量控制 4 寄存器 R/W 0 0xFFFF F210 VICVectCntl5 向量控制 5 寄存器 R/W 0 0xFFFF F214 VICVectCntl6 向量控制 6 寄存器 R/W 0 0xFFFF F218 VICVectCntl7 向量控制 7 寄存器 R/W 0 0xFFFF F21C VICVectCntl8 向量控制 8 寄存器 R/W 0 0xFFFF F220 VICVectCntl9 向量控制 9 寄存器 R/W 0 0xFFFF F224 VICVectCntl10 向量控制 10 寄存器 R/W 0 0xFFFF F228 VICVectCntl11 向量控制 11 寄存器 R/W 0 0xFFFF F22C VICVectCntl12 向量控制 12 寄存器 R/W 0 0xFFFF F230 VICVectCntl13 向量控制 13 寄存器 R/W 0 0xFFFF F234 VICVectCntl14 向量控制 14 寄存器 R/W 0 0xFFFF F238 VICVectCntl15 向量控制 15 寄存器 R/W 0 0xFFFF F23C * 复位值仅指已使用位中保存的数据,不包括保留位的内容。 VIC 寄存器 这一节按照 VIC 逻辑中的使用顺序对 VIC 寄存器进行描述,该顺序为从那些与中断请求输入最密切的 寄存器到那些由软件所使用的最抽象的寄存器。对大多数人来说,这也是在学习 VIC 时读取寄存器的最佳 顺序。 软件中断寄存器(VICSoftInt - 0xFFFFF018,读/写) 在执行任何逻辑之前,将该寄存器的内容与 32 个不同外设的中断请求相或。 表 34 软件中断寄存器(VICSoftInt - 0xFFFFF018,读/写) VICSoftInt 功能 31:0 复位值 1:强制产生与该位相关的中断请求。 0:不强制产生中断请求。向 VICSoftInt 写入 0 无效,见 VICSoftIntClear。 33 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 软件中断清零寄存器(VICSoftIntClear - 0xFFFFF01C,只写) 该寄存器在不需读取软件中断寄存器的情况下,可用软件清零软件中断寄存器中的一个或多个位。 表 35 软件中断清零寄存器(VICSoftIntClear - 0xFFFFF01C,只写) VICSoftIntClear 功能 31:0 复位值 1:写入 1 清零软件中断寄存器的相应位,并解除强制的中断请求。 0:写入 0 不会影响 VICSoftInt 中的相应位。 0 所有中断状态寄存器(VICRawIntr - 0xFFFFF008,只读) 该寄存器读取所有 32 个中断请求和软件中断的状态,不管中断是否使能或分类。 表 36 所有中断状态寄存器(VICRawIntr - 0xFFFFF008,只读) VICRawIntr 功能 31:0 复位值 1:对应位的中断请求或软件中断声明。 0:对应位的中断请求或软件中断未声明。 0 中断使能寄存器(VICIntEnable - 0xFFFFF010,读/写) 该寄存器使能分配为 FIQ 或 IRQ 的中断请求或软件中断。 表 37 中断使能寄存器(VICIntEnable - 0xFFFFF010,读/写) VICIntEnable 功能 复位值 当读取该寄存器时,1 表示中断请求使能为 FIQ 或 IRQ。 31:0 当写该寄存器时,1 使能中断请求或软件中断分配为 FIQ 或 IRQ,0 无效。见 0 VICIntEnClear 寄存器(表 38) ,给出了中断禁止的方法。 中断使能清零寄存器(VICIntEnClear - 0xFFFFF014,只写) 该寄存器在不需要读取中断使能寄存器的情况下,可用软件清零其中的一个或多个位。 表 38 中断使能清零寄存器(VICIntEnClear - 0xFFFFF014,只写) VICIntEnClr 功能 31:0 复位值 1:写入 1 清零中断使能寄存器中的对应位并禁止对应的中断请求。 0:写入 0 不影响中断使能寄存器中的位。 0 中断选择寄存器(VICIntSelect - 0xFFFFF00C,读/写) 该寄存器将 32 个中断请求分别分配为 FIQ 或 IRQ。 表 39 中断选择寄存器(VICIntSelect - 0xFFFFF00C,读/写) VICIntSelect 功能 31:0 复位值 1:对应的中断请求分配为 FIQ。 0 0:对应的中断请求分配为 IRQ。 IRQ 状态寄存器(VICIRQStatus - 0xFFFFF000,只读) 该寄存器读取使能并分配为 IRQ 的中断请求的状态,它不对向量和非向量 IRQ 进行区分。 表 40 IRQ 状态寄存器(VICIRQStatus - 0xFFFFF000,只读) VICIRQStatus 功能 31:0 复位值 1:对应位的中断请求使能并分配为 IRQ 并且声明。 0 FIQ 状态寄存器(VICFIQStatus - 0xFFFFF004,只读) 该寄存器读取使能并分配为 FIQ 的中断请求的状态。如果有超过一个请求分配为 FIQ,FIQ 服务程序 34 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 可读取该寄存器来确定是哪一个(几个)请求被激活。 表 41 FIQ 状态寄存器(VICFIQStatus - 0xFFFFF004,只读) VICFIQStatus 功能 31:0 复位值 1:对应位的中断请求使能并分配为 FIQ 并且声明。 0 向量控制寄存器 0-15(VICVectCnt l0-15 - 0xFFFFF200-23C,读/写) 每一个寄存器控制 16 个向量 IRQ slot 中的一个。Slot0 优先级最高,Slot15 优先级最低。在 VICVectCntl 寄存器中禁止一个向量 IRQ slot 不会禁止中断本身,中断只是变为非向量的形式。 表 42 向量控制寄存器(VICVectCntl0-15 - 0xFFFFF200-23C,读/写) VICVectCntl0-15 功能 5 复位值 1:向量 IRQ 使能,当分配的中断请求或软件中断使能,被分配为 IRQ 并声 明时,可产生一个唯一的 ISR 地址。 0 分配给此向量 IRQ slot 的中断请求或软件中断的编号。作为一个良好的编程 4:0 习惯,不要将把相同的中断编号分配给多于一个使能的向量 IRQ slot。但如 果这样做了,当中断请求或软件中断使能,被分配为 IRQ 并声明时,会使用 0 最低编号的 slot。 向量地址寄存器 0-15(VICVectAddr0-15 - 0xFFFFF100-13C,读/写) 这些寄存器保存 16 个向量 IRQ slot 中断服务程序的地址。 表 43 向量地址寄存器(VICVectAddr0-15 - 0xFFFFF100-13C,读/写) VICVectAddr0-15 功能 复位值 当一个或多个中断请求或软件分配为向量 IRQ slot 的中断请求使能,分配为 31:0 IRQ 并声明时,IRQ 服务程序读取向量地址寄存器(VICVectAddr)时会得 0 到最高优先级 slot 寄存器的值。 默认向量地址寄存器(VICDefVectAddr - 0xFFFFF034,读/写) 这些寄存器保存非向量 IRQ 中断服务程序(ISR)的地址。 表 44 默认向量地址寄存器(VICDefVectAddr - 0xFFFFF034,读/写) VICDefVectAddr 功能 31:0 复位值 当一个 IRQ 服务程序读取向量地址寄存器(VICVectAddr) ,并且没有 IRQ slot 响应时,则返回该寄存器中的地址。 0 向量地址寄存器(VICVectAddr - 0xFFFFF030,读/写) 当发生一个 IRQ 中断时。IRQ 服务程序可读取该寄存器并跳转到读出的地址。 表 45 向量地址寄存器(VICVectAddr - 0xFFFFF030,读/写) VICVectAddr 功能 复位值 当任何分配给向量 IRQ slot 的中断请求或软件中断使能,分配为 IRQ 并声明时, 读取该寄存器将返回最高优先级 slot(最低编号)在向量地址寄存器中的地址。 31:0 否则返回默认向量地址寄存器中的地址。 由于写入该寄存器的设置值并不能在将来读出,因此,该寄存器应该在 ISR 快 结束时写入,以便更新优先级硬件。 保护使能寄存器(VICProtection - 0xFFFFF020,读/写) 运行在用户模式下的软件使用该 1 位寄存器来控制对 VIC 寄存器的访问。 35 0 广州周立功单片机发展有限公司 Tel: (020)38730976 表 46 38730977 Fax: 38730925 http://www.zlgmcu.com 保护使能寄存器(VICProtection - 0xFFFFF020,读/写) VICProtection 功能 复位值 1:VIC 寄存器只能在特权模式下访问。 0 0 0:VIC 寄存器可在用户模式或特权模式下访问。 中断源 表 47 列出了每一个外设功能的中断源。每个外围设备都有一条中断线连接到向量中断控制器,但有些 可能拥有几个内部中断标志。单个中断标志也有可能代表一个以上的中断。 表 47 连接到向量中断控制器的中断源 模块 标志 VIC 通道# 看门狗中断(WDINT) 0 保留给软件中断 1 ARM 内核 EmbeddedICE, DbgCommRx 2 ARM 内核 EmbeddedICE, DbgCommTx 3 WDT - 定时器 0 定时器 1 匹配 0-3(MR0, MR1, MR2, MR3) 捕获 0-3(CR0, CR1, CR2, CR3) 匹配 0-3(MR0, MR1, MR2, MR3) 捕获 0-3(CR0, CR1, CR2, CR3) 4 5 Rx 线状态(RLS) UART0 发送保持寄存器空(THRE) 6 Rx 数据可用(RDA) 字符超时指示(CTI) Rx 线状态(RLS) 发送保持寄存器空(THRE) UART1 Rx 数据可用(RDA) 7 字符超时指示(CTI) Modem 状态中断(MSI)1 PWM0 2 I C0 SPI0 匹配 0-6(MR0, MR1, MR2, MR3, MR4, MR5, MR6) 8 SI(状态改变) 9 SPI 中断标志(SPIF) 10 模式错误(MODF) Tx FIFO 至少一半为空(TXRIS) SPI1 (SSP) Rx FIFO 至少一半为满(RXRIS) 接收超时条件(RTRIS) 11 接收溢出(RORRIS) PLL RTC 系统控制 A/D0 PLL 锁定(PLOCK) 12 计数器增加(RTCCIF) 13 报警(RTCALF) 外部中断 0(EINT0) 14 外部中断 1(EINT1) 15 外部中断 2(EINT2) 16 外部中断 3(EINT3) 17 A/D 转换器 0 18 36 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 续上表 模块 标志 2 1 VIC 通道# I C1 SI(状态改变) 19 BOD 掉电检测 20 A/D1 A/D 转换器 1 21 仅适用于 LPC2138 nVICFIQIN 中断请求, 屏蔽和选择 非向量 FIQ 中断逻辑 SoftIntClear [31:0] IntEnableClear [31:0] SoftInt [31:0] IntEnable [31:0] nVICFIQ FIQStatus [31:0] VICINT SOURCE [31:0] FIQStatus [31:0] IRQStatus [31:0] RawInterrupt [31:0] 向量中断 0 非向量 IRQ 中断逻辑 IRQStatus [31:0] IntSelect [31:0] 优先级 0 VectorCntl[5:0] 向量中断 1 VectorAddr [31:0] 优先级 1 硬件 优先级 逻辑 IRQ VectAddr0[31:0] VectIRQ1 VectAddr1[31:0] 优先级 14 nVICIRQ 最高优先级中断 的地址选择 VectorAddr [31:0] 优先级 2 向量中断 15 NonVectIRQ 中断优先级逻辑 VectIRQ0 Source Enable IRQ VectIRQ15 VectAddr15[31:0] VICVECT ADDROUT [31:0] Default VectorAddr [31:0] 优先级 15 nVICIRQIN VICVECTADDRIN[31:0] 图 14 向量中断控制器方框图 伪中断 由于异步中断处理的原因,伪中断可能出现在基于 ARM7TDMI 的微控制器-LPC2131/2132/2138 中。 中断处理的异步特性来源于内核和 VIC 的相互作用。如果在内核检测到中断和内核真正开始处理中断的过 程中 VIC 的状态发生改变,则产生中断的异步特性。 应用中可能经过以下步骤: 1) VIC 判断是否有 IRQ 中断并向内核发送 IRQ 信号。 2) 内核保存 IRQ 状态。 3) 执行流水线的多个周期的处理。 4) 内核从 VIC 中装入 IRQ 地址。 另外,VIC 的状态可能在第 3 步就发生了变化。例如,VIC 的变化使得触发从第 1 步开始的时序的中 断不再是挂起中断,在运行的代码中禁止。此时,VIC 不能清除地识别产生中断请求的中断,最后只能返 37 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 回到 VicDefVectAddr (0xFFFF F034)默认中断。 这一系列的情况可通过下面两种方法来防止: 1. 编写应用程序来防止伪中断的产生。仅仅简单地对 VIC 状态进行监控还不够,因为当干扰出现在电平激 活方式的中断上也可能产生伪中断。 2. 应当正确设置和检测 VIC 默认处理器。 伪中断的详述和个案 本节的详细内容请登陆 ARM 官方网站( http://www.arm.com )。 FAQ 的“技术支持”链接为: http://www.arm.com/support/faqip/3677.html。 当被禁能的中断产生时将出现怎样的情况? 应用范围:ARM7TDMI 如果在执行禁能中断指令时内核接收到中断请求,ARM7 系列器件仍然响应中断。这种情况出现在 IRQ 和 FIQ 中断中。 例如,假设正在执行下面的代码: MRS r0, cpsr ORR r0, r0, # I_Bit : OR : F_Bit MSR cpsr_c, r0 ;禁止 IRQ 和 FIQ 中断 如果在执行 MSR 指令时接收到 IRQ 中断,则执行以下操作: 保存 IRQ 中断 执行 MSR cpsr , r0 指令来完成 CPSR 中 I 位和 F 位的设置 响应 IRQ 中断,因为 CPSR 的 I 位被置位前内核将对中断异常进行处理 CPSR(I 位和 F 位已被置位)的内容移入 SPSR_irq 这就意味着,在 IRQ 中断服务程序的入口,人们可以看到 IRQ 中断被处理的异常效果,SPSR 的 I 位 被置位。在上面的例子中,CPSR 和 SPSR 的 F 位都置位。表明在 IRQ 服务程序的入口处 FIQ 被禁止,FIQ 将一直被禁止直到重新被使能。FIQ 不能通过 IRQ 返回来自动重新使能。 尽管上例中的 IRQ 和 FIQ 中断都被禁止,但是如果两个中断类型中只有一种被禁止,出现的情况也与 之类似。执行完禁止 IRQ 的 MSR 指令后内核才对 IRQ 进行处理,这通常不会产生任何问题,因为只有中 断正好在一个周期之前到达才会被处理。当中断程序通过下面的指令返回时: SUBS pc , lr , #4 SPSR_IRQ 的值恢复到 CPSR。这时,CPSR 的 I 位和 F 位将被置位,所有中断禁能。 但是,这样会造成以下情况: 情况 1:调用一个特定程序,该程序可以是 IRQ 处理程序或普通程序。之后,系统必须保证 IRQ 在调 用程序之前被禁能。程序利用这个限制条件来决定调用方式(通过监测 SPSR 的 I 位状态) ,并使用合适的 指令返回。如果程序在执行禁能 IRQ 的 MSR 指令的过程中接收到 IRQ 时进入,置位 SPSR 的 I 位。因此, 程序不可能通过 IRQ 来进入。 情况 2:FIQ 和 IRQ 通过同一条写 CPSR 的指令来禁止。这时,如果在写 CPSR 过程中接收到 IRQ, FIQ 将在执行 IRQ 处理程序时被禁止。这种情况不会出现在不允许 FIQ 禁能多个周期的系统中。 解决方案:这里推荐了 3 种解决方案。哪一种方案最合适取决于特定的系统要求。 方案 1:在中断服务程序之前增加类似于下面的代码: SUB lr , lr , #4 ;调整 LR,指向返回 STMFD sp! , {… , lr} ;指定使用的寄存器 MRS lr , SPSR ;当中断禁止时,判断是否有中断产生 TST lr , # I_Bit ; 38 广州周立功单片机发展有限公司 Tel: (020)38730976 LDMNEFD sp! , {… , pc}^ 38730977 Fax: 38730925 http://www.zlgmcu.com ;如果有中断产生,立即返回。 ;由于该中断并未被响应,因此仍保持代处理状态, ;它将在下次使能时再被重新处理。 ;以下为中断程序 这部分代码用于在写 CPSR 来禁止 IRQ 过程中检测 IRQ 中断的产生。如果检测到 IRQ,程序立即返回, ,也禁止后面的 IRQ。 从而使得 IRQ 不被响应(清除) FIQ 处理程序也可使用类似的代码来解决情况 1。 由于该方案解决了上述的两种情况,因此推荐用户使用。但是,对于情况 2 的处理,该方案确实将 FIQ 禁止的最大时间延长了几个周期。 方案 2:分别使用两条写 CPSR 的指令来禁能 IRQ 和 FIQ MRS r0 , cpsr ORR r0 , r0 , # I_Bit MSR cpsr_c , r0 ORR r0 , r0 , # F_Bit MSR cpsr_c , r0 ;禁止 IRQ ;禁止 FIQ 当 FIQ 的禁能最长时间受到严格限制时,这是最好的一个方案(它根本不会延长 FIQ 的禁能时间)。 但是,该方案并不能解决情况 1,要解决情况 1,还必须在每条禁能 IRQ 和 FIQ 的指令前同时添加一些其 它指令。 方案 3:在 IRQ 处理程序的开始重新使能 FIQ。CPSR 的 C 的所有的位必须是可知的,最有效的方法 就是向 CPSR_c 写入一个立即数,例如: MSR cpsr_c , # I_Bit : OR : irq_MODE ;IRQ 应该禁能 ;FIQ 使能 ;ARM 状态,IRQ 模式 本方案只需要修改 IRQ 处理程序便可实现,它使得 FIQ 的重新使能比方案 1 更快。但是,当系统要求 IRQ 使能时 FIQ 不能禁能时,不能使用本方案。本方案不能解决情况 1。 VIC 使用事项 如果在片内 RAM 当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到片内地 址 0x0。这样做是因为所有的异常向量都位于地址 0x0 及以上。通过将寄存器 MEMMAP(位于系统控制模 块当中)配置为用户 RAM 模式来实现这一点。用户代码被连接以便使中断向量表 (IVT)装载到 0x4000 0000。 虽然可以选择多个中断源(通过 VICIntSelect)来产生 FIQ 请求,但是只有一个专门的中断服务程序来 服务响应所有可用/出现的 FIQ 请求。因此,如果分配为 FIQ 的中断多于一个,FIQ 中断服务程序就必须读 取 VICFIQStatus 的内容来决定如何处理中断请求。不过我们还是建议只将一个中断分配为 FIQ。多个 FIQ 中断源会增加中断延迟。 在中断服务程序执行完毕后,对外设中断标志的清零将会对 VIC 寄存器(VICRawlntr, VICFIQStatus 和 VICIRQStatus )当中的对应位产生影响。另外,为了能够服务下次中断,必须在中断返回之前对 VICVectAddr 寄存器执行写操作。该写操作将清零内部中断优先级硬件当中对应的中断标志。 通常要禁止 VIC 中断,必须清零 VICIntEnClr 寄存器中的对应位,该操作使 VICIntEnable 寄存器的对 应位清零。这同样应用于 VICSoftInt 和 VICSoftIntClear,VICSoftIntClear 将会使 VICSoftInt 中的对应位清 零。例如,如果 VICSoftInt=0x0000 0005 并且 bit0 必须清零,那么 VICSoftIntClear=0x0000 0001 可实现该 操 作 。 通 过 写 VICSoftIntClear 来 执 行 对 VICSoftInt 当 中 相 同 位 的 新 的 清 零 操 作 之 前 , 必 须 执 行 39 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com VICSoftIntClear=0x0000 0000。因此向 VICSoftIntClear 寄存器任何位写入 1 对目标寄存器都是一次有效。 如果看门狗只在溢出或无效喂狗时产生中断,那么无法清除中断。唯一的方法是通过 VICIntEnClr 禁 止 VIC 中断来实现中断返回。 举例: 假设 UART0 和 SPI0 产生中断请求,它们被分配为向量 IRQ(UART0 的优先级高于 SPI0) ,而 UART1 2 和 I C 产生非向量 IRQ,下面就是 VIC 一种可能的设定: VICIntSelect = 0x0000 0000 (SPI0, I2C, UART1 和 UART0 为 IRQ => bit10, bit9, bit7 和 bit6=0) VICIntEnable = 0x0000 06C0 (SPI0, I2C, UART1 和 UART0 中断使能 => bit10, bit9, bit 7 和 bit6=1) VICDefVectAddr = 0x… (保存服务非向量 IRQ 的程序地址 (即,UART1 和 I2C 的起始地址)) VICVectAddr0 = 0x… (保存 UART0 IRQ 服务程序的起始地址) VICVectAddr1 = 0x… (保存 SPI0 IRQ 服务程序的起始地址) VICVectCntl0 = 0x0000 0026 (VIC 通道号为 6(UART0)的中断源使能为优先级 0(最高级)) VICVectCntl1 = 0x0000 002A (VIC 通道号为 10(SPI0)中断源使能为优先级 1) 2 在任何 IRQ 请求(SPI0, I C, UART0 或 UART1)产生之后,微控制器跳转到地址 0x00000018 执行代 码。对于向量和非向量 IRQ,可在地址 0x18 放入下面指令: LDR pc, [ pc, #-0xFF0 ] 该指令将 VICVectAddr 寄存器中保存的地址装入 PC。 一旦产生 UART0 请求,VICVectAddr 和 VICVectAddr0 相同。如果产生 SPI0 请求,中断服务程序的地 址保存在 VICVectAddr1 中。如果 UART0 和 SPI0 都没有产生 IRQ 请求,而 UART1 和/或 I2C 产生请求, 那么 VICVectAddr 的内容与 VICDefVectAddr 相同。 6. 管脚配置 LPC2131/2132/2138 的管脚分布 P0.21/PWM5/AD1.6 1/CAP1.3 1 48 P1 .20/TRACESYNC P0 .22/AD1.71/CAP0.0/MAT0.0 2 47 P0.17/ CA P1.2/SCK 1/MAT1.2 RT XC1 3 46 P0.16/ EINT0/MAT0.2/CAP0.2 P1 .19/TRACEPKT 3 4 45 P0.15/ RI11/EINT2/AD1.5 1 RT XC2 5 44 P1 .21/PIPESTAT 0 VSS 6 43 VDD VDDA 7 42 VSS P1 .18/TRACEPKT 2 8 41 P0 .14/DCD1 1/EINT1/SDA1 P0.25/AD0.4/Aout2 9 40 P1 .22/PIPESTAT 1 P0 .26/AD0.5 10 39 P0 .13/DTR1 1/MAT1 .1/AD1 .41 P0 .27/AD0.0/CAP0 .1/MAT0 .1 11 38 P0.12/ DSR11/MAT1 .0/AD1.31 P1 .17/TRACEPKT 1 12 37 P0 .11/CT S1 1/CAP1.1/SCL1 P0 .28/AD0.1/CAP0 .2/MAT0 .2 13 36 P1 .23/PIPESTAT 2 P0 .29/AD0.2/CAP0 .3/MAT0 .3 14 35 P0 .10/RT S1 /CAP1.0/AD1 .21 P0.30/AD0.3/EI NT3 /CAP0 .0 15 34 P0.9/RxD1 /PWM6/EINT 3 P1 .16/TRACEPKT 0 16 33 P0.8/TxD1/ PWM4/AD1.1 1 (1) 仅适用 LPC2138。 (2) 仅适用 LPC2132/2138。 图 15 LPC2131/2132/2138 的 64 脚封装 40 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com LPC2131/2132/2138 的管脚描述 LPC2131/2132/2138 的管脚描述及其主要功能见下表。 表 48 LPC2131/2132/2138 的管脚描述 管脚 LQFP64 名称 管脚# P0.0~P0.7 类型 描述 I/O P0 口:P0 口是一个 32 位双向 I/O 口,每位的方向可单独控制。P0 口 共有 31 个管脚,可用作通用双向数字 I/O 口,但 P0.31 是一个仅为输 出口。P0 口的功能取决于管脚连接模块的管脚功能选择。 P0.24 脚未用。 注:除用作 A/D 输入的管脚外,所有 P0 管脚最大可承受 5V 的电压。 如果未使用 A/D 转换器, A/D 输入可用作可承受 5V 电压的数字 I/O 口。见“A/D 转换器” 。 19 O P0.0 O 21 22 I PWM1 P0.1 27 RxD0 UART0 发送输出端。 脉宽调制器输出 1。 UART0 接收输入端。 O PWM3 脉宽调制器输出 3。 I EINT0 外部中断 0 输入。 SCL0 I2C0 时钟输入/输出。 开漏输出(符合 I2C 规范)。 I/O P0.2 I 26 TxD0 I/O CAP0.0 P0.3 SDA0 定时器 0 的捕获输入通道 0。 I2C0 数据输入/输出。 开漏输出(符合 I2C 规范)。 O MAT0.0 定时器 0 的匹配输出通道 0。 I EINT1 外部中断 1 输入。 SCK0 SPI0 的串行时钟。SPI 时钟从主机输出,从机 I/O P0.4 输入。 I CAP0.1 I AD0.6 定时器 0 的捕获输入通道 1。 A/D 转换器 0 输入 6。该模拟输入总是连接到 相应的管脚。 29 I/O P0.5 MISO0 SPI0 主机输入从机输出端。从机到主机的数 据传输。 O MAT0.1 I AD0.7 定时器 0 的匹配输出通道 1。 A/D 转换器 0 输入 7。该模拟输入总是连接到 相应的管脚。 30 I/O P0.6 MOSI0 SPI0 主机输出从机输入端。主机到从机的数 据传输。 I CAP0.2 I AD1.0 定时器 0 的捕获输入通道 2。 A/D 转换器 1 输入 0。该模拟输入总是连接到 。 相应的管脚(仅用于 LPC2138) 31 SSEL0 SPI0 从机选择。选择 SPI 接口用作从机。 O PWM2 脉宽调制器输出 2。 I EINT2 外部中断 2 输入。 I P0.7 41 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 续上表 管脚 LQFP64 名称 管脚# P0.8~P0.17 33 类型 O 描述 P0.8 TxD1 UART1 发送输出端。 O PWM4 脉宽调制器输出 4。 I AD1.1 A/D 转换器 1 输入 1。该模拟输入总是连接到 。 相应的管脚(仅用于 LPC2138) 34 35 I P0.9 RxD1 UART1 接收输入端。 O PWM6 脉宽调制器输出 6。 I EINT3 外部中断 3 输入。 RTS1 UART1 请求发送输出端(仅用于 LPC2138)。 O P0.10 I CAP1.0 I AD1.2 定时器 1 的捕获输入通道 0。 A/D 转换器 1 输入 2。该模拟输入总是连接到 。 相应的管脚(仅用于 LPC2138) 37 38 I P0.11 CTS1 UART1 清除发送输入端(仅用于 LPC2138)。 定时器 1 的捕获输入通道 1。 I CAP1.1 I/O SCL1 I2C1 时钟输入/输出。开漏输出(符合 I2C 规范) DSR1 UART1 数据设置就绪端(仅用于 LPC2138)。 I P0.12 O MAT1.0 I AD1.3 定时器 1 的匹配输出通道 0。 A/D 转换器 1 输入 3。该模拟输入总是连接到 。 相应的管脚(仅用于 LPC2138) 39 O P0.13 DTR1 O MAT1.1 I AD1.4 UART1 数据终端就绪。 定时器 1 的匹配输出通道 1。 A/D 转换器 1 输入 4。该模拟输入总是连接到 。 相应的管脚(仅用于 LPC2138) 41 I P0.14 DCD1 UART1 数 据 载 波 检 测 输 入 ( 仅 用 于 LPC2138) 。 I EINT1 外部中断 1 输入。 I/O SDA1 I2C1 数据输入/输出。开漏输出(符合 I2C 规范) 重点: RESET 为低时,P0.14 的低电平将强制片内引导装载程 序复位后控制器件的操作。 45 I P0.15 RI1 UART1 铃响指示输入(仅用于 LPC2138) 。 I EINT2 外部中断 2 输入。 I AD1.5 A/D 转换器 1 输入 5。该模拟输入总是连接到 。 相应的管脚(仅用于 LPC2138) 46 47 EINT0 外部中断 0 输入。 O MAT0.2 定时器 0 的匹配输出通道 2。 I CAP0.2 定时器 0 的捕获输入通道 2。 CAP1.2 定时器 1 的捕获输入通道 2。 I I I/O P0.16 P0.17 SCK1 SPI1 串行时钟。SPI 时钟从主机输出或输入到 从机。 O MAT1.2 42 定时器 1 的匹配输出通道 2。 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 管脚 LQFP64 名称 P0.18~P0.30 管脚# 53 类型 I 描述 P0.18 I/O CAP1.3 定时器 1 的捕获输入通道 3。 MISO1 SPI1 主机输入从机输出端。数据输入 SPI 主 机或从 SPI 从机输出。 O 54 O P0.19 I/O MAT1.3 定时器 1 的匹配输出通道 3。 MAT1.2 定时器 1 的匹配输出通道 2。 MOSI1 SPI1 主机输出从机输入端。数据从 SPI 主机 输出或输入 SPI 从机。 CAP1.2 定时器 1 的捕获输入通道 2。 MAT1.3 定时器 1 的匹配输出通道 3。 I SSEL1 SPI1 从机选择。选择 SPI 接口用作从机。 I EINT3 外部中断 3 输入。 PWM5 脉宽调制器输出 5。 I AD1.6 A/D 转换器 1 输入 6(仅用于 LPC2138) I CAP1.3 I 55 1 2 O O I P0.20 P0.21 P0.22 AD1.7 定时器 1 的捕获输入通道 3。 A/D 转换器 1 输入 7。该模拟输入总是连接到 相应的管脚(仅用于 LPC2138) I CAP0.0 定时器 0 的捕获输入通道 0。 O MAT0.0 定时器 0 的匹配输出通道 0。 58 I/O P0.23 9 I P0.25 通用数字输入-输出管脚。 AD0.4 A/D 转换器 0 输入 4。该模拟输入总是连接到 相应的管脚。 O 10 I P0.26 Aout D/A 转换器输出。 (仅用于 LPC2132/2138) AD0.5 A/D 转换器 0 输入 5。该模拟输入总是连接到 相应的管脚。 11 I P0.27 AD0.0 A/D 转换器 0 输入 0。该模拟输入总是连接到 相应的管脚。 13 I CAP0.1 定时器 0 的捕获输入通道 1。 O MAT0.1 定时器 0 的匹配输出通道 1。 I P0.28 AD0.1 A/D 转换器 0 输入 1。该模拟输入总是连接到 相应的管脚。 14 I CAP0.2 定时器 0 的捕获输入通道 2。 O MAT0.2 定时器 0 的匹配输出通道 2。 I P0.29 AD0.2 A/D 转换器 0 输入 2。该模拟输入总是连接到 相应的管脚。 15 I CAP0.3 定时器 0 的捕获输入通道 3。 O MAT0.3 定时器 0 的匹配输出通道 3。 I P0.30 AD0.3 A/D 转换器 0 输入 3。该模拟输入总是连接到 相应的管脚。 I EINT3 外部中断 3 输入。 I CAP0.0 定时器 0 的捕获输入通道 0。 43 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 管脚 LQFP64 名称 管脚# P0.31 17 P1.0~P1.31 类型 O I/O 描述 通用数字输出管脚。 P0.31 P1 口:P1 口是一个 32 位双向 I/O 口,每位的方向可单独控制。P1 口 的功能取决于管脚连接模块的管脚功能选择。 注:所有 P1 口是内置有上拉电阻的最大可承受 5V 电压的 I/O 口,用 作输入口时可通过上拉电阻将输入电平置高。 P1.0~P1.5 不可用。 16 O P1.16 TRACEPKT0 跟踪包位 0。带内部上拉的标准 I/O 口。 12 O P1.17 TRACEPKT1 跟踪包位 1。带内部上拉的标准 I/O 口。 8 O P1.18 TRACEPKT2 跟踪包位 2。带内部上拉的标准 I/O 口。 4 O P1.19 TRACEPKT3 跟踪包位 3。带内部上拉的标准 I/O 口。 48 O P1.20 TRACESYNC 跟踪同步。带内部上拉的标准 I/O 口。 重点: RESET 为低时,P1.20 的低电平使 P1.25:16 复位后用作 跟踪端口。 44 O P1.21 PIPESTAT0 流水线状态位 0。带内部上拉的标准 I/O 口。 40 O P1.22 PIPESTAT1 流水线状态位 1。带内部上拉的标准 I/O 口。 36 O P1.23 PIPESTAT2 流水线状态位 2。带内部上拉的标准 I/O 口。 32 O P1.24 TRACECLK 跟踪时钟。带内部上拉的标准 I/O 口。 28 I P1.25 EXTIN0 24 I/O P1.26 RTCK 外部触发输入。带内部上拉的标准 I/O 口。 返回的测试时钟输出。它是加载在 JTAG 接口 的额外信号。辅助调试器与处理器频率的变 化同步。它是带内部上拉的双向管脚。 重点: RESET 为低时,P1.26 的低电平使 P1.31:26 复位后用作 一个调试端口。 RESET 64 O P1.27 TDO JTAG 接口的测试数据输出。 60 I P1.28 TDI JTAG 接口的测试数据输入。 56 I P1.29 TCK JTAG 接口的测试时钟。 52 I P1.30 TMS JTAG 接口的测试模式选择。 20 I P1.31 TRST JTAG 接口的测试复位。 57 I 外部复位输入:当该管脚为低电平时,器件复位,I/O 口和外围功能进 入默认状态,处理器从地址 0 开始执行程序。具有迟滞作用的 TTL 电 平,管脚可承受 5V 电压。 XTAL1 62 I 振荡器电路和内部时钟发生电路的输入。 XTAL2 61 O 振荡放大器的输出。 RTCX1 3 I RTC 振荡器电路的输入。 RTCX2 5 O RTC 振荡放大器的输出。 Vss 6,18,25, I 地:0V 电压参考点。 I 模拟地:0V 电压参考点。它与 Vss 的电压相同,但为了降低噪声和出 42,50 VSSA 59 错几率,两者应当隔离。 44 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 续上表 管脚 LQFP64 名称 管脚# VDD 23,43, 类型 描述 I 3.3V 端口电源:内核和 I/O 口的电源电压。 I 模拟 3.3V 端口电源:它与 V3 的电压相同,但为了降低噪声和出错几率, 51 VDDA 7 两者应当隔离。该电压为片内 PLL 供电。 Vref 63 I A/D 转换器参考电压:它与 V3 的电压相同,但为了降低噪声和出错几 率,两者应当隔离。该管脚上的电平用作 A/D 和 D/A 转换的参考电压。 Vbat 49 I RTC 电源管脚。该管脚上的 3.3V 电压为 RTC 供电。 管脚连接模块 7. 特性 可实现独立的管脚配置 应用 管脚连接模块的用途是将微控制器管脚配置为需要的功能。 描述 管脚连接模块可以使微控制器的所选管脚具有 1 个以上的功能。配置寄存器控制多路开关来连接管脚 与片内外设。 外设在激活和任何相关中断使能之前必须连接到适当的管脚。任何使能的外设功能如果没有映射到相 关的管脚,则被认为是无效的。 当管脚只选择一个功能时,其它功能无效。 上述规则唯一的例外是管脚用作 A/D 转换器输入时。不论管脚选择何种功能,它都仍可用作 A/D 输入, A/D 输入可随时被读取,管脚的电压变化都从 A/D 的读取值中反映出来。但是,只有选择模拟输入功能, 才能读出有效的模拟值。也只有这种情况下,管脚和 A/D 模块之间的接口电路才有效。其它情况下,执行 数字功能所必需的数字逻辑部分将有效,从而影响 A/D 转换器的正确操作。 寄存器描述 管脚控制模块包含 2 个寄存器,见表 49。 表 49 名称 管脚控制模块寄存器映射 描述 访问 复位值 地址 PINSEL0 管脚功能选择寄存器 0 读/写 0x0000 0000 0xE002C000 PINSEL1 管脚功能选择寄存器 1 读/写 0x0000 0000 0xE002C004 PINSEL2 管脚功能选择寄存器 2 读/写 见表 52 0xE002C014 管脚功能选择寄存器 0(PINSEL0 - 0xE002C000) PINSEL0 寄存器按照表 53 当中的设定来控制管脚的功能。IO0DIR 寄存器中的方向控制位只有在管脚 选择 GPIO 功能时才有效。对于其它功能,方向是自动控制的。 45 广州周立功单片机发展有限公司 Tel: (020)38730976 表 50 PINSEL0 38730977 Fax: 38730925 http://www.zlgmcu.com 管脚功能选择寄存器 0(PINSEL0 – 0xE002C000) 管脚名称 00 01 10 11 复位 值 1:0 P0.0 GPIO P0.0 TxD(UART0) PWM1 保留 00 3:2 P0.1 GPIO P0.1 RxD(UART0) 5:4 P0.2 GPIO P0.2 PWM3 EINT0 00 2 捕获 0.0(TIMER0) 保留 00 2 SCL0(I C) 7:6 P0.3 GPIO P0.3 SDA0(I C) 匹配 0.0(TIMER0) EINT1 00 9:8 P0.4 GPIO P0.4 SCK(SPI0) 捕获 0.1(TIMER0) AD0.6 00 11:10 P0.5 GPIO P0.5 MISO(SPI0) 匹配 0.1(TIMER0) AD0.7 00 13:12 P0.6 GPIO P0.6 MOSI(SPI0) 捕获 0.2(TIMER0) AD1.0(LPC2138) 00 15:14 P0.7 GPIO P0.7 SSEL(SPI0) PWM2 EINT2 00 17:16 P0.8 GPIO P0.8 TxD UART1 PWM4 AD1.1(LPC2138) 00 19:18 P0.9 GPIO P0.9 RxD(UART1) PWM6 EINT3 00 21:20 P0.10 GPIO RTS(UART1) 捕获 1.0(TIMER1) AD1.2(LPC2138) 00 P0.10 (LPC2138) GPIO CTS(UART1) 捕获 1.1(TIMER1) SCL1(I2C1) 00 P0.11 (LPC2138) GPIO DSR(UART1) 匹配 1.0(TIMER1) AD1.3(LPC2138) 00 P0.12 (LPC2138) GPIO DTR(UART1) 匹配 1.1(TIMER1) AD1.4(LPC2138) 00 P0.13 (LPC2138) GPIO CD(UART1) EINT1 SDA1(I2C1) 00 P0.14 (LPC2138) GPIO RI(UART1) EINT2 AD1.5(LPC2138) 00 P0.15 (LPC2138) 23:22 25:24 27:26 29:28 31:30 P0.11 P0.12 P0.13 P0.14 P0.15 管脚功能选择寄存器 1(PINSEL1 - 0xE002C004) PINSEL1 寄存器按照下表中的设定来控制管脚的功能。IO0DIR 寄存器中的方向控制位只有在管脚选 择 GPIO 功能时才有效。对于其它功能,方向是自动控制的。 表 51 管脚功能选择寄存器 1(PINSEL1 - 0xE002C004) PINSEL1 管脚名称 00 01 10 11 复位值 1:0 P0.16 GPIO EINT0 匹配 捕获 00 0.2(TIMER0) 0.2(TIMER0) SCK(SSP) 匹配 P0.16 3:2 5:4 7:6 9:8 11:10 P0.17 P0.18 P0.19 P0.20 P0.21 GPIO 捕获 P0.17 1.2(TIMER1) GPIO 捕获 P0.18 1.3(TIMER1) GPIO 匹配 P0.19 1.2(TIMER1) GPIO 匹配 P0.20 1.3(TIMER1) GPIO PWM5 1.2(TIMER1) MISO(SSP) 匹配 匹配 00 1.3(TIMER1) SSEL(SSP) EINT3 00 AD1.6(LPC2138) 捕获 00 1.3(TIMER1) 46 00 1.3(TIMER1) MOSI(SSP) P0.21 00 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 PINSEL1 管脚名称 00 01 10 11 复位值 13:12 P0.22 GPIO AD1.7(LPC2138) 捕获 匹配 00 0.0(TIMER0) 0.0(TIMER0) 保留 保留 保留 00 P0.22 15:14 P0.23 GPIO P0.23 17:16 P0.24 保留 保留 保留 保留 00 19:18 P0.25 GPIO AD0.4 Aout(DAC) 保留 00 P0.25 21:20 P0.26 23:22 P0.27 (LPC2132/2138) 保留 GPIO P0.28 GPIO P0.29 GPIO P0.30 GPIO 0.1(TIMER0) 0.1(TIMER0) 捕获 匹配 0.2(TIMER0) 0.2(TIMER0) 捕获 匹配 0.3(TIMER0) 0.3(TIMER0) EINT3 捕获 AD0.2 P0.29 29:28 匹配 AD0.1 P0.28 27:26 捕获 AD0.0 P0.27 25:24 00 AD0.3 P0.30 31:30 P0.31 GPI P0.31 00 00 00 00 0.0(TIMER0) 保留 保留 保留 00 管脚功能选择寄存器 2(PINSEL2 - 0xE002C014) PINSEL2 寄存器按照表 52 当中的设定来控制管脚的功能。IO1DIR 寄存器中的方向控制位只有在管脚 选择 GPIO 功能时才有效。对于其它功能,方向是自动控制的。 警告:使用读-修改-写的方法来访问 PINSEL2 寄存器。对位 0~2 和/或位 3 的意外写操作会造成调 试和/或跟踪功能的丢失!将位 4 或位 5 的值从 1 变为 0 可能会造成错误代码的执行。 表 52 管脚功能选择寄存器 2(PINSEL2 – 0xE002C014) 描述 PINSEL2 1:0 复位值 保留,用户软件不应向保留位写入 1。 NA 该位为 0 时,P1.36:26 用作 GPIO 管脚。该位为 1 时,P1.31:26 用作一个调 2 P1.26/RTCK 试端口。 该位为 0 时,P1:25:16 用作 GPIO 管脚。该位为 1 时,P1.25:16 用作一个跟 3 踪端口。 31:4 P1.20 / TRACESYNC 保留,用户软件不应向保留位写入 1。 NA 管脚功能选择寄存器值 PINSEL 寄存器控制下表中器件管脚的功能。每一对寄存器位对应一个特定的器件管脚。 表 53 管脚功能选择寄存器位 PINSEL0 和 PINSLE1 的值 功能 0 0 首选(默认)功能,通常为 GPIO 口 0 1 第一可选功能 1 0 第二可选功能 1 1 保留 复位值 00 47 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 只有当管脚选择 GPIO 功能时,IO0DIR/IO1DIR 寄存器的方向控制位才有效。其它功能的方向是自动 控制的。每个派生器件通常具有不同的管脚配置,因此每个管脚可能有不同的功能。详见对应的器件手册。 8. GPIO 特性 单个位的方向控制 单独控制输出的置位和清零 所有 I/O 口在复位后默认为输入 应用 通用 I/O 口 驱动 LED 或其它指示器 控制片外器件 检测数字输入 管脚描述 表 54 GPIO 管脚描述 管脚名称 P0.0 – P0.31 类型 描述 输入/输出 通用 I/O 口。实际可用的 GPIO 数量取决于可选功能的使用。 P1.16-P1.31 寄存器描述 LPC2131/2132/2138 有 2 个 32 位的通用 I/O 口。P0 口的 32 个管脚中共有 30 个输入/输出管脚,1 个管 脚仅用作输出。P1 口有多达 16 个管脚可用作 GPIO 功能。PORT0 和 PORT1 由 2 组 (4 个) 寄存器控制, 如表 55 所示。 表 55 GPIO 寄存器映射 通用名称 IOPIN 描述 访问 GPIO 管脚值寄存器。不管方向和模式如何设 只读 复位值 NA PORT0 PORT1 地址&名称 地址&名称 0xE0028000 0xE0028010 定,管脚的当前状态都可从该寄存器中读出。 IOSET GPIO 输出置位寄存器。该寄存器和 IOCLR 寄 IO0PIN 读/写 存器一起控制输出管脚的状态。写入 1 使对应 0x0000 IO1PIN 0xE0028004 0xE0028014 0000 IO0SET IO1SET 管脚输出高电平。写入 0 无效。 IODIR GPIO 方向控制寄存器。该寄存器单独控制每 读/写 个 I/O 口的方向。 IOCLR 0x0000 0xE0028008 0xE0028018 0000 GPIO 输出清零寄存器。该寄存器控制输出管 只写 脚的状态。写入 1 使对应管脚输出低电平并清 0x0000 IO0DIR IO1DIR 0xE002800C 0xE002801C 0000 IO0CLR IO1CLR 零 IOSET 寄存器中的对应位。写入 0 无效。 GPIO 管脚值寄存器(IO0PIN - 0xE0028000,IO1PIN – 0xE0028010) 该寄存器提供 GPIO 管脚的值。它反映了外部环境仅对 GPIO 管脚的影响。IOPIN 寄存器不能监测非 GPIO 的管脚配置,因此不能使用 IOPIN 寄存器来指示非 GPIO 配置管脚的活动。 当管脚只选择一个功能时,其它功能无效。 48 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 上述规则唯一的例外是管脚用作 A/D 转换器输入时。不论管脚选择何种功能,它都仍可用作 A/D 输入, A/D 输入可随时被读取,管脚的电压变化都从 A/D 的读取值中反映出来。但是,只有选择模拟输入功能, 才能读出有效的模拟值。也只有这种情况下,管脚和 A/D 模块之间的接口电路才有效。其它情况下,执行 数字功能所必需的数字逻辑部分将有效,从而影响 A/D 转换器的正确操作。 表 56 GPIO 管脚值寄存器(IO0PIN - 0xE0028000,IO1PIN – 0xE0028010) IOPIN 31:0 描述 复位值 GPIO 管脚值位。IO0PIN 的位 0 对应于 P0.0 ... 位 31 对应于 P0.31 未定义 GPIO 输出置位寄存器(IO0SET - 0xE0028004,IO1SET – 0xE0028014) 当管脚配置为 GPIO 输出模式时,可使用该寄存器从管脚输出高电平。写入 1 使对应管脚输出高电平。 写入 0 无效。如果一个管脚被配置为输入或第二功能,写 IOSET 无效。 读 IOSET 寄存器返回 GPIO 输出寄存器中的值。该值由前一次对 IOSET 和 IOCLR(或前面提到的 IOPIN)的写操作决定。该值不反映任何外部环境对 I/O 管脚的影响。 表 57 GPIO 输出置位寄存器(IO0SET - 0xE0028004,IO1SET – 0xE0028014) 描述 IOSET 31:0 输出值 SET 位。IO0SET 的位 0 对应于 P0.0 ... 位 31 对应于 P0.31 复位值 0 GPIO 输出清零寄存器(IO0CLR - 0xE002800C,IO1CLR – 0xE002801C) 当管脚配置为 GPIO 输出模式时,可使用该寄存器从管脚输出低电平。写入 1 使对应管脚输出低电平 并清零 IOSET 寄存器中相应的位。写入 0 无效。如果一个管脚被配置为输入或第二功能,写 IOCLR 无效。 表 58 GPIO 输出清零寄存器(IO0CLR - 0xE002800C,IO1CLR – 0xE002801C) 描述 IOCLR 31:0 输出值 CLEAR 位。IO0CLR 的位 0 对应于 P0.0 ... 位 31 对应于 P0.31。 复位值 0 GPIO 方向寄存器(IO0DIR - 0xE0028008,IO1DIR – 0xE0028018) 当管脚配置为 GPIO 模式时,可使用该寄存器控制管脚的方向。任意管脚的方向位的设置必须与管脚 功能一致。 表 59 GPIO 方向寄存器(IO0DIR - 0xE0028008,IO1DIR – 0xE0028018) IODIR 描述 复位值 31:0 方向控制位(0=输入,1=输出) 。IO0DIR 的位 0 控制 P0.0 ... 位 31 控制 P0.31 0 GPIO 使用注意事项 例 1:顺序访问 IOSET 和 IOCLR 寄存器对同一个 GPIO 管脚/位的影响。 GPIO 管脚配置的输出状态由写入 IOSET 和 IOCLR 寄存器的值决定。IOSET/IOCLR 两者中后访问的 寄存器将决定管脚的最终输出状态。 代码如下: IO0DIR = 0x0000 0080 ; P0.7 配置用作输出 IO0CLR = 0x0000 0080 ; P0.7 输出为低 IO0SET = 0x0000 0080 ; P0.7 输出为高 IO0CLR = 0x0000 0080 ; P0.7 输出为低 先将 P0.7 设置成输出(写 IO0DIR 寄存器) ;然后,P0.7 输出设为低电平(先写 IO0CLR 寄存器) ;接 ;最后,写 IO0CLR 寄存器又将 P0.7 输出设置成低电平。 着,P0.7 管脚上出现短高电平脉冲(写 IO0SET) 49 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 例 2:使 GPIO 管脚上输出瞬时的 0 和 1 先写 IOSET 再写 IOCLR 寄存器可使管脚先输出 1 再输出 0。有的系统允许两个有效输出之间存在这段 。这可通过写端 延时时间。但某些应用要求一个 GPIO 口的一组管脚同时输出一个二进制数(0 和 1 混合) 口的 IOPIN 寄存器来实现。 下面的代码所实现的功能是:P0.[31:16]和 P0.[7:0]输出保持不变的同时将 P0.[15:8]设置成 0xA5,不管 P0.[15:8]之前是何值: IO0PIN=(IO0PIN && # 0xFFFF00FF)‖# 0x0000A500 写 IOSET/IOCLR 和 IOPIN 写 IOSET/IOCLR 寄存器很容易使所选输出管脚的状态同时变为高/低电平。只有 IOSET/IOCLR 中被写 入 1 的位对应的管脚才能设置为高/低电平,写入 0 的位对应的管脚的状态不发生改变。但是,仅通过写 IOSET 或 IOCLR 寄存器是不可能使一个 GPIO 口同时输出包含 0 和 1 的任意二进制数。 写 IOPIN 寄存器使能并行 GPIO 输出所需的瞬时值。写入 IOPIN 寄存器的二进制数据将影响整个并行 口的所有输出配置管脚:IOPIN 的位为 0 时使管脚输出低电平,IOPIN 的位为 1 时使管脚输出高电平。为 了改变一组端口管脚的输出,必须将 IOPIN 读出的内容和一个值相与(该值使要改变的管脚对应的位用 0 来屏蔽,其它管脚对应的位为 1) 。最后,再将相与的结果和期望得到的管脚输出对应的二进制数相或并将 相或的结果存回 IOPIN 寄存器。上面例 2 的等式中实现的功能是 P0.15~P0.8 输出 0xA5,P0 口的其它位的 状态保持不变。 9. UART0 特性 16 字节收发 FIFO 寄存器位置符合’550 工业标准 接收器 FIFO 触发点可为 1, 4, 8 和 14 字节 内置波特率发生器 LPC2132/2138 包含使能实现软件流控制的机制 管脚描述 表 60 UART0 管脚描述 管脚名称 类型 描述 RxD0 输入 串行输入 串行接收数据 TxD0 输出 串行输出 串行发送数据 寄存器描述 表 61 UART0 寄存器映射 名称 描述 U0RBR 接收缓冲 BIT7 MSB BIT6 BIT5 BIT4 BIT3 读数据 BIT2 BIT1 BIT0 访问 复位值* LSB RO 未定义 地址 0xE000C000 DLAB=0 U0THR 发送保持 MSB 0xE000C000 写数据 LSB WO NA DLAB=0 除数锁存 U0DLL 0xE000C000 MSB LSB LSB R/W 0x01 DLAB=1 50 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 名称 描述 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 访问 复位值* LSB R/W 0 除数锁存 U0DLM 0xE000C004 MSB MSB U0IER 中断使能 U0IIR 中断 ID DLAB=1 使 能 R x 使能 THRE 使能 Rx 数据 0 0 FIFO 使能 FIFO U0FCR 设置 线控制 U0LSR 线状态 0 0 Rx 触发 控制 U0LCR 地址 DLAB 0 0 0 IIR3 线状态中断 中 IIR2 复位 奇偶 停止位 使能 个数 FE PE 偶选择 间隔 定 TEMT THRE IIR1 DLAB=0 0x01 0xE000C008 WO 0 0xE000C008 字长度选择 R/W 0 0xE000C00C OE DR RO 0x60 0xE000C014 LSB R/W 0 0xE000C01C R/W 0x80 0xE000C030 复位 IIR0 0 RO Tx FIFO Rx FIFO 保留 奇偶固 断 可用中断 0xE000C004 R/W FIFO 使能 Rx FIFO 错误 U0SCR 高速缓存 MSB U0TER 发送使能 TxEn BI 保留[6:0] * 复位值仅指已使用位中保存的数据,不包括保留位的内容。 UART0 包含 10 个 8 位寄存器,见表 61。除数锁存访问位(DLAB)位于 U0LCR7,它使能对除数锁 存的访问。 UART0 接收器缓存寄存器(U0RBR - 0xE000C000,DLAB=0,只读) U0RBR 是 UART0 Rx FIFO 的最高字节。它包含了最早接收到的字符,可通过总线接口读出。LSB (bit0)代表最早接收到的数据位。如果接收到的字符小于 8 位,未使用的 MSB 填充为 0。 如果要访问 U0RBR,U0LCR 的除数锁存访问位(DLAB)必须为 0。U0RBR 为只读寄存器。 由于 PE、FE 和 BI 位与 RBR FIFO 顶端的字节相对应(即下次读 RBR 时读出的字节) ,因此,将接收 的字节及其状态位成对读出的正确方法是先读 U0LSR 寄存器的内容,再读 U0RBR 的字节。 表 62 UART0 接收器缓存寄存器(U0RBR - 0xE000C000,DLAB=0,只读) U0RBR 7:0 功能 描述 复位值 接收器缓存 UART0 接收器缓存寄存器包含 UART0 Rx FIFO 中最早接收到的字节 未定义 UART0 发送器保持寄存器(U0THR - 0xE000C000,DLAB=0,只写) U0THR 是 UART0 Tx FIFO 的最高字节。它包含了 Tx FIFO 中最新的字符,可通过总线接口写入。LSB 代表最先发送的位。 如果要访问 U0THR,U0LCR 的除数锁存访问位(DLAB)必须为 0。U0THR 为只写寄存器。 表 63 UART0 发送器保持寄存器(U0THR - 0xE000C000,DLAB=0,只写) U0THR 功能 7:0 发送器保持 描述 写 UART0 发送器保持寄存器使数据保存到 UART0 发送 FIFO 当中。 当字节到达 FIFO 的最底部并且发送器就绪时,该字节将被发送。 复位值 N/A UART0 除数锁存 LSB 寄存器(U0DLL - 0xE000C000,DLAB=1) UART0 除数锁存 MSB 寄存器(U0DLM - 0xE000C004,DLAB=1) UART0 除数锁存是 UART0 波特率发生器的一部分,它保存了用于产生波特率时钟的 VPB 时钟(pclk) 分频值,波特率时钟必须是波特率的 16 倍。U0DLL 和 U0DLM 寄存器一起构成一个 16 位除数,U0DLL 包含除数的低 8 位,U0DLM 包含除数的高 8 位。值’h0000 被看作是’h0001,因为除数是不允许为 0 的。当 51 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 访问 UART0 除数锁存寄存器时,U0LCR 中的除数锁存访问位(DLAB)必须为 1。 表 64 UART0 除数锁存 LSB 寄存器(U0DLL - 0xE000C000,DLAB=1) U0DLL 功能 除数锁存 7:0 描述 复位值 UART0 除数锁存 LSB 寄存器与 U0DLM 寄存器一起决定 UART0 的波 LSB 寄存器 特率。 0x01 表 65 UART0 除数锁存 MSB 寄存器(U0DLM - 0xE000C004,DLAB=1) U0DLM 功能 除数锁存 7:0 描述 复位值 UART0 除数锁存 MSB 寄存器与 U0DLL 寄存器一起决定 UART0 的波 MSB 寄存器 特率。 0 UART0 中断使能寄存器(U0IER - 0xE000C004,DLAB=0) U0IER 用于使能 4 个 UART0 中断源。 表 66 UART0 中断使能寄存器(U0IER – 0xE000C004,DLAB=0) U0IER 0 1 功能 RBR 中断 使能 THRE 中断 使能 描述 复位值 0:禁止 RDA 中断 1:使能 RDA 中断 0 U0IER0 使能 UART0 接收数据可用中断。 它还控制字符接收超时中断。 0:禁止 THRE 中断 1:使能 THRE 中断 0 U0IER1 使能 UART0 THRE 中断。该中断的状态可从 U0LSR5 读出。 0:禁止 Rx 线状态中断 2 Rx 线状态 1:使能 Rx 线状态中断 中断使能 U0IER2 使能 UART0 Rx 线状态中断。该中断的状态可从 U0LSR[4:1] 0 读出。 7:3 保留 保留,用户软件不要向保留位写入 1。从保留位读出的值未被定义。 NA UART0 中断标识寄存器(U0IIR - 0xE000C008,只读) U0IIR 提供状态代码用于指示一个挂起中断的中断源和优先级。在访问 U0IIR 过程中,中断被冻结。 如果在访问 U0IIR 时产生了中断,该中断被记录,下次 U0IIR 访问可读出。 表 67 UART0 中断标识寄存器(U0IIR - 0xE000C008,只读) U0IIR 功能 描述 复位值 0:至少有 1 个中断被挂起 0 中断挂起 1:没有挂起的中断 1 U0IIR0 为低有效。挂起的中断可通过 U0IER3:1 确定。 011:1. 接收线状态(RLS) 010:2a. 接收数据可用(RDA) 3:1 中断标识 110:2b. 字符超时指示(CTI) 001:3. THRE 中断 0 U0IER3 指示对应于 UART0 Rx FIFO 的中断。 上面未列出的 U0IER3:1 的其它组合都为保留值(000, 100, 101, 111) 5:4 保留 7:6 FIFO 使能 保留,用户软件不要向保留位写入 1。从保留位读出的值未被定义。 这些位等效于 U0FCR0 NA 0 52 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 中断的处理见表 68。给定了 U0IIR[3:0]的状态,中断处理程序就能确定中断源以及如何清除激活的中 断。在退出中断服务程序之前,必须读取 U0IIR 来清除中断。 UART0 RLS 中断(U0IIR3:1=011)是最高优先级的中断。只要 UART0 Rx 输入产生 4 个错误条件(溢 、奇偶错误(PE) 、帧错误(FE)和间隔中断(BI) )中的任意一个,该中断标志将置位。产 出错误(OE) 生该中断的 UART0 Rx 错误条件可通过查看 U0LSR4:1 得到。当读取 U0LSR 时清除中断。 UART0 RDA 中断(U0IIR3:1=010)与 CTI 中断(U0IIR3:1=110)共用第二优先级。当 UART0 Rx FIFO 到达 U0FCR7:6 所定义的触发点时,RDA 被激活。当 UART0 Rx FIFO 的深度低于触发点时,RDA 复位。 当 RDA 中断激活时,CPU 可读出由触发点所定义的数据块。 CTI 中断(U0IIR3:1=110)为第二优先级中断。当 UART0 Rx FIFO 包含至少 1 个字符并且在接收 3.5 到 4.5 字符的时间内没有发生 UART0 Rx FIFO 动作时,该中断置位。UART0 Rx FIFO 的任何动作(读或写 UART0 RSR)都将清除该中断。在接收到的信息不是触发值的倍数后,CTI 中断将会清空 UART0 RBR。 例如,如果一个外设想要发送一个 105 个字符的信息,而触发值为 10 个字符,那么前 100 个字符将使 CPU 接收 10 个 RDA 中断,而剩下的 5 个字符使 CPU 接收 1 到 5 个 CTI 中断(取决于服务程序) 。 表 68 UART0 中断处理 U0IIR[3:0] 优先级 0001 - 0110 最高 中断类型 无 中断源 无 - Rx 线状态/错误 OE, PE, FE, 或 BI U0LSR 读操作 Rx 数据可用或 FIFO 模式下(U0FCR0=1)到达触发 0100 第二 中断复位 Rx 数据可用 U0RBR 读或 UART0 FIFO 低 点 于触发值 Rx FIFO 包含至少 1 个字符并且在一段时间内无字 符输入或移出,该时间的长短取决于 FIFO 中的字符 1100 第二 字符超时指示 数以及(在 3.5 到 4.5 字符的时间内)设置的触发值。 U0RBR 读操作 实际的时间为: [(字长度)×7-2]×8+[(触发值-字符数)×8+1]RCLK THRE 0010 第三 U0IIR 读(如果 是中断源)或 THRE THR 写操作 注:“0000”, “0011”, “0101”, “0111”, “1000”, “1001”, “1010”, “1011”, “1101”, “1110”, “1111”为保留值。 UART0 THRE 中断(U0IIR3:1=001)为第三优先级中断。当 UART0 THR FIFO 为空并且满足特定的初始 化条件时,该中断激活。这些初始化条件将使 UART0 THR FIFO 被数据填充,以免在系统启动时产生许多 THRE 中断。初始化条件在 THRE=1 时实现了一个字符的延时减去停止位并在上一次 THRE=1 事件之后没 有在 U0THR 中存在至少 2 个字符。在没有译码和服务 THRE 中断时,该延迟为 CPU 提供了将数据写入 U0THR 的时间。如果 UART0 THR FIFO 中曾经有两个或更多字符,而当前 U0THR 为空时,THRE 中断立 即设置。当发生 U0THR 写操作或 U0IIR 读操作并且 THRE 为最高优先级中断(U0IIR3:1=001)时,THRE 中断复位。 UART0 FIFO 控制寄存器(U0FCR - 0xE000C008) U0FCR 控制 UART0 Rx 和 Tx FIFO 的操作。 表 69 UART0 FIFO 控制寄存器(U0FCR - 0xE000C008) U0FCR 功能 描述 复位值 高电平使能对 UART0 Rx 和 Tx FIFO 以及 U0FCR7:1 的访问。该位必 0 FIFO 使能 须置位以实现正确的 UART0 操作。该位的任何变化都将使 UART0 FIFO 自动清空。 53 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 U0FCR 功能 描述 1 Rx FIFO 复位 2 Tx FIFO 复位 5:3 保留 复位值 写 1 到 U0FCR1 将清零 UART0 Rx FIFO 中的所有字节并复位指针逻 辑。该位自动清零。 写 1 到 U0FCR2 将清零 UART0 Tx FIFO 中的所有字节并复位指针逻 辑。该位自动清零。 保留,用户软件不要向保留位写入 1。从保留位读出的值未被定义。 0 0 NA 00:触发点 0(1 个字符或 0x01h) 01:触发点 1(4 个字符或 0x04h) 7:6 Rx 触发选择 10:触发点 2(8 个字符或 0x08h) 11:触发点 3(14 个字符或 0x0eh) 0 这两个位决定在激活中断之前,接收器 UART0 FIFO 必须写入多少个 字符。 UART0 线控制寄存器(U0LCR - 0xE000C00C) U0LCR 决定发送和接收数据字符的格式。 表 70 UART0 线控制寄存器(U0LCR - 0xE000C00C) U0LCR 功能 描述 复位值 00:5 位字符长度 1:0 字长度选择 01:6 位字符长度 0 10:7 位字符长度 11:8 位字符长度 2 停止位选择 3 奇偶使能 0:1 个停止位 1:2 个停止位(如果 U0LCR[1:0]=00 则为 1.5) 0:禁止奇偶产生和校验 0 0 1:使能奇偶产生和校验 00:奇数 5:4 奇偶选择 01:偶数 0 10:强制为“1” ,奇偶固定 11:强制为“0” ,奇偶固定 0:禁止间隔发送 6 间隔控制 1:使能间隔发送 0 当 U0LCR6 为高电平有效时,输出管脚 UART0 TxD 强制为逻辑 0。 7 除数锁存访问位 0:禁止访问除数锁存 0 1:使能访问除数锁存 UART0 线状态寄存器(U0LSR - 0xE000C014,只读) U0LSR 为只读寄存器,它提供 UART0 Tx 和 Rx 模块的状态信息。 表 71 UART0 线状态寄存器(U0LSR – 0xE000C014,只读) U0LSR 功能 接收器数据 0 就绪 (RDR) 描述 复位值 0:U0RBR 为空 1:U0RBR 包含有效数据 当 U0RBR 包含未读取的字符时,U0LSR0 置位;当 UART0 RBR FIFO 为 空时,U0LSR0 清零。 54 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 U0LSR 功能 描述 复位值 溢出错误条件在错误发生后立即设置。U0LSR 读操作清零 U0LSR1。当 0 0:溢出错误状态未激活 溢出错误 1 (OE) 1:溢出错误状态激活 UART0 RSR 已经有新的字符组合而 UART0 RBR FIFO 已满时,U0LSR1 置位。此时 UART0 RBR FIFO 不会被覆盖,UART0 RSR 中的字符将丢失。 0:奇偶错误状态未激活 奇偶错误 2 (PE) 1:奇偶错误状态激活 当接收字符的奇偶位处于错误状态时产生一个奇偶错误。U0LSR 读操作 0 清零 U0LSR2 位。奇偶错误检测时间取决于 U0FCR0。奇偶错误与 UART0 RBR FIFO 中顶部的字符相关。 0:帧错误状态未激活 1:帧错误状态激活 帧错误 3 (FE) 当接收字符的停止位为 0 时,产生帧错误。U0LSR 读操作清零 U0LSR3。 帧错误检测时间取决于 U0FCR0。帧错误与 UART0 RBR FIFO 中顶部的 0 字符相关。当检测到一个帧错误时,Rx 将尝试与数据重新同步并假设错 误的停止位实际是一个超前的起始位。但即使没有出现帧错误,它也不能 假设下一个接收到的字节是正确的。 0:间隔中断状态未激活 1:间隔中断状态激活 间隔中断 4 (BI) 在发送整个字符(起始位、数据、奇偶位和停止位)过程中 RxD0 如果都 保持逻辑 0,则产生间隔中断。当检测到间隔条件时,接收器立即进入空 0 闲状态直到 RxD0 变为全 1 状态。U0LSR 读操作清零该状态位。间隔检 测的时间取决于 U0FCR0。间隔中断与 UART0 RBR FIFO 中顶部的字符 相关。 发送器保持 0:U0THR 包含有效数据 5 寄存器空 1:U0THR 为空 1 (THRE) 当检测到 UART0 THR 空时,THRE 置位,U0THR 写操作清零该位。 0:U0THR 和/或 U0TSR 包含有效数据 发送器空 6 1:U0THR 和 U0TSR 为空 (TEMT) 当 U0THR 和 U0TSR 都为空时,TEMT 置位。当 U0TSR 或 U0THR 包含 1 有效数据时,TEMT 清零。 0:U0RBR 中没有 UART0 Rx 错误,或 U0FCR0=0 7 Rx FIFO 错 误(RXFE) 1:UART0 RBR 包含至少一个 UART0 Rx 错误 当一个带有 Rx 错误(例如帧错误、奇偶错误或间隔中断)的字符装入 0 U0RBR 时,U0LSR7 置位。当读取 U0LSR 寄存器并且 UART0 FIFO 中不 再有错误时,U0LSR7 清零。 UART0 高速缓存寄存器(U0SCR – 0xE000C01C) 在 UART0 操作时 U0SCR 无效。 用户可自由对该寄存器进行读或写。 不提供中断接口向主机指示 U0SCR 所发生的读或写操作。 55 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 72 UART0 高速缓存寄存器(U0SCR – 0xE000C01C) U0SCR 功能 7:0 - 描述 复位值 一个可读可写的字节 0 UART0 波特率计算 例 1 :使用 UART0baudrate 公式,假设系统的 pclk = 20MHz ,如果 U0DL=130 ( U0DLM=0x00 和 U0DLL=0x82) 、DivAddVal=0 和 MulVal=1,则可得出 UART0 的 UART0baudrate=9615baud。 例 2 : 使 用 UART0baudrate 公 式 , 假 设 系 统的 pclk = 20MHz , 如 果 U0DL=93 ( U0DLM=0x00 和 U0DLL=0x5D) 、DivAddVal=2 和 MulVal=5,则可得出 UART0 的 UART0baudrate=9600baud。 表 73 外围时钟为 20MHz 时的波特率(pclk) 期望的波特率 U0DLM:U0DLL1) 50 25000 75 %error2) 期望的波特率 U0DLM:U0DLL1) 0.0000 4800 260 0.1600 16667 0.0020 7200 174 0.2240 110 11364 0.0032 9600 130 0.1600 134.5 9294 0.0034 19200 65 0.1600 150 8333 0.0040 38400 33 1.3760 300 4167 0.0080 56000 22 1.4400 600 2083 0.0160 57600 22 1.3760 1200 1042 0.0320 112000 11 1.4400 1800 694 0.0640 115200 11 1.3760 2000 625 0.0000 224000 6 7.5200 2400 521 0.0320 448000 3 7.5200 3600 347 0.0640 1) 这一行的值是 16 位{DLM:DLL}的等效十进制值。 2) 期望波特率和实际波特率的百分比误差。 %error2) UART0 发送使能寄存器(U0TER – 0xE0010030) LPC2132/2138 的 U0TER 使能实现软件流控制。当 TxEn=1 时,只要数据可用,UART0 发送器就将持 续发送数据。一旦 TxEn 变为 0,UART0 发送器立刻停止工作。 表 74 描述了如何利用 TxEn 位来实现软件流控制。 表 74 UART0 发送使能寄存器(U0TER – 0xE0010030) U0TER 功能 描述 复位值 6:0 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 7 TxEn 该位为 1 时(复位后) ,一旦以前的数据都被发送后,写入 THR 0x01 的数据输出到 TxD 管脚。如果一个字符正在发送时该位清零, 则结束这个字符的发送,不再发送其它字符,直到该位重新置位。 换言之,该位为 0 将终止 THR 或 Tx FIFO 到发送移位寄存器的 字符传输。当接收到 XOFF 字符(DC3)时,软件(可实现软件 握手)将该位清零。当接收到 XON 字符(DC1)时,软件又能 将该位重新置位。 结构 UART0 的结构如下方框图所示。 VPB 接口提供 CPU 或主机与 UART0 之间的通信连接。 56 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com UART0 接收器模块 U0Rx 监视串行输入线 RxD0 的有效输入。UART0 Rx 移位寄存器(U0RSR)通过 RxD0 接收有效的字符。当 U0RSR 接收到一个有效字符后,它将该字符传送到 UART0 Rx 缓存寄存器 FIFO 中,等待 CPU 或主机通过主机接口进行访问。 UART0 发送器模块 U0Tx 接收 CPU 或主机写入的数据并将数据缓存到 UART0 Tx 保持寄存器 FIFO (U0THR)中。UART0 Tx 移位寄存器(U0TSR)读取 U0THR 中的数据并将数据通过串行输出管脚 TxD0 发送。 UART0 波特率发生器模块 U0BRG 产生 UART0 Tx 模块所使用的定时。U0BRG 模块时钟源为 VPB 时 钟(pclk) 。主时钟与 U0DLL 和 U0DLM 寄存器所定义的除数相除得到 UART0 Tx 模块使用的时钟。该时 钟为 16 倍过采样时钟 NBAUDOUT。 中断接口包含寄存器 U0IER 和 U0IIR。中断接口接收几个由 U0Tx 和 U0Rx 模块发出的单时钟宽度的 使能信号。 U0Tx 和 U0Rx 的状态信息保存在 U0LSR 中。U0Tx 和 U0Rx 的控制信息保存在 U0LCR 中。 U0Tx U0THR NTXRDY TxD0 U0TSR U0BRG U0DLL NBAUDOUT U0DLM RCLK U0Rx 中断 U0RBR NRXRDY U0RSR RxD0 U0IER U0INTR U0IIR U0FCR U0LSR U0SCR U0LCR LCR PA[2:0] PSEL PSTB PWRITE VPB 接口 PD[7:0] AR MR pclk 图 16 LPC2131/2132/2138 UART0 方框图 10. UART1 特性 UART1 与 UART0 相同,只是增加了一个调制解调器(modem)接口 16 字节接收和发送 FIFO 寄存器位置符合’550 工业标准 接收器 FIFO 触发点可为 1, 4, 8 和 14 字节 57 DDIS 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 内置波特率发生器 包含标准调制解调器接口信号(仅为 LPC2138) LPC2131/2132/2138 UART1 包含使能实现软件或硬件流控制的机制 管脚描述 表 75 UART1 管脚描述 管脚名称 类型 RxD1 输入 串行输入 串行接收数据 TxD1 输出 串行输出 串行发送数据 输入 清零发送 有效低电平信号指示外部 modem 的接收是否已经准备就绪,UART1 数据 CTS1 (1) 描述 可通过 TxD1 发送。在 modem 接口的正常操作中(U1MCR4=0),该信号的补码保存在 U1MSR4 中。 状态改变信息保存在 U1MSR0 中, 如果第 4 优先级中断使能(U1IER3=1), 该信息将作为中断源。 DCD1 (1) 输入 数据载波检测 有效低信号指示外部 modem 是否已经与 UART1 建立了通信连接,可 以进行数据交换。在 modem 接口的正常操作中(U1MCR4=0),该信号的补码保存在 U1MSR7 中。 状态改变信息保存在 U1MSR3 中, 如果第 4 优先级中断使能(U1IER3=1), 该信息将作为中断源。 (1) 输入 DSR1 数据设备就绪 有效低电平指示外部 modem 是否准备建立与 UART1 的通信连接。在 modem 接口的正常操作中(U1MCR4=0),该信号的补码保存在 U1MSR5 中。状态改 变信息保存在 U1MSR1 中,如果第 4 优先级中断使能(U1IER3=1),该信息将作为中 断源。 DTR1 (1) 输出 数据终端就绪 有效低电平指示 UART1 准备建立与外部 modem 的连接。该信号的补 码保存在 U1MCR0 中。 (1) 输入 RI1 铃响指示 有效低电平指示 modem 检测到电话的响铃信号。在 modem 接口的正常操 作中(U1MCR4=0),该信号的补码保存在 U1MSR6 中。状态改变信息保存在 U1MSR2 中,如果第 4 优先级中断使能(U1IER3=1),该信息将作为中断源。 (1) 输出 RTS1 请求发送 有效低电平指示 UART1 打算向外部 modem 发送数据。该信号的补码保存 在 U1MCR1 中。 (1) 仅为 LPC2138。 寄存器描述 表 76 UART1 寄存器映射 名称 描述 BIT7 U1RBR 接收缓存 MSB BIT6 BIT5 BIT4 BIT3 读数据 BIT2 BIT1 BIT0 LSB 访问 复位值* RO 未定义 地址 0xE0010000 DLAB=0 U1THR 发送保持 MSB 0xE0010000 写数据 LSB WO NA DLAB=0 除数锁存 U1DLL 0xE0010000 MSB LSB R/W 0 LSB DLAB=1 除数锁存 U1DLM 0xE0010004 MSB LSB MSB R/W 0 DLAB=1 58 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com BIT1 BIT0 访问 复位值* 使能 使能 Rx 数 接上表 名称 描述 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 Modem 状 使能 Rx U1IER 中断使能 0 0 0 0 (1) U1IIR 中断 ID FIFO 使能 FIFO U1FCR Rx 触发 控制 U1LCR 线控制 U1MCR Modem 控 DLAB 制 U1LSR 线状态 0 IIR3 中断 断 断 IIR2 IIR1 IIR0 Tx FIFO Rx FIFO 保留 - 复位 复位 0 DLAB=0 RO 0x01 0xE0010008 WO 0 0xE0010008 R/W 0 0xE001000C FIFO 使能 设置 奇偶 偶 奇偶 停止位 间隔 固定 选择 使能 个数 0 0 0 0 RTS DTR R/W 0 0xE0010010 FE PE OE DR RO 0x60 0xE0010014 RO 0 0xE0010018 R/W 0 0xE001001C R/W 0x80 0xE0010030 字长度选择 环路 0 (1) 0 0xE0010004 态,中断 线,状态 THRE 中 据,可用中 R/W 使能 地址 回送 Rx FIFO 错误 U1MSR(1) Modem 状态 DCD U1SCR 高速缓存 MSB U1TER 发送使能 TxEn TEMT THRE RI DSR BI CTS Delta DCD 后沿 RI Delta DSR Delta CTS LSB 保留[6:0] * 复位值仅指已使用位中保存的数据,不包括保留位的内容。 * 仅为 LPC2138。 UART1 包含 14 个 8 位和 32 位的寄存器,见表 76。除数锁存访问位(DLAB)位于 U1LCR7,它使能 对除数锁存的访问。 UART1 接收器缓存寄存器(U1RBR - 0xE0010000,DLAB=0,只读) U1RBR 是 UART1 Rx FIFO 的最高字节。 它包含了最早接收到的字符, 可通过总线接口读出。 LSB(bit0) 代表最早接收到的数据位。如果接收到的字符小于 8 位,未使用的 MSB 填充为 0。 如果要访问 U1RBR,U1LCR 的除数锁存访问位(DLAB)必须为 0。U1RBR 为只读寄存器。 由于 PE、FE 和 BI 位与 RBR FIFO 顶端的字节相对应(即下次读 RBR 时读出的字节) ,因此,将接收 的字节及其状态位成对读出的正确方法是先读 U1LSR,再读 U1RBR。 表 77 UART1 接收器缓存寄存器(U1RBR - 0xE0010000,DLAB=0,只读) U1RBR 7:0 功能 描述 接收器缓存 接收器缓存寄存器包含 UART1 Rx FIFO 当中最早接收到的字节 复位值 未定义 UART1 发送器保持寄存器(U1THR - 0xE0010000,DLAB=0,只写) U1THR 是 UART1 Tx FIFO 的最高字节。它包含了 Tx FIFO 中最新的字符,可通过总线接口写入。LSB 代表最先发送的位。 如果要访问 U1THR,U1LCR 的除数锁存访问位(DLAB)必须为 0。U1THR 为只写寄存器。 表 78 UART1 发送器保持寄存器(U1THR - 0xE0010000,DLAB=0,只写) U1THR 7:0 功能 描述 复位值 发送保持寄 写发送器保持寄存器使数据保存到 UART1 发送 FIFO 当中。当字节 存器 到达 FIFO 的最底部并且发送器就绪时,该字节将被发送。 59 N/A 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com UART1 除数锁存 LSB 寄存器(U1DLL - 0xE0010000,DLAB=1) UART1 除数锁存 MSB 寄存器(U1DLM - 0xE0010004,DLAB=1) UART1 的除数锁存是波特率发生器的一部分,它保存了用于产生波特率时钟的 VPB 时钟(pclk)分频 值,波特率时钟必须是波特率的 16 倍。U1DLL 和 U1DLM 寄存器一起构成一个 16 位除数,U1DLL 包含 除数的低 8 位,U1DLM 包含除数的高 8 位。值’h0000 被看作是’h0001,因为除数是不允许为 0 的。当访问 UART1 除数锁存寄存器时, U1LCR 的除数锁存访问位 (DLAB) 必须为 1。 如何选取合适的 U1DLL 和 U1DLM 值详见本章后面的内容。 表 79 UART1 除数锁存 LSB 寄存器(U1DLL - 0xE0010000,DLAB=1) U1DLL 功能 除数锁存 7:0 描述 复位值 UART1 除数锁存 LSB 寄存器与 U1DLM 寄存器一起决定 UART1 的波 0x01 LSB 寄存器 特率。 表 80 UART1 除数锁存 MSB 寄存器(U1DLM - 0xE0010004,DLAB=1) U1DLM 功能 除数锁存 7:0 描述 复位值 UART1 除数锁存 MSB 寄存器与 U1DLL 寄存器一起决定 UART1 的波 MSB 寄存器 特率。 0 UART1 中断使能寄存器(U1IER - 0xE0010004,DLAB=0) U1IER 用于使能 4 个中断源。 表 81 UART1 中断使能寄存器(U1IER - 0xE0010004,DLAB=0) U1IER 0 1 2 功能 RBR 中断 使能 THRE 中断 使能 Rx 线状态 中断使能 描述 复位值 0:禁止 RDA 中断 1:使能 RDA 中断 0 U1IER0 使能 UART1 的接收数据可用中断。它还控制着接收超时中断。 0:禁止 THRE 中断 1:使能 THRE 中断 0 U1IER1 使能 UART1 的 THRE 中断。该中断的状态可从 U1LSR5 读出。 0:禁止 Rx 线状态中断 1:使能 Rx 线状态中断 0 U1IER2 使能 UART1 Rx 线状态中断。 该中断的状态可从 U1LSR[4:1]读出。 Modem 状 0:禁止 Modem 中断 3 态中断使能 1:使能 Modem 中断 (1) 0 U1IER3 使能 modem 中断。中断的状态可从 U1MSR[3:0]读取。 (1)仅为 LPC2138。 UART1 中断标识寄存器(U1IIR - 0xE0010008,只读) U1IIR 提供状态代码用于指示一个挂起中断的中断源和优先级。在访问 U1IIR 过程中,中断被冻结。 如果在访问 U1IIR 时产生了中断,该中断被记录,下次 U1IIR 访问可读出。 表 82 UART1 中断标识寄存器(U1IIR - 0xE0010008,只读) U1IIR 功能 描述 复位值 0:至少有 1 个中断被挂起 0 中断挂起 1:没有挂起的中断 1 注意 U1IIR0 为低有效。挂起的中断可通过 U1IIR3:1 确定。 60 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 U1IIR 功能 描述 复位值 011:1. 接收线状态(RLS) 010:2a. 接收数据可用(RDA) 110:2b. 字符超时指示(CTI) 3:1 中断标识 001:3. THRE 中断 0 (1) 000:4. Modem 中断 U1IER3 指示对应于 UART1 Rx FIFO 和 modem 信号的中断。上面未列 出的 U1IER3:1 的其它组合都为保留值(100, 101, 111) 5:4 保留 7:6 FIFO 使能 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 这些位等效于 U1FCR0 0 (1)仅为 LPC2138。 中断的处理见表 83。给定了 U1IIR[3:0]的状态,中断处理程序就能确定中断源以及如何清除激活的中 断。在退出中断服务程序之前,必须读取 U1IIR 来清除中断。 UART1 RLS 中断(U1IIR3:1=011)是最高优先级的中断。只要 UART1 Rx 输入产生 4 个错误条件(溢 、奇偶错误(PE) 、帧错误(FE)和间隔中断(BI) )中的任意一个,该中断标志将置位。产 出错误(OE) 生该中断的 UART1 Rx 错误条件可通过查看 U1LSR4:1 得到。当读取 U1LSR 时清除中断。 UART1 RDA 中断(U1IIR3:1=010)与 CTI 中断(U1IIR3:1=110)共用第二优先级。当 UART1 Rx FIFO 到达 U1FCR7:6 所定义的触发点时,RDA 被激活。当 UART1 Rx FIFO 的深度低于触发点时,RDA 复位。 当 RDA 中断激活时,CPU 可读出由触发点所定义的数据块。 CTI 中断(U1IIR3:1=110)为第二优先级中断。当 UART1 Rx FIFO 包含至少 1 个字符并且在接收 3.5 到 4.5 字符的时间内没有发生 UART1 Rx FIFO 动作时,产生该中断。UART1 Rx FIFO 的任何动作(读或写 UART1 RSR)都将清除该中断。当接收到的信息不是触发值的倍数时,CTI 中断将会清空 UART1 RBR。 例如,如果一个外设想要发送一个 105 个字符的信息,而触发值为 10 个字符,那么前 100 个字符将使 CPU 接收 10 个 RDA 中断,而剩下的 5 个字符使 CPU 接收 1 到 5 个 CTI 中断(取决于服务程序) 。 表 83 UART1 中断处理 U1IIR[3:0] 优先级 0001 - 0110 最高 0100 第二 中断类型 无 中断源 中断复位 无 - Rx 线状态/错误 OE, PE, FE, 或 BI U1LSR 读操作 Rx 数据可用 Rx 数据可用或 FIFO 模式下(FCR0=1)到达触发点 U1RBR 读或 FIFO 低于触发值 Rx FIFO 包含至少 1 个字符并且在一段时间内无字 符输入或移出,该时间的长短取决于 FIFO 中的字 1100 第二 字符超时指示 符数以及(在 3.5 到 4.5 字符的时间内)设置的触发 U1RBR 读操作 值。实际的时间为: [(字长度)×7-2]×8+[(触发值-字符数)×8+1]RCLK U1IIR 读 (如果 THRE 0010 第三 是中断源)或 THRE THR 写操作 (1) 0000 第四 Modem 状态 CTS, DSR, RI 或 DCD MSR 读操作 注:“0011”, “0101”, “0111”, “1000”, “1001”, “1010”, “1011”, “1101”, “1110”, “1111”为保留值。 (1) 仅为 LPC2138。 “0011”, “0101”, “0111”, “1000”, “1001”, “1010”, “1011”, “1101”, “1110”, “1111”为保留值。 61 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com UART1 THRE 中断(U1IIR3:1=001)为第三优先级中断。当 UART1 THR FIFO 为空并且满足特定的初始 化条件时,该中断激活。这些初始化条件将使 UART1 THR FIFO 被数据填充,以免在系统启动时产生许多 THRE 中断。初始化条件在 THRE=1 时实现了一个字符的延时减去停止位并在上一次 THRE=1 事件之后没 有在 U1THR 中存在至少 2 个字符。在没有译码和服务 THRE 中断时,该延迟为 CPU 提供了将数据写入 U1THR 的时间。如果 UART1 THR FIFO 中曾经有两个或更多字符,而当前 U1THR 为空时,THRE 中断立 即设置。当发生 U1THR 写操作或 U1IIR 读操作并且 THRE 为最高优先级中断(U1IIR3:1=001)时,THRE 中断复位。 Modem 中断(U1IIR3:1=000)仅用于 LPC2138。它是最低优先级中断,只要在 modem 输入管脚、DCD、 DSR 或 CTS 上发生任何状态变化,该中断就会激活。此外,modem 输入口 RI 上低到高电平的跳变会产生 一个 modem 中断。modem 中断源可通过检查 U1MSR3:0 得到。读取 U1MSR 将清除 modem 中断。 UART1 FIFO 控制寄存器(U1FCR - 0xE0010008) U1FCR 控制 UART1 Rx 和 Tx FIFO 的操作。 表 84 UART1 FIFO 控制寄存器(U1FCR - 0xE0010008) U1FCR 功能 描述 复位值 高电平使能对 UART1 Rx 和 Tx FIFO 以及 U1FCR7:1 的访问。该位必 0 FIFO 使能 须置位以实现正确的 UART1 操作。该位的任何变化都将使 UART1 0 FIFO 清空。 1 Rx FIFO 复位 2 Tx FIFO 复位 5:3 保留 该位置位会清零 UART1 Rx FIFO 中的所有字节并复位指针逻辑。该位 自动清零。 该位置位会清零 UART1 Tx FIFO 中的所有字节并复位指针逻辑。该位 自动清零。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 0 NA 00:触发点 0(1 个字符或 0x01h) 01:触发点 1(4 个字符或 0x04h) 7:6 Rx 触发选择 10:触发点 2(8 个字符或 0x08h) 0 11:触发点 3(14 个字符或 0x0eh) 这两个位决定在激活中断之前,UART1 FIFO 必须写入多少个字符。 UART1 线控制寄存器(U1LCR - 0xE001000C) U1LCR 决定发送和接收数据字符的格式。 表 85 UART1 线控制寄存器(U1LCR - 0xE001000C) U1LCR 功能 描述 复位值 00:5 位字符长度 1:0 字长度选择 01:6 位字符长度 0 10:7 位字符长度 11:8 位字符长度 2 停止位选择 3 奇偶使能 0:1 个停止位 1:2 个停止位(如果 U1LCR[1:0]=00 则为 1.5) 0:禁止奇偶产生和校验 1:使能奇偶产生和校验 62 0 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 U1LCR 功能 描述 复位值 00:奇数 5:4 奇偶选择 01:偶数 0 10:强制为 1 11:强制为 0 0:禁止间隔发送 6 间隔控制 1:使能间隔发送 0 当 U1LCR6=1 时,输出管脚 UART1 TxD 强制为逻辑 0。 7 除数锁存访问位 0:禁止访问除数锁存 0 1:使能访问除数锁存 UART1 Modem 控制寄存器(U1MCR - 0xE0010010)(仅为 LPC2138) U1MCR 使能 modem 的回写模式并控制 modem 的输出信号。 表 86 UART1 Modem 控制寄存器(U1MCR - 0xE0010010) (仅为 LPC2138) U1MCR 功能 0 描述 复位值 DTR 控制 选择 modem 输出管脚 DTR。该位在回写模式激活时读出为 0。 0 1 RTS 控制 选择 modem 输出管脚 RTS。该位在回写模式激活时读出为 0。 0 2 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA 3 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA 0:禁止 modem 回写模式 1:使能 modem 回写模式 modem 回写模式提供了一个执行回写测试的诊断机制。发送器输出 的串行数据在内部连接到接收器的串行输入端。输入脚 RxD1 对回写 4 回写模式选择 4 个 modem 输入 (CTS, 模式无影响, 输出脚 TxD1 保持总为 1 的状态。 DSR, RI 和 DCD)与外部断开。从外部来看,modem 的输出端(RTS, 0 DTR)无效。在内部,4 个 modem 输出连接到 4 个 modem 输入。这 样连接的结果是 U1MSR 的高 4 位由 U1MCR 的低 4 位驱动,而不是 在正常模式下由 4 个 modem 输入驱动。这样在回写模式下,写 U1MCR 的低 4 位就可产生 modem 状态中断。 UART1 线状态寄存器(U1LSR – 0xE0010014,只读) U1LSR 为只读寄存器,它提供 UART1 Tx 和 Rx 模块的状态信息。 表 87 UART1 线状态寄存器(U1LSR – 0xE0010014,只读) U1LSR 功能 接收数据 0 就绪 (RDR) 描述 复位值 0:U1RBR 为空 1:U1RBR 包含有效数据 当 U1RBR 包含未读取的字符时,U1LSR0 置位;当 UART1 RBR FIFO 为 0 空时,U1LSR0 清零。 0:溢出错误状态未激活 溢出错误 1 (OE) 1:溢出错误状态激活 溢出错误条件在错误发生后立即设置。U1LSR 读操作清零 U1LSR1。当 UART1 RSR 已经有新的字符就绪而 UART1 RBR FIFO 已满时,U1LSR1 置位。此时 UART1 RBR FIFO 不会被覆盖,UART1 RSR 中的字符将丢失。 63 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 功能 U1LSR 描述 复位值 当接收字符的奇偶位处于错误状态时产生一个奇偶错误。U1LSR 读操作 0 0:奇偶错误状态未激活 奇偶错误 2 (PE) 1:奇偶错误状态激活 清零 U1LSR2 位。奇偶错误检测时间取决于 U1FCR0。奇偶错误与 UART1 RBR FIFO 中顶部的字符相关。 0:帧错误状态未激活 1:帧错误状态激活 3 帧错误 当接收字符的停止位为 0 时,产生帧错误。U1LSR 读操作清零 U1LSR3。 (FE) 帧错误检测时间取决于 U1FCR0。帧错误与 UART1 RBR FIFO 中顶部的 0 字符相关。当检测到一个帧错误时,Rx 将尝试与数据重新同步并假设错 误的停止位实际是一个超前的起始位。 0:间隔中断状态未激活 1:间隔中断状态激活 间隔中断 4 (BI) 在发送整个字符(起始位、数据、奇偶位和停止位)过程中 RxD1 如果都 保持逻辑 0,则产生间隔中断。当检测到间隔条件时,接收器立即进入空 0 闲状态直到 RxD1 变为全 1 状态。U1LSR 读操作清零该状态位。间隔检 测的时间取决于 U1FCR0。间隔中断与 UART1 RBR FIFO 中读出的字符 相关。 5 发送保持 0:U1THR 包含有效数据 寄存器空 1:U1THR 空 1 (THRE) 当检测到 U1THR 空时,THRE 置位,U1THR 写操作清零该位。 0:U1THR 和/或 U1TSR 包含有效数据 发送器空 6 1:U1THR 和 U1TSR 空 (TEMT) 当 THR 和 TSR 都为空时,TEMT 置位。当 U1TSR 或 U1THR 包含有效 1 数据时,TEMT 清零。 0:U1RBR 中没有 UART1 Rx 错误,或 U1FCR0=0 7 Rx FIFO 错 误(RXFE) 1:U1RBR 包含至少一个 UART1 Rx 错误 当一个带有 Rx 错误(例如帧错误、奇偶错误或间隔中断)的字符装入 0 U1RBR 时,U1LSR7 置位。当读取 U1LSR 寄存器并且 UART1 FIFO 中不 再有错误时,U1LSR7 清零。 UART1 Modem 状态寄存器(U1MSR - 0x0E0010018)(仅为 LPC2138) U1MSR 是一个只读寄存器,它提供 modem 输入信号的状态信息。U1MSR3:0 在读取 U1MSR 时清零。 需要注意的是,modem 信号对 UART1 的操作没有直接影响,modem 信号的操作是通过软件来实现的。 表 88 U1MSR UART1 Modem 状态寄存器位描述(U1MSR - 0x0xE0010018)(仅为 LPC2138) 功能 描述 复位值 0:没有检测到 modem 输入 CTS 上的状态变化 0 Delta CTS 1:检测到 modem 输入 CTS 上的状态变化 0 当输入 CTS 状态发生变化时,该位置位。读取 U1MSR 时清零。 0:没有检测到 modem 输入 DSR 上的状态变化 1 Delta DSR 1:检测到 modem 输入 DSR 上的状态变化 当输入 DSR 状态发生变化时,该位置位。读取 U1MSR 时清零。 64 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 U1MSR 功能 描述 复位值 0:没有检测到 modem 输入 RI 上的状态变化 后沿 RI 2 1:检测到 modem 输入 RI 上低到高的跳变 0 当输入 RI 发生低到高的跳变时,该位置位。读取 U1MSR 时清零。 0:没有检测到 modem 输入 DCD 上的状态变化 3 Delta DCD 1:检测到 modem 输入 DCD 上的状态变化 0 当输入 DCD 状态发生变化时,该位置位。读取 U1MSR 时清零。 清零发送状态 4 CTS 5 DSR 6 RI 7 DCD 输入信号 CTS 的补码。在回写模式下,该位连接到 0 U1MCR[1]。 数据设备就绪状态 输入信号 DSR 的补码。在回写模式下,该位连接 0 到 U1MCR[0]。 响铃指示状态 输入信号 RI 的补码。在回写模式下,该位连接到 0 U1MCR[2]。 数据载波检测状态 输入信号 DCD 的补码。在回写模式下,该位连接 0 到 U1MCR[3]。 UART1 高速缓存寄存器(U1SCR - 0xE001001C) 在 UART1 操作时 U1SCR 无效。 用户可自由对该寄存器进行读或写。 不提供中断接口向主机指示 U1SCR 所发生的读或写操作。 表 89 UART1 高速缓存寄存器(U1SCR - 0xE001001C) U1SCR 功能 7:0 - 描述 复位值 一个可读可写的字节 0 UART1 波特率计算 例 1 :使用 UART1baudrate 公式,假设系统的 pclk = 20MHz ,如果 U1DL=130 ( U1DLM=0x00 和 U1DLL=0x82) 、DivAddVal=0 和 MulVal=1,则可得出 UART1 的 UART1baudrate=9615baud。 例 2 : 使 用 UART1baudrate 公 式 , 假 设 系 统的 pclk = 20MHz , 如 果 U1DL=93 ( U1DLM=0x00 和 U1DLL=0x5D) 、DivAddVal=2 和 MulVal=5,则可得出 UART1 的 UART1baudrate=9600baud。 表 90 外围时钟为 20MHz 时的波特率(pclk) 期望的波特率 U1DLM:U1DLL1) 50 25000 75 1) %error2) 期望的波特率 U1DLM:U1DLL1) 0.0000 4800 260 0.1600 16667 0.0020 7200 174 0.2240 110 11364 0.0032 9600 130 0.1600 134.5 9294 0.0034 19200 65 0.1600 150 8333 0.0040 38400 33 1.3760 300 4167 0.0080 56000 22 1.4400 600 2083 0.0160 57600 22 1.3760 1200 1042 0.0320 112000 11 1.4400 1800 694 0.0640 115200 11 1.3760 2000 625 0.0000 224000 6 7.5200 2400 521 0.0320 448000 3 7.5200 3600 347 0.0640 这一行的值是 16 位{DLM:DLL}的等效十进制值。 65 %error2) 广州周立功单片机发展有限公司 Tel: (020)38730976 2) 38730977 Fax: 38730925 http://www.zlgmcu.com 期望波特率和实际波特率的百分比误差。 UART1 发送使能寄存器(U1TER – 0xE0010030) LPC2131/2132/2138 的 UART1 使能实现软件和硬件流控制。当 TxEn=1 时,只要数据可用,UART1 发送器就将持续发送数据。一旦 TxEn 变为 0,UART1 发送器立刻停止工作。 表 91 UART1 发送使能寄存器(U1TER – 0xE0010030) U1TER 功能 描述 复位值 6:0 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 7 TxEn 该位为 1(复位值)时,如果以前的数据都被发送后,写入 THR 0x01 的数据输出到 TxD 管脚。如果一个字符正在发送时该位清零, 则结束这个字符的发送,后面的字符也不再发送,直到该位重新 置位。换言之,该位为 0 将终止 THR 或 Tx FIFO 到发送移位寄 存器的字符传输。当检测到硬件握手 Tx- 允许信号( LPC2138: CTS-其它的任何 GPIO/外部中断线)出错或利用软件握手接收到 一个 XOFF 字符(DC3)时,软件将该位清零。当检测到正确的 Tx-允许信号或接收到 XON 字符(DC1)时,软件又能将该位重 新置位。 结构 UART1 的结构如下方框图所示。 VPB 接口提供 CPU 或主机与 UART1 之间的通信连接。 UART1 接收器模块 U1Rx 监视串行输入线 RxD1 的有效输入。UART1 Rx 移位寄存器(U1RSR)通过 RxD1 接受有效的字符。当 U1RSR 接收到一个有效字符时,它将该字符传送到 UART1 Rx 缓存寄存器 FIFO 中,等待 CPU 或主机通过主机接口进行访问。 UART1 发送器模块 U1Tx 接受 CPU 或主机写入的数据并将数据缓存到 UART1 Tx 保持寄存器 FIFO (U1THR)中。UART1 Tx 移位寄存器(U1TSR)读取 U1THR 中的数据并将数据通过串行输出管脚 TxD1 发 送。 UART1 波特率发生器模块 U1BRG 产生 UART1 Tx 模块所使用的定时。U1BRG 模块时钟源为 VPB 时 。主时钟与 U1DLL 和 U1DLM 寄存器所定义的除数相除得到 Tx 模块使用的时钟。该时钟为 16 钟(pclk) 倍过采样时钟 NBAUDOUT。 Modem 接口包含寄存器 U1MCR 和 U1MSR。该接口负责一个 modem 外设与 UART1 之间的握手。 中断接口包含寄存器 U1IER 和 U1IIR。中断接口接收几个由 U1Tx,U1Rx 和 modem 模块发出的单时 钟宽度的使能信号。 U1Tx 和 U1Rx 的状态信息保存在 U1LSR 中。U1Tx 和 U1Rx 的控制信息保存在 U1LCR 中。 66 广州周立功单片机发展有限公司 Tel: (020)38730976 CTS 38730977 MODEM U1Tx DSR RI Fax: 38730925 U1THR http://www.zlgmcu.com NTXRDY TxD1 U1TSR U1MSR DCD U1BRG DTR U1DLL RTS NBAUDOUT U1MCR U1DLM RCLK U1Rx 中断 U1RBR U1INTR U1RSR NRXRDY RxD1 U1IER U1IIR U1FCR U1LSR U1SCR U1LCR LCR PA[2:0] PSEL PSTB PWRITE PD[7:0] VPB 接口 DDIS AR MR pclk 图 17 UART1 方框图 I2C 接口 I2C0 和 I2C1 11. 特性: 标准的 I2C 总线接口,可配置为主机,从机或主/从机 同时发送的主机之间进行仲裁,避免了总线数据的冲突 可编程时钟,实现了 I2C 传输速率的调节 主机从机之间双向数据传输 串行时钟同步使器件在一条串行总线上实现不同位速率的通信 串行时钟同步可作为握手机制使串行传输挂起和恢复 I2C 总线可用于测试和诊断 应用 与外部标准 I2C 部件接口,例如串行 RAM、LCD、音调发生器等等 描述 I2C 总线的典型配置如图 18 所示。根据方向位(R/W)状态的不同,I2C 总线上存在以下两种类型的数据 传输: 从主发送器向从接收器发送数据。主机发送的第一个字节是从机地址。接下来是数据字节流。从 机每接收一个字节返回一个应答位。 67 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 从发送器向主接收器发送数据。第一个字节(从地址)由主机发送。从机返回一个应答位。接下来 从机向主机发送数据字节。主机每接收一个字节返回一个应答位。接收完最后一个字节,主机返 回一个“非应答位”。主器件产生所有串行时钟脉冲和起始以及停止条件。出现停止条件或重复 的起始条件时传输结束。由于重复的起始条件同时是下一个串行发送的开始,因此 I2C 总线不会 被释放。 LPC2131/2132/2138 提供字节方式的 I2C 接口。它有 4 种操作模式:主发送器模式、主接收器模式、从 发送器模式和从接收器模式。 I2C 接口完全符合整个 I2C 规范,支持断开到 LPC2131/2132/2138 的连接而不影响同一 I2C 总线上的其 它器件(见“快速模式”标题下的“I2C 总线规范”描述,注意微控制器数据手册中的标题为“F/S 模式的 I2C 总线器件的 SDA 和 SCL I/O 特性”的表) 。此功能有时很有用,但它实际上限制了 I2C 接口不使用时相 同管脚的交替使用。当一个微控制器中包含多个 I2C 接口时该功能几乎不用。 上拉 电阻 上拉 电阻 SDA I2C Bus SCL SDA SCL 其它具有I2C接口 的器件 LPC2131/2132/2138 其它具有I2C接口 的器件 图 18 I2C 总线配置 管脚描述 表 92 I2C 管脚描述 管脚名称 类型 描述 SDA0, 1 输入/输出 I2C 串行数据 SCL0, 1 输入/输出 I2C 串行时钟 I2C 操作模式 在一个给定的应用中,I2C 模块可用作主机、从机或同时用作主机和从机。在从机模式中,I2C 硬件查 找其自身的从地址和通用调用地址。如果检测到其中的一个地址,则产生中断请求。如果处理器想成为总 线主机,在进入主机模式前硬件必须等到总线空闲,以便不中止从机操作。如果在主机模式中总线仲裁丢 失,则 I2C 模块立刻切换到从机模式并在相同的串行传输中检测自身的从机地址。 主发送器模式: 在该模式中,数据从主机发送到从机。在进入主发送器模式之前,I2CONSET 必须按照图 19 进行初始 化。必须置位 I2EN 来使能 I2C 功能。如果 AA 位为 0,而另一个器件成为总线的主控器时,I2C 将不会对 任何地址产生应答。也就是说它无法进入从模式。STA,STO 和 SI 必须设置为 0。向 I2CONCLR 寄存器中 的 SIC 位写入 1 可清零 SI。 68 广州周立功单片机发展有限公司 Tel: (020)38730976 I2CONSET 38730977 Fax: 38730925 http://www.zlgmcu.com 7 6 5 4 3 2 1 0 - I2EN STA STO SI AA - - - 1 0 0 0 0 - - 图 19 主模式配置 第一个发送的字节包含接收器件的从地址(7 位)和数据方向位。在此模式下,数据方向位(R/W)应 当为 0 表示执行写操作。因此第一个发送的字节为从地址和写方向位。数据的发送每次为 8 位。每发送完 一个字节,都接收到一个应答位。起始和停止条件用于指示串行传输的起始和结束。 通过软件置位 STA 进入 I2C 主发送器模式。I2C 逻辑在总线空闲后立即发送一个起始条件。当发送完 起始条件后,SI 置位。此时 I2STAT 中的状态代码应当为 08H。该状态代码用于指向一个中断服务程序。 ,然后清零 SI 位。向 I2CONCLR 寄存器中的 SIC 该中断程序将从地址和写方向位装入 I2DAT(数据寄存器) 位写入 1 可清零 SI。 当从地址和 R/W 位已发送且接收到应答位之后,SI 位再次置位,并且对于主模式,可能的状态代码为 18H,20H 或 38H,如果从模式使能(AA=1) ,可能的状态代码为 68H,78H 或 0B0H。每个状态代码对应 的执行动作如表 102 到表 105 所示。 从地址 S R/W 数据 A 数据 A A/A P 传输的数据 (n个字节+应答) "0" - 写 "1" - 读 A = 应答(SDA为低) A = 非应答(SDA为高) S = 起始条件 P = 停止条件 主机到从机 从机到主机 图 20 主发送器模式中的格式 主接收器模式 在主接收器模式中,数据字节接收自从发送器。传输的初始化与主发送器模式相同。发送完起始条件 后,中断服务程序必须将从地址和数据方向位装入 I2C 数据寄存器(I2DAT) ,然后清零 SI 位。在这种情况 下,数据方向位(R/W)应为 1 来指示一个读操作。 当从地址和方向位已发送且接收到应答位之后,SI 置位而状态寄存器将显示状态代码。对于主模式,可能 的状态代码为 40H,48H 或 38H,对于从模式,可能的状态代码为 68H,78H 或 B0H。详细内容请参考表 103。 S 从地址 A R 数据 A 数据 传输的数据 n个字节+应答 "0" - 写 "1" - 读 A = 应答(SDA为低) A = 非应答(SDA为高) S =起始条件 P =停止条件 主机到从机 从机到主机 图 21 主接收器模式的格式 在一个重复的起始条件之后,I2C 可以切换到主发送器模式。 69 A P 广州周立功单片机发展有限公司 Tel: (020)38730976 S R SLA A A 数据 数据 38730977 A Fax: 38730925 RS SLA http://www.zlgmcu.com W A 数据 A P 传输的数据 (n字节+应答) A = 应答(SDA为低) A = 非应答(SDA为高) S = 起始条件 P = 停止条件 SLA = 从地址 主机到从机 从机到主机 图 22 在发送重复起始条件后,主接收器切换到主发送器 从接收器模式 在从接收器模式中,从主发送器接收数据字节。要初始化从接收器模式,用户应向从地址寄存器 (I2ADR)和 I2C 控制置位寄存器(I2CONSET)写入相应的值,如图 23 所示: I2CONSET 7 6 5 4 3 2 1 0 - I2EN STA STO SI AA - - - 1 0 0 0 1 - - 图 23 从模式配置 I2EN 必须置位以使能 I2C 功能。AA 位必须置位以使 I2C 应答自身的从地址或通用调用地址。STA,STO 和 SI 设置为 0。 当 I2ADR 和 I2CONSET 完成初始化时,I2C 一直等待到它被自身的从地址或通用地址(两者后面都紧 跟数据方向位)寻址为止。如果数据方向位为 0(W),I2C 将进入从接收器模式。如果数据方向位为 1(R), I2C 将进入从发送器模式。在接收到地址和方向位后,SI 置位并可从状态寄存器(I2STAT)中读出有效的 状态代码。状态码及操作请参考表 104。 S 从地址 写 A 数据 A 数据 A /A P/RS 传输的数据 n个字节+应答 "0" - 写 "1" - 读 A = 应答(SDA为低) A = 非应答(SDA为高) S =起始条件 P =停止条件 RS = 重复起始条件 主机到从机 从机到主机 图 24 从接收器模式的格式 从发送器模式 第一个字节的接收和处理与从接收器模式相同。但在该模式中,方向位将为 1 指示一个读操作。串行 数据通过 SDA 发送而串行时钟通过 SCL 输入。在串行传输的开始和结束对起始和停止条件进行识别。在 一个给定的应用中,I2C 可以为主模式也可以为从模式。在从模式中,I2C 硬件寻找它自身的从地址和通用 调用地址。如果检测到其中一个地址,将产生中断请求。当微控制器希望成为总线主机时,硬件在进入主 模式前一直等待,直到总线释放,这样就不会中断一个可能的从机动作。如果在主模式中总线仲裁丢失, I2C 接口将立即切换到从模式并能在同一个串行传输中检测自身的从地址。 70 广州周立功单片机发展有限公司 Tel: (020)38730976 S 从地址 A R 38730977 数据 Fax: 38730925 A 数据 http://www.zlgmcu.com A 传输的数据 n 个字节 + 应答 "0" - 写 "1" - 读 A = 应答(SDA为低) A = 非应答(SDA为高) S =起始条件 P =停止条件 主机到从机 从机到主机 图 25 从发送器模式的格式 I2C 的实现和操作 图 26 所示为片内 I2C 总线接口的操作过程,下面分别对每个模块进行了描述。 输入滤波器和输出部分 输入信号与内部时钟同步,短于 3 个时钟的脉冲干扰可以滤除。 I2C 输出是一个特殊的端口,它是为了遵循 I2C 规范而设计的。 71 P 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 8 I2ADR 地址寄存器 输入 滤波器 比较器 输出 阶段 移位寄存器 SDA ACK I2DAT 8 SCL 位计数器/ 仲裁&同步 逻辑 输入 滤波器 输出 阶段 pclk 时序和 控制逻辑 中断 串行时钟 发生器 I2CONSET I2CONCLR I2SCLH I2SCLL APB 总 线 控制寄存器和SCL占空比寄存器 16 状态总线 状态寄存器 状态译码器 I2STAT 图 26 8 I2C 总线串行接口方框图 地址寄存器,I2ADR 当器件编程用作从发送器或接收器时,该寄存器用来存放 I2C 模块响应的 7 位从地址(7 个最高位)。 LSB(GC)用来使能通用调用地址(00H)的识别。 比较器 比较器将接收到的 7 位从地址与其自身的从地址(I2ADR 的 7 个最高位)相比较。它还将首次接收到 的 8 位字节与通用调用地址(00H)相比较。如果任何一者相同,相应的状态位置位,产生中断请求。 72 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 移位寄存器,I2DAT 该 8 位寄存器用来存放要发送的一个字节的串行数据或刚接收到的一个字节。I2DAT 的数据总是从右 向左移动;最先发送 MSB(位 7),接收完一个字节后,接收到的数据的第一位放置到 I2DAT 的 MSB。当 数据正在移出时,总线上的数据同时移入;I2DAT 通常保存的是总线上的最后一个字节。因此,在仲裁丢 失时,主发送器到从接收器的转变和 I2DAT 中数据的更新同时进行。 仲裁和同步逻辑 在主发送器模式中,仲裁逻辑检查每个发送的逻辑 1 作为一个逻辑 1 真正出现在 I2C 总线上。如果总 线的另一个器件撤消了一个逻辑 1 并将 SDA 线拉低,仲裁丢失,则 I2C 模块立刻由主发送器变为从接收器。 I2C 模块继续输出时钟脉冲(在 SCL 上),直至发送完当前的串行字节。 ” 仲裁也可能在主接收器模式中丢失。这种情况只在 I2C 模块正在向总线返回一个“非应答:(逻辑 1) 时出现。当总线的另一个器件将信号拉低时仲裁丢失。由于它只在串行字节结束时出现,因此 I2C 模块不 会再产生时钟脉冲。图 27 所示为仲裁过程。 (1) (1) (2) 1 2 3 (3) SDA 线 SCL 线 4 8 9 ACK 1. 另一个器件发送相同的串行数据。 2. 另一个器件通过拉低 SDA 线撤消了该 I2C 主机发送的一个逻辑 1(虚线) 。仲裁丢失,I2C 进入从接收器模式。 3. 此时 I2C 处于从接收器模式,但仍产生时钟脉冲,直至发送完当前字节。I2C 将不为下个字节的传输产生时钟脉冲。一旦赢 得仲裁,SDA 上的数据传输由新的主机来启动。 图 27 仲裁过程 同步逻辑使得串行时钟发送器与另一个器件的 SCL 线上的时钟脉冲同步。如果 2 个或更多主器件产生 时钟脉冲,则高电平周期取决于产生最短高电平时间的器件;低电平周期取决于产生最长低电平时间的器 件。图 28 所示为同步过程。 SDA 线 (1) (3) (1) SCL 线 (2) 高电平 周期 低电平周期 1. 另一个器件在 I2C 计时完一个完整的高电平时间之前拉低 SCL 线。其它器件决定了高电平(最短)的时间。 2. 另一个器件在 I2C 计时完一个完整的低电平时间并释放 SCL 之后继续拉低 SCL 线。I2C 时钟发生器被迫等待,直至 SCL 变高。其它器件决定了低电平(最长)的时间。 3. SCL 线被释放,时钟发生器开始计时高电平时间。 图 28 串行时钟同步(图 14) 从机可以延长低电平时间来使总线主机减速。也可通过延长低电平时间来实现握手。延长低电平时间 的操作在每位或一个完整字节传输之后执行。I2C 模块将在发送或接收完一个字节且传输完应答位后延长 SCL 低电平时间。设置串行中断标志(SI) ,继续延长低电平时间,直至串行中断标志清除。 73 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 串行时钟发生器 当 I2C 模块在主发送器或主接收器模式时,该可编程时钟脉冲发生器提供 SCL 时钟脉冲。当 I2C 模块 处于从机模式时时钟发生器关闭。I2C 输出时钟频率和占空比可通过 I2C 时钟控制寄存器编程。详见 I2CSCLL 和 I2CSCLH 寄存器的描述。输出时钟脉冲使用编程设定的占空比,除非总线与上面描述的其它 SCL 时钟 源同步。 时序和控制 时序和控制逻辑产生串行字节处理的时序和控制信号。该逻辑模块具有为 I2DAT 中的数据提供移位脉 冲、使能比较器、产生和检测起始和停止条件、接收和发送应答位、控制主机和从机模式、中断请求逻辑 以及监控 I2C 总线状态等功能。 控制寄存器,I2CONSET 和 I2CONCLR I2C 控制寄存器包含用于控制以下 I2C 模块功能的位:串行传输的启动和重启、串行传输的终止、位速 率、地址识别和应答。 I2CONSET 可作为 I2C 控制寄存器的内容被读出。写 I2CONSET 将置位 I2C 控制器寄存器中相应的被 写为 1 的位;相反,写 I2CONCLR 将清除 I2C 控制寄存器中相应的被写为 1 的位。 状态译码器和状态寄存器 状态译码器取出所有内部状态位并将它们压缩成一个 5 位的代码。该代码与每个 I2C 总线状态位一一对应。 5 位代码可用于产生向量地址,以便快速处理不同的服务程序。每个服务程序处理一个特定的总线状态。 如果 I2C 模块的所有四种模式都被使用,则有 26 种可能的总线状态。当串行中断标志置位(通过硬件)并 一直保持时,5 位状态代码锁存到状态寄存器的高 5 位,直至中断标志被软件清除。状态寄存器的低 3 位 总是为 0。如果状态代码用作服务程序的向量,则程序转移到 8 位地址指向的空间。大多数的服务程序不 会超过 8 字节(见本节的软件例程)。 寄存器描述 I2C 接口包含 7 个寄存器,如表 93 所示。 表 93 I2C 寄存器映射 名称 I2CONSET 描述 访问 2 I C 控制置位寄存器。当向该 读/置位 复位值 0x00 2 寄存器的某位写入 1 时,I C I2C0 地址& I2C1 地址& 名称 名称 0xE001C000 0xE005C000 I2C0CONSET I2C1CONSET 0xE001C004 0xE005C004 I2C0STAT I2C1STAT 0xE001C008 0xE005C008 I2C0DAT I2C1DAT 控制寄存器中相应的位置位。 写入 0 时对 I2C 控制寄存器中 相应的位没有影响。 I2STAT I2C 状态寄存器。在 I2C 操作 只读 0xF8 中,该寄存器提供详细的状态 码使软件确定需要进行的下 一步操作。 I2DAT I2C 数据寄存器。在主/从机发 读/写 送模式下,将要发送的数据被 写入该寄存器。在主/从机接 收模式下,接收到的数据可从 该寄存器中读出。 74 0x00 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 名称 描述 访问 2 I C 从地址寄存器。包含从机 I2ADR 读/写 复位值 0x00 2 模式下 I C 接口操作的 7 位从 I2C0 地址& I2C1 地址& 名称 名称 0xE001C00C 0xE005C00C I2C0ADR I2C1ADR 0xE001C010 0xE005C010 I2C0SCLH I2C1SCLH 0xE001C014 0xE005C014 I2C0SCLL I2C1SCLL 0xE001C018 0xE005C018 I2C0CONCLR I2C1CONCLR 地址,不在主机模式下使用。 最低位决定从机是否响应通 用调用地址。 SCH 占空比寄存器高半字。确 I2SCLH 读/写 0x04 2 定 I C 时钟的高电平时间。 SCL 占空比寄存器低半字。确 I2SCLL 读/写 0x04 2 定 I C 时钟的低电平时间。 I2nSCLL 和 I2nSCLH 一起确 定 I2C 主机产生的时钟频率和 从机模式下使用的特定时间。 I2CONCLR I2C 控制清零寄存器。当向该 只清零 NA 2 寄存器中的某位写入 1 时,I C 控制寄存器中相应的位被清 零。写 0 时对 I2C 控制寄存器 中相应的位没有影响。 I2C 控制置位寄存器(I2CONSET:I2C0 – I2C0CONSET: 0xE001C000; I2C1- I2C1CONSET: 0xE005C000) I2CONSET 寄存器控制 I2CON 寄存器中位的置位,进而控制 I2C 接口的操作。向该寄存器的某位写入 1 将使 I2C 控制寄存器中相应的位置位。写 0 无影响。 表 94 I2C 控制置位寄存器(I2CONSET:12C0 – I2C0CONSET: 0xE001C000; I2C1- I2C1CONSET: 0xE005C000) I2CONSET 功能 描述 0:1 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 2 AA 应答标志。见下文。 复位值 NA 0 2 I C 中断标志。见下文。 0 STO 停止标志。见下文。 0 STA 起始标志。见下文。 0 3 SI 4 5 2 6 I2EN I C 接口使能。见下文。 7 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 NA I2EN 为 I2C 接口使能。当该位置位时,使能 I2C 接口。该位通过置位 I2CONCLR 寄存器的 I2ENC 位 来清零。当 I2EN 位为 0 时,I2C 接口被禁止。 当 I2EN 为“0”时,SDA 和 SCL 输入信号被忽略,I2C 模块处于“不可寻址的”的从机状态,且 STO 位被强制为“0”。 I2EN 不能用于暂时释放 I2C 总线,当 I2EN 复位时,I2C 总线状态丢失。应使用 AA 标志来代替。 STA 为起始标志。当 STA=1 时,I2C 接口进入主模式并发送一个起始条件,如果已经处于主模式,则 发送一个重复起始条件。 当 STA=1 并且 I2C 接口还没进入主模式时,I2C 接口将进入主模式,检测总线并在总线空闲时产生一 75 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 个起始条件。如果总线忙,则等待一个停止条件(释放总线)并在延迟半个内部时钟发生器周期后发送一 个起始条件。当 I2C 接口已经处于主模式中并发送或接收了数据时,I2C 接口会发送一个重复的起始条件。 STA 可在任何时候置位,当 I2C 接口处于可寻址的从模式时,STA 也可以置位。 向 I2CONCLR 寄存器中的 STAC 位写入 1 使 STA 位清零。当 STA=0 时,不会产生起始或重复起始条 件。 当 STA 和 STO 都置位时,如果 I2C 接口处于主模式,I2C 接口将向总线发送一个停止条件,然后发送 一个起始条件。如果 I2C 接口处于从模式,则产生一个内部停止条件,但不发送到总线上。 STO 为停止标志。当 STO 为 1 时,在主模式中,向 I2C 总线发送一个停止条件或在从模式中使总线从 错误状态中恢复。当主模式中 STO=1 时,向总线发送停止条件。当总线检测到停止条件时,STO 自动清零。 在从模式中,置位 STO 位可从错误状态中恢复。这种情况下不向总线发送停止条件。硬件的表现就好 像是接收到一个停止条件并切换到不可寻址的从接收器模式。STO 标志由硬件自动清零。 SI 为 I2C 中断标志。当 I2C 状态改变时该位置位。但是,由于进入 F8 状态后中断服务程序无任何事情 需要处理,因此并不置位 SI。 当 SI 置位时,SCL 线串行时钟的低电平时间延长,且串行传输挂起。当 SCL 为高时,SI 标志的状态 不受影响。SI 必须通过软件复位,通过向 I2CONCLR 寄存器的 SIC 位写入 1 来实现。 AA 为声明应答标志。当该位置位时,SCL 线的应答时钟脉冲内出现下面的任意条件之一将产生一个 应答(SDA 上的低电平): 5. 接收到从地址寄存器中的地址。 6. 当 I2ADR 中的通用调用位(GC)置位时,接收到通用调用地址。 7. 当 I2C 接口处于主接收器模式时,接收到一个数据字节。 8. 当 I2C 接口处于可寻址的从接收器模式时,接收到一个数据字节。 向 I2CONCLR 寄存器中的 AAC 位写入 1 会使 AAC 位清零。当 AA 为零时,SCL 线的应答时钟脉冲内 出现下列情况将返回一个非应答信号(SDA 上的高电平): 9. 当 I2C 接口处于主接收器模式时,接收到一个数据字节。 10. 当 I2C 接口处于可寻址的从接收器模式时,接收到一个数据字节。 I2C 控制清零寄存器(I2CONCLR: I2C0 - I2C0CONCLR: 0xE001C018; I2C1-I2C1CONCLR:0xE005C018) I2CONCLR 寄存器控制着 I2CON 寄存器中位的清零,进而控制 I2C 接口的操作。向该寄存器的某位写 入 1 将使 I2C 控制寄存器中相应的位清零。写入 0 无影响。 表 95 I2C 控制清零寄存器(I2CONCLR: I2C0 - I2C0CONCLR: 0xE001C018; I2C1 - I2C1CONCLR: 0xE005C018) I2CONCLR 功能 描述 0:1 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 2 AAC 应答标志清零位。 0 2 复位值 3 SIC I C 中断标志清零位。 0 4 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 5 STAC 起始标志清零位。 6 7 0 2 I2ENC I C 接口禁止位。 保留 0 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 AAC 应答标志清零位。向该位写入 1 清零 I2CONSET 寄存器中的 AA 位。写入 0 无效。 SIC 为 I2C 中断标志清零位。向该位写入 1 清零 I2CONSET 寄存器中的 SI 位。写入 0 无效。 76 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com STAC 为起始标志清零位。向该位写入 1 清零 I2CONSET 寄存器中的 STA 位。写入 0 无效。 I2ENC 为 I2C 接口禁止位。向该位写入 1 清零 I2CONSET 寄存器中的 I2EN 位。写入 0 无效。 I2C 状态寄存器(I2STAT: I2C0-I2C0STAT: 0xE001C004; I2C1-I2C1STAT: 0xE005C004) 每个 I2C 状态寄存器表示相应 I2C 接口的条件。I2C 状态寄存器为只读寄存器。 表 96 I2C 状态寄存器(I2STAT: I2C0-I2C0STAT: 0xE001C004; I2C1-I2C1STAT: 0xE005C004) 描述 I2STAT 2:0 7:3 复位值 这 3 个位总是为 0 0x00 2 这些位给出 I C 接口的真实状态位 0x1F 最低 3 位总是为 0。状态寄存器中的一个字节表示一个状态代码。一共有 26 种可能存在的状态代码。 当代码为 F8H 时,无可用的相关信息,SI 位不会置位。所有其它 25 种状态代码都对应一个已定义的 I2C 状态。当进入其中一种状态时,SI 位将置位。所有状态代码的描述见表 102 到表 105。 I2C 数据寄存器(I2DAT: I2C0-I2C0DAT: 0xE001C008; I2C1-I2C1DAT: 0xE005C008) 该寄存器包含要发送或刚接收的数据。当它没有处理字节的移位时,CPU 可对其进行读写。该寄存器 只能在 SI 置位时访问。在 SI 置位期间,I2DAT 中的数据保持稳定。I2DAT 中的数据移位总是从右至左进 行:第一个发送的位是 MSB(位 7),在接收字节时,第一个接收到的位存放在 I2DAT 的 MSB。 表 97 I2C 数据寄存器(I2DAT: I2C0-I2C0DAT: 0xE001C008; I2C1-I2C1DAT: 0xE005C008) 描述 I2DAT 7:0 复位值 该寄存器保留已经接收,或准备要发送的数据值 0 I2C 从地址寄存器(I2ADR:I2C0-I2C0DAT: 0xE001C00C; I2C1-I2C1DAT: 0xE005C00C) 该寄存器可读可写,但只能在 I2C 设置为从模式时才能使用。在主模式中,该寄存器无效。I2ADR 的 LSB 为通用调用位。当该位置位时,通用调用地址(00h)被识别。 表 98 I2C 从地址寄存器(I2ADR:I2C0-I2C0DAT: 0xE001C00C; I2C1-I2C1DAT: 0xE005C00C) I2ADR 名称 0 GC 7:1 SLADR 描述 复位值 通用调用位 0 2 0 从模式的 I C 器件地址 I2C 时钟控制寄存器 I2C SCL 高电平占空比寄存器(I2SCLH: I2C0-I2C0SCLH: 0xE001C010; I2C1-I2C1SCLH: 0xE005C010) I2C SCL 低电平占空比寄存器(I2SCLL: I2C0-I2C0SCLL: 0xE001C014; I2C1-I2C1SCLL: 0xE005C014) 软件必须通过对 I2SCLH 和 I2SCLL 寄存器进行设置来选择合适的数据速率和占空比。I2SCLH 定义 SCL 高电平所保持的 pclk 周期数,I2SCLL 定义 SCL 低电平的 pclk 周期数。频率由下面的公式得出: 位频率 = fCLK/ (I2SCLH + I2SCLL) 此处为 fCLK 为 pclk 频率。 表 99 I2C SCL 高电平占空比寄存器( I2SCLH: I2C0-I2C0SCLH: 0xE001C010; I2C1-I2C1SCLH: 0xE005C010) 描述 I20SCLH 15:0 复位值 SCL 高电平周期选择计数 0x 0004 77 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com I2C SCL 低电平占空比寄存器( I2SCLL: I2C0-I2C0SCLL: 0xE001C014; I2C1-I2C1SCLL: 表 100 0xE005C014) 描述 I20SCLL 复位值 SCL 低电平周期选择计数 15:0 0x 0004 I2SCLL 和 I2SCLH 的值不一定要相同。通过设定这两个寄存器可得到 SCL 的不同占空比。例如,I2C 总线规范定义数据传输速率为 400KHz 时不同的 I2SCLL 和 I2SCLH 值对应的 SCL 低电平和高电平时间。 但寄存器的值必须确保 I2C 数据通信速率在 0 到 400KHz 之间。每个寄存器的值都必须大于等于 4。表 101 给出了 pclk 频率一定时 I2C 总线速率和 I2SCLL 和 I2SCLH 的值的对应关系。 表 101 I2C 时钟速率的实例 fCCLK(MHz)一定时的位数据速率(KHz) I2SCLL+ I2SCLH 1 5 10 16 20 40 60 80 8 125.0 - - - - - - - 10 100.0 - - - - - - - 25 40.0 200.0 400.0 - - - - - 50 20.0 100.0 200.0 320.0 400.0 - - - 100 10.0 50.0 100.0 160.0 200.0 400.0 - - 160 6.25 31.25 62.5 100.0 125.0 250.0 375.0 - 200 5.0 25.0 50.0 80.0 100.0 200.0 300.0 400.0 400 2.5 12.5 25.0 40.0 50.0 100.0 150.0 200.0 800 1.25 6.25 12.5 20.0 25.0 50.0 75.0 100.0 I2C 操作模式的细节 4 种操作模式: 主发送器 主接收器 从接收器 从发送器 每种操作模式的数据传输如图 29-33 所示。图中含有以下缩写: 缩写 说明 S 起始条件 SLA 7 位从机地址 R 读数据位(SDA 为高电平) W 写数据位(SDA 为低电平) A 应答位(SDA 为低电平) /A 非应答位(SDA 为高电平) Data P 8 位数据字节 停止条件 在图 29-33 中,圆圈用来指示串行中断标志何时被置位。圆圈中的数字表示的是 I2STAT 寄存器中的 状态代码。每当出现这些状态代码时,必须执行服务程序来继续或结束串行传输。由于串行传输被挂起, 这些服务程序并不重要,直至串行中断标志被软件清除。 当进入串行中断程序时,I2STAT 的状态代码用来指向跳转到的相应的服务程序。对于每个状态代码需 要的软件操作以及后面串行传输的详细情况见表 102-106。 78 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 主发送器模式 在主发送器模式下,数据字节发送到从接收器(见图 29)。在进入主发送器模式之前,I2CON 必须进 行如下初始化: 7 6 - I2EN - 1 I2CONSET 4 3 2 STO SI AA 0 0 X 5 0 STA0 - 1 - I2C 的速率也必须在 I2SCLL 和 I2SCLH 寄存器中配置。I2EN 必须设置为逻辑 1 来使能 I2C 模块。如果 AA 位复位,当另一个器件变成总线主机时,I2C 模块将不会应答其自身的从机地址或通用调用地址。换句 话说,如果 AA 位复位,I2C 接口就不能进入从机模式。STA, STO 和 SI 必须复位。 可通过置位 STA 位进入主发送器模式。一旦总线空闲,I2C 逻辑将测试 I2C 总线并产生一个起始条件。 当 START 条件被发送时,串行中断标志(SI)置位,状态寄存器(I2STAT)中的状态代码变为 08H。中断 服务程序利用该状态代码进入相应的状态服务程序,将从机地址和数据方向位(SLA+W)装入 I2DAT。 I2CON 的 SI 位必须先复位,再继续串行传输。 当发送完从机地址和方向位且接收到一个应答位时,串行中断标志(SI)被重新置位,I2STAT 中可能是 一系列不同的状态代码。主机模式下为 18H, 20H 或 38H,从机模式(AA=逻辑 1)为 68H, 78H 或 B0H。每个 状态代码的相应操作详见表 102。在重复起始条件(状态 10H)后,I2C 模块通过将 SLA+R 装入 I2DAT 切 换为主接收器模式。 主接收器模式 在主接收器模式下,接收来自从发送器的数据字节(见图 30)。传输在主发送器模式中初始化。当发 送完起始条件后,中断服务程序必须向 I2DAT 装入 7 位从机地址和数据方向位(SLA+R)。必须先清除 I2CON 中的 SI 位,再继续执行串行传输。 当发送完从机地址和方向位且接收到一个应答位时,串行中断标志(SI)被重新置位,I2STAT 中可能是 一系列不同的状态代码。主机模式下为 40H, 48H 或 38H,从机模式(AA= 1)为 68H, 78H 或 B0H。每个状态 代码的相应操作详见表 103。在重复起始条件(状态 10H)后,I2C 模块通过将 SLA+W 装入 I2DAT 切换为 主接收器模式。 从接收器模式 在从接收器模式下,接收来自主发送器的数据字节(见图 31)。要初始化从接收器模式,I2ADR 和 I2CON 必须被装入以下内容: 7 6 5 4 3 2 1 0 I2ADR GC 自身的从机地址 高 7 位是主机寻址时 I2C 模块响应的地址。如果 LSB(GC)被置位,I2C 模块将响应通用调用地址(00H); 否则忽略通用调用地址。 I2CONSET 2 7 6 5 4 3 2 1 - I2EN STA STO SI AA - - 1 0 0 1 0 2 0 - 2 I C 总线的速率设置不影响从机模式下的 I C 模块。必须置位 I2EN 来使能 I C 模块。AA 位必须置位来 使能 I2C 模块应答其自身从机地址或通用调用地址。STA, STO 和 SI 必须被复位。 当 I2ADR 和 I2CON 完成初始化后,I2C 模块一直等待,直至被从机地址及其后面的数据方向位寻址, 79 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 该数据方向位必须为“0”(W),便于 I2C 模块工作在从接收器模式下。接收完其自身的从机地址和 W 位后, 串行中断标志(SI)置位,可从 I2STAT 中读出一个有效的状态代码。该状态代码用作状态服务程序的向量。 每个状态代码的相应操作见表 104。如果 I2C 模块工作在主机模式下时仲裁丢失,也可进入从接收器模式(见 状态 68H 和 78H)。 如果 AA 位在传输过程中复位,则在接收完下一个数据字节后 I2C 模块将向 SDA 返回一个非应答(逻 辑 1)。当 AA 复位时,I2C 模块不响应其自身的从机地址或通用调用地址。但是,I2C 总线仍被监控,而且, 地址识别可随时通过置位 AA 来恢复。这就意味着 AA 位可用来暂时将 I2C 模块从 I2C 总线上分离出来。 MT 成功发送到 从接收器 S SL A W 08H A Data A 18H P 28H 利用重复起始条件来 启动下次传输 S SL A W 10H 从机地址后接收到非应 答位 A P R 20H 到主接收 模式 entry = MR A 一个数据字节后接收到 非应答 P 30H A or A 在传输从机地址或数据字 节过程中仲裁丢失 A or A 继续其它主机 的传输 38H A 仲裁丢失,用作从机时被寻址 38H 继续其它主机 的传输 68H 78H B0H 到从机模式中相应的状态 主机到从机 从机到主机 Data n A 数据字节及其相应的应答位 该数值(包含在I2STA中)对应一个定义的I2C总线状态 图 29 主发送器模式的格式和状态 80 继续其它主机 的传输 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com MR 成功接收从发 送器的数据 S SL A R 08H A Data 40H A Data 50H A P 58H 利用重复起始条件来启动 下次传输 S SL A R 10H A 从机地址后接收到非应答 P W 48H 到主发送器 模式,entry=TM A or A 在传输从机地址或应答位过程 中仲裁丢失 继续其它主机 的传输 38H 仲裁丢失,用作从机时被寻址 A 继续其它主机 的传输 到从机模式中相应的状态 主机到从机 从机到主机 n A 数据字节及其相应的应答位 该数值(包含在I2DAT中)对应一个定义的I2C总线状态 图 30 主接收器模式的格式和状态 81 继续其它主机 的传输 38H 68H 78H B0H Data A 广州周立功单片机发展有限公司 Tel: (020)38730976 接收自身的从机地址 和一个或多个数据字节 全部产生应答 S 38730977 SL A R A Fax: 38730925 Data 60H A http://www.zlgmcu.com Data 80H 接收最后一个数据字节时 不产生应答 A Po r S 80H A0H A Po r S 88H 用作主机时仲裁丢失 用作从机时被寻址 A 68H 通用调用 接收通用调用地址和一个 或多个数据字节 A 数据 70H A Data 90H 不应答最后一个数据字节 A Po r S 90H A0H A Po r S 98H 用作主机时仲裁丢失, 用作从机时通过通用调用地址 被寻址 A 78H 从主机到从机 从从机到主机 数据 n A 数据字节及其相应的应答位 该数值(包含在I2SAT中)对应一个定义的I2C总线状态 图 31 从接收器模式的格式和状态 82 广州周立功单片机发展有限公司 Tel: (020)38730976 接收自身的从机地址和 一个或多个数据字节 全部产生应答 S 38730977 SL A R Fax: 38730925 A Da ta A A8H 用作主机时仲裁丢失 用作从机时被寻址 http://www.zlgmcu.com Da ta B8H A Po r S C0H A B0H 发送最后一个数据字节。切换成 非寻址的从机(I2CON的AA位="0") A all o nes Po r S C8H 从主机到从机 从从机到主机 Data A n 数据字节及其相应的应答位 该数值(包含在I2STA中)对应一个定义的I2C总线状态 图 32 从发送器模式的格式和状态 从发送器模式 在从发送器模式下,向主接收器发送数据字节(见图 32)。数据传输在从接收器模式下初始化。当 I2ADR 和 I2CON 完成初始化后,I2C 模块一直等待,直至被自身的从机地址及其后面的数据方向位寻址,该数据 方向位必须为“1”I,以便 I2C 模块工作在从发送器模式下。接收完其自身的从机地址和 R 位后,串行中 断标志(SI)置位,可从 I2STAT 中读出一个有效的状态代码。该状态代码用作状态服务程序的向量,每个状 态代码的相应操作见表 105。如果 I2C 模块工作在主机模式下时仲裁丢失,也可进入从发送器模式(见状态 B0H)。 如果 AA 位在传输过程中复位,则 I2C 模块将发送传输的最后一个字节并进入状态 C0H 或 C8H。I2C 模块切换为非寻址的从机模式,如果继续传输它将忽略主接收器。因此主接收器接收所有 1 作为串行数据。 当 AA 复位时,I2C 模块不响应其自身的从机地址或通用调用地址。但是,I2C 总线仍被监控,而且,地址 识别可随时通过置位 AA 来恢复。这就意味着 AA 位可用来暂时将 I2C 模块从 I2C 总线上分离出来。 表 102 主发送器模式 应用软件的响应 状态代码 2 I C 总线硬件状态 (I2STAT) STA STO SI 08H 已发送起始条件 10H 已发送重复起始条件 装入 SLA+W 或 18H 装入 SLA+W I2C 硬件执行的下一个动作 写 I2CON 读/写 I2DAT AA x 0 0 x 将发送 SLA+W,接收 ACK 位 X 0 0 X 同上; 装入 SLA+R x 0 0 x 将发送 SLA+W,I2C 将切换到主接收器模式 已发送 SLA+W; 装入数据字节 0 0 0 x 将发送数据字节,接收 ACK 位 已接收 ACK 无 I2DAT 动作 1 0 0 x 将发送重复起始条件 无 I2DAT 动作 0 1 0 x 将发送停止条件;STO 标志将复位 无 I2DAT 动作 1 1 0 x 将发送停止条件,然后发送起始条件;STO 标志将复位 83 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 应用软件的响应 状态代码 读/写 I2DAT 2 I C 总线硬件状态 写 I2CON S I2C 硬件执行的下一个动作 S (I2STAT) A T T A O SI A 20H 28H 30H 已发送 SLA+W; 装入数据字节 0 0 0 x 将发送数据字节,接收 ACK 位 已接收非 ACK 无 I2DAT 动作 1 0 0 x 将发送重复起始条件 无 I2DAT 动作 0 1 0 x 将发送停止条件;STO 标志将复位 无 I2DAT 动作 1 1 0 x 将发送停止条件,然后发送起始条件;STO 标志将复位 已发送 I2DAT 中的数 装入数据字节 0 0 0 x 将发送数据字节,接收 ACK 位 据字节;已接收 ACK 无 I2DAT 动作 1 0 0 x 将发送重复起始条件 无 I2DAT 动作 0 1 0 x 将发送停止条件;STO 标志将复位 无 I2DAT 动作 1 1 0 x 将发送停止条件,然后发送起始条件;STO 标志将复位 已发送 I2DAT 中的数 装入数据字节 0 0 0 x 将发送数据字节,接收 ACK 位 据 字 节 ; 已 接 收 非 无 I2DAT 动作 1 0 0 x 将发送重复起始条件 无 I2DAT 动作 0 1 0 x 将发送停止条件;STO 标志将复位 无 I2DAT 动作 1 1 0 x 将发送停止条件,然后发送起始条件;STO 标志将复位 在 SLA+R/W 或数据 无 I2DAT 动作 0 0 0 x I2C 总线将被释放;进入不可寻址从模式 字节中丢失仲裁 1 0 0 x 当总线变为空闲时发送起始条件 ACK 38H 无 I2DAT 动作 表 103 主接收器模式 应用软件的响应 状态代码 2 I C 总线硬件状态 (I2STAT) I2C 硬件执行的下一个动作 写 I2CON 读/写 I2DAT STA STO SI AA 08H 已发送起始条件 装入 SLA+R x 0 0 x 将发送 SLA+R,接收 ACK 位 10H 已发送重复起始条件 装入 SLA+R x 0 0 x 同上 装入 SLA+W x 0 0 x 将发送 SLA+W,I2C 将切换到 MST/TRX 模式 在非 ACK 位中丢失 无 I2DAT 动作 0 0 0 x I2C 总线将被释放;I2C 将进入从模式 仲裁 无 I2DAT 动作 1 0 0 x 当总线恢复空闲后发送起始条件 已发送 SLA+R;已接 无 I2DAT 动作 0 0 0 0 将接收数据字节;返回非 ACK 位 收 ACK 无 I2DAT 动作 0 0 0 1 将接收数据字节;返回 ACK 位 已发送 SLA+R;已接 无 I2DAT 动作 1 0 0 x 将发送重复起始条件 收非 ACK 无 I2DAT 动作 0 1 0 x 将发送停止条件;STO 标志将复位 无 I2DAT 动作 1 1 0 x 将发送停止条件,然后发送起始条件;STO 标志将复位 已接收数据字节;已 读数据字节 0 0 0 0 将接收数据字节,返回非 ACK 位 返回 ACK 读数据字节 0 0 0 1 将接收数据字节;返回 ACK 位 已接收数据字节;已 读数据字节 1 0 0 x 将发送重复起始条件 返回非 ACK 读数据字节 0 1 0 x 将发送停止条件;STO 标志将复位 读数据字节 1 1 0 x 将发送停止条件,然后发送起始条件;STO 标志将复位 38H 40H 48H 50H 58H 84 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 104 从接收器模式 应用软件的响应 状态代码 2 I C 总线硬件状态 (I2STAT) STA STO 60H 68H I2C 硬件执行的下一个动作 写 I2CON 读/写 I2DAT SI AA 已接收自身 SLA+W; 无 I2DAT 动作 x 0 0 0 将接收数据字节并返回非 ACK 位 已返回 ACK 无 I2DAT 动作 x 0 0 1 将接收数据字节并返回 ACK 位 主控器 时在 SLA+R 无 I2DAT 动作 x 0 0 0 将接收数据字节并返回非 ACK 位 /W 中丢失仲裁;已接 无 I2DAT 动作 x 0 0 1 将接收数据字节并返回 ACK 位 已接收通用调用地址 无 I2DAT 动作 x 0 0 0 将接收数据字节并返回非 ACK 位 (00H);已返回 ACK 无 I2DAT 动作 x 0 0 1 将接收数据字节并返回 ACK 位 在 无 I2DAT 动作 x 0 0 0 将接收数据字节并返回非 ACK 位 SLA+R/W 中丢失仲 无 I2DAT 动作 x 0 0 1 将接收数据字节并返回 ACK 位 前一次寻址使用自身 读数据字节 x 0 0 0 将接收数据字节并返回非 ACK 位 从地址;已接收数据 读数据字节 x 0 0 1 将接收数据字节并返回 ACK 位 0 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调 收自身 SLA+W,已返 回 ACK 70H 78H 主 控 器 时 裁 ; 已接收通用调用 地址;已返回 ACK 80H 字节;已返回 ACK 88H 前一次寻址使用自身 读数据字节 用地址 SLA 地址;已接收数 据 字 节 ; 已 返 回 非 读数据字节 0 0 0 1 切换到不可寻址 SLV 模式;识别自身 SLA ;如果 I2ADR.0=1,将识别通用调用地址 ACK 读数据字节 1 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调 用地址;当总线空闲后发送起始条件 读数据字节 1 0 0 1 切换到不可寻址 SLV 模式;识别自身 SLA ;如果 I2ADR.0=1,将识别通用调用地址;当总线空闲后发送 起始条件 90H 前一次寻址使用通用 读数据字节 x 0 0 0 将接收数据字节并返回非 ACK 位 调用;已接收数据字 读数据字节 x 0 0 1 将接收数据字节并返回 ACK 位 0 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调 节;已返回 ACK 98H 前一次寻址使用通用 读数据字节 调用;已接收数据字 节;已返回非 ACK 用地址 读数据字节或 0 0 0 1 切换到不可寻址 SLV 模式;识别自身从地址;如果 I2ADR.0=1,将识别通用调用地址 读数据字节或 1 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调 用地址;当总线空闲后发送起始条件 读数据字节 1 0 0 1 切换到不可寻址 SLV 模式;识别自身从地址;如果 I2ADR.0=1,将识别通用调用地址;当总线空闲后发送 起始条件 85 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 应用软件的响应 状态代码 写 I2CON 读/写 I2C 总线硬件状态 (I2STAT) I2DAT ST STA SI O A0H 当使用 SLA/REC 或 无 I2DAT 0 I2C 硬件执行的下一个动作 A 0 A 0 0 用地址 SLA/TRX 静 态 寻 址 动作 时,接收到停止条件 无 或重复的起始条件 I2DAT 0 0 0 1 动作 无 切换到不可寻址 SLV 模式;识别自身从地址;如果 I2ADR.0=1,将识别通用调用地址 I2DAT 1 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调 用地址;当总线空闲后发送起始条件 动作 无 切换到不可寻址 SLV 模式;不识别自身 SLA 或通用调 I2DAT 1 0 0 1 动作 切换到不可寻址 SLV 模式;识别自身从地址;如果 I2ADR.0≡1,将识别通用调用地址;当总线空闲后发送 起始条件 表 105 从发送器模式 应用软件的响应 状态代码 2 I C 总线硬件状态 (I2STAT) STA STO SI A8H 已接收自身 SLA+R ;已返回 装入数据字节或 AA x 0 0 0 将发送最后的数据字节并接收 ACK 位 x 0 0 1 将发送数据字节并接收 ACK 位 主控器时在 SLA+R/W 中丢失 装入数据字节或 x 0 0 0 将发送最后的数据字节并接收 ACK 位 仲裁;已接收自身 SLA+R,已 装入数据字节 x 0 0 1 将发送数据字节并接收 ACK 位 已发送 I2DAT 中数据字节;已 装入数据字节或 x 0 0 0 将发送最后的数据字节并接收 ACK 位 返回 ACK x 0 0 1 将发送数据字节并接收 ACK 位 0 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或 ACK B0H I2C 硬件执行的下一个动作 写 I2CON 读/写 I2DAT 装入数据字节 返回 ACK B8H C0H 装入数据字节 已发送 I2DAT 中数据字节;已 无 I2DAT 动作或 返回非 ACK 通用调用地址 无 I2DAT 动作或 0 0 0 1 切换到不可寻址 SLV 模式;识别自身从地址; 如果 I2ADR.0=1,将识别通用调用地址 无 I2DAT 动作或 1 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或 无 I2DAT 动作 1 0 0 1 切换到不可寻址 SLV 模式;识别自身从地址; 通用调用地址;当总线空闲后发送起始条件 如果 I2ADR.0=1,将识别通用调用地址;当总 线空闲后发送起始条件 C8H 已发送 I2DAT 中最后的数据字 无 I2DAT 动作或 0 0 0 0 节(AA=0);已接收 ACK 切换到不可寻址 SLV 模式;不识别自身 SLA 或 通用调用地址 无 I2DAT 动作或 0 0 0 1 切换到不可寻址 SLV 模式;识别自身从地址; 如果 I2ADR.0=1,将识别通用调用地址 无 I2DAT 动作或 1 0 0 0 切换到不可寻址 SLV 模式;不识别自身 SLA 或 通用调用地址;当总线空闲后发送起始条件 无 I2DAT 动作 1 0 0 1 切换到不可寻址 SLV 模式;识别自身从地址; 如果 I2ADR.0=1,将识别通用调用地址;当总 线空闲后发送起始条件 86 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 各种不同的状态 有 2 个 I2STAT 代码与定义的 I2C 硬件状态不对应(见表 106),下面将对这两种状态进行讨论: I2STAT=F8H: 该状态码表示没有任何可用的相关信息,因为串行中断标志 SI 还没有被置位。这种情况在其它状态和 2 I C 模块还未开始执行串行传输之间出现。 I2STAT=00H: 该状态代码表示一个总线错误在 I2C 串行传输过程中出现。当起始或停止条件出现在格式帧的非法位 置上时产生总线错误。这些非法位置是指在串行传输过程中的地址字节、数据字节或应答位。当外部干扰 影响到内部 I2C 模块信号时也会产生总线错误。总线错误出现时 SI 置位。要从总线错误中恢复,STO 标志 必须置位,SI 必须被清除。这使得 I2C 模块进入“非寻址的”从机模式(已定义的状态)并清除 STO 标志 (I2CON 中的其它位不受影响)。SDA 和 SCL 线被释放(不发送停止条件)。 表 106 各种不同的状态 应用软件的响应 状态代码 2 I C 总线和硬件状态 (I2STAT) STA STO SI F8H 无可用的相关状态信息;SI=0 无 I2DAT 动作 00H 由于非法的起始或停止条件,在 无 I2DAT 动作 I2C 硬件执行的下一个动作 写 I2CON 读/写 I2DAT AA 无 I2DAT 动作 0 1 0 x 等待或执行当前传输 只有 MST 或寻址的 SLV 模式中的内部硬件受影 MST 或选择的从机模式中出现 响。所有情况下,总线被释放、I2C 模块切换到 总线错误。当外部干扰使 I2C 模 非寻址的 SLV 模式。STO 复位。 块进入一个未定义的状态时也 出现 00H 状态。 一些特殊的情况: I2C 硬件可以处理出现在串行传输过程中的以下特殊情况: 两个主机同时启动重复起始条件 在主发送器或主接收器模式下可能产生重复起始条件。如果此时另一个主机同时产生重复起始条件将 出现一种特殊情况(见图 33)。即使出现这种情况,任何一个主机都不会丢失仲裁,因为它们都发送相同 的数据。 如果 I2C 硬件在产生重复起始条件之前在 I2C 总线上检测到重复起始条件,它将释放总线,并且不产 生中断请求。如果另一个主机通过产生停止条件来释放总线,则 I2C 模块将发送一个正常的起始条件(状 态 08H) ,并开始启动重新尝试完整的串行数据传输。 仲裁丢失后的数据传输 仲裁可能在主发送器和主接收器模式中丢失(见图 27)。仲裁丢失通过 I2STAT 中的下列状态代码来指 示:38H, 68H, 78H 和 B0H(见图 29 和图 30)。 如果 I2CON 中的 STA 标志被服务这些状态的程序置位,则当总线再次空闲时,发送起始条件(状态 08H),不受 CPU 的影响,并开始启动重新尝试完整的串行数据传输。 强制访问 I2C 总线 在某些应用中,非控制源有可能造成总线挂起。在这些情况下,干扰、总线的暂时中断或 SDA 和 SCL 之间的暂时短路都会引发问题的产生。 87 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 如果非控制源产生一个多余的起始条件或屏蔽一个停止条件,则 I2C 总线一直处于忙状态。如果 STA 标志被设置且在相应的时间内未访问总线,那么有可能强制访问 I2C 总线。这可通过在 STA 标志仍被设置 时置位 STO 标志来实现。不发送停止条件。I2C 的硬件操作就好像是接收到停止条件一样,可以发送起始 条件。STO 标志通过硬件清除(见图 34)。 SCL 或 SDA 低电平妨碍 I2C 总线的操作 如果 SDA 或 SCL 被一个非控制源拉低,将出现 I2C 总线挂起。如果 SCL 线被总线上的器件妨碍(拉 低) ,则不能进行更进一步的串行传输,并且 I2C 硬件也无法解决此类问题。这时,问题必须由将 SCL 线 拉低的器件来解决。 如果 SDA 线被总线上的另一个器件妨碍(例如从机器件不能位同步),可通过向 SCL 线发送额外的时 钟脉冲来解决(见图 35)。STA 标志置位时 I2C 硬件发送额外的时钟脉冲,但不会产生起始条件,因为 I2C 总线空闲时 SDA 线被拉低。每当在 SCL 线上产生 2 个额外的时钟脉冲后,I2C 硬件就尝试产生一个起始条 件。当 SDA 线最终被释放时,发送正常的起始条件,进入 08H 状态,并继续串行传输。 当 SDA 被妨碍(拉低)时,若出现强制总线访问或重复起始条件,I2C 硬件执行如上所述的操作。每 一种情况下,成功发送起始条件后进入 08H 状态,继续进行正常的串行传输。注意 CPU 不参与此类总线 挂起问题的解决。 总线错误 当起始或停止条件出现在格式帧的非法位置上时出现总线错误。非法位置是指串行传输过程中的地址 字节、数据位或应答位。 当 I2C 硬件作为主机或被寻址的从机处理串行传输时,它仅对总线错误有反应。检测到总线错误时, I2C 模块立即切换成非寻址的从机模式,释放 SDA 和 SCL 线,设置中断标志,并将 00H 装入状态寄存器。 该状态代码可用作状态服务程序的向量,尝试再次终止串行传输或仅从错误条件中恢复,如表 106 所示。 S SL A 08H W A 数据 A 18H 继续其它主机的传输 S 28H P S SL A 08H 其它主机更早发送重复起始条件 重复一次 图 33 两个主机同时发送重复起始条件 时间限制 ST A标志 ST O 标志 SDA 线 SCL 线 起始条件 2 图 34 强制访问忙 I C 总线 88 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com STA 标志 (2) (1) (3) (1) SDA 线 SCL 线 起始条件 1. 发送起始条件失败 2. SDA 线释放 3. 成功发送起始条件;进入 08H 状态。 图 35 从 SDA 低电平造成的总线操作妨碍中恢复 I2C 状态服务程序 本节提供了不同 I2C 状态服务程序必须执行的操作,它们包括: 复位后 I2C 模块的初始化 I2C 中断服务 26 个状态服务程序支持 4 种 I2C 操作模式 初始化 在初始化示例中,I2C 模块可工作在主机和从机模式。每种模式下缓冲区都可用于发送和接收。初始化 程序执行以下功能: I2ADR 装入器件自身的从机地址和通用调用位(GC) I2C 中断使能,设置中断优先级位 从机模式通过同时设置 I2CON 寄存器中的 I2EN 和 AA 位来使能,串行时钟频率(主机模式) 由装入 I2CON 中 CR0 和 CR1 的值来定义。主机程序必须从主程序开始执行。 2 I C 硬件开始在 I2C 总线上检查自身的从机地址和通用调用位。一旦检测到通用调用或自身从地址,请 求中断,相应的状态信息装入 I2STAT。 I2C 中断服务 当进入 I2C 中断时,I2STAT 包含一个状态代码,用来识别要执行的 26 个状态服务中的一个。 状态服务程序 每个状态程序都是 I2C 中断程序的组成部分,分别用来处理 26 种状态。 实际应用中的状态服务 状态服务程序显示了响应 26 个 I2C 状态代码必须执行的典型操作。如果 4 种 I2C 操作模式中的一个或 多个未使用,则未使用的模式的相关的状态服务可被忽略,只要小心处理那些不会出现的状态即可。 在应用中,可能需要在 I2C 操作过程中执行一些超时处理,来限制不起作用的总线或丢失的服务程序。 软件举例 初始化程序 将 I2C 接口初始化用作从机和/或主机的例子。 11. 将自身的从机地址装入 I2ADR,使能通用调用识别(如果需要)。 12. 使能 I2C 中断。 89 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 13. 写 0x44 到 I2CONSET 来置位 I2EN 和 AA 位, 使能从机功能。对于主机功能,写 0x40 到 I2CONSET。 启动主机发送功能 通过建立缓冲区、指针和数据计数器来开始主机发送操作,然后启动。 14. 初始化主机数据计数器。 15. 建立数据将被发送到的从机地址,并且添加写位。 16. 写 0x20 到 I2CONSET 来置位 STA 位。 17. 在主机发送缓冲区内建立要发送的数据。 18. 初始化主机数据计数器来匹配正在发送的信息长度。 19. 退出。 启动主机接收功能 通过建立缓冲区、指针和数据计数器来开始主机接收操作,然后启动。 20. 初始化主机数据计数器。 21. 建立数据将被发送到的从机地址,并且添加读位。 22. 写 0x20 到 I2CONSET 来置位 STA 位。 23. 建立主机接收缓冲区。 24. 初始化主机数据计数器来匹配接收到的信息长度。 25. 退出。 I2C 中断程序 确定 I2C 状态和要使用的状态程序。 26. 从 I2STA 中读出 I2C 的状态。 27. 使用状态值跳转到 26 个可能状态程序中的一个。 非模式指定的状态 状态:00 总线错误。进入非寻址的从机模式并释放总线。 28. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。 29. 写 0x08 到 I2CONCLR 来清除 SI 标志。 30. 退出。 主机状态 状态 08 和状态 10 适用于主发送和主接收模式。R/W 位决定下一个状态是否在主发送模式或主接收模 式中。 状态:08 已发送起始条件。将发送从机地址+R/W 位和接收 ACK 位。 31. 向 I2DAT 写入从机地址和 R/W 位。 32. 写 0x04 到 I2CONSET 来置位 AA 位。 33. 写 0x08 到 I2CONCLR 来清除 SI 标志。 34. 建立主发送模式数据缓冲区。 35. 建立主接收模式数据缓冲区。 36. 初始化主机数据计数器。 90 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 37. 退出。 状态:10 已发送重复起始条件。将发送从机地址+R/W 位和接收 ACK 位。 38. 向 I2DAT 写入从机地址和 R/W 位。 39. 写 0x04 到 I2CONSET 来置位 AA 位。 40. 写 0x08 到 I2CONCLR 来清除 SI 标志。 41. 建立主发送模式数据缓冲区。 42. 建立主接收模式数据缓冲区。 43. 初始化主机数据计数器。 44. 退出。 主机发送器状态 状态:18 前面的状态是状态 8 或状态 10,已发送从机地址+写,已接收 ACK。将发送第一个数据字节和接收 ACK 位。 45. 将主机发送缓冲区的第一个数据字节装入 I2DAT。 46. 写 0x04 到 I2CONSET 来置位 AA 位。 47. 写 0x08 到 I2CONCLR 来清除 SI 标志。 48. 主机发送缓冲区指针加 1。 49. 退出。 状态:20 已发送从机地址+写,已接收到非应答。将发送停止条件。 50. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。 51. 写 0x08 到 I2CONCLR 来清除 SI 标志。 52. 退出。 状态:28 已发送数据,已接收 ACK。如果发送的数据是最后一个数据字节则发送一个停止条件,否则发送下一 个数据字节。 53. 主机数据计数器减 1,如果不是最后一个数据字节就跳到第 5 步。 54. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。 55. 写 0x08 到 I2CONCLR 来清除 SI 标志。 56. 退出。 57. 向 I2DAT 装入主机发送缓冲区的下一个数据字节。 58. 写 0x04 到 I2CONSET 来置位 AA 位。 59. 写 0x08 到 I2CONCLR 来清除 SI 标志。 60. 主机发送缓冲区指针加 1。 61. 退出。 状态:30 已发送数据,已接收到非应答。将发送停止条件。 62. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。 91 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 63. 写 0x08 到 I2CONCLR 来清除 SI 标志。 64. 退出。 状态:38 仲裁在传输从机地址+写或数据过程中已丢失。总线已被释放且进入非寻址的从机模式。当总线再次 空闲时将发送一个新的起始条件。 65. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。 66. 写 0x08 到 I2CONCLR 来清除 SI 标志。 67. 退出。 主机接收器状态 状态:40 前面的状态是状态 08 或状态 10,已发送从机地址+读,已接收到 ACK。将接收数据和返回 ACK。 68. 写 0x04 到 I2CONSET 来置位 AA 位。 69. 写 0x08 到 I2CONCLR 来清除 SI 标志。 70. 退出。 状态:48 已发送从机地址+读,已接收到非应答。将发送停止条件。 71. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。 72. 写 0x08 到 I2CONCLR 来清除 SI 标志。 73. 退出。 状态:50 已接收数据,已返回 ACK。将从 I2DAT 读取数据。将接收其它的数据。如果这是最后一个数据字节, 则将返回非应答,否则将返回 ACK。 74. 读取 I2DAT 中的数据字节,存放到主机接收缓冲区。 75. 主机数据计数器减 1,如果不是最后一个数据字节就跳到第 5 步。 76. 写 0x0C 到 I2CONCLR 来清除 SI 标志和 AA 位。 77. 退出。 78. 写 0x04 到 I2CONSET 来置位 AA 位。 79. 写 0x08 到 I2CONCLR 来清除 SI 标志。 80. 主机接收缓冲区指针加 1。 81. 退出。 状态:58 已接收到数据,已返回非应答。将从 I2DAT 中读取数据和发送停止条件。 82. 读取 I2DAT 中的数据字节,存放到主机接收缓冲区。 83. 写 0x14 到 I2CONSET 来置位 STO 和 AA 位。 84. 写 0x08 到 I2CONCLR 来清除 SI 标志。 85. 退出。 92 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 从机接收器状态 状态:60 已接收到自身从机地址+写和返回 ACK。将接收数据和返回 ACK。 86. 写 0x04 到 I2CONSET 来置位 AA 位。 87. 写 0x08 到 I2CONCLR 来清除 SI 标志。 88. 建立从接收模式数据缓冲区。 89. 初始化从机数据计数器。 90. 退出。 状态:68 用作总线主机时仲裁已在传输从机地址和 R/W 位时丢失。已接收到自身从机地址+写和返回 ACK。 将接收数据和返回 ACK。当总线再次空闲后置位 STA 来重新启动主机模式。 91. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。 92. 写 0x08 到 I2CONCLR 来清除 SI 标志。 93. 建立从接收模式数据缓冲区。 94. 初始化从机数据计数器。 95. 退出。 状态:70 已接收到通用调用位和返回 ACK。将接收数据和返回 ACK。 96. 写 0x04 到 I2CONSET 来置位 AA 位。 97. 写 0x08 到 I2CONCLR 来清除 SI 标志。 98. 建立从接收模式数据缓冲区。 99. 初始化从机数据计数器。 100. 退出。 状态:78 用作总线主机时仲裁已在传输从机地址+R/W 位时丢失。已接收到通用调用和返回 ACK。将接收数据 和返回 ACK。当总线再次空闲后置位 STA 来重新启动主机模式。 101. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。 102. 写 0x08 到 I2CONCLR 来清除 SI 标志。 103. 建立从接收模式数据缓冲区。 104. 初始化从机数据计数器。 105. 退出。 状态:80 以前用自身从机地址寻址。已接收到数据并返回 ACK。将读取其它的数据。 106. 读取 I2DAT 的数据字节,存放到从机接收缓冲区。 107. 从机数据计数器减 1,如果不是最后一个数据字节就跳到第 5 步。 108. 写 0x0C 到 I2CONCLR 来清除 SI 标志和 AA 位。 109. 退出。 110. 写 0x04 到 I2CONSET 来置位 AA 位。 111. 写 0x08 到 I2CONCLR 来清除 SI 标志。 112. 从机接收缓冲区指针加 1。 93 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 113. 退出。 状态:88 以前用自身从机地址寻址。已接收到数据并返回了非应答。接收到的数据将不保存。进入非寻址的从 机模式。 114. 写 0x04 到 I2CONSET 来置位 AA 位。 115. 写 0x08 到 I2CONCLR 来清除 SI 标志。 116. 退出。 状态:90 以前用通用调用寻址。已接收到数据和返回了 ACK。将保存接收到的数据。只有将要接收的第一个数 据字节带有 ACK,其它数据字节都是非应答。 117. 读取 I2DAT 的数据字节,存放到从机接收缓冲区。 118. 写 0x0C 到 I2CONCLR 来清除 SI 标志和 AA 位。 119. 退出。 状态:98 以前用通用调用寻址。已接收到数据和返回非应答。接收到的数据将不保存。进入非寻址的从机模式。 120. 写 0x04 到 I2CONSET 来置位 AA 位。 121. 写 0x08 到 I2CONCLR 来清除 SI 标志。 122. 退出。 状态:A0 接收到停止条件或重复起始条件,但仍作为从机寻址。将不保存数据。进入非寻址的从机模式。 123. 写 0x04 到 I2CONSET 来置位 AA 位。 124. 写 0x08 到 I2CONCLR 来清除 SI 标志。 125. 退出。 从机发送器状态 状态:A8 已接收到自身从机地址+读和返回 ACK。将发送数据和接收 ACK 位。 126. 将从机发送缓冲区的第一个数据字节装入 I2DAT。 127. 写 0x04 到 I2CONSET 来置位 AA 位。 128. 写 0x08 到 I2CONCLR 来清除 SI 标志。 129. 建立从发送模式数据缓冲区。 130. 从机发送缓冲区指针加 1。 131. 退出。 状态:B0 用作总线主机时仲裁已在传输从机地址和 R/W 位时丢失。已接收到自身从机地址+读和返回 ACK。 将发送数据和接收 ACK 位。当总线再次空闲后置位 STA 来重新启动主机模式。 132. 将从机发送缓冲区的第一个数据字节装入 I2DAT。 133. 写 0x24 到 I2CONSET 来置位 STA 和 AA 位。 134. 写 0x08 到 I2CONCLR 来清除 SI 标志。 94 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 135. 建立从发送模式数据缓冲区。 136. 从机发送缓冲区指针加 1。 137. 退出。 状态:B8 已发送数据和接收到 ACK。将发送数据和接收 ACK 位。 138. 将从机发送缓冲区的数据字节装入 I2DAT。 139. 写 0x04 到 I2CONSET 来置位 AA 位。 140. 写 0x08 到 I2CONCLR 来清除 SI 标志。 141. 从机发送缓冲区指针加 1。 142. 退出。 状态:C0 已发送数据,已接收到非应答。进入非寻址的从机模式。 143. 写 0x04 到 I2CONSET 来置位 AA 位。 144. 写 0x08 到 I2CONCLR 来清除 SI 标志。 145. 退出。 状态:C8 已发送最后一个数据字节和接收到 ACK。进入非寻址的从机模式。 146. 写 0x04 到 I2CONSET 来置位 AA 位。 147. 写 0x08 到 I2CONCLR 来清除 SI 标志。 148. 退出。 SPI 接口(SPI0) 12. 特性 单个完整和独立的 SPI 控制器 遵循串行外设接口(SPI)规范 同步、串行、全双工通信 组合的 SPI 主机和从机 最大数据位速率为输入时钟速率的 1/8 描述 SPI 概述 SPI0 是一个全双工的串行接口。它们设计成可以处理在一个给定总线上多个互连的主机和从机。在一 定数据传输过程中,接口上只能有一个主机和一个从机能够通信。在一次数据传输中,主机总是向从机发 送一个字节数据,而从机也总是向主机发送一个字节数据。 SPI 数据传输 图 36 所示为 SPI 的 4 种不同数据传输格式的时序。该时序图描述的是 8 位数据的传输。需要注意的是, 该时序图分成了 3 个水平的部分。第一部分描述 SCK 和 SSEL 信号。第二部分描述了 CPHA=0 时的 MOSI 和 MISO 信号。第三部分描述了 CPHA=1 时的 MOSI 和 MISO 信号。 在时序图的第一部分需要注意两点。第一,时序图包含了 CPOL 设置为 0 和 1 的情况。第二,SSEL 95 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 信号的激活和未激活。当 CPHA=1 时,SSEL 信号在数据传输之间时总是保持未激活状态。当 CPHA=0 时 则不能保证这一点(信号有可能保持激活状态)。 SCK (CPOL = 0) SCK (CPOL = 1) SSEL CPHA = 0 Cycle # CPHA = 0 1 2 3 4 5 6 7 8 MOSI (CPHA = 0) Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 MISO (CPHA = 0) Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 CPHA = 1 Cycle # CPHA = 1 1 2 3 4 5 6 7 8 MOSI (CPHA = 1) Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 MISO (CPHA = 1) Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 图 36 SPI 数据传输格式(CPHA=0 和 CPHA=1) 数据和时钟的相位关系在表 107 中描述。该表汇集了下面情况下 CPOL 和 CPHA 的每一种设定: 当驱动第一个数据位时 当驱动所有其它数据位时 当采样数据时 表 107 SPI 数据和时钟的相位关系 CPOL 和 CPHA 的设定 驱动的第一个数据 驱动的其它数据 采样的数据 CPOL=0, CPHA=0 在第一个 SCK 上升沿之前 SCK 下降沿 SCK 上升沿 CPOL=0, CPHA=1 第一个 SCK 上升沿 SCK 上升沿 SCK 下降沿 CPOL=1, CPHA=0 在第一个 SCK 下降沿之前 SCK 上升沿 SCK 下降沿 CPOL=1, CPHA=1 第一个 SCK 下降沿 SCK 下降沿 SCK 上升沿 8 位传输起始和停止时间的定义取决于器件为主机还是从机,以及 CPHA 变量的设定。 当器件为主机时,传输的起始由包含发送数据字节的主机来指示。此时,主机可激活时钟并开始传输。 当传输的最后一个时钟周期结束时,传输结束。 当器件为从机并且 CPHA=0 时,传输在 SSEL 信号激活时开始,并在 SSEL 变为高电平时结束。当器 件为从机且 CPHA=1 时,如果该器件被选择,传输从第一个时钟沿开始,并在数据采样的最后一个时钟沿 结束。 SPI 外设描述 概述 有 4 个寄存器控制 SPI 外设。将在寄存器描述一节中详细讲述。 96 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com SPI 控制寄存器包含一些可编程位来控制 SPI 模块的功能。该寄存器必须在数据传输之前进行设定。 SPI 状态寄存器包含只读位,用于监视 SPI 接口的状态,包括一般性功能和异常状况。该寄存器的主要 用途是检测数据传输的完成,这通过 SPIF 位来实现。其它位用于指示异常状况。异常情况将在后面描述。 SPI 数据寄存器用于提供发送和接收的数据字节。串行数据实际的发送和接收通过 SPI 模块逻辑的内部 移位寄存器来实现。在发送时向 SPI 数据寄存器写入数据。数据寄存器和内部移位寄存器之间没有缓冲区。 写数据寄存器会使数据直接进入内部移位寄存器。因此数据只能在没有执行数据发送时写入该寄存器。读 数据带有缓冲区。当传输结束时,接收到的数据转移到一个单字节的数据缓冲区,下次传输时将其读出。 读 SPI 数据寄存器将返回读数据缓冲区的值。 当 SPI 模块处于主模式时,SPI 时钟计数器寄存器用于控制时钟速率。该寄存器必须在数据传输之前设 定。当 SPI 模块处于从模式时,该寄存器无效。 SPI 所使用的 I/O 口为标准 CMOS I/O 口。设计上没有实现开漏 SPI 选项。当器件设置为从机时,它的 I/O 口只有在被有效的 SSEL 信号选择时才有效。 主机操作 下面的步骤描述了 SPI 设置为主机时如何处理数据传输。该处理假设任何之前的数据传输已经结束。 1. 将 SPI 时钟计数寄存器设置为所需要的值。 2. 将 SPI 控制寄存器设置为所需要的设定。 3. 将要发送的数据写入 SPI 数据寄存器。此写操作启动 SPI 数据传输。 4. 等待 SPI 状态寄存器中的 SPIF 位置位。SPIF 位将在 SPI 数据传输的最后一个周期之后置位。 5. 读取 SPI 状态寄存器。 6. 从 SPI 数据寄存器中读出接收到的数据(可选)。 7. 如果有更多数据需要发送,则跳到第 3 步。 注:读或写 SPI 数据寄存器用来清零 SPIF 状态位。因此,如果不执行可选的 SPI 数据寄存器读操作, 则需要执行该寄存器的写操作以清零 SPIF 状态位。 从机操作 下面的步骤描述了 SPI 设置为从机时如何处理数据传输。该处理假设任何之前的数据传输已经结束。 要求驱动 SPI 逻辑的系统时钟速度至少 8 倍于 SPI。 1. 将 SPI 控制寄存器设置为所需要的设定。 2. 将要发送的数据写入 SPI 数据寄存器(可选)。注意这只能在从 SPI 传输没有进行时执行。 3. 等待 SPI 状态寄存器中的 SPIF 位置位。SPIF 位将在 SPI 数据传输的最后一个采样时钟沿后置位。 4. 读取 SPI 状态寄存器。 5. 从 SPI 数据寄存器中读出接收到的数据(可选)。 6. 如果有更多数据需要发送,则跳到第 2 步。 注:读或写 SPI 数据寄存器用来清零 SPIF 状态位。因此至少需要执行一个该寄存器的读或写操作来清 零 SPIF 状态位。 异常状况 读溢出-当 SPI 模块内部读缓冲区包含没有读出的数据,而新的传输已经完成,那么这时候就会发生 读溢出。SPIF 位置位表示读缓冲区包含了有效数据。当一次传输结束时,SPI 模块需要将接收到的数据移 到读缓冲区。如果 SPIF 位置位 (读缓冲区已满),新接收到的数据将会丢失,而状态寄存器的读溢出 (ROVR) 位将置位。 写冲突-我们在前面提到过,在 SPI 总线接口与内部移位寄存器之间没有写缓冲区。这样在 SPI 数据 传输过程当中不应向 SPI 数据寄存器写入数据。不能向 SPI 数据寄存器写入数据的时间从传输启动时开始, 97 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 直到 SPIF 置位时读取状态寄存器为止。如果在这段时间内写 SPI 数据寄存器,写入的数据将会丢失,状态 寄存器中的写冲突位(WCOL)置位。 模式错误-SSEL 信号在 SPI 模块为主机时必须无效。当 SPI 模块为主机时,如果 SSEL 信号被激活, 表示有另外一个主机将该器件选择为从机。这种状态称为模式错误。当检测到一个模式错误时,状态寄存 器的模式错误位(MODF)位置位,SPI 信号驱动器关闭,而 SPI 模式转换为从模式。 从机中止-如果 SSEL 信号在传输结束之前变为高电平,从传输将被认为中止。此时,正在处理的发 送或接收数据都将丢失,状态寄存器的从机中止(ABRT)位置位。 管脚描述 表 108 SPI 管脚描述 管脚名称 类型 输入/输 SCK0 出 描述 串行时钟 用于同步 SPI 接口间数据传输的时钟信号。该时钟总是由主机驱动并 且从机接收。时钟可编程为高有效或低有效。它只在数据传输时才被激活,其它 任何时候都处于非激活状态或三态。 从机选择 SPI 从机选择信号是一个低有效信号,用于指示被选择参与数据传输 的从机。每个从机都有各自特定的从机选择输入信号。在数据处理之前,SSEL 必须为低电平并在整个处理过程中保持低电平。如果在数据传输中 SSEL 信号变 为高电平,传输将被中止。这种情况下,从机返回到空闲状态并将任何接收到的 输入 SSEL0 数据丢弃。对于这样的异常没有其它的指示。该信号不直接由主机驱动。可通过 软件使用一个通用 I/O 口来驱动。 当 SPI0 接口仅用于主机模式下时,LPC2131/2132/2138(不像早期的 Philips ARM 器件)的 SSEL0 脚可用于不同的功能。例如,SSEL0 管脚可配置为一个输出数 字 GPIO 脚并用于选择一个 SPI0 从机。 输入/输 MISO0 MOSI0 出 主入从出 MISO 信号是一个单向的信号,它将数据从从机传输到主机。当器件 为从机时,串行数据从该端口输出。当器件为主机时,串行数据从该端口输入。 当从机没有被选择时,将该信号驱动为高阻态。 输入/输 主出从入 MOSI 信号是一个单向的信号,它将数据从主机传输到从机。当器件 出 为主机时,串行数据从该端口输出。当器件为从机时,串行数据从该端口输入。 寄存器描述 SPI 包含 5 个寄存器,见表 109。所有寄存器都可以字节、半字和字的形式访问。 表 109 SPI 寄存器映射 描述 名称 SPCR SPSR SPI 控制寄存器。该寄存器控制 SPI 的操作。 SPI 状态寄存器。该寄存器显示 SPI 的状态。 访问 复位值* R/W 0 只读 0 SPI 数据寄存器。该双向寄存器为 SPI 提供发送和接收的数据。 SPDR 发送数据通过写该寄存器提供。SPI 接收的数据可从该寄存器读 出。 98 R/W 0 SPI0 地址&名称 0xE0020000 S0SPCR 0xE0020004 S0SPSR 0xE0020008 S0SPDR 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 描述 名称 SPCCR SPINT SPI 时钟计数寄存器。 该寄存器控制主机 SCK 的频率。 SPI 中断标志寄存器。该寄存器包含 SPI 接口的中断标志。 访问 复位值* R/W 0 R/W 0 SPI0 地址&名称 0xE002000C S0SPCCR 0xE002001C S0SPINT * 复位值仅指已使用位中保存的数据,不包括保留位的内容。 SPI 控制寄存器(S0SPCR - 0xE0020000) SPCR 寄存器根据每个配置位的设定来控制 SPI 的操作。 表 110 SPI 控制寄存器(S0SPCR - 0xE0020000) SPCR 功能 2:0 保留 描述 复位值 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 NA 时钟相位控制决定 SPI 传输时数据和时钟的关系并控制从机传输的起始 和结束。当该位为 1 时,数据在 SCK 的第二个时钟沿采样。当 SSEL 信 3 CPHA 号激活时,传输从第一个时钟沿开始并在最后一个采样时钟沿结束。 0 当该位为 0 时,数据在 SCK 的第一个时钟沿采样。传输从 SSEL 信号激 活时开始,并在 SSEL 信号无效时结束。 4 CPOL 时钟极性控制。当该位为 1 时,SCK 为低有效。为 0 时,SCK 为高有效。 0 5 MSTR 主模式选择。为 1 时,SPI 处于主模式。为 0 时,SPI 处于从模式。 0 6 LSBF 7 SPIE LSBF 用来控制传输的每个字节的移动方向。为 1 时,SPI 数据传输 LSB 0 (位 0)在先。为 0 时,SPI 数据传输 MSB (位 7)在先。 SPI 中断使能。为 1 时,每次 SPIF 或 MODF 置位时都会产生硬件中断。 0 为 0 时,SPI 中断被禁止。 SPI 状态寄存器(S0SPSR - 0xE0020004) SPSR 寄存器根据配置位的设定来控制 SPI 的操作。 表 111 SPI 状态寄存器(S0SPSR - 0xE0020004) SPSR 功能 2:0 保留 3 ABRT 4 MODF 5 ROVR 6 WCOL 描述 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 从机中止。该位为 1 时表示发生了从机中止。当读取该寄存器时,该位清零。 模式错误。为 1 时表示发生了模式错误。先通过读取该寄存器清零 MODF 位, 再写 SPI 控制寄存器。 读溢出。为 1 时表示发生了读溢出。当读取该寄存器时,该位清零。 写冲突。为 1 时表示发生了写冲突。先通过读取该寄存器清零 WCOL 位,再 访问 SPI 数据寄存器。 复位值 NA 0 0 0 0 SPI 传输完成标志。为 1 时表示一次 SPI 数据传输完成。在主模式下,该位 在传输的最后一个周期置位。在从机模式下,该位在 SCK 的最后一个数据采 7 SPIF 样边沿置位。当第一次读取该寄存器时,该位清零。然后才能访问 SPI 数据 寄存器。 注:SPIF 不是 SPI 中断标志。中断标志位于 SPINT 寄存器中。 99 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com SPI 数据寄存器(S0SPDR - 0xE0020008) 双向数据寄存器为 SPI 提供数据的发送和接收。发送数据通过将数据写入该寄存器来实现。SPI 接收的 数据可从该寄存器中读出。处于主模式时,写该寄存器将启动 SPI 数据传输。从数据传输开始到 SPIF 状态 位置位并且还没有读取状态寄存器的这段时间内不能对该寄存器执行写操作。 表 112 SPI 数据寄存器(S0SPDR - 0xE0020008) SPDR 功能 7:0 数据 描述 SPI 双向数据口 复位值 0 SPI 时钟计数寄存器(S0SPCCR - 0xE002000C) 该寄存器控制主机 SCK 的频率。寄存器指示构成一个 SPI 时钟的 pclk 周期的数据。该寄存器的值必须 为偶数。因此 bit0 必须为 0。该寄存器的值还必须大于等于 8。如果寄存器的值不符合上述条件,可能导致 产生不可预测的动作。 表 113 SPI 时钟计数寄存器(S0SPCCR - 0xE002000C) SPCCR 功能 7:0 计数值 描述 SPI 时钟计数值设定 复位值 0 SPI 速率可以这样进行计算:PCLK 速率/SPCCR 值。pclk 速率为 CCLK/VPB 除数,由 VPBDIV 寄存 器的内容决定。 SPI 中断寄存器(S0SPINT - 0xE002001C) 该寄存器包含 SPI 接口的中断标志。 表 114 SPI 中断寄存器(S0SPINT - 0xE002001C) SPINT 功能 描述 复位值 SPI 中断标志。由 SPI 接口置位以产生中断。向该位写入 1 清零。 0 SPI 中断 注:当 SPIE=1 并且 SPIF 和 WCOL 位中至少有一位为 1 时该位置位。 但是,只有当 SPI 中断位置位并且 SPI 中断在 VIC 中被使能,SPI 中断 0 才能由中断处理软件处理。 7:1 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 结构 SPI0 接口中的 SPI 方框图见图 37。 100 NA 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com MOSI_in MOSI_out MISO_in MISO_out SPI 移位寄存器 SPI 时钟发生器 & 检测器 SPI 中断 SCK_in SCK_out SS_in SPI 寄存器接口 VPB 总线 SPI 状态控制 SCK_out_en MOSI_out_en MISO_out_en 输出使能逻辑 图 37 SPI 方框图 13. SSP 控制器(SPI1) 特性 兼容 Motorola SPI、4 线 TI SSI 和 National 半导体的 Microwire 总线 同步串行通信 主机或从机操作 8 帧收发 FIFO 每帧 4~16 位 描述 SSP 是一个同步串行接口控制器,可控制 SPI、4 线 SSI 或 Microwire 总线的操作。它可处理总线上多 个主机和从机的相互作用。在一定数据传输过程中,总线上只能有一个主机和一个从机进行通信。数据传 输原则上是全双工的,4~16 位帧的数据由主机发送到从机或由从机发送到主机。但实际上,大多数情况 下只有一个方向上的数据流包含有意义的数据。 管脚描述 表 115 SSP 管脚描述 管脚 类 接口管脚名称/功能 名称 型 SPI SSI Microwire SCK1 I/O SCK CLK SK 管脚描述 串行时钟。SCK/CLK/SK 是用来同步数据传输的时钟 信号。它由主机驱动,从机接收。当使用 SPI 接口时, 时钟可编程为高有效或低有效,否则,时钟总是高有 效。SCK1 的状态只能在数据传输过程中改变,在任何 其它时间里,SSP 使其保持无效状态或不驱动它(使其 处于高阻态)。 101 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 管脚 类 接口管脚名称/功能 管脚描述 名称 型 SPI SSI Microwire SSEL1 I/O SSEL FS CS 从机选择/帧同步/芯片选择。当 SSP 是总线主机时,它 在串行数据启动前或串行数据传输终止后立刻驱动该 信号来指示一次所选总线和模式的合适数据传输。当 SSP 是总线从机时,该信号用来根据使用的通信协议来 限制主机数据的去向。当只有一个总线主机和一个总 线从机时,主机的帧同步或从机选择信号直接与从机 相应的输入相连。当总线上有多个从机时,必须要进 一步限制这些从机的帧选择/从机选择输入,以防有一 次传输有多个从机响应。 MISO1 I/O MISO DR(M) SI(M) 主机输入从机输出。MISO 信号使串行数据从从机传输 DX(S) SO(S) 到主机。当 SSP 是从机时,串行数据从该信号输出。 当 SSP 是主机时,该信号输出串行数据的时钟。当 SSP 是从机且未被 SSEL 选择时,它将不驱动该信号(使其 处于高阻态)。 MOSI1 I/O MOSI DX(M) SO(M) 主机输出从机输入。MOSI 信号使串行数据从主机传输 DR(S) SI(S) 到从机。当 SSP 是主机时,串行数据从该信号输出。 当 SSP 是从机时,该信号输出串行数据的时钟。 Texas 仪器公司的同步串行数据帧格式 图 38 给出来 SSP 模块支持的 4 线 Texas 仪器公司同步串行数据帧的格式。 CLK FS DX/DR MSB LSB 4 to 16 bits a) 单帧传输 CLK FS DX/DR MSB LSB MSB 4 to 16 bits LSB 4 to 16 bits b) 连续/连续两帧的传输 图 38 Texas 仪器公司同步串行数据帧的格式: a) 单帧传输 b) 连续/连续两帧的传输 假设器件在该模式下配置用作主机,当 SSP 处于空闲模式时,CLK 和 FS 强制为低,发送数据线 DX 102 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 为三态。只要发送 FIFO 的底端入口包含数据,FS 将在一个 CLK 周期内保持高电平。被发送的数据从发送 FIFO 传输到发送逻辑的串行移位寄存器。在 CLK 的下个上升沿,4~16 位数据帧的 MSB 从 DX 管脚移出。 同样地,接收到的 MSB 从片外串行从器件的 DR 管脚移入。 然后,SSP 和片外串行从器件在每个 CLK 的下降沿的控制下将每一个数据位送入相应的串行移位器。 LSB 被锁存后,接收到的数据在 CLK 的首个上升沿从串行移位器传递到接收 FIFO。 SPI 帧格式 SPI 接口是一个 4 线接口,它的 SSEL 信号用作从机选择。SPI 格式的主要特性是 SCK 信号的无效状 态和相位可通过 SSPCR0 控制寄存器的 CPOL 位和 CPHA 位来编程设定。 时钟极性(CPOL) 当 CPOL 时钟极性控制位为 0 时,它将在 SCK 管脚上产生一个稳定的低电平。如果 CPOL 时钟极性控 制位为 1,不发生数据传输时 CLK 管脚上将出现一个稳定的高电平。 时钟相位(CPHA) CPHA 控制位用来选择捕获数据的时钟沿,这个边沿的状态允许改变。它将对第一个数据捕获沿出现 前由于允许或不允许的时钟跳变的出现而发送的第一个位产生最重大的影响。当 CPHA 相位控制位为 0 时, 数据在第 1 个时钟沿跳变时被捕获。如果 CPHA 相位控制位为 1,数据在第 2 个时钟沿跳变时被捕获。 CPOL=0, CPHA=0 时的 SPI 格式 CPOL=0,CPHA=0 时 SPI 格式的单帧传输和连续传输信号时序如图 39 所示。 SCK SS MOSI MISO MSB LSB MSB LSB Q 4 to 16 bits a) CPOL=0和CPHA=0时Motorola 的SPI帧格式(单帧传输) SCK SS MOSI MISO MSB LSB MSB LSB MSB Q LSB MSB LSB 4 to 16 bits 4 to 16 bits b) CPOL=0和CPHA=0时Motorola的SPI帧格式(连续传输) 图 39 CPOL=0 和 CPHA=0 时的 SPI 格式 (a) 单帧 和 b) 连续传输) 这种配置在空闲期间: CLK 信号强制为低 SSEL 强制为高 发送 MOSI/MISO 处于高阻态 103 Q 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据。这 就使得从机数据使能到主机的 MISO 输入线上。主机的 MOSI 被使能。 1/2 个 SCK 周期后,有效主机数据被传输到 MOSI 管脚。由于主机和从机数据都被设置,再过 1/2 个 SCK 周期后 SCK 主机时钟管脚将变高。 此时,数据在 SCK 信号的上升沿被捕获,保持到 SCK 的下降沿。 在发送单个字时,当数据字的每一位发送完后,最后一位被捕获后的一个 SCK 周期内,SSEL 返回到 空闲的高电平状态。 但是,在连续顺序的发送过程中,在每个数据字传输之间 SSEL 信号必须为高。这是因为当 CPHA 位 为逻辑 0 时,从机选择位冻结了串行外围寄存器中的数据,不允许改变。因此,在每次数据传输之间主器 件必须拉高从器件的 SSEL 管脚来使能串行外设数据的写操作。当连续传输结束后,最后一位被捕获后一 个 SCK 周期内,SSEL 返回到空闲状态。 CPOL=0,CPHA=1 时的 SPI 格式 CPOL=0,CPHA=1 时 SPI 格式的传输信号时序如图 40 所示,它包括单帧传输和连续传输两种方式。 SCK SS MOSI MISO Q MSB LSB MSB LSB Q 4 to 16 bits a) CPOL=0和CPHA=1时Motorola的SPI帧格式(单帧传输) 图 40 CPOL=0 和 CPHA=1 时的 SPI 帧格式 这种配置在空闲期间: SCK 信号强制为低 SSEL 强制为高 发送 MOSI/MISO 管脚处于高阻态 如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据。主 机的 MOSI 管脚使能。再过 1/2 个 SCK 周期,主机和从机的有效数据都被使能输出到各自的发送线上。同 时,SCK 出现上升沿跳变。 然后,数据在 SCK 信号的下降沿被捕获并保持到 SCK 信号的上升沿。 在单个字的传输过程中,当所有位传输结束后,最后一位被捕获后一个 SCK 周期内,SSEL 线返回到 空闲的高电平状态。 对于连续的顺序传输,SSEL 在两个连续的数据字传输之间保持低电平,终止传输的方法与单个字传输 相同。 CPOL=1, CPHA=0 时的 SPI 格式 CPOL=1,CPHA=0 时 SPI 格式的单帧和连续传输信号时序如图 41 所示。 104 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com SCK SS M O SI M SB M IS O LSB MSB LSB Q 4 to 1 6 b i ts a) CPOL=1和CPHA=0时Motorola的SPI帧格式(单帧传输) SCK SS M SB M O SI M IS O LSB M SB LSB MSB Q LSB M SB LSB Q 4 to 1 6 b i ts 4 to 1 6 b i ts b) CPOL=1和CPHA=0时Motorola的SPI帧格式(连续传输) 图 41 CPOL=1 和 CPHA=0 时的 SPI 帧格式(a)单帧和 b) 连续传输) 这种配置在空闲期间: SCK 信号强制为高 SSEL 强制为高 发送 MOSI/MISO 管脚处于高阻态 如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据,使 得从机数据立即传输到主机的 MISO 线上。主机的 MOSI 管脚被使能。 1/2 个 SCK 周期后,有效主机数据被传输到 MOSI。由于主机和从机数据都被设置,再过 1/2 个 SCK 周期后 SCK 主机时钟管脚将变高。这就意味着数据在 SCK 信号的下降沿被捕获,保持到 SCK 的上升沿。 在发送单个字时,当数据字的每一位发送完后,最后一位被捕获后一个 SCK 周期内,SSEL 返回到空 闲的高电平状态。 但是,在连续顺序的发送过程中,在每个数据字传输之间 SSEL 信号必须为高。这是因为当 CPHA 位 为逻辑 0 时,从机选择位冻结了串行外围寄存器中的数据,不允许改变。因此,在每次数据传输之间主器 件必须拉高从器件的 SSEL 管脚来使能串行外设数据的写操作。当连续传输结束后,最后一位被捕获后一 个 SCK 周期内,SSEL 返回到空闲状态。 CPOL=1,CPHA=1 时的 SPI 格式 CPOL=1,CPHA=1 时 SPI 格式的传输信号时序如图 42 所示,它包含单帧传输和连续传输两种方式。 SCK SS MOSI MISO Q MSB LSB MSB LSB Q 4 to 16 bits a) CPOL=1和CPHA=1时Motorola的SPI帧格式(单帧传输) 图 42 CPOL=1 和 CPHA=1 时的 SPI 帧格式 105 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 这种配置在空闲期间: SCK 信号强制为高 SSEL 强制为高 发送 MOSI/MISO 管脚处于高阻态 如果 SSP 使能并且发送 FIFO 中含有有效数据,则 SSEL 主机信号被驱动为低表示开始发送数据。主 机的 MOSI 管脚使能。再过 1/2 个 SCK 周期,主机和从机的有效数据都被使能输出到各自的发送线上。同 时,SCK 出现上升沿跳变。然后,数据在 SCK 信号的上升沿被捕获并保持到 SCK 信号的下降沿。 在单个字的传输过程中,当所有位传输结束后,最后一位被捕获后一个 CLK 周期内,SSEL 返回到空 闲的高电平状态。对于连续的顺序传输,SSEL 管脚仍然保持有效的低电平状态,最后一个字的最后一位捕 获结束后,它再返回到上述的空闲状态。总的说来,SSEL 管脚在两个连续的数据字传输之间保持低电平, 终止传输的方法与单个字传输相同。 半导体 Microwire 帧格式 图 43 所示为 Microwire 帧格式的单帧传输。图 44 所示为 Microwire 帧格式的连续帧传输。 SK CS SO LSB MSB SI 8位控制 0 MSB LSB 4~16位 输出数据 图 43 Microwire 帧格式(单帧传输) Microwire 格式与 SPI 格式类似,但它的发送是半双工而非全双工模式,数据从主机传输到从机。每次 串行发送以 SSP 传输到片外从器件的一个 8 位控制字开始。在发送控制字的过程中,SSP 不接收数据。控 制字发送结束后,片外从器件对其进行译码,在 8 位控制信息的最后一位发送完一个串行时钟后,才响应 到来的所需数据。返回的数据长度为 4~16 位,使得总的数据帧长度在 13~25 位之间。 这种配置在空闲期间: SK 信号强制为低 CS 强制为高 发送数据线 SO 可强制为低 发送过程由写入到发送 FIFO 的一个控制字节来触发。CS 的下降沿使发送 FIFO 底端入口的数据传输 到发送逻辑的串行移位寄存器,8 位控制帧的 MSB 移出到 SO 管脚。CS 在帧发送过程中保持低电平。SI 在帧发送过程中保持三态。 片外串行从器件在每个 SK 的上升沿将每个控制位锁存到串行移位器。当从器件完成最后一位的锁存 后,一个时钟等待周期内对控制字节进行译码,然后从器件通过将数据发回给 SSP 来响应。每一位在 SK 的下降沿驱动到 SI 上。SSP 又在 SK 的上升沿将每一位锁存。在帧传输结束后,对于单帧传输,在最后一 位被锁存到接收串行移位器后的一个时钟周期内 CS 信号被拉高,使数据传输到接收 FIFO。 注:在 LSB 被接收移位器锁存后或当 CS 变为高电平时,片外从器件的接收线在任何一个 SK 的下降 沿都呈现三态。 连续传输过程的数据发送开始和结束的方法都与单帧传输相同。所不同的是,在连续传输过程中,CS 持续有效(保持低电平) ,数据连续发送。当前数据帧的 LSB 被接收后,下一帧的控制字节立刻直接发送。 在一帧数据的 LSB 被锁存到 SSP 后,每个接收到的数据在 SK 的下降沿传送到接收移位器。 106 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com SK CS SO LSB LSB MSB 8位控制 SI 0 MSB LSB 4~16位 输出数据 图 34 LSB MSB 4~16位 输出数据 Microwire 帧格式(连续传输) Microwire 模式中 CS 相对 SK 的建立和保持时间 Microwire 模式中,当 CS 变低后,SSP 从机在 SK 的上升沿对接收数据的首位进行采样。因此,主机 驱动 SK 自由运行时必须确保 CS 信号相对 SK 的上升沿有足够的建立和保持时间。 图 45 给出了建立和保持时间的要求。相对 SSP 从机采样接收数据的首个位的 SK 上升沿,CS 的建立 时间至少为 SSP 的 SK 周期的 2 倍。相对于之前的 SK 上升沿,CS 的保持时间至少为一个 SK 周期。 t SETUP=2*tSK tHOLD =tSK SK CS SI 图 45 Microwire 帧格式(连续传输) 寄存器描述 SSP 控制器的基地址为 0xE006 8000。其寄存器的基址偏移量如下所示。 表 116 SSP 寄存器 名称 描述 访问 地址 SSPCR0 控制寄存器 0。选择串行时钟速率、总线类型和数据长度。 读/写 0xE0068000 SSPCR1 控制寄存器 1。选择主机/从机和其它模式。 读/写 0xE0068004 SSPDR 数据寄存器。写满发送 FIFO 和读空接收 FIFO。 读/写 0xE0068008 SSPSR 状态寄存器 读/写 0xE006800C SSPCPSR 时钟预分频寄存器。 读/写 0xE0068010 SSPIMSC 中断屏蔽设置和清零寄存器。 读/写 0xE0068014 SSPRIS 所有中断状态寄存器。 读/写 0xE0068018 SSPMIS 屏蔽中断状态寄存器。 读/写 0xE006801C SSPICR 中断清零寄存器。 读/写 0xE0068020 SSP 控制寄存器 0(SSPCR0-0xE0068000) 该寄存器控制着 SSP 控制器的基本操作。 107 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 117 SSP 控制寄存器 0(SSPCR0 – 0xE0068000) SSPCR0 名称 描述 复位值 15:8 SCR 串行时钟速率。其值为总线上每位的预分频器输出时钟数减 1。假 0 设 CPSDVR 为预分频器分频值,VPB 时钟 PCLK 为预分频器的时 钟,则位频率为 f (PCLK)/ (CPSDVR*(SCR+1))。 7 CPHA 时钟输出相位。该位只用在 SPI 模式。该位为 0 时,SSP 控制器使 0 总线时钟在每帧传输之间保持低电平,该位为 1 时,SSP 控制器使 总线时钟在每帧传输之间保持高电平。 6 CPOL 时钟输出极性。该位只用在 SPI 模式。如果该位为 0,SSP 控制器 0 在帧传输的第一个时钟跳变上升沿捕获串行数据,即跳变远离时钟 线在帧内部的状态。如果该位为 1,SSP 控制器在帧传输的第二个 时钟跳变沿捕获串行数据,即跳变后退到时钟线在帧内部的状态。 5:4 FRF 帧格式。00=SPI,01=SSI,10=Microwire,11=保留 0 3:0 DSS 数据长度选择。该字段控制着每帧传输的位数目: 0 0000 - 0010=保留, 0011=4 位, 0111=8 位,…, 1111=16 位 SSP 控制寄存器 1(SSPCR1 – 0xE0068004) 该寄存器控制着 SSP 控制器的工作方式。 表 118 SSP 控制寄存器 1(SSPCR1 – 0xE0068004) SSPCR1 名称 描述 复位值 3 SOD 从机输出禁能。该位只与从机模式有关(MS=1) 。如果该位为 1, 0 禁止 SSP 控制器驱动发送数据线(MISO) 。 2 MS 主机/从机模式。该位为 0(复位后的值)时 SSP 控制器用作总线主 0 机,驱动 SCLK、MOSI 和 SSEL 并接收 MISO 的信息。该位为 1 时 SSP 控制器用作总线从机,驱动 MISO 和接收 SCLK、MOSI 和 SSEL 的信息。该位只能在 SSE 位为 0 时写入(SSE 位为 1 时可同 时写 MS 和 SSE) 。 1 SSE SSP 使能。该位为 1 时,SSP 控制器可与串行总线上的其它器件相 0 互通信。在置位该位前,软件应将合适的控制信息写入其它 SSP 寄 存器和中断控制器寄存器。 0 LBM 回写模式。正常工作模式下该位为 0。该位为 1 时,串行输入脚可 ,而不是仅用作串行输入脚 用作串行输出脚共用(MOSI 或 MISO) (MISO 或 MOSI 分别起作用) 。 SSP 数据寄存器(SSPDR – 0xE0068008) 软件可将要发送的数据写入该寄存器,或从该寄存器读出接收到的数据。 108 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 119 SSP 数据寄存器 1(SSPDR – 0xE0068008) SSPDR 名称 描述 复位值 15:0 DATA 写:当状态寄存器的 TNF 位为 1 指示 Tx FIFO 未满时,软件可将要发送 0 的帧的数据写入该寄存器。如果 Tx FIFO 以前为空且 SSP 控制器空闲,则 立刻开始发送数据。否则,写入该寄存器的数据要等到所有数据发送(或 接收)完后才能发送。如果数据长度小于 16 位,软件必须对数据进行调 整后再写入该寄存器。 读:当状态寄存器的 RNE 位为 1 指示 Rx FIFO 不为空时,软件可读取该 寄存器。软件读取该寄存器时,SSP 控制器将返回从 Rx FIFO 中读走的最 后一个数据。如果数据长度小于 16 位,该字段的数据必须进行调整,低 位对齐,高位补零。 SSP 状态寄存器(SSPSR – 0xE006800C) 该只读寄存器反映了 SSP 控制器的当前状态。 表 120 SSP 状态寄存器(SSPSR – 0xE006800C) SSPSR 名称 描述 复位值 4 BSY 忙。SSP 控制器空闲、当前正在发送/接收一帧数据和/或 Tx FIFO 不 0 为空时该位为 1。 3 RFF 接收 FIFO 满。接收 FIFO 满时该位为 1,反之为 0。 0 2 RNE 接收 FIFO 不为空。接收 FIFO 为空时该位为 0,反之为 1。 0 1 TNF 发送 FIFO 未满。Tx FIFO 满时该位为 0,反之为 1。 1 0 TFE 发送 FIFO 空。发送 FIFO 为空时该位为 1,反之为 0。 1 SSP 时钟预分频寄存器(SSPCPSR – 0xE0068010) 该寄存器控制着预分频器分频 VPOB 时钟 PCLK 得到预分频器时钟的因子, 反过来, 预分频时钟被 SCR (SSPCR0 的位 15~8)分频后得到位时钟。 表 121 SSP 时钟预分频寄存器(SSPCPSR – 0xE0068010) SSPCPSR 名称 描述 复位值 7:0 CPSDVSR 这是一个 2~254 中的一个偶数。它是 PCLK 的分频因子,PCLK 通 0 过分频后得到预分频器输出时钟。位 0 读出时总是为 0。 SSP 中断屏蔽设置/清除寄存器(SSPIMSC – 0xE0068014) 该寄存器控制着 SSP 控制器 4 个中断条件的使能。注意:ARM 使用“masked”一词时的理解与经典 计算机术语相反,计算机术语中“masked”意思是“禁能” 。而 ARM 中“masked”的意思是“使能“。为 了防止混淆,ARM 文档中通常不用“masked”一词。 表 122 SSP 中断屏蔽设置/清除寄存器(SSPIMSC – 0xE0068014) SSPIMSC 名称 描述 3 TXIM 当 Tx FIFO 至少有一半为空时,软件置位该位来使能中断。 0 2 RXIM 当 Rx FIFO 至少有一半为满时,软件置位该位来使能中断。 0 1 RTM 当出现接收超时条件时,软件置位该位来使能中断。当 Rx FIFO 不为 0 空且在 32 个位时间内既未接收新数据又未从 FIFO 中读出数据时,产 生接收超时。 109 复位值 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 SSPIMSC 名称 0 RORIM 描述 复位值 当接收溢出时软件置位该位来使能中断,即当 Rx FIFO 满时又完成另 0 一个帧的接收时该位置位。ARM 特别指出,接收溢出时新的数据帧 会将前面的数据帧覆盖。 SSP 所有中断状态寄存器(SSPRIS – 0xE0068018) 当一个中断条件出现时,该只读寄存器中对应的位置位,与中断是否通过 SSPIMSC 使能无关。 表 123 SSP 所有中断状态寄存器(SSPRIS – 0xE0068018) SSPRIS 名称 描述 复位值 3 TXRIS 当 Tx FIFO 至少一半为空时该位置位。 1 2 RXRIS 当 Rx FIFO 至少一半为满时该位置位。 0 1 RTRIS 当接收超时条件出现时该位置位。注意:一旦开始接收数据,接收 0 超时撤除。 0 RORRIS 当 Rx FIFO 满时又接收到另一帧数据时该位置位。ARM 特别指出, 0 此时接收到的新数据帧会将前面的数据帧覆盖。 SSP 屏蔽中断状态寄存器(SSPMIS – 0xE006801C) 当一个中断条件出现且相应的中断在 SSPIMSC 中被使能时,对应在该只读寄存器的位置位。当产生 SSP 中断时,中断服务程序可通过读该寄存器来判断中断源。 表 124 SSP 屏蔽中断状态寄存器(SSPMIS – 0xE006801C) SSPMIS 名称 描述 复位值 3 TXMIS 当 Tx FIFO 至少一半为空且中断被使能时该位置位。 0 2 RXMIS 当 Rx FIFO 至少一半为满且中断被使能时该位置位。 0 1 RTMIS 当接收超时条件出现且中断被使能时该位置位。注意:一旦开始接 0 收数据,接收超时撤除。 0 RORMIS 当 Rx FIFO 满时又接收到另一帧数据,并且中断被使能时该位置 0 位。 SSP 中断清除寄存器(SSPICR – 0xE0068020) 软件可通过向该只写寄存器写入 1 或多个 1 来清除 SSP 控制器的相关中断。注意:另外 2 个中断条件 可通过写或读相应的 FIFO 来清除,通过清除 SSPIMSC 中对应的位来禁能。 表 125 SSP 中断清除寄存器(SSPICR – 0xE0068020) SSPICR 名称 1 RTIC 0 RORIC 描述 复位值 向该位写 1 来清除接收超时中断。 NA 向该位写 1 来清除“Rx FIFO 满时还接收到数据”的中断。 NA 定时器/计数器 0 和定时器/计数器 1 14. 定时器/计数器 0 和定时器/计数器 1 除了外设基地址以外,其它都相同。 特性 带可编程 32 位预分频器的 32 位定时器/计数器 用作计数器或定时器 具有多达 4 路 32 位的捕获通道。当输入信号跳变时可取得定时器的瞬时值。也可选择使捕获事 110 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 件产生中断。 4 个 32 位匹配寄存器: -匹配时定时器继续工作,可选择产生中断 -匹配时停止定时器,可选择产生中断 -匹配时复位定时器,可选择产生中断 多达 4 个对应于匹配寄存器的外部输出,具有下列特性: -匹配时设置为低电平 -匹配时设置为高电平 -匹配时翻转 -匹配时无动作 应用 用于对内部事件进行计数的间隔定时器 通过捕获输入实现脉宽调制 自由运行的定时器 描述 定时器对外设时钟(pclk)周期进行计数,可选择产生中断或根据 4 个匹配寄存器的设定,在到达指 定的定时值时执行其它动作。它还包括 4 个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选 择产生中断。 管脚描述 表 126 所示为每个定时器相关管脚的简要描述。 表 126 管脚概况 管脚名称 管脚方向 管脚描述 CAP0.3..0 捕获信号 捕获管脚的跳变可配置为将定时器值装入一个捕获寄存器,并可选择 CAP1.3..0 产生一个中断。可选择多个管脚用作捕获功能。当有多个管脚被选择用作一个 TIMER0/1 通道的捕获输入时,使用编号最小的管脚。例如,30 脚(P0.6)和 46 脚(P0.16)选择用作 CAP0.2 时,TIMER0 只选择 30 脚执行 CAP0.2 功能。 下面列出了所有捕获信号及其被选用的管脚: CAP0.0(3 脚) :P0.2, P0.22 和 P0.30。 CAP0.1(2 脚) :P0.4 和 P0.27。 输入 CAP0.2(3 脚) :P0.6, P0.16 和 P0.28。 CAP0.3(1 脚) :P0.29。 CAP1.0(1 脚) :P0.10。 CAP1.1(1 脚) :P0.11。 CAP1.2(2 脚) :P0.17 和 P0.19。 CAP1.3(2 脚) :P0.18 和 P0.21。 计数器/定时器可选择一个捕获信号作为时钟源来代替 pclk 时钟。详见计数控制 寄存器(CTCR: TIMER0-T0CTCR:0xE0004070;TIMER1-T1TCR: 0xE0008070)。 111 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 管脚名称 管脚方向 管脚描述 MAT0.3..0 外部匹配输出 0/1 当匹配寄存器 0/1(MR3:0)等于定时器计数器(TC)时,该 MAT1.3..0 输出可翻转,变为低电平、变为高电平或不变。外部匹配寄存器(EMR)控制 该输出的功能。可选择多个管脚并行用作匹配输出功能。例如,同时选择 2 个管 脚并行提供 MAT1.3 功能。 下面列出了所有匹配信号及其选用的管脚: MAT0.0(2 脚) :P0.3 和 P0.22。 输出 MAT0.1(2 脚) :P0.5 和 P0.27。 MAT0.2(2 脚) :P0.16 和 P0.28。 MAT0.3(1 脚) :P0.29。 MAT1.0(1 脚) :P0.12。 MAT1.1(1 脚) :P0.13。 MAT1.2(2 脚) :P0.17 和 P0.19。 MAT1.3(2 脚) :P0.18 和 P0.20。 寄存器描述 每个定时器所包含的寄存器如表 127 所示。(“复位值”仅表示使用位的数据,不包括保留位的内容)。 详见下列的描述。 表 127 定时器 0 和定时器 1 寄存器映射 名称 描述 访问 复位值 中断寄存器 可以写 IR 来清除中断。可读取 IR 来识别哪个中 IR R/W 断源被挂起。 R/W 计数器可通过 TCR 禁止或复位。 PR R/W 过 TCR 进行控制。 预分频寄存器 32 位 TC 每经过 PR+1 个 pclk 周期加 1。 R/W 时,TC 加 1。 匹配控制寄存器 MCR R/W 位 TC。 MR1 MR2 MR3 止 TC 和 PC 和/或产生中断。 匹配寄存器 1 MR0 见描述 R/W 匹配寄存器 2 MR0 见描述 R/W 匹配寄存器 3 MR0 见描述 捕获控制寄存器 CCR R/W R/W 边沿以及在发生捕获时是否产生中断。 112 T1IR 0xE0004004 0xE0008004 T0TCR T1TCR 0xE0004008 0xE0008008 T0TC T1TC 0xE000400C 0xE000800C T0PR T1PR 0xE0004010 0xE0008010 T0PC T1PC 0xE0004014 0xE0008014 T0MCR T1MCR 0xE0004018 0xE0008018 T0MR0 T1MR0 0xE000401C 0xE000801C T0MR1 T1MR1 0xE0004020 0xE0008020 T0MR2 T1MR2 0xE0004024 0xE0008024 T0MR3 T1MR3 0xE0004028 0xE0008028 T0CCR T1CCR 0 0 0 0 0 CCR 控制用于装载捕获寄存器的捕获输入 R/W 0xE0008000 T0IR 0 匹配寄存器 0 MR0 可通过 MCR 设定为在匹配时复位 TC,停 MR0 0xE0004000 0 MCR 用于控制在匹配时是否产生中断或复 R/W 地址&名称 0 预分频计数器 每当 32 位 PC 的值增加到等于 PR 中保存的值 PC 地址&名称 0 定时器计数器 32 位 TC 每经过 PR+1 个 pclk 周期加 1。TC 通 TC 定时器 1 0 定时器控制寄存器 TCR 用于控制定时器计数器功能。定时器 TCR 定时器 0 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 名称 描述 访问 复位值 捕获寄存器 0 当在 CAP0.0(CAP1.0)上产生捕获事件时,CR0 CR0 CR1 CR2 CR3 RO 装载 TC 的值。 捕获寄存器 1 见 CR0 描述 捕获寄存器 2 见 CR0 描述 RO 捕获寄存器 3 见 CR0 描述 外 部 匹 配 寄 存 器 EMR RO RO MAT0.0-3(MAT1.0-3)。 R/W 数器模式下选择计数的信号和边沿 地址&名称 地址&名称 0xE000402C 0xE000802C T0CR0 T1CR0 0xE0004030 0xE0008030 T0CR1 T1CR1 0xE0004034 0xE0008034 T0CR2 T1CR2 0xE0004038 0xE0008038 T0CR3 T1CR3 0xE000403C 0xE000803C T0EMR T1EMR 0xE0004070 0xE0008070 T0CTCR T1CTCR 0 0 0 0 计数控制寄存器。CTCR 用来选择定时器或计数器模式,在计 CTCR 定时器 1 0 EMR 控 制 外 部 匹 配 管 脚 R/W 定时器 0 0 中断寄存器(IR: 定时器 0 - T0IR:0xE00040000;定时器 1 - T1IR:0xE0008000) 中断寄存器包含 4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位, 否则为 0。向对应的 IR 位写入 1 会复位中断。写入 0 无效。 表 128 中断寄存器(IR: 定时器 0 - T0IR:0xE0004000;定时器 1 - T1IR:0xE0008000) IR 功能 描述 复位值 0 MR0 中断 匹配通道 0 的中断标志 0 1 MR1 中断 匹配通道 1 的中断标志 0 2 MR2 中断 匹配通道 2 的中断标志 0 3 MR3 中断 匹配通道 3 的中断标志 0 4 CR0 中断 捕获通道 0 事件的中断标志 0 5 CR1 中断 捕获通道 1 事件的中断标志 0 6 CR2 中断 捕获通道 2 事件的中断标志 0 7 CR3 中断 捕获通道 3 事件的中断标志 0 定时器控制寄存器(TCR: 定时器 0 – T0TCR:0xE0004004;定时器 1 – T1TCR:0xE0008004) 定时器控制寄存器 TCR 用于控制定时器计数器的操作。 表 129 定时器控制寄存器(TCR - 定时器 0 – T0TCR:0xE0004004;定时器 1 – T1TCR:0xE0008004) TCR 功能 0 计数器使能 1 计数器复位 描述 复位值 为 1 时,定时器计数器和预分频计数器使能计数。为 0 时,计数器被禁 止。 为 1 时, 定时器计数器和预分频计数器在 pclk 的下一个上升沿同步复位。 计数器在 TCR[1]恢复为 0 之前保持复位状态。 0 0 计数控制寄存器(CTCR:定时器 0-T0CTCR:0xE0004070;定时器 1-T1TCR: 0xE0008070) 计数控制寄存器(CTCR)用来选择定时器或计数器模式,计数器模式下选择计数的管脚和边沿。 当选择工作在计数器模式时,在每个 pclk 时钟的上升沿对 CAP 输入(由 CTCR 位 3:2 选择)进行采样。 比较完 CAP 输入的 2 次连续采样结果后,可以识别下面四个事件中的一个:上升沿、下降沿、任一边沿或 选择的 CAP 输入的电平无变化。只要识别到的事件与 CTCR 寄存器中位 1:0 选择的事件相对应时,定时器 113 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 计数器寄存器加 1。 计数器的外部时钟源的操作受到一些限制。由于 pclk 时钟的 2 个连续的上升沿用来识别 CAP 选择输 入的一个边沿,所以 CAP 输入的频率不能大于 1/2 个 pclk 时钟。因此,这种情况下同一 CAP 输入的高/低 电平持续时间不能小于 1/fpclk。 表 130 计数控制寄存器(CTCR:定时器 0-T0CTCR: 0xE0004070;定时器 1-T1TCR: 0xE0008070) 功能 描述 复位值 计数器/定时器模式 该字段选择触发定时器的预分频计数器(PC)递增、清除 PC 00 CTCR 1:0 和定时器计数器(TC)递增的 PCLK 边沿: 00:定时器模式:每个 PCLK 的上升沿。 01:计数器模式:TC 在位 3:2 选择的 CAP 输入的上升沿 递增。 10:计数器模式:TC 在位 3:2 选择的 CAP 输入的下降沿 递增。 11:计数器模式:TC 在位 3:2 选择的 CAP 输入的上升和 下降沿递增。 3:2 计数器输入选择 当位 1:0 不是 00 时,这些位用来选择对哪一个 CAP 管脚进 00 行采样计时: 00=CAPn.0 01=CAPn.1 10=CAPn.2 11=CAPn.3 注:如果在 TnCTCR 中选择计数器模式用于某个特定的 CAPn 输入,则捕获控制寄存器(TnCCR)中对应该输入的 3 位必须编程设为 000。但是,可在相同的定时器中选择其它 3 个 CAPn 输入用于捕获和/或中断。 定时器计数器(TC: 定时器 0 – T0TC:0xE0004008;定时器 1 – T1TC:0xE0008008) 当预分频计数器到达计数的上限时,32 位定时器计数器加 1。如果 TC 在到达计数上限之前没有被复 位,它将一直计数到 0xFFFFFFFF 然后翻转到 0x00000000。该事件不会产生中断。如果需要,可用匹配寄 存器检测溢出。 预分频寄存器(PR: 定时器 0 – T0PR:0xE000400C;定时器 1 – T1PR:0xE000800C) 32 位预分频寄存器指到预分频计数器的最大值。 预分频计数器寄存器(PC: 定时器 0 – T0PC:0xE0004010;定时器 1 – T1PC:0xE0008010) 32 位预分频计数器使用某个常量来控制 pclk 的分频。这样可在定时器溢出之前控制定时器的分辨率和 最大时间之间的关系。预分频计数器每个 pclk 周期加 1。当其到达预分频寄存器中保存的值时,定时器计 数器加 1,预分频计数器在下个 pclk 周期复位。这样,当 PR=0 时,定时器计数器每个 pclk 周期加 1,当 PR=1 时,定时器计数器每 2 个 pclk 周期加 1。 匹配寄存器(MR0 - MR3) 匹配寄存器值连续与定时器计数值相比较。当两个值相等时自动触发相应动作。这些动作包括产生中 断,复位定时器计数器或停止定时器。所执行的动作由 MCR 寄存器控制。 114 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 匹配控制寄存器(MCR: 定时器 0 – T0MCR:0xE0004014;定时器 1 – T1MCR:0xE0008014) 匹配控制寄存器用于控制在发生匹配时所执行的操作。每个位的功能见表 131。 表 131 匹配控制寄存器(MCR: 定时器 0 – T0MCR:0xE0004014;定时器 1 – T1MCR:0xE0008014) MCR 功能 描述 0 中断(MR0) 为 1 时,MR0 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。 0 1 复位(MR0) 为 1 时,MR0 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。 0 2 停止(MR0) 3 中断(MR1) 为 1 时,MR1 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。 0 4 复位(MR1) 为 1 时,MR1 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。 0 5 停止(MR1) 6 中断(MR2) 为 1 时,MR2 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。 0 7 复位(MR2) 为 1 时,MR2 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。 0 8 停止(MR2) 9 中断(MR3) 为 1 时,MR3 与 TC 值的匹配将产生中断。为 0 时,中断被禁止。 0 10 复位(MR3) 为 1 时,MR3 与 TC 值的匹配将使 TC 复位。为 0 时,该特性被禁止。 0 11 停止(MR3) 为 1 时,MR0 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0 时,该特性被禁止。 为 1 时,MR1 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0 时,该特性被禁止。 为 1 时,MR2 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0 时,该特性被禁止。 为 1 时,MR3 与 TC 值的匹配将使 TC 和 PC 停止,TCR[0]清零。为 0 时,该特性被禁止。 复位值 0 0 0 0 捕获寄存器(CR0 - CR3) 每个捕获寄存器都与一个器件管脚相关联。当管脚发生特定的事件时,可将定时器计数值装入该寄存 器。捕获控制寄存器的设定决定捕获功能是否使能以及捕获事件在管脚的上升沿、下降沿或是双边沿发生。 捕获控制寄存器(CCR: 定时器 0 – T0CCR:0xE0004028;定时器 1 – T1CCR:0xE0008028) 当发生捕获事件时,捕获控制寄存器用于控制将定时器计数值是否装入 4 个捕获寄存器中的一个以及 是否产生中断。同时设置上升沿和下降沿位也是有效的配置,这样会在双边沿触发捕获事件。在下面的描 述中, “n”代表定时器的编号 0 或 1。 表 132 捕获控制寄存器(CCR: 定时器 0 – T0CCR:0xE0004028;定时器 1 – T1CCR:0xE0008028) CCR 0 1 2 3 4 5 功能 描述 CAPn.0 为 1 时,CAPn.0 上 0 到 1 的跳变将导致 TC 的内容装入 CR0。为 0 时, 上升沿捕获 该特性被禁止。 CAPn.0 为 1 时,CAPn.0 上 1 到 0 的跳变将导致 TC 的内容装入 CR0。为 0 时, 下降沿捕获 该特性被禁止。 CAPn.0 事件中断 CAPn.1 为 1 时,CAPn.0 的捕获事件所导致的 CR0 装载将产生一个中断。为 0 时,该特性被禁止。 为 1 时,CAPn.1 上 0 到 1 的跳变将导致 TC 的内容装入 CR1。为 0 时, 上升沿捕获 该特性被禁止。 CAPn.1 为 1 时,CAPn.1 上 1 到 0 的跳变将导致 TC 的内容装入 CR1。为 0 时, 下降沿捕获 该特性被禁止。 CAPn.1 事件中断 为 1 时,CAPn.1 的捕获事件所导致的 CR1 装载将产生一个中断。为 0 时,该特性被禁止。 115 复位值 0 0 0 0 0 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 CCR 6 7 8 9 10 11 功能 描述 复位值 CAPn.2 为 1 时,CAPn.2 上 0 到 1 的跳变将导致 TC 的内容装入 CR2。为 0 时, 上升沿捕获 该特性被禁止。 CAPn.2 为 1 时,CAPn.2 上 1 到 0 的跳变将导致 TC 的内容装入 CR2。为 0 时, 下降沿捕获 该特性被禁止。 CAPn.2 事件中断 CAPn.3 为 1 时,CAPn.2 的捕获事件所导致的 CR2 装载将产生一个中断。为 0 时,该特性被禁止。 为 1 时,CAPn.3 上 0 到 1 的跳变将导致 TC 的内容装入 CR3。为 0 时, 上升沿捕获 该特性被禁止。 CAPn.3 为 1 时,CAPn.3 上 1 到 0 的跳变将导致 TC 的内容装入 CR3。为 0 时, 下降沿捕获 该特性被禁止。 CAPn.3 事件中断 为 1 时,CAPn.3 的捕获事件所导致的 CR3 装载将产生一个中断。为 0 时,该特性被禁止。 0 0 0 0 0 0 外部匹配寄存器(EMR: 定时器 0 – T0EMR:0xE000403C;定时器 1 – T1EMR:0xE000803C) 外部匹配寄存器提供外部匹配管脚 M(0-3)的控制和状态。 表 133 外部匹配寄存器(EMR: 定时器 0 – T0EMR:0xE000403C;定时器 1 – T1EMR:0xE000803C) EMR 功能 描述 复位值 不管 MAT0.0/MAT1.0 是否连接到管脚,该位都会反映 MAT0.0/MAT1.0 的 0 外部匹配 0 状态。当 MR0 发生匹配时,该输出可翻转,变为低电平,变为高电平或 0 不执行任何动作。位 EMR[4:5]控制该输出的功能。 不管 MAT0.1/MAT1.1 是否连接到管脚,该位都会反映 MAT0.1/MAT1.1 的 1 外部匹配 1 状态。当 MR1 发生匹配时,该输出可翻转,变为低电平,变为高电平或 0 不执行任何动作。位 EMR[6:7]控制该输出的功能。 不管 MAT0.2/MAT1.2 是否连接到管脚,该位都会反映 MAT0.2/MAT1.2 的 2 外部匹配 2 状态。当 MR2 发生匹配时,该输出可翻转,变为低电平,变为高电平或 0 不执行任何动作。位 EMR[8:9]控制该输出的功能。 不管 MAT0.3/MAT1.3 是否连接到管脚,该位都会反映 MAT0.3/MAT1.3 的 3 外部匹配 3 状态。当 MR3 发生匹配时,该输出可翻转,变为低电平,变为高电平或 0 不执行任何动作。位 EMR[10:11]控制该输出的功能。 外部匹配 5:4 控制 0 外部匹配 7:6 控制 1 外部匹配 9:8 控制 2 外部匹配 11:10 控制 3 决定外部匹配 0 的功能。表 134 所示为这两个位的编码。 0 决定外部匹配 1 的功能。表 134 所示为这两个位的编码。 0 决定外部匹配 2 的功能。表 134 所示为这两个位的编码。 0 决定外部匹配 3 的功能。表 134 所示为这两个位的编码。 0 表 134 外部匹配控制 EMR[11:10], EMR[9:8] 功能 EMR[7:6],或 EMR[5:4] 00 不执行任何动作 116 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 EMR[11:10], EMR[9:8] 功能 EMR[7:6],或 EMR[5:4] 01 将对应的外部匹配输出设置为 0(如果连接到管脚,则输出低电平) 10 将对应的外部匹配输出设置为 1(如果连接到管脚,则输出高电平) 11 使对应的外部匹配输出翻转 定时器举例操作 图 46 所示为定时器配置为在匹配时复位计数并产生中断。预分频器设置为 2,匹配寄存器设置为 6。 在发生匹配的定时器周期结束时,定时器计数值复位。这样就使匹配值具有完整长度的周期。指示匹配发 生的中断在定时器到达匹配值的下一个时钟产生。 图 47 所示为定时器配置为在匹配时停止并产生中断。预分频器设置为 2,匹配寄存器设置为 6。在定 时器到达匹配值的下一个周期中,TCR 中的定时器使能位清零并产生指示匹配发生的中断。 pclk 预分频计数器 2 定时器计数器 4 0 1 2 0 5 1 2 6 0 1 2 0 0 定时器计数器 复位 中断 图 46 定时器周期设置为 PR=2, MRx=6, 匹配时使能中断和复位 pclk 预分频计数器 2 定时器计数器 4 TCR[0] (计数器使能) 0 1 2 0 5 6 1 0 中断 图 47 定时器周期设置为 PR=2, MRx=6, 匹配时使能中断和停止 结构 定时器 0 和定时器 1 的方框图,见图 48。 117 1 1 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 匹配寄存器 0 匹配寄存器 1 匹配寄存器 2 匹配寄存器 3 匹配控制寄存器 外部匹配寄存器 中断寄存器 控制 MAT[3:0] 中断 CAP[3:0] 匹配时停止 匹配时复位 Load[3:0] = = = = 捕获控制寄存器 CSN 捕获寄存器 0 定时器计数器 捕获寄存器 1 捕获寄存器 2 捕获寄存器 3 * CE TCI 预分频计数器 复位 使能 定时器控制寄存器 MAXVAL 预分频寄存器 * 注:捕获寄存器 3 不能用于定时器 0 图 48 定时器方框图 脉宽调制器(PWM) 15. LPC3131/2132/2138 的脉宽调制器建立在前一章的标准定时器 0/1 之上。应用可在 PWM 和匹配功能当 中进行选择。 特性 7 个匹配寄存器,可实现 6 个单边沿控制或 3 个双边沿控制 PWM 输出,或这两种类型的混合输 出: -连续操作,可选择在匹配时产生中断 -匹配时停止定时器,可选择产生中断 -匹配时复位定时器,可选择产生中断 每个匹配寄存器对应一个外部输出,具有下列特性: -匹配时设置为低电平 -匹配时设置为高电平 -匹配时翻转 -匹配时无动作 支持单边沿控制和/或双边沿控制的 PWM 输出。单边沿控制 PWM 输出在每个周期开始时总是为 118 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 高电平,除非输出保持恒定低电平。双边沿控制 PWM 输出可在一个周期内的任何位置产生边沿。 这样可同时产生正和负脉冲。 脉冲周期和宽度可以是任何的定时器计数值。这样可实现灵活的分辨率和重复速率的设定。所有 PWM 输出都以相同的重复率发生。 双边沿控制的 PWM 输出可编程为正脉冲或负脉冲 匹配寄存器更新与脉冲输出同步,防止产生错误的脉冲。软件必须在新的匹配值生效之前将它们 释放。 如果不使能 PWM 模式,可作为一个标准定时器 带可编程 32 位预分频器的 32 位定时器/计数器 当输入信号跳变时 4 个捕获寄存器可取得定时器的瞬时值,也可选择使捕获事件产生中断。 描述 PWM 基于标准的定时器模块并具有其所有特性。不过 LPC2131/2132/2138 只将其 PWM 功能输出到管 脚。定时器对外设时钟(pclk)进行计数,可选择产生中断或基于 7 个匹配寄存器,在到达指定的定时值时执 行其它动作。它还包括 4 个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选择在事件发生时 产生中断。PWM 功能是一个附加特性,建立在匹配寄存器事件基础之上。 独立控制上升和下降沿位置的能力使 PWM 可以应用于更多的领域。例如,多相位电机控制通常需要 3 个非重叠的 PWM 输出,而这 3 个输出的脉宽和位置需要独立进行控制。 两个匹配寄存器可用于提供单边沿控制的 PWM 输出。一个匹配寄存器(PWMMR0)通过匹配时重新 设置计数值来控制 PWM 周期率。另一个匹配寄存器控制 PWM 边沿的位置。每个额外的单边沿控制 PWM 输出只需要一个匹配寄存器,因为所有 PWM 输出的重复率速率是相同的。多个单边沿控制 PWM 输出在 每个 PWM 周期的开始,当 PWMMR0 发生匹配时,都有一个上升沿。 3 个匹配寄存器可用于提供一个双边沿控制 PWM 输出。也就是说,PWMMR0 匹配寄存器控制 PWM 周期速率,其它匹配寄存器控制两个 PWM 边沿位置。每个额外的双边沿控制 PWM 输出只需要两个匹配 寄存器,因为所有 PWM 输出的重复率速率是相同的。 使用双边沿控制 PWM 输出时,指定的匹配寄存器控制输出的上升和下降沿。这样就产生了正脉冲(当 上升沿先于下降沿时)和负脉冲(当下降沿先于上升沿时) 。 图 49 所示为 PWM 的方框图。在标准定时器模块上增加的部分位于图的右边和顶端。 119 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 映像寄存器 0 匹配寄存器 0 装载使能 映像寄存器 1 匹配寄存器 1 装载使能 映像寄存器 2 匹配寄存器 2 装载使能 映像寄存器 3 匹配寄存器 3 装载使能 映像寄存器 4 匹配寄存器 4 装载使能 映像寄存器 5 匹配寄存器 5 装载使能 映像寄存器 6 匹配寄存器 6 装载使能 匹配 0 锁存使能寄存器 匹配 0 匹配控制寄存器 S 匹配 1 R Q EN PWM1 PWMENA1 PWMSEL2 mux 匹配 2 中断寄存器 S R Q EN PWM2 PWMENA2 PWMSEL3 控制 mux = M[6:0] 中断 = 匹配 3 R = mux = 匹配 4 = S R = PWM3 PWMENA3 Q EN PWM4 PWMENA4 PWMSEL5 mux 匹配 5 CSN Q EN PWMSEL4 = 匹配时停止 匹配时复位 S R Q EN PWM5 PWMENA5 PWMSEL6 定时器计数器 mux CE S 匹配 6 S R Q EN PWM6 PWMENA6 TCI 预分频计数器 复位 使能 定时器控制寄存器 PWMENA1..6 PWMSEL2..6 MAXVAL 预分频寄存器 PWM 控制寄存器 注:该图用来解释 PWM 的功能,不是一个具体的设计方案。 图 49 PWM 方框图 图 50 所示为一个用来说明 PWM 值与波形输出之间关系的例子。图 49 的 PWM 输出逻辑允许通过 PWMSELn 位选择单边沿或者双边沿控制的 PWM 输出。表 135 所示为不同 PWM 输出的匹配寄存器选项。 支持 N-1 个单边沿 PWM 输出或(N-1)/2 个双边沿 PWM 输出,其中 N 为匹配寄存器的个数。如果需要也可 使用混合的 PWM 类型。 下面所示的波形是单个 PWM 周期,它演示了在下列条件下的 PWM 输出: 定时器配置为 PWM 模式 匹配寄存器 0 配置为在发生匹配事件时复位定时器/计数器 控制位 PWMSEL2 和 PWMSEL4 置位 匹配寄存器值如下: 120 广州周立功单片机发展有限公司 Tel: (020)38730976 MR0=100 (PWM 速率) MR1=41, MR2=78 (PWM2 输出) MR3=53, MR4=27 (PWM4 输出) MR5=65 (PWM5 输出) 38730977 Fax: 38730925 http://www.zlgmcu.com PWM2 PWM4 PWM5 0 27 41 53 65 78 100 (计数器复位) 图 50 PWM 波形举例 表 135 PWM 触发器的置位和复位输入 PWM 通道 单边沿 PWM(PWMSELn=0) 置位 复位 双边沿 PWM(PWMSELn=1) 置位 复位 1 1 匹配 0 匹配 1 匹配 0 匹配 11 2 匹配 0 匹配 2 匹配 1 匹配 2 2 3 匹配 0 匹配 3 匹配 2 匹配 32 4 匹配 0 匹配 4 匹配 3 匹配 4 2 5 匹配 0 匹配 5 匹配 4 匹配 52 6 匹配 0 匹配 6 匹配 5 匹配 6 注: 1. 这种情况下与单边沿模式相同,因为匹配 0 是相邻的匹配寄存器。基本上 PWM1 不能用作双边 沿输出。 2. 通常不建议使用 PWM 通道 3 和通道 5 作为双边沿 PWM 输出, 因为这样会减少可用的双边沿 PWM 的个数。使用 PWM2, PWM4 和 PWM6 可得到最多个数的双边沿 PWM 输出。 单边沿控制的 PWM 输出规则 1. 所有单边沿控制的 PWM 输出在 PWM 周期开始时都为高电平,除非它们的匹配值等于 0。 2. 每个 PWM 输出在到达其匹配值时都会变为低电平。如果没有发生匹配(即匹配值大于 PWM 速 率) ,PWM 将一直保持高电平。 双边沿控制的 PWM 输出规则 当一个新的周期将要开始时,使用以下 5 个规则来决定下一个 PMW 输出的值: 1. 在一个 PWM 周期结束时(与下一个 PWM 周期的开始重合的时间点) ,使用下一个 PMW 周期的 匹配值,例外见规则 3。 2. 等于 0 或当前 PWM 速率(与匹配通道 0 的值相同)的匹配值等效。例外见规则 3。例如,在 PWM 周期开始时的下降沿请求与 PWM 周期结束时的下降沿请求等效。 3. 当匹配值正在改变时,如果有其中一个“旧”匹配值等于 PWM 速率,并且新的匹配值不等于 0 或 PWM 速率,旧的匹配值不等于 0,那么旧的匹配值将再次被使用。 4. 如果同时请求 PWM 输出置位和清零,清零优先。当置位和清零匹配值相同时,或者置位或清零 121 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 值等于 0 并且其它值等于 PWM 速率时,可能发生这种状况。 5. 如果匹配值超出范围(大于 PMW 速率值) ,将不会发生匹配事件,匹配通道对输出不起作用。 也就是说 PWM 输出将一直保持一种状态,可以为低电平、高电平或是“无变化”输出。 管脚描述 表 136 汇集了所有与 PWM 相关的管脚。 表 136 PWM 管脚汇总 管脚名称 管脚方向 管脚描述 PWM1 输出 PWM 通道 1 输出 PWM2 输出 PWM 通道 2 输出 PWM3 输出 PWM 通道 3 输出 PWM4 输出 PWM 通道 4 输出 PWM5 输出 PWM 通道 5 输出 PWM6 输出 PWM 通道 6 输出 寄存器描述 PWM 功能增加了新的寄存器和寄存器位,见表 137。 表 137 PWM 寄存器映射 名称 PWMIR 描述 访问 复位值* 地址 0 0xE0014000 R/W 0 0xE0014004 R/W 0 0xE0014008 PWM 中断寄存器 可以写 IR 来清除中断。可读取 IR 来识别哪个中断源被挂起。 R/W PWM 定时器控制寄存器 TCR 用于控制定时器计数器功能。定时器计数器可通 PWMTCR 过 TCR 禁止或复位。 PWM 定时器计数器 32 位 TC 每经过 PR+1 个 pclk 周期加 1。TC 通过 TCR 进行 PWMTC 控制。 PWMPR PWM 预分频寄存器 TC 每经过 PR+1 个 pclk 周期加 1。 R/W 0 0xE001400C PWMPC PWM 预分频计数器 每当 32 位 PC 的值增加到等于 PR 中保存的值时,TC 加 1。 R/W 0 0xE0014010 R/W 0 0xE0014014 PWMMR0 和/或产生中断。此外,MR0 和 TC 的匹配将置位所有单边沿模式的 PWM 输出, R/W 0 0xE0014018 R/W 0 0xE001401C R/W 0 0xE0014020 R/W 0 0xE0014024 R/W 0 0xE0014040 PWMMCR PWM 匹配控制寄存器 MCR 用于控制在匹配时是否产生中断或复位 TC。 PWM 匹配寄存器 0 MR0 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC 并置位双边沿模式下的 PWM1 输出。 PWM 匹配寄存器 1 MR1 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC PWMMR1 和/或产生中断。此外,MR1 和 TC 的匹配将清零单边沿模式或双边沿模式下的 PWM1,并置位双边沿模式下的 PWM2 输出。 PWM 匹配寄存器 2 MR2 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC PWMMR2 和/或产生中断。此外,MR2 和 TC 的匹配将清零单边沿模式或双边沿模式下的 PWM2,并置位双边沿模式下的 PWM3 输出。 PWM 匹配寄存器 3 MR3 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC PWMMR3 和/或产生中断。此外,MR3 和 TC 的匹配将清零单边沿模式或双边沿模式下的 PWM3,并置位双边沿模式下的 PWM4 输出。 PWM 匹配寄存器 4 MR4 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC PWMMR4 和/或产生中断。此外,MR4 和 TC 的匹配将清零单边沿模式或双边沿模式下的 PWM4,并置位双边沿模式下的 PWM5 输出。 122 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 续上表… 名称 描述 访问 复位值* 地址 R/W 0 0xE0014044 R/W 0 0xE0014048 R/W 0 0xE001404C R/W 0 0xE0014050 PWM 匹配寄存器 5 MR5 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC PWMMR5 和/或产生中断。此外,MR5 和 TC 的匹配将清零单边沿模式或双边沿模式下的 PWM5,并置位双边沿模式下的 PWM6 输出。 PWM 匹配寄存器 6 MR6 可通过 MCR 设定为在匹配时复位 TC,停止 TC 和 PC PWMMR6 和/或产生中断。此外,MR6 和 TC 的匹配将清零单边沿模式或双边沿模式下的 PWM6, PWM 控制寄存器 使能 PWM 输出并选择 PWM 通道类型为单边沿或双边沿控 PWMPCR 制。 PWMLER PWM 锁存使能寄存器 使能使用新的 PWM 匹配值。 PWM 中断寄存器(PWMIR - 0xE0014000) 中断寄存器包含 11 个位(见表 138) 。其中 7 个位用于匹配中断,4 个位保留将来之用。如果有中断产 生,PWMIR 中的对应位会置位,否则为 0。向对应的 IR 位写入 1 会复位中断。写入 0 无效。 表 138 中断寄存器(PWMIR - 0xE0014000) PWMIR 功能 描述 复位值 0 PWMMR0 中断 PWM 匹配通道 0 的中断标志 0 1 PWMMR1 中断 PWM 匹配通道 1 的中断标志 0 2 PWMMR2 中断 PWM 匹配通道 2 的中断标志 0 3 PWMMR3 中断 PWM 匹配通道 3 的中断标志 0 4 保留 应用程序不能向该位写入 1 0 5 保留 应用程序不能向该位写入 1 0 6 保留 应用程序不能向该位写入 1 0 7 保留 应用程序不能向该位写入 1 0 8 PWMMR4 中断 PWM 匹配通道 4 的中断标志 0 9 PWMMR5 中断 PWM 匹配通道 5 的中断标志 0 10 PWMMR6 中断 PWM 匹配通道 6 的中断标志 0 PWM 定时器控制寄存器(PWMTCR - 0xE0014004) PWM 定时器控制寄存器(PWMTCR)用于控制 PWM 定时器计数器的操作。每个位的功能见表 139。 表 139 PWM 定时器控制寄存器(PWMTCR - 0xE0014004) PWMTCR 功能 0 计数器使能 1 计数器复位 2 保留 描述 为 1 时,PWM 定时器计数器和 PWM 预分频计数器使能计数。为 0 时, 计数器被禁止。 为 1 时,PWM 定时器计数器和 PWM 预分频计数器在 pclk 的下一个上 升沿同步复位。计数器在 TCR[1]恢复为 0 之前保持复位状态。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 123 复位值 0 0 NA 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 PWMTCR 功能 描述 复位值 为 1 时,PWM 模式使能。PWM 模式将映像寄存器连接到匹配寄存器。 只有在 PWMLER 中的相应位置位后发生的匹配 0 事件才会使程序写入 3 PWM 使能 匹配寄存器的值生效。需要注意的是,决定 PWM 速率(PWM 匹配 0) 0 的匹配寄存器必须在使能 PWM 之前设定。否则不会发生使映像寄存器 内容生效的匹配事件。 PWM 定时器计数器(PWMTC - 0xE0014008) 当预分频计数器到达计数的上限时,32 位定时器计数器加 1。如果 PWMTC 在到达计数上限之前没有 被复位,它将一直计数到 0xFFFFFFFF 然后翻转到 0x00000000。该事件不会产生中断。如果需要,可用匹 配寄存器检测溢出。 PWM 预分频寄存器(PWMPR - 0xE001400C) 32 位预分频寄存器指到预分频寄存器的最大值。 PWM 预分频计数器寄存器(PWMPC - 0xE0014010) 32 位 PWM 预分频计数器使用某个常量来控制 pclk 的分频,再使之用于 PWM 定时器计数器。这样可 实现控制定时器分辨率和定时器溢出时间之间的关系。预分频计数器每个 pclk 周期加 1。当其到达 PWM 预分频计数器中保存的值时,PWM 定时器计数器加 1,PWM 预分频计数器在下个 pclk 周期复位。这样, 当 PWMPR=0 时,PWM TC 每 1 个 pclk 周期加 1,当 PWMPR=1 时,PWMTC 每 2 个 pclk 周期加 1。 PWM 匹配寄存器(PWMMR0 –PWMMR6) 32 位 PWM 匹配寄存器值连续与 PWM 定时器计数值相比较。当两个值相等时自动触发相应动作。这 些动作包括产生中断,复位 PWM 定时器计数器或停止定时器。所执行的动作由 PWMMCR 寄存器控制。 PWM 匹配控制寄存器(PWMMCR - 0xE0014014) PWM 匹配控制寄存器用于控制在发生匹配时所执行的操作。每个位的功能见表 140。 表 140 PWM 匹配控制寄存器(PWMMCR – 0xE0014014) PWMMCR 功能 描述 复位值 0 中断(PWMMR0) 为 1 时,PWMMR0 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。 0 1 复位(PWMMR0) 为 1 时,PWMMR0 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。 0 2 停止(PWMMR0) 3 中断(PWMMR1) 为 1 时,PWMMR1 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。 0 4 复位(PWMMR1) 为 1 时,PWMMR1 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。 0 5 停止(PWMMR1) 6 中断(PWMMR2) 为 1 时,PWMMR2 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。 0 7 复位(PWMMR2) 为 1 时,PWMMR2 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。 0 8 停止(PWMMR2) 9 中断(PWMMR3) 为 1 时,PWMMR3 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。 0 10 复位(PWMMR3) 为 1 时,PWMMR3 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。 0 为 1 时,PWMMR0 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使 PWMTCR[0]复位为 0。为 0 时,该特性被禁止。 0 为 1 时,PWMMR1 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使 PWMTCR[0]复位为 0。为 0 时,该特性被禁止。 0 为 1 时,PWMMR2 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使 PWMTCR[0]复位为 0。为 0 时,该特性被禁止。 124 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 PWMMCR 功能 描述 复位值 11 停止(PWMMR3) 12 中断(PWMMR4) 为 1 时,PWMMR4 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。 0 13 复位(PWMMR4) 为 1 时,PWMMR4 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。 0 14 停止(PWMMR4) 15 中断(PWMMR5) 为 1 时,PWMMR5 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。 0 16 复位(PWMMR5) 为 1 时,PWMMR5 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。 0 17 停止(PWMMR5) 18 中断(PWMMR6) 为 1 时,PWMMR6 与 PWMTC 值的匹配将产生中断。为 0 时,该中断被禁止。 0 19 复位(PWMMR6) 为 1 时,PWMMR6 与 PWMTC 值的匹配将使 PWMTC 复位。为 0 时,该特性被禁止。 0 20 停止(PWMMR6) 为 1 时,PWMMR3 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使 0 PWMTCR[0]复位为 0。为 0 时,该特性被禁止。 为 1 时,PWMMR4 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使 0 PWMTCR[0]复位为 0。为 0 时,该特性被禁止。 为 1 时,PWMMR5 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使 0 PWMTCR[0]复位为 0。为 0 时,该特性被禁止。 为 1 时, PWMMR6 与 PWMTC 值的匹配将使 PWMTC 和 PWMPC 停止并使 PWMTCR[0]复位为 0。为 0 时,该特性被禁止。 0 PWM 控制寄存器(PWMPCR - 0xE001404C) PWM 控制寄存器用于使能并选择每个 PMW 通道的类型。每个位的功能详见表 141。 表 141 PWM 控制寄存器(PWMPCR - 0xE001404C) PWMPCR 功能 描述 1:0 保留 2 PWMSEL2 为 0 时,PWM2 选择单边沿控制模式;为 1 时,选择双边沿控制模式。 0 3 PWMSEL3 为 0 时,PWM3 选择单边沿控制模式;为 1 时,选择双边沿控制模式。 0 4 PWMSEL4 为 0 时,PWM4 选择单边沿控制模式;为 1 时,选择双边沿控制模式。 0 5 PWMSEL5 为 0 时,PWM5 选择单边沿控制模式;为 1 时,选择双边沿控制模式。 0 6 PWMSEL6 为 0 时,PWM6 选择单边沿控制模式;为 1 时,选择双边沿控制模式。 0 8:7 保留 9 PWMENA1 为 1 时,使能 PWM1 输出;为 0 时,禁止 PWM1 输出。 0 10 PWMENA2 为 1 时,使能 PWM2 输出;为 0 时,禁止 PWM2 输出。 0 11 PWMENA3 为 1 时,使能 PWM3 输出;为 0 时,禁止 PWM3 输出。 0 12 PWMENA4 为 1 时,使能 PWM4 输出;为 0 时,禁止 PWM4 输出。 0 13 PWMENA5 为 1 时,使能 PWM5 输出;为 0 时,禁止 PWM5 输出。 0 14 PWMENA6 为 1 时,使能 PWM6 输出;为 0 时,禁止 PWM6 输出。 0 15 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 复位值 NA NA NA PWM 锁存使能寄存器(PWMLER - 0xE0014050) 当 PWM 匹配寄存器用于产生 PWM 时,PWM 锁存使能寄存器用于控制 PWM 匹配寄存器的更新。当 定时器处于 PWM 模式时如果软件对 PWM 匹配寄存器位置执行写操作,写入的值将保存在一个映像寄存 ,如果对应的锁存使能寄存器 器中。当 PWM 匹配 0 事件发生时(在 PWM 模式下,通常也会复位定时器) 位已经置位, 那么映像寄存器的内容将传送到实际的匹配寄存器中。 此时, 新的值将生效并决定下一个 PWM 周期。当发生新值传送时,LER 中的所有位都自动清零。在 PWMLER 中相应位置位和 PWM 匹配 0 事件 发生之前,任何写入 PWM 匹配寄存器的值都不会影响 PWM 操作。 125 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 例如,当 PWM2 配置为双边沿操作并处于运行中时,改变定时的典型事件顺序如下: 将新值写入 PWM 匹配 1 寄存器; 将新值写入 PWM 匹配 2 寄存器; 写 PWMLER,同时置位 bit1 和 bit2; 更改的值将在下一次定时器复位时(当 PWM 匹配 0 事件发生时)生效。 写两个 PWM 匹配寄存器的顺序并不重要,因为在写 PWMLER 之前,写入的新匹配值都无效。这样 就确保了两个值同时生效。如果使用单个值,也可用同样的方法更改。 PWMLER 中所有位的功能如表 140 所示。 表 140 PWM 锁存使能寄存器(PWMLER - 0xE0014050) 功能 PWMLER 0 1 2 3 4 5 6 使能 PWM 匹配 0 锁存 使能 PWM 匹配 1 锁存 使能 PWM 匹配 2 锁存 使能 PWM 匹配 3 锁存 使能 PWM 匹配 4 锁存 使能 PWM 匹配 5 锁存 使能 PWM 匹配 6 锁存 保留 7 描述 复位值 将该位置位允许最后写入 PWM 匹配 0 寄存器的值在由 PWM 匹配事 件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器 0 (PWMMCR)的描述。 将该位置位允许最后写入 PWM 匹配 1 寄存器的值在由 PWM 匹配事 件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器 0 (PWMMCR)的描述。 将该位置位允许最后写入 PWM 匹配 2 寄存器的值在由 PWM 匹配事 件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器 0 (PWMMCR)的描述。 将该位置位允许最后写入 PWM 匹配 3 寄存器的值在由 PWM 匹配事 件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器 0 (PWMMCR)的描述。 将该位置位允许最后写入 PWM 匹配 4 寄存器的值在由 PWM 匹配事 件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器 0 (PWMMCR)的描述。 将该位置位允许最后写入 PWM 匹配 5 寄存器的值在由 PWM 匹配事 件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器 0 (PWMMCR)的描述。 将该位置位允许最后写入 PWM 匹配 6 寄存器的值在由 PWM 匹配事 件 引 起 的 下 次 定 时 器 复 位 时 生 效 。 见 PWM 匹 配 控 制 寄 存 器 0 (PWMMCR)的描述。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 16. A/D 转换器 特性 1 个(LPC2131/2132)或 2 个(LPC2138)10 位逐次逼近式模数转换器 8 个管脚复用为输入脚 掉电模式 测量范围:0~3V 10 位转换时间>=2.44us 一个或多个输入的 Burst 转换模式 可选择由输入跳变或定时器匹配信号触发转换 2 个转换器的全局启动命令(LPC2138) 126 NA 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 描述 A/D 转换器的基本时钟由 VPB 时钟提供。每个转换器包含一个可编程分频器,可将时钟调整至逐步逼 近转换所需的 4.5MHz(最大) 。完全满足精度要求的转换需要 11 个这样的时钟。 管脚描述 表 143 A/D 管脚描述 管脚名称 类型 管脚描述 ADO7:0 输入 模拟输入。A/D 转换器单元可测量输入信号的电压。注意:这些模拟输入通 常连接到管脚上,即使管脚复用寄存器将它们设定为端口管脚。通过将这些 & 管脚驱动成端口输出来实现 A/D 转换器的简单自测。 AD1.7:0 注:当使用 A/D 转换器时,模拟输入管脚的信号电平在任何时候都不能大于 (LPC2138) V3A,否则,读出的 A/D 值无效。如果在应用中未使用 A/D 转换器,则 A/D 输入管脚用作可承受 5V 电压的数字 I/O 口。 Vref 参考电压 VDDA,VSSA 电源 参考电压。该管脚连接到 A/D 转换器的 VrefP 信号。 模拟电源和地。它们分别与标称为 V3 和 VSSD 的电压相同,但为了降低噪声 和出错几率,两者应当隔离。 寄存器描述 A/D 转换器的基址是 0xE003 4000。A/D 转换器包含 2 个寄存器,见表 144。 表 144 A/D 寄存器 名称 ADCR 描述 访问 A/D 控制寄存器。A/D 转换开始 读/写 复位值 0x0000 0001 前,必须写入 ADCR 寄存器来选 AD0 地址& AD1 地址& 名称 名称 0xE003 4000 0xE006 0000 AD0CR AD1CR 0xE003 4004 0xE006 0004 AD0DR AD1DR 择工作模式。 ADDR A/D 数据寄存器。该寄存器包含 读/写 NA ADC 的 DONE 位(当 DONE 位 为 1 时)和 10 位的转换结果。 ADGSR A/D 全局启动寄存器。写入该地 只写 0x00 址(在 A/D0 地址范围内)来同时 ADGSR 0xE003 4008 启动 2 个 A/D 转换器的转换。 A/D 控制寄存器(AD0CR – 0xE0034000, AD1CR – 0xE0060000) 表 145 A/D 控制寄存器(AD0CR – 0xE0034000, AD1CR – 0xE0060000) ADCR 名称 描述 复位值 7:0 SEL 从 AD0.7:0/AD1.7:0 管脚中选择采样和转换输入脚。 对于 AD0, 0x01 位 0 选择管脚 AD0.0,位 7 选择管脚 AD0.7。软件控制模式下, 这些位中只有一位可被置位。硬件扫描模式下,SEL 可为 1~8 中的任何一个值。SEL 为零时等效于为 0x01。 15:8 CLKDIV 将 VPB 时钟(PCK)进行(CLKDIV 的值+1)分频得到 A/D 转换时钟,该时钟必须小于或等于 4.5MHz。典型地,软件将 CLKDIV 编程为最小值来得到 4.5MHz 或稍低于 4.5MHz 的时 钟,但某些情况下(例如高阻抗模拟电源)可能需要更低的时 钟。 127 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 ADCR 名称 描述 复位值 16 BURST 如果该位为 0,转换由软件控制,需要 11 个时钟方能完成。如果 0 该位为 1,A/D 转换器以 CLKS 字段选择的速率重复执行转换, (如果必要)并从 SEL 字段中为 1 的位对应的管脚开始扫描。 A/D 转换器启动后的第一次转换的是 SEL 字段中为 1 的位中的最 低有效位对应的模拟输入,然后是为 1 的更高有效位对应的模拟 输入(如果可用)。重复转换通过清零该位终止,但该位被清零 时并不会中止正在进行的转换。 19:17 该字段用来选择 Burst 模式下每次转换使用的时钟数和所得 CLKS 000 ADDR 转换结果的 LS 位中可确保精度的位的数目,CLKS 可在 11 个时钟(10 位)~4 个时钟(3 位)之间选择:000=11 个时 钟/10 位,001=10 个时钟/9 位,…111=4 个时钟/3 位。 21 1:A/D 转换器处于正常工作模式。 PDN 0 0:A/D 转换器处于掉电模式。 23:22 TEST1:0 这些位用于器件测试。00=正常模式,01=数字测试模式,10= 0 DAC 测试模式,11=一次转换测试模式。 26:24 START 当 BURST 为 0 时, 这些位控制着 A/D 转换是否启动和何时启动: 000 000:不启动(PDN 清零时使用该值) 001:立即启动转换 010 : ADCR 寄 存 器 位 27 选 择 的 边 沿 出 现 在 P0.16/EINT0/ MAT0.2/CAP0.2 脚时启动转换 011:ADCR 寄存器位 27 选择的边沿出现在 P0.22/TD3/CAP0.0/ MAT0.0 脚时启动转换 注意:START 选择 100-111 时 MAT 信号不必输出到管脚上 100:ADCR 寄存器位 27 选择的边沿出现在 MAT0.1 时启动转换 101:ADCR 寄存器位 27 选择的边沿出现在 MAT0.3 时启动转换 110:ADCR 寄存器位 27 选择的边沿出现在 MAT1.0 时启动转换 111:ADCR 寄存器位 27 选择的边沿出现在 MAT1.1 时启动转换 27 EDGE 该位只有在 START 字段为 010~111 时有效。 0 0:在所选 CAP/MAT 信号的下降沿启动转换 1:在所选 CAP/MAT 信号的上升沿启动转换 31:28 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 A/D 数据寄存器(AD0DR – 0xE0034004, AD1DR – 0xE0060004) 表 146 A/D 数据寄存器(AD0DR – 0xE0034004, AD1DR – 0xE0060004) ADDR 名称 5:0 保留 描述 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 128 复位值 0 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 ADDR 名称 描述 复位值 15:6 V/V3A 当 DONE 为 1 时,该字段包含一个二进制数,用来代表 SEL 字段选 X 中的 Ain 脚的电压。该字段根据 VddA 脚上的电压对 Ain 脚的电压进 行划分。该字段为 0 表明 Ain 脚的电压小于,等于或接近于 VssA; 该字段为 0x3FF 表明 Ain 脚的电压接近于,等于或大于 V3A。 为了测试的需要,写入到该字段的数据捕获到移位寄存器,寄存器的 移位时钟为 A/D 转换器时钟。仅当 TEST1:0 为 10 时,寄存器的 MS 位供给 A/D 转换器的 DINSERI 输入。 23:16 保留 保留。这些位读出时为 0。用户不应将其置位。 0 26:24 CHN 这些位包含的是 LS 位的转换通道。 X 29:27 保留 保留。这些位读出为 0。用户不应将其置位。 0 30 OVERUN Burst 模式下,如果在转换产生 LS 位的结果前一个或多个转换结果被 0 丢失和覆盖,该位置位。在非 FIFO 操作中,该位通过读 ADDR 寄存 器清零。 31 A/D 转换结束时该位置位。该位在 ADDR 被读出和 ADCR 被写入时 DONE 0 清零。如果 ADCR 在转换过程中被写入,该位置位,启动一次新的转 换。 A/D 全局启动寄存器(ADGSR – 0xE0034008) 表 147 A/D 全局启动寄存器(ADGSR – 0xE0034008) ADGSR 名称 描述 复位值 15:0 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 16 BURST 如果该位为 0,转换由软件控制,需要 11 个时钟方能完成。如 0 果该位为 1,A/D 转换器以 CLKS 字段选择的速率重复执行转 换, (如果必要)并从 SEL 字段中为 1 的位对应的管脚开始扫 描。A/D 转换器启动后的第一次转换的是 SEL 字段中为 1 的位 中的最低有效位对应的模拟输入,然后是为 1 的更高有效位对 应的模拟输入(如果可用)。重复转换通过清零该位终止,但 该位被清零时并不会中止正在进行的转换。 23:17 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 26:24 START 当 BURST 为 0 时,这些位控制着 A/D 转换是否启动和何时启 000 动: 000:不启动(PDN 清零时使用该值) 001:立即启动转换 010 : 寄 存 器 位 27 选 择 的 边 沿 出 现 在 P0.16/EINT0/ MAT0.2/CAP0.2 脚时启动转换 011 : 寄 存 器 位 27 选 择 的 边 沿 出 现 在 P0.22/TD3/CAP0.0/ MAT0.0 脚时启动转换 注意:START 选择 100-111 时 MAT 信号不必输出到管脚上 100:寄存器位 27 选择的边沿出现在 MAT0.1 时启动转换 101:寄存器位 27 选择的边沿出现在 MAT0.3 时启动转换 110:寄存器位 27 选择的边沿出现在 MAT1.0 时启动转换 111: 寄存器位 27 选择的边沿出现在 MAT1.1 时启动转换 129 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 ADGSR 名称 27 EDGE 描述 该位只有在 START 字段为 010~111 时有效。 复位值 0 0:在所选 CAP/MAT 信号的下降沿启动转换 1:在所选 CAP/MAT 信号的上升沿启动转换 保留 31:28 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 操作 硬件触发转换 如果 ADCR 的 BURST 位为 0 且 START 字段的值包含在 010-111 之内,当所选管脚或定时器匹配信号 发生跳变时 A/D 转换器启动一次转换。也可选择在 4 个匹配信号中任何一个的指定边沿转换,或者在 2 个 捕获/匹配管脚中任何一个的指定边沿转换。将所选端口的管脚状态或所选的匹配信号与 ADCR 位 27 相异 或所得的结果用作边沿检测逻辑。 时钟产生 通常,我们非常希望时钟分频器(利用它来得到 4.5MHz 的转换时钟)在 A/D 转换器空闲时保持复位 状态,以便在 ADCR 的 START 字段被写入 01 或所选边沿出现在选择的信号上时可立刻启动采样时钟。这 个特性可以节省功率,尤其适用于 A/D 转换器很少使用的场合。 中断 当 DONE 位为 1 时,中断请求声明到向量中断控制器(VIC) 。软件通过 VIC 中 A/D 转换器的中断使 能位来控制是否产生中断。DONE 在 ADDR 读出时清零。 精度和数字接收器 当 A/D 转换器用来测量 AIN 脚的电压时, 并不理会管脚在管脚选择寄存器中的设置 (见管脚连接模块) , 但是通过禁能管脚的数字接收器来选择 AIN 功能可以提高转换精度。 17. D/A 转换器(仅为 LPC2132/2138) 特性 10 位数模转换器 电阻串连结构 缓冲输出 掉电模式 选择的转换速率与功率有关 管脚描述 表 148 D/A 管脚描述 管脚名称 类型 管脚描述 Aout 输入 模拟输出。当 DACR 写入一个新值选择好设定时间后,该管脚上的电压(相 对 VssA)为 VALUE /1024*Vref。 Vref 参考电压 VDDA,VSSA 电源 参考电压。该管脚连接到 A/D 转换器的 VrefP 信号。 模拟电源和地。它们分别与标称为 V3 和 VSSD 的电压相同,但为了降低噪声 和出错几率,两者应当隔离。 130 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 寄存器描述 D/A 转换寄存器(DACR – 0xE006C000) 该寄存器是一个读/写寄存器,它包含用于模拟转换的数字值和一个用来调节转换性能和功率两者之间 的关系的位。寄存器的位 5:0 保留,供给更高性能的 D/A 转换器将来使用。 表 149 D/A 转换寄存器(DACR – 0xE006C000) ADCR 名称 描述 复位值 5:0 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 15:6 VALUE 当该字段写入一个新值选择好设定时间后,AOUT 管脚上的电压 0 (相对 VssA)为 VALUE /1024*Vref。 16 BIAS 该位为 0 时,DAC 的设定时间最大为 1us,最大电流为 700uA。 0 该位为 1 时,DAC 的设定时间为 2.5us,最大电流为 350uA。 保留 31:17 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 0 操作 PINSEL1 寄存器的位 19:18 控制着 DAC 的使能和管脚 P0.25/AD0.4/AOUT 的状态。当这两位的值为 10 时,DAC 接通有效。当 AOUT 管脚的电阻大于或等于某一个值(待定)时 BIAS 位给定的设定时间才有效。 如果电阻小于这个值,则设定时间将比规定的时间更长。有关电阻和设定时间的关系将在最终定稿的数据 手册中详细描述。 实时时钟 18. 特性 测量保持日历或时钟的时间通路 超低功耗设计,支持电池供电系统 提供秒、分、小时、日、月、年和星期 指定的 32kHz 振荡器或可编程 VPB 时钟预分频器 专用电源管脚可与电池或 3.3V 的电压相连 描述 实时时钟(RTC)提供一套计数器在系统上电和关闭操作时对时间进行测量。RTC 消耗的功率非常低。 LPC2131/2132/2138 的 RTC 时钟可由独立的 32.768kHz 振荡器或基于 VPB 时钟的可编程预分频器来提供。 另外,RTC 还具有专用的电源管脚 Vbat,可连接到电池或其它器件使用的相同的 3.3V 电压上。 131 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 结构 clk32k 基准时钟分频器 (预分频器) 时钟发生器 选通 Clk1 CCLK 时间计数器 计数器使能 比较器 计数器增量 中断使能 报警寄存器 报警屏蔽寄存器 中断发生器 图 51 RTC 方框图 寄存器描述 RTC 包含了许多寄存器。地址空间按照功能分成 4 个部分。前 8 个地址为混合寄存器组。第二部分的 8 个地址为定时器计数器组,第三部分的 8 个地址为报警寄存器组。最后一部分为基准时钟分频器。 实时时钟模块所包含的寄存器见表 150。详细的描述见后面的寄存器。 表 150 实时时钟寄存器映射 名称 规格 ILR 2 CTC 描述 访问 复位值 地址 中断位置寄存器 R/W * 0xE0024000 15 时钟节拍计数器 RO * 0xE0024004 CCR 4 时钟控制寄存器 R/W * 0xE0024008 CIIR 8 计数器递增中断寄存器 R/W * 0xE002400C AMR 8 报警屏蔽寄存器 R/W * 0xE0024010 CTIME0 (32) 完整时间寄存器 0 RO * 0xE0024014 CTIME1 (32) 完整时间寄存器 1 RO * 0xE0024018 CTIME2 (32) 完整时间寄存器 2 RO * 0xE002401C SEC 6 秒寄存器 R/W * 0xE0024020 MIN 6 分寄存器 R/W * 0xE0024024 HOUR 5 小时寄存器 R/W * 0xE0024028 DOM 5 日期(月)寄存器 R/W * 0xE002402C DOW 3 星期寄存器 R/W * 0xE0024030 DOY 9 日期(年)寄存器 R/W * 0xE0024034 MONTH 4 月寄存器 R/W * 0xE0024038 132 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 名称 规格 YEAR 12 ALSEC 描述 访问 复位值 地址 年寄存器 R/W * 0xE002403C 6 秒报警值 R/W * 0xE0024060 ALMIN 6 分报警值 R/W * 0xE0024064 ALHOUR 5 小时报警值 R/W * 0xE0024068 ALDOM 5 日期(月)报警值 R/W * 0xE002406C ALDOW 3 星期报警值 R/W * 0xE0024070 ALDOY 9 日期(年)报警值 R/W * 0xE0024074 ALMON 4 月报警值 R/W * 0xE0024078 ALYEAR 12 年报警值 R/W * 0xE002407C PREINT 13 预分频值,整数部分 R/W 0 0xE0024080 PREFRAC 15 预分频值,小数部分 R/W 0 0xE0024084 * RTC 当中除预分频器部分之外的其它寄存器都不受器件复位的影响。如果 RTC 使能,这些寄存器必须 通过软件来初始化。 RTC 中断 中断的产生由中断位置寄存器 (ILR)、计数器递增中断寄存器 (CIIR)、报警寄存器和报警屏蔽寄存器 (AMR) 控制。只有转换到中断状态才能产生中断。ILR 单独使能 CIIR 和 AMR 中断。CIIR 中的每个位都 对应一个时间计数器。如果 CIIR 使能用于一个特定的计数器,那么该计数器的值每增加一次就产生一个中 断。报警寄存器允许用户设定产生中断的日期或时间。AMR 提供一个屏蔽报警比较的机制。如果所有非屏 蔽报警寄存器与它们对应的时间计数器的值相匹配时,则会产生中断。 RTC 中断(如果 RTC 工作在其自身的 RTCX1-2 管脚的振荡器下)可使 LPC2131/2132/2138 退出掉电 模式。当 RTC 中断使能产生唤醒并且所选中断事件出现时,启动 XTAL 1/2 管脚相关的振荡器唤醒周期。 有关 RTC 唤醒处理的内容详见第 34 页的中断唤醒寄存器(INTWAKE-0xE01FC144)和 51 页的唤醒定时器。 混合寄存器组 表 151 所示为 A[6:2]的 0 到 7 的寄存器。详见下面的描述。 表 15 混合寄存器 地址 名称 规格 描述 2 中断位置寄存器。读出的该位置寄存器的值指示了中断 0xE0024000 ILR 0xE0024004 CTC 15 时钟节拍计数器。该寄存器的值来自时钟分频器。 RO 0xE0024008 CCR 4 时钟控制寄存器。控制时钟分频器的功能。 RW CIIR 8 计数器递增中断寄存器。当计数器递增时,选择一个计数 0xE002400C 0xE0024010 AMR 8 报警屏蔽寄存器。控制报警寄存器的屏蔽。 RW 0xE0024014 CTIME0 32 完整时间寄存器 0 RO 0xE0024018 CTIME1 32 完整时间寄存器 1 RO 0xE002401C CTIME2 32 完整时间寄存器 2 RO 源。向寄存器的一个位写入 1 来清除相应的中断。 器产生中断。 访问 RW RW 中断位置(ILR - 0xE0024000) 中断位置寄存器为 2 位寄存器,它指定哪些模块产生中断(见表 152) 。向一个位写入 1 会清除相应的 133 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 中断。写入 0 无效。这样程序员可以读取该寄存器并将读出的值回写到寄存器中清除检测到的中断。 表 152 中断位置寄存器(ILR - 0xE0024000) ILR 功能 描述 0 RTCCIF 为 1 时,计数器增量中断模块产生中断。向该位写入 1 清除计数器增量中断。 1 RTCALF 为 1 时,报警寄存器产生中断。向该位写入 1 清除报警中断。 时钟节拍计数器(CTC - 0xE0024004) 时钟节拍计数器只可读。它可通过时钟控制寄存器(CCR)复位为 0。CTC 包含时钟分频计数器位。 表 153 时钟节拍计数器(CTC - 0xE0024004) CTC 功能 0 保留 时钟节拍 15:1 计数器 描述 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 位于秒计数器之前,CTC 每秒计数 32768 个时钟。由于 RTC 预分频器的关系, 这 32768 个时间增量的长度可能并不全部相同。详见基准时钟分频器(预分频 器) 。 时钟控制寄存器(CCR - 0xE0024008) 时钟控制寄存器是一个 5 位寄存器,它控制时钟分频电路的操作。每一位的功能见表 154。 表 154 时钟控制寄存器(CCR - 0xE0024008) CCR 功能 0 CLKEN 1 CTCRST 3:2 CTTEST 描述 时钟使能 当该位为 1 时,时间计数器使能。为 0 时,时间计数器都被禁止,这 时可对其进行初始化。 CTC 复位 为 1 时,时钟节拍计数器复位。在 CCR[1]变为 0 之前,它将一直保 持复位状态。 测试使能 在正常操作中,这些位应当全为 0。 如果该位为 0,时钟节拍计数器计数预分频器的时钟,这与早先的 Philips 嵌入式 4 CLKSRC ARM 系列器件相吻合。如果该位为 1,CTC 计数连接在 RTCX1 和 RTCX2 两端 的 32kHz 振荡器信号。 计数器增量中断寄存器(CIIR-0xE002400C) 计数器增量中断寄存器( CIIR )可使计数器每次增加时产生一次中断。在中断位置寄存器的位 0 (ILR[0])写入 1 之前,该中断一直保持有效。 表 155 计数器增量中断寄存器(CIIR - 0xE002400C) CIIR 功能 描述 0 IMSEC 为 1 时,秒值的增加产生一次中断。 1 IMMIN 为 1 时,分值的增加产生一次中断。 2 IMHOUR 为 1 时,小时值的增加产生一次中断。 3 IMDOM 为 1 时,日期(月)值的增加产生一次中断。 4 IMDOW 为 1 时,星期值的增加产生一次中断。 5 IMDOY 为 1 时,日期(年)值的增加产生一次中断。 6 IMMON 为 1 时,月值的增加产生一次中断。 7 IMYEAR 为 1 时,年值的增加产生一次中断。 报警屏蔽寄存器(AMR - 0xE0024010) 报警屏蔽寄存器(AMR)允许用户屏蔽任意报警寄存器。表 156 所示为 AMR 位与报警寄存器位之间 134 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 的关系。对于报警功能来说,要产生中断,非屏蔽的报警寄存器必须匹配对应的时间计数值。只有当计数 器之间的比较第一次从不匹配到匹配时才会产生中断。向中断位置寄存器(ILR)的位写入 1 会清除相应的 中断。如果所有屏蔽位都置位,报警将被禁止。 表 156 报警屏蔽寄存器位(AMR - 0xE0024010) AMR 功能 描述 0 AMRSEC 为 1 时,秒值不与报警寄存器比较。 1 AMRMIN 为 1 时,分值不与报警寄存器比较。 2 AMRHOUR 为 1 时,小时值不与报警寄存器比较。 3 AMRDOM 为 1 时,日期(月)值不与报警寄存器比较。 4 AMRDOW 为 1 时,星期值不与报警寄存器比较。 5 AMRDOY 6 AMRMON 为 1 时,月值不与报警寄存器比较。 7 AMRYEAR 为 1 时,年值不与报警寄存器比较。 为 1 时,日期(年)值不与报警寄存器比较。 完整时间寄存器 时间计数器的值可选择以一个完整格式读出,程序员只需执行 3 次读操作即可读出所有的时间计数器 值,见表 149,150 和 151。每个寄存器的最低位分别位于 bit0, 8, 16 和 24。 完整时间寄存器为只读寄存器。要更新时间计数器的值,必须对时间计数器寻址。 完整时间寄存器 0(CTIME0 - 0xE0024014) 完整时间寄存器 0 包含的时间值为:秒、分、小时和星期。 表 157 完整时间寄存器 0(CTIME0 - 0xE0024014) CTIME0 功能 描述 31:27 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 26:24 星期 星期值 该值的范围为 0~6。 23:21 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 20:16 小时 小时值 该值的范围为 0~23。 15:14 保留 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 13:8 分 7:6 保留 5:0 秒 分值 该值的范围为 0~59。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 秒值 该值的范围为 0~59。 完整时间寄存器 1(CTIME1 - 0xE0024018) 完整时间寄存器 1 包含的时间值为:日期(月) 、月和年。 表 158 完整时间寄存器 1(CTIME1 - 0xE0024018) CTIME1 功能 31:28 保留 27:16 年 15:12 保留 11:8 月 7:5 保留 4:0 描述 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 年值 该值的范围为 0~4095。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 小时值 该值的范围为 1~12。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 日期(月) 日期(月)值 该值的范围为 1~28, 29, 30 或 31(取决于月份以及是否为闰年) 。 135 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 完整时间寄存器 2(CTIME2 - 0xE002401C) 完整时间寄存器 2 仅包含日期(年) 。 表 159 完整时间寄存器 2(CTIME2 - 0xE002401C) 功能 CTIME2 描述 日期(年) 日期(年)值 该值的范围为 1~365(闰年为 366) 。 11:0 保留 31:12 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 时间计数器组 时间值包含 8 个寄存器,见表 160 和 161。表 161 所示的寄存器可执行读或写操作。 表 160 时间计数器的关系和值 计数器 规格 使能 最小值 最大值 秒 6 Clk1(见图 51) 0 59 分 6 秒 0 59 小时 5 分 0 23 日期(月) 5 小时 1 28, 29, 30 或 31 星期 3 小时 0 6 日期(年) 9 小时 1 365 或 366(闰年) 月 4 日期(月) 1 12 年 12 月或日期(年) 0 4095 表 161 时间计数器寄存器 地址 名称 规格 描述 访问 0xE0024020 SEC 6 秒值 该值的范围为 0~59。 R/W 0xE0024024 MIN 6 分值 该值的范围为 0~59。 R/W 0xE0024028 HOUR 5 小时值 该值的范围为 0~23。 R/W 0xE002402C DOM 5 0xE0024030 DOW 3 日期(月)值 该值的范围为 1~28,29,30 或 31(取决于月份 以及是否为闰年) 。1 星期值 该值的范围为 0~6。1 R/W R/W 1 0xE0024034 DOY 9 日期(年)值 该值的范围为 1~365(闰年为 366) 。 R/W 0xE0024038 MONTH 4 月值 该值的范围为 1~12。 R/W 0xE002403C YEAR 12 年值 该值的范围为 0~4095。 R/W 注: 1. 这些值只能在适当的时间间隔处递增且在定义的溢出点复位。为了使这些值有意义,它们不能进行计算 且必须被正确初始化。 闰年计算 RTC 执行一个简单的位比较,看年计数器的最低两位是否为 0。如果为 0,那么 RTC 认为这一年为闰 年。RTC 认为所有能被 4 整除的年份都为闰年。这个算法从 1901 年到 2099 年都是准确的,但在 2100 年出 错,2100 年并不是闰年。闰年对 RTC 的影响只是改变 2 月份的长度、日期(月)和年的计数值。 报警寄存器组 报警寄存器见表 162。这些寄存器的值与时间计数器相比较。如果所有未屏蔽(见 210 页“报警屏蔽 寄存器(AMR-0xE0024010)”)的报警寄存器都与它们对应的时间计数器相匹配,那么将产生一次中断。 向中断位置寄存器的位 1(ILR[1])写入 1 清除中断。 136 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 162 报警寄存器 地址 名称 规格 描述 访问 0xE0024060 ALSEC 6 秒报警值 R/W 0xE0024064 ALMIN 6 分报警值 R/W 0xE0024068 ALHOUR 5 小时报警值 R/W 0xE002406C ALDOM 5 日期(月)报警值 R/W 0xE0024070 ALDOW 3 星期报警值 R/W 0xE0024074 ALDOY 9 日期(年)报警值 R/W 0xE0024078 ALMON 4 月报警值 R/W 0xE002407C ALYEAR 12 年报警值 R/W RTC 使用注意事项 如果使用 RTC,Vbat 必须连接到 V3 脚或一个独立的电源(外部电池) 。否则,Vbat 应该接地(Vss)。 Vbat 断电时 LPC2131/2132/2138 不能保存 RTC 的状态,如果时钟源丢失、中断或改变,RTC 也无法维持时 间计数。 由于 RTC 有两个可用的时钟(VPB 时钟(pclk)或来自 RTCX1-2 管脚的 32KHz 的信号) ,所选择时钟的 任何中断都会导致时间值的偏移。如果 RTC 初始化成这个时间值或从 RTC 激活后运行的一段时间内出现 了一个错误,它们带来的变化都将影响真实的时钟时间。 RTCX1-2 管脚的信号可随时为 RTC 提供时钟,选择 pclk 作为 RTC 时钟和进入掉电模式会使时间的更 新出现误差。而且,在系统操作过程中(重新配置 PLL、VPB 定时器或 RTC 预分频器)改变 RTC 的时间 基准会使累加时间出现错误。当 RTC 时钟由 pclk 转变为 RTCX 管脚信号时也会出现累加时间误差。 一旦 RTCX1-2 管脚的 32KHz 信号被选择用作 RTC 的时钟源, RTC 可完全独立工作, 与 VPB 时钟(pclk) 无关。因此,在要用到 RTC 且对功耗敏感的应用中(如电池供电设备)可通过使用 RTCX1-2 管脚的信号 和清除 PCONP 功率控制寄存器的 PCRTC 位来降低功耗(见“系统控制模块”一章的“功率控制” ) 。 基准时钟分频器(预分频器) 基准时钟分频器(在下文中称为预分频器)允许从任何频率高于 65.536kHz(2×32.768kHz)的外设时 钟源产生一个 32.768kHz 的基准时钟。这样,不管外设时钟的频率为多少,RTC 总是以正确的速率运行。 预分频器通过一个包含整数和小数部分的值对外设时钟(pclk)进行分频。这样就产生了一个不是恒定频率的 连续输出。有些时钟周期比其它周期多 1 个 pclk 周期。但是每秒钟的计数总数总是 32,768。 基准时钟分频器包含一个 13 位整数计数器和一个 15 位小数计数器。使用该规格的原因如下: 1. 对于 LPC2131/2132/2138 所支持的频率,13 位整数计数器是必要的。可以这样进行计算:频率 160MHz 除以 32768 再减去 1 等于 4881,余数为 26,624。保存 4881 需要 13 个位。13 位实际所能 支持的最高频率为 268.4MHz(32,768×8192) 。 2. 余数的最大值为 32,767,需要 15 位来保存。 表 163 基准时钟分频寄存器 地址 名称 规格 描述 0xE0024080 PREINT 13 预分频值,整数部分 R/W 0xE0024084 PREFRAC 15 预分频值,小数部分 R/W 预分频整数寄存器(PREINT - 0xE0024080) 预分频值的整数部分计算如下: PREINT = int (pclk/32768) – 1。PREINT 的值必须大于等于 1。 137 访问 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 164 预分频整数寄存器(PREINT - 0xE0024080) PREINT 功能 15:13 保留 12:0 描述 复位值 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 预分频整数 包含 RTC 预分频值的整数部分 NA 0 预分频小数寄存器(PREFRAC - 0xE0024084) 预分频值的小数部分计算如下: PREFRAC = pclk – ((PREINT+1)×32768) 表 165 预分频小数寄存器(PREFRAC - 0xE0024084) PREFRAC 功能 15 保留 14:0 描述 复位值 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 预分频小数 包含 RTC 预分频值的小数部分 NA 0 预分频器的使用举例 先假设一个最简单的状况,pclk 频率为 65.537kHz。那么: PREINT = int (pclk/32768) – 1 = 1, PREFRAC = pclk – ((PREINT+1)×32768) = 1 使用此设定,每秒钟有 32,767 次 2 个 pclk 周期计数,1 次 3pclk 周期计数,加起来每秒刚好为 RTC 提 供 32,768 个时钟。 再假设一个比较实际的状况,pclk 频率为 10MHz。那么: PREINT = int (pclk/32768) – 1 = 304, PREFRAC = pclk – ((PREINT+1)×32768) = 5,760 这时,有 5,760 个预分频器输出时钟宽度为 306 (305+1)pclk 周期。余下的时钟宽度为 305 个 pclk 周期。 采用相似的方法可以将任何高于 65.536kHz 的 pclk 频率(每秒钟的周期数必须是偶数)转换成 RTC 的 32kHz 基准时钟。唯一需要注意的是,如果 PREFRAC 不等于 0,那么每秒当中的 32768 个时钟长度是不完 全相同的,有些时钟会比其它时钟多 1 个 pclk 周期。虽然较长的脉冲已经尽可能地分配到剩余的脉冲当中, 但是在希望直接观察时钟节拍计数器的应用中可能需要注意这种“抖动” 。 pclk (VPB 时钟 ) 到时钟节拍计数器 Clk Clk 13 位整数计数器 (递减计数器) 15 位小数计数器 下溢 重装 15 外部重装 13 组合逻辑 15 13 位重装整数计数器 15 位小数计数器 (PREINT) (PREFRAC) 13 VPB 总线 15 图 52 RTC 预分频器方框图 预分频器操作 图 52 预分频器模块中被称为“组合逻辑”的模块决定了何时 13 位 PREINT 计数器的递减操作延长 1 个 pclk。为了使插入的延长周期数目正确并对它们进行合理地分配,组合逻辑将 PREFRAC 的每一位与 15 位小数计数器的值对应起来。这种对应关系如表 166 所示。 138 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 例如,如果 PREFRAC 的位 14 为 1(表示小数 1/2) ,则 13 位计数器计数半个周期时延长。当小数计 数器的 LSB 位为 1 时,组合逻辑将使每次计数变化(每当小数计数器的 LSB 位为 1 时)的时间延长 1 个 pclk,并尽量平均分配脉冲宽度。类似地,PREFRAC 的位 13 为 1(表示小数 1/4)时 13 位计数器计数 1/4 个周期(每当小数计数器的低 2 位=10 时)时延长。 表 166 整数计数器重装值递增时预分频器的情况 PREFRAC 位 小数计数器 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 --- ---- ---- ---1 1 - - - - - - - - - - - - - - --- ---- ---- --10 - 1 - - - - - - - - - - - - - --- ---- ---- -100 - - 1 - - - - - - - - - - - - --- ---- ---- 1000 - - - 1 - - - - - - - - - - - --- ---- ---1 0000 - - - - 1 - - - - - - - - - - --- ---- --10 0000 - - - - - 1 - - - - - - - - - --- ---- -100 0000 - - - - - - 1 - - - - - - - - --- ---- 1000 0000 - - - - - - - 1 - - - - - - - --- ---1 0000 0000 - - - - - - - - 1 - - - - - - --- --10 0000 0000 - - - - - - - - - 1 - - - - - --- -100 0000 0000 - - - - - - - - - - 1 - - - - --- 1000 0000 0000 - - - - - - - - - - - 1 - - - --1 0000 0000 0000 - - - - - - - - - - - - 1 - - -10 0000 0000 0000 - - - - - - - - - - - - - 1 - 100 0000 0000 0000 - - - - - - - - - - - - - - 1 19. 看门狗 特性 如果没有周期性重装,则产生片内复位 调试模式 由软件使能,但要求禁止硬件复位或看门狗复位/中断 错误/不完整的喂狗时序会导致复位/中断(如果使能) 指示看门狗复位的标志 带内部预分频器的可编程 32 位定时器 可选择 tpclk×4 倍数的时间周期:从(tpclk×256×4) 到 (tpclk×232×4) 应用 看门狗的用途是使微控制器在进入错误状态后的一定时间内复位。当看门狗使能时,如果用户程序没 有在周期时间内喂狗(重装) ,看门狗会产生一个系统复位。 有关片内看门狗和外围功能的相互作用,尤其是复位和引导过程的关系,请参考本文“复位”的内容。 描述 看门狗包括一个 4 分频的预分频器和一个 32 位计数器。时钟通过预分频器输入定时器。定时器递减计 数。定时器递减的最小值为 0xFF。如果设置一个小于 0xFF 的值,系统会将 0xFF 装入计数器。因此最小看 139 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 门狗间隔为(tpclk×256×4),最大间隔为(tpclk×232×4),两者都是 tpclk×4 的倍数。看门狗应当根据下面的方 法来使用: - 在 WDTC 寄存器中设置看门狗定时器的固定装载值 - 在 WDMOD 寄存器中设置模式 - 通过向 WDFEED 寄存器顺序写入 0xAA 和 0x55 启动看门狗 - 在看门狗向下溢出之前应当再次喂狗以防止复位/中断 当看门狗计数器向下溢出时,程序计数器将从 0x00000000 开始,和外部复位一样。可以检查看门狗超 时标志(WDTOF)来确定看门狗是否产生复位条件。WDTOF 标志必须由软件清零。 寄存器描述 看门狗包含 4 个寄存器,见表 167。 表 167 看门狗寄存器映射 名称 描述 看门狗模式寄存器 WDMOD WDTC WDFEED 该寄存器包含看门狗定时器的基本模 式和状态。 复位值* 地址 读/设置 0 0xE0000000 读/写 0xFF 0xE0000004 只写 NA 0xE0000008 只读 0xFF 0xE000000C 看门狗定时器常数寄存器 该寄存器决定超时值。 看门狗喂狗寄存器 向该寄存器顺序写入 AAh 和 55h 使看 门狗定时器重新装入预设值。 看门狗定时器值寄存器 WDTV 访问 该寄存器读出看门狗定时器的当 前值。 看门狗模式寄存器(WDMOD - 0xE0000000) WDMOD 寄存器通过 WDEN 和 RESET 位的组合来控制看门狗的操作。 WDEN WDRESET 0 X 看门狗关闭时的调试/操作 1 0 带看门狗中断的调试,但没有 WDRESET 1 1 带看门狗中断和 WDRESET 的操作 一旦 WDEN 和/或 WDRESET 位设置,就无法使用软件将其清零。这两个标志由外部复位或看门狗定 时器溢出清零。 WDTOF 当看门狗发生超时,看门狗超时标志置位。该标志由软件清零。 WDINT 当看门狗发生超时,看门狗中断标志置位。产生的任何复位都会使该位清零。 表 168 看门狗模式寄存器(WDMOD - 0xE0000000) WDMOD 功能 描述 复位值 0 WDEN 看门狗中断使能位(只能置位) 0 1 WDRESET 看门狗复位使能位(只能置位) 0 2 WDTOF 看门狗超时标志 3 WDINT 看门狗中断标志(只读) 7:4 保留 0(仅在外部复位后) 保留,用户软件不要向其写入 1。从保留位读出的值未被 定义。 0 NA 看门狗定时器常数寄存器(WDTC - 0xE0000004) WDTC 寄存器决定看门狗超时值。当喂狗时序产生时,WDTC 的内容重新装入看门狗定时器。它是一 个 32 位寄存器,低 8 位在复位时设置为 1。写入一个小于 0xFF 的值会使 0xFF 装入 WDTC,因此超时的 最小时间间隔为 tpclk×256×4。 140 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 169 看门狗常数寄存器(WDTC - 0xE0000004) WDTC 功能 31:0 计数值 描述 复位值 看门狗超时间隔 0xFF 看门狗喂狗寄存器(WDFEED - 0xE0000008) 向该寄存器写入 0xAA,然后写入 0x55 会使 WDTC 的值重新装入看门狗定时器。如果看门狗通过 WDMOD 寄存器使能,该操作还将启动看门狗运行。置位 WDMOD 中的 WDEN 位不足以使能看门狗。在 看门狗能够产生中断/复位之前,必须完成一次有效的喂狗时序。否则,看门狗将忽略喂狗错误。向 WDFEED 寄存器写入 0xAA 的下一个操作应当是向 WDFEED 寄存器写入 0x55,除非看门狗被触发。在一个喂狗时 序中,一次对看门狗定时器寄存器不正确的访问之后第二个 pclk 周期将产生中断/复位。 表 170 看门狗喂狗寄存器(WDFEED - 0xE0000008) WDFEED 功能 7:0 喂狗 描述 复位值 喂狗值应当为 0xAA,然后是 0x55。 未定义 看门狗定时器值寄存器(WDTV - 0xE000000C) WDTV 寄存器用于读取看门狗定时器的当前值。 表 171 看门狗定时器值寄存器(WDTV - 0xE000000C) WDTV 功能 31:0 计数 描述 复位值 当前定时器值 0xFF 方框图 看门狗方框图如图 53 所示。 喂狗错误 WDTC 喂狗时序 WDFEED 喂狗正确 pclk 32位倒计数器 /4 溢出 使能计数器 1 WDTV 寄存器 当前WDT计数 映像位 WDMOD 寄存器 WDEN 2 WDTOF WDINT WDRESET 2 1. 计数器只有当WDEN位置位并且执行了一个 有效喂狗时序时才可使能 2. WDEN和WDRESET只能组合使用。一旦被置位,它们只有 在看门狗溢出或发生外部复位时才能被清零 图 53 看门狗方框图 20. FLASH 存储器系统和编程 本章讲述了 Boot 装载程序以及在系统编程(ISP)和在应用中编程(IAP)接口。 141 复位 中断 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 下章描述的是 Flash 编程逻辑,它是 APB 的一个物理接口,用来真正实现 Flash 编程,Boot 装载程序 也利用它来实现 ISP 和 IAP 编程。 FLASH BOOT 装载程序 Boot 装载程序控制复位后的初始化操作,并提供实现 Flash 编程的方法。BOOT 装载器可启动对空片 的编程、已编程器件的擦除和再编程以及在运行的系统中由应用程序对 Flash 存储器进行编程。 特性 在系统编程:在系统编程 (ISP)通过 boot 装载程序和串口对片内 Flash 存储器进行编程和再编程。 通常用于最终用户板上器件的编程。 在应用中编程:最终用户代码直接执行在应用编程 (IAP)对片内 Flash 存储器进行擦除和编程操 作。 应用 Flash boot 装载程序同时提供片内 Flash 存储器的 ISP 和 IAP 编程接口。 描述 Flash boot 装载程序代码在器件上电或复位时执行。装载程序可执行 ISP 命令处理器或用户应用代码。 复位后 P0.14 的低电平被认为是启动 ISP 命令处理器的外部硬件请求。该管脚由软件采样。假定在 RST 脚 产生上升沿时 X1 管脚上有正确的信号,在 P0.14 被采样之前最多为 3ms 并决定执行用户代码还是 ISP 处理 程序。如果 P0.14 采样为低电平并且看门狗溢出标志置位,启动 ISP 命令处理器的外部硬件请求将被忽略。 如果没有外部请求(P0.14 复位后采样为高电平) ,那么将搜索有效的用户程序。如果找到有效的用户程序, 执行的控制就转移给用户程序。如果没有找到有效的用户程序,那么就调用自动波特率程序。 管脚 P0.14 作为 ISP 硬件请求时要特别注意。由于 P0.14 在复位后处于高阻模式,用户需要提供外部硬 件(上拉电阻或其它器件)使管脚处于一个确定的状态。否则可能导致非预期的进入 ISP 模式。 复位后的存储器映射 Boot block 规格为 12kB,它位于片内 Flash 存储器最顶端的部分(从 0x0007 D000 开始) 。在任何复位 后,整个 Boot block 映射到片内存储器空间的顶端,也就是说 Boot block 出现在存储器从地址 0x7FFF D000 的区域。Flash boot 装载程序运行在这部分存储器区域,但 ISP 和 IAP 程序使用部分片内 RAM。RAM 的使 用在稍后讲述。中断向量位于片内 Flash 存储器的 Boot block 当中,它在复位后被激活,即 Boot block 的最 低 64 字节也出现在存储器从地址 0x0000 0000 的区域。复位向量包含一条跳转指令,用来跳转到 Flash boot 装载程序的入口。 2.0 GB 12K byte Boot Block 0x7FFF FFFF 从Flash存储器顶端重新映射 2.0 GB - 12KB (Boot Block 中断向量) 重新映射到更高地址空间的12KB Boot Block 0x7FFF D000 0x000x FFFF 0x0007 D000 片内Flash存储器 0.0 GB 来自Boot Block的有效中断向量 注:存储器区并不是按比例绘制的。 图 54 复位后低地址存储器的映射 142 0x0000 0000 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 有效用户代码的判定标准:保留的 ARM 中断向量位置(0x0000 0014)应当包含剩余中断向量校验和的 2 的 补码。这样就使所有向量的校验和为 0。boot 装载程序代码禁止中断向量在 boot block 内重叠,然后计算 Flash 扇区 0 当中的中断向量的校验和。如果结果匹配,那么通过将 0x0000 0000 装入程序计数器使执行控 制权转移给用户代码。此后,用户 Flash 复位扇区应当包含一条跳转到用户代码的跳转指令。 如果结果不匹配,那么自动波特率程序通过串口 0 与主机进行同步。主机应当发送一个同步字符“?” (0x3F)并等待响应。主机的串口应设定为 8 个数据位、1 个停止位和无奇偶校验。自动波特率程序根据 自身的频率测量接收到的同步字符的位时间并对串口波特率发生器进行编程。它还向主机发送一个 ASCII 字符串( “Synchronized<CR><LF>” ) 。作为响应,主机应当发送接收到的字符串( “Synchronized<CR><LF>” ) 。 自动波特率程序通过观察接收到的字符来验证是否同步。如果通过验证,则向主机发送“OK<CR><LF>” 。 主机应当通过发送正在运行部分的晶振频率(单位为 kHz)作为响应。例如,如果运行在 10MHz,主机的 。如果同步验证没 响应应当为“10000 <CR><LF>”。在接收到晶振频率后再向主机发送“OK<CR><LF>” 有通过,那么自动波特率程序再次等待一个同步字符。要使自动波特率正确工作,晶振频率应当大于等于 10MHz。Boot 代码没有使用片内 PLL。 在接收到晶振频率后,执行初始化并调用 ISP 命令处理器。处于安全性的考虑,在执行 Flash 编程/擦 除操作命令和“Go”命令之前必须执行“Unlock(解锁) ”命令。其它命令不需要解锁命令。每次 ISP 命令 处理都要执行一次“Unlock(解锁) ”命令。解锁命令在“ISP 命令”一节讲述。 通信协议 所有 ISP 命令都以单个 ASCII 字符串形式发送。字符串应当以回车(CR)和/或换行(LF)控制字符 作为结束。多余的<CR>和<LF>将被忽略。所有 ISP 的响应都以<CR><LF>结束的字符串形式发送。数据以 UU 编码格式发送和接收。 ISP 命令格式 “命令 参数_0 参数_1 ... 参数_n<CR><LF>” “数据” (只适用于写命令) ISP 响应格式 “返回代码<CR><LF>响应_0<CR><LF>响应_1<CR><LF> ... 响应_n<CR><LF>" "数据"(只适用于读 命令) ISP 数据格式 数据流采用 UU 编码格式。UU 编码算法将 3 字节二进制数据转换成 4 字节可打印的 ASCII 字符集。 该编码的效率高于 Hex 格式。Hex 格式将 1 字节二进制数据转换成 2 字节 ASCII Hex 数据。发送器应当在 发送 20 个 UU 编码行之后发送校验和。任何 UU 编码行的长度都不应超过 61 个字符(字节) 。也就是说它 可以保持 45 个数据字节。接收器应当将该校验和与接收数据的校验和相比较。如果校验和匹配,接收器响 应“OK<CR><LF>”,并等待下一次发送。如果校验和不匹配,接收器响应“RESEND<CR><LF>”。作为 响应,发送器应当将字节重新发送。 UU 编码的描述见 http://www.wotsit.org。 ISP 流程控制 软件 XON/XOFF 流程控制机制可防止缓冲区溢出时的数据丢失。当数据快速到达时,发送 ASCII 控制 字符 DC3(停止)使数据流停止。发送 ASCII 控制字符 DC1(启动)恢复数据流。主机也应支持相同的控制机 制。 143 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com ISP 命令中止 命令可通过发送 ASCII 控制字符“ESC”中止。该特性在“ISP 命令”一节中并没有作为一个命令。一 旦接收到 ESC 代码,ISP 命令处理器将等待一个新命令。 ISP 过程中的中断 在任何复位后,位于 Flash boot block 内的 boot block 中断向量都有效。 IAP 过程中的中断 在擦除/编程操作过程中,片内 Flash 存储器不可访问。当用户应用程序启动执行时,用户 Flash 区域的 中断向量有效。在调用 Flash 擦除/写 IAP 之前,用户应当禁止中断或确保用户中断向量在 RAM 中有效和 中断处理程序位于 RAM 中。IAP 代码不使用或禁止中断。 ISP 命令处理器使用的 RAM ISP 命令使用片内地址 0x4000 0120 到 0x4000 01FF 范围内的 RAM。用户可以使用该区域,但是在复 位时内容可能会丢失。Flash 编程命令使用片内 RAM 最顶端的 32 字节。堆栈位于 RAM 顶端-32。可使用 的最大堆栈为 256 字节,堆栈是向下增加的。 IAP 命令处理器使用的 RAM Flash 编程命令使用片内 RAM 最顶端的 32 字节。用户可使用的最大堆栈为 128 字节,堆栈是向下增 加的。 RealMonitor 使用的 RAM RealMonitor 使用的片内 RAM 地址范围为 0x4000 0040~0x4000 011F。如果不需要基于 RealMonitor 的 调试,用户可使用该区域。Flash boot 装载程序不初始化 RealMonitor 的堆栈。 144 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com BOOT 处理流程图 复位 初始化 CRP * 使能? No 使能调试 Yes 设置看门狗 标志? Yes No 用户代码有效? 进入ISP模式? Yes No (P0.14为低?) No Yes 执行内部用户代码 Yes 运行自动波特率 自动波特率 运行成功? No Yes 接收晶振频率 运行ISP命令处理程序 *代码读保护 图 55 Boot 处理流程图 扇区数 有些 IAP 和 ISP 命令根据“扇区”进行操作并指定扇区数。LPC2131/2132/2138 分别包含 32K,64K 和 512K 的 Flash 存储器,下表列出它们所包含的扇区数和存储器地址。IAP、ISP 和 RealMonitor 程序都位 145 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 于 boot block。boot block 存在于所有器件的 0007D000 – 0007 FFFF 中。ISP 和 IAP 命令不允许对 boot block 执行写/擦除/运行操作。由于 boot block 的存在,512kB Flash 器件中只有 500kB Flash 可供用户程序使用。 另一方面,LPC2131/2132 器件全部的 32/64K Flash 都可供用户程序使用。 表 172 LPC2131/2132 和 LPC2138 的 Flash 扇区 扇区号 扇区规格 [kB] 0 存储器地址 LPC2131 (32 kB Flash) LPC2132 (64 kB Flash) LPC2138 (512 kB Flash) 4 0x0000 0000 - 0FFF 0x0000 0000 - 0FFF 0x0000 0000 - 0FFF 1 4 0x0000 1000 - 1FFF 0x0000 1000 - 1FFF 0x0000 1000 - 1FFF 2 4 0x0000 2000 - 2FFF 0x0000 2000 - 2FFF 0x0000 2000 - 2FFF 3 4 0x0000 3000 - 3FFF 0x0000 3000 - 3FFF 0x0000 3000 - 3FFF 4 4 0x0000 4000 - 4FFF 0x0000 4000 - 4FFF 0x0000 4000 - 4FFF 5 4 0x0000 5000 - 5FFF 0x0000 5000 - 5FFF 0x0000 5000 - 5FFF 6 4 0x0000 6000 - 6FFF 0x0000 6000 - 6FFF 0x0000 6000 - 6FFF 7 4 0x0000 7000 - 7FFF 8 32 9 32 0x0001 0000 - 7FFF 10 (0x0A) 32 0x0001 8000 - FFFF 0x0000 7000 - 7FFF 0x0000 7000 - 7FFF 0x0000 8000 - FFFF 0x0000 8000 - FFFF 11 (0x0B) 32 0x0002 0000 - 7FFF 12 (0x0C) 32 0x0002 8000 - FFFF 13 (0x0D) 32 0x0003 0000 - 7FFF 14 (0x0E) 32 0x0003 8000 - FFFF 15 (0x0F) 32 0x0004 0000 - 7FFF 16 (0x10) 32 0x0004 8000 - FFFF 17 (0x11) 32 18 (0x12) 32 19 (0x13) 32 20 (0x14) 32 0x0006 8000 -FFFF 21 (0x15) 32 0x0007 0000 - 7FFF 22 (0x16) 4 0x0007 8000 - 8FFF 23 (0x17) 4 0x0007 9000 - 9FFF 24 (0x18) 4 0x0007 A000 - AFFF 25 (0x19) 4 0x0007 B000 - BFFF 26 (0x1A) 4 0x0007 C000 - CFFF - - 0x0005 0000 - 7FFF 0x0005 8000 - FFFF 0x0006 0000 - 7FFF FLASH 内容保护机制 LPC2131/2132/2138 含有带错误校验码(ECC)的 Flash 存储器。错误校验模块有 2 个用途。第一,它 将从存储器读出的数据字译码成输出数据字。第二,它对写入存储器的数据字进行编码。错误校验由 Hamming 码的单个位错误校验组成。 ECC 的操作可在运行应用中看出。ECC 自身的内容储存在 flash 存储器中,不能通过用户代码访问, 进行自身的读取或写入。一个字节的 ECC 对应用户可访问 Flash 的每个连续的 128 位。因此,从 0x0000 0000 到 0x0000 0003 的 Flash 字节由第一个 ECC 字节保护,从 0x0000 0004 到 0x0000 0007 的 Flash 字节由第二 个 ECC 字节保护,依次类推。 每当 CPU 请求读取用户的 Flash 时,128 位的包含指定存储器单元的数据和匹配的 ECC 字节都包含在 访问之列。如何 ECC 机制在读取的数据中检测到一个错误,先对数据进行校验,再将其送往 CPU。当请求 用户 Flash 的写操作时,用户指定的内容以及 ECC 存储器中计算和存储的匹配 ECC 值一起写入。 当用户 Flash 存储器的一个扇区被擦除时,相应的 ECC 字节也擦除。一旦写入一个 ECC 字节,它不能 146 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 被更新,除非它先被擦除。因此,为了正确执行 ECC 机制,数据必须以 4 个字节(或 4 的倍数)为一组写入 Flash 存储器,字节的排列顺序见如上所述。 代码读保护 代码读保护通过向 Flash 地址单元 0x1FC (用户 Flash 扇区 0 )写入 0x87654321 (十进制表示为 2271560481)来使能。地址单元 0x1FC 允许为 fiq 异常处理程序保留部分空间。当读保护被使能时,JTAG 调试端口、外部存储器引导和以下 ISP 命令将被禁能: 读存储器 写 RAM 运行 将 RAM 内容复制到 Flash 上述 ISP 命令终止时返回 CODE_READ_PROTECTION_ENABLED。 代码读保护使能时,ISP 擦除命令只允许擦除用户扇区的内容。这种限制是代码读保护不使能时所没 有的。IAP 命令不受代码读保护的影响。 重要:一旦器件经过了电源周期后,代码读保护变为有效/无效。 ISP 命令 下面的命令是 ISP 命令处理程序所接受的命令。每个命令都有具体的状态代码。当接收到未定义的命 令时,命令处理程序返回代码 INVALID_COMMAND。命令和返回代码为 ASCII 格式。 只有当接收到的 ISP 命令执行完毕时,处理程序才发送 CMD_SUCCESS。这时主机才能发送新的 ISP 命令。但“设置波特率” 、 “写 RAM” 、 “读存储器”和“运行”命令除外。 表 173 ISP 命令汇总 ISP 命令 使用 描述 解锁 U <解锁代码> 见表 174 设置波特率 B <波特率> <停止位> 见表 175 回声 A <设定> 见表 177 写 RAM W <起始地址> <字节数> 见表 178 读存储器 R <地址> <字节数> 见表 179 准备写操作的扇区 P <起始扇区号> <结束扇区号> 见表 180 将 RAM 内容复制到 Flash C <Flash 地址> <RAM 地址> <字节数> 见表 181 运行 G <地址> <模式> 见表 182 擦除扇区 E <起始扇区号> <结束扇区号> 见表 183 扇区查空 I <起始扇区号> <结束扇区号> 见表 184 读器件 ID J 见表 185 读 Boot 代码版本 K 见表 186 比较 M <地址 1> <地址 2> <字节数> 见表 187 解锁 <解锁代码> 表 174 ISP 解锁命令描述 命令 U 输入 解锁代码:23130 CMD_SUCCESS | 返回代码 INVALID_CODE | PARAM_ERROR 147 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 命令 U 描述 该命令用于解锁 Flash 写/擦除和运行命令。 举例 “U 23130<CR><LF>”解锁 Flash 写/擦除&运行命令。 设置波特率 <波特率> <停止位> 表 175 ISP 设置波特率命令描述 命令 B 波特率: 9600 | 19200 | 38400 | 57600 | 115200 | 230400 输入 停止位: 1 | 2 CMD_SUCCESS | INVALID_BAUD_RATE | 返回代码 INVALID_STOP_BIT | PARAM_ERROR 该命令用于改变波特率。新的波特率在命令处理器发送 CMD_SUCCESS 返回 描述 代码之后生效。 举例 "B 57600 1<CR><LF>"设置串口波特率 57600bps 和 1 个停止位。 表 176 ISP 波特率和外部晶体频率的关系(以 MHz 为单位) ISP 波特率和 9600 19200 38400 10.0000 + + + 11.0592 + + 12.2880 + + + 14.7456 + + + 15.3600 + 18.4320 + + 19.6608 + + + 24.5760 + + + 25.0000 + + + 57600 115200 230400 + + 外部晶体频率 + + + 回声 <设定> 表 177 ISP 回音命令描述 命令 A 输入 设定: 打开=1 | 关闭=0 返回代码 CMD_SUCCESS | PARAM_ERROR 描述 举例 回声命令的默认设定是打开。当打开时,ISP 命令处理器将接收到的串行数据 发送回主机。 "A 0<CR><LF>" 回声关闭。 写 RAM<起始地址> <字节数> 主机应当在接收到 CMD_SUCCESS 返回代码后发送数据。主机应当在发送 20 个 UU 编码行之后发送 148 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 校验和。校验和在增加新数据(UU 编码前)字节时产生,发送完 20 个编码行后重新设置。任何 UU 编码 行的长度不应超过 61 个字符(字节) ,即可以保持 45 个数据字节。当数据少于 20 个 UU 编码行时,校验 和按照实际发送的字节数进行计算。ISP 命令处理器将它与接收字节的校验和相比较。如果校验和匹配, 那么 ISP 命令处理器响应“ OK<CR><LF> ”,并等待下一次发送。如果校验和不匹配,接收器响应 “RESEND<CR><LF>” 。作为响应,发送器应当将字节重新发送。 表 178 ISP 写 RAM 命令描述 命令 输入 W 起始地址:被写 RAM 的起始地址,该地址应当以字为边界。 字节数:写入的字节数。计数值应当为 4 的倍数。 CMD_SUCCESS | ADDR_ERROR (地址不是以字为边界) | 返回代码 ADDR_NOT_MAPPED | COUNT_ERROR (字节计数值不是 4 的倍数) | PARAM_ERROR CODE_READ_PROTECTION_ENABLED 描述 举例 该命令用于将数据下载到 RAM。数据应当为 UU 编码格式。当代码读保护使 能时该命令被禁止。 "W 1073742336 4<CR><LF>"向地址 0x4000 0200 写入 4 个字节数据。 读存储器 <地址> <字节数> 数据流之后是命令成功返回代码。 校验和在发送完 20 个 UU 编码行之后发送。 校验和在增加新数据 (UU 编码前)字节时产生,发送完 20 个编码行后重新设置。任何 UU 编码行的长度都不应超过 61 个字符(字 节) ,即它可以保持 45 个数据字节。当数据少于 20 个 UU 编码行时,校验和按照实际发送的字节数进行计 算。主机将它与接收字节的校验和相比较。如果校验和匹配,那么主机响应“OK<CR><LF>”,并等待下 一次发送。如果校验和不匹配,主机响应“RESEND<CR><LF>” 。作为响应,ISP 命令处理器应当将字节 重新发送。 表 179 ISP 读存储器命令描述 命令 输入 R 起始地址:被读出数据字节的地址,该地址应当以字为边界。 字节数:读出的字节数。计数值应当为 4 的倍数。 CMD_SUCCESS,后面是<实际数据(UU 编码)>| ADDR_ERROR (地址不是以字为边界) | 返回代码 ADDR_NOT_MAPPED | COUNT_ERROR (字节计数值不是 4 的倍数) | PARAM_ERROR CODE_READ_PROTECTION_ENABLED 描述 举例 该命令用于读出 RAM 或 Flash 存储器的数据。当代码读保护使能时该命令被 禁止。 "R 1073741824 4<CR><LF>"从地址 0x4000 0000 读出 4 个字节数据。 准备写操作的扇区<起始扇区号> <结束扇区号> 该命令使 Flash 写/擦除操作分成两个步骤处理。 149 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 180 ISP 准备写操作的扇区命令描述 命令 输入 P 起始扇区号 结束扇区号:应当大于等于起始扇区号。 CMD_SUCCESS | 返回代码 BUSY | INVALID_SECTOR | PARAM_ERROR 该命令必须在执行“将 RAM 内容复制到 Flash”或“擦除扇区”命令之前执 描述 行。这两个命令的成功执行会导致相关的扇区再次被保护。该命令不能用于 boot block。要准备单个扇区,可将起始和结束扇区号设置为相同值。 举例 "P 0 0<CR><LF>"准备 Flash 扇区 0。 将 RAM 内容复制到 Flash <Flash 地址> <RAM 地址> <字节数> 表 181 ISP 将 RAM 内容复制到 Flash 命令描述 命令 C Flash 地址(DST): 要写入数据字节的目标 Flash 地址。目标地址的边界应当为 输入 256 字节。 RAM 地址(SRC): 读出数据字节的源 RAM 地址。 字节数: 写入字节的数目。应当为 256 |512 | 1024 | 4096。 CMD_SUCCESS | SRC_ADDR_ERROR (地址不以字为边界) | DST_ADDR_ERROR (地址边界错误) | SRC_ADDR_NOT_MAPPED | DST_ADDR_NOT_MAPPED | 返回代码 COUNT_ERROR (字节计数值不是 256 |512 | 1024 | 4096) | SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | BUSY | CMD_LOCKED | PARAM_ERROR CODE_READ_PROTECTION_ENABLE 该命令用于编程 Flash 存储器。 “准备写操作的扇区”命令应当在该命令之前 描述 被执行。当成功执行复制命令后,扇区将自动受到保护。该命令不能写 bootblock。当代码读保护使能时该命令被禁止。 举例 "C 0 1073774592 512<CR><LF>"将 RAM 地址 0x4000 8000 开始的 512 字节复 制到 Flash 地址 0。 运行<地址><模式> 表 182 ISP 运行命令描述 命令 G 地址:代码执行起始的 Flash 或 RAM 地址。该地址应当以字为边界。如果进 输入 入代替地址的“test”区域,将执行保留测试区的程序。 模式:T(执行 Thumb 模式下的程序)|A(执行 ARM 模式下的程序) 150 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 CMD_SUCCESS | ADDR_ERROR | 返回代码 ADDR_NOT_MAPPED | CMD_LOCKED | PARAM_ERROR CODE_READ_PROTECTION_ENABLE 描述 举例 该命令用于执行位于 RAM 或 Flash 存储器当中的程序。一旦成功执行该命令, 就有可能不再返回 ISP 命令处理程序。当代码读保护使能时该命令被禁止。 "G 0 A<CR><LF>"跳转到 ARM 模式下的地址 0x0000 0000 处。 擦除扇区<起始扇区号><结束扇区号> 表 183 ISP 擦除扇区命令描述 命令 输入 E 起始扇区号 结束扇区号:应当大于等于起始扇区号。 CMD_SUCCESS | BUSY | INVALID_SECTOR | 返回代码 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | CMD_LOCKED | PARAM_ERROR CODE_READ_PROTECTION_ENABLE 描述 举例 该命令用于擦除片内 Flash 存储器的一个或多个扇区。Boot block 不能由该命 令擦除。当代码读保护使能时,该命令只允许擦除所有用户扇区的内容。 "E 2 3<CR><LF>"擦除 Flash 扇区 2 和 3。 扇区查空<起始扇区号><结束扇区号> 表 184 ISP 扇区查空命令描述 命令 输入 I 起始扇区号 结束扇区号:应当大于等于起始扇区号。 CMD_SUCCESS | 返回代码 SECTOR_NOT_BLANK (后跟<第一个非空字的偏移量> <非空字的内容>) | INVALID_SECTOR | PARAM_ERROR 描述 举例 该命令用于对片内 Flash 存储器的一个或多个扇区进行查空。由于扇区 0 的前 64 字节重新映射到 Flash boot block,因此对其进行查空一定会失败。 "I 2 3<CR><LF>"对 Flash 扇区 2 和 3 进行查空。 读器件标识 表 185 ISP 读器件标识命令描述 命令 J 输入 无 151 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 命令 返回代码 描述 J CMD_SUCCESS 后跟 ASCII 格式的 ID 号。 该命令用于读取器件的标识。 读 Boot 代码版本 表 186 ISP 读 Boot 代码版本命令描述 命令 K 输入 无 返回代码 描述 CMD_SUCCESS 后跟 2 字节 ASCII 格式的 boot 代码版本号。将其解释为<字 节 1 (主)>.<字节 0 (次)> 该命令用于读取 boot 代码版本号。 比较<地址 1><地址 2><字节数> 表 187 ISP 比较命令描述 命令 M 地址 1(DST): 要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为 边界。 输入 地址 2(SRC): 要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为 边界。 字节数: 待比较的字节数. 计数值应当为 4 的倍数。 CMD_SUCCESS | (源和目标数据相同) COMPARE_ERROR | (后跟第一个不匹配字节的地址) 返回代码 COUNT_ERROR (字节数不是 4 的倍数) | ADDR_ERROR | ADDR_NOT_MAPPED | PARAM_ERROR 该命令用来比较两个地址单元的存储器内容。当源或目标地址包含从地址 0 描述 开始的前 64 字节中的任意一个地址时,比较的结果可能不正确。因为前 64 字节重新映射到 Flash boot 扇区。 举例 "M 8192 1073741824 4<CR><LF>"将 RAM 地址 0x4000 0000 开始的 4 个字节 与 Flash 地址 0x2000 开始的 4 个字节相比较。 表 188 ISP 返回代码汇总 返回代码 0 符号 描述 命令被成功执行。只有当主机发出的命令被成功执行完 CMD_SUCCESS 毕后,才由 ISP 处理程序发送。 1 INVALID_COMMAND 无效命令 2 SRC_ADDR_ERROR 源地址没有以字为边界 3 DST_ADDR_ERROR 目标地址的边界错误 4 SRC_ADDR_NOT_MAPPED 源地址没有位于存储器映射中。计数值必须考虑可用性。 5 DST_ADDR_NOT_MAPPED 目标地址没有位于到存储器映射中。计数值必须考虑到 可用性。 152 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 返回代码 符号 描述 6 COUNT_ERROR 字节计数值不是 4 的倍数或是一个非法值。 7 INVALID_SECTOR 扇区号无效或结束扇区号大于起始扇区号。 8 SECTOR_NOT_BLANK 扇区非空 9 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 为写操作准备扇区命令未执行。 10 COMPARE_ERROR 源和目标数据不相等。 11 BUSY Flash 编程硬件接口忙 12 PARAM_ERROR 参数不足或无效参数 13 ADDR_ERROR 地址没有以字为边界 14 ADDR_NOT_MAPPED 地址没有位于存储器映射中。计数值必须考虑可用性。 15 CMD_LOCKED 命令被锁定 16 INVALID_CODE 解锁代码无效 17 INVALID_BAUD_RATE 无效波特率设定 18 INVALID_STOP_BIT 无效停止位设定 19 CODE_READ_PROTECTION_ENABLE 代码读保护使能 IAP 命令 对于在应用编程来说,应当通过寄存器 r0 中的字指针指向存储器(RAM)包含的命令代码和参数来调用 IAP 程序。IAP 命令的结果返回到寄存器 r1 所指向的返回表。用户可通过传递寄存器 r0 和 r1 中的相同指 针重用命令表来得到结果。参数表应当大到足够保存所有的结果以防结果的数目大于参数的数目。参数传 递见图 56。参数和结果的数目根据 IAP 命令而有所不同。参数的最大数目为 5,由“将 RAM 内容复制到 Flash”命令传递。结果的最大数目为 2,由“扇区查空”命令返回。命令处理程序在接收到一个未定义的 命令时发送状态代码 INVALID_COMMAND。IAP 程序是 thumb 代码,位于地址 0x7FFFFFF0。 IAP 功能可用下面的 C 代码来调用。 定义 IAP 程序的入口地址。由于 IAP 地址的第 0 位是 1,因此,当程序计数器转移到该地址时会引起 Thumb 指令集的变化。 #define IAP_LOCATION 0x7ffffff1 定义数据结构或指针,将 IAP 命令表和结果表传递给 IAP 函数 unsigned long command[5]; unsigned long result[2]; unsigned long * command; unsigned long * result; 或 command = (unsigned result = (unsigned long long *) *) 0x…. 0x…. 定义函数类型指针,函数包含 2 个参数,无返回值。注意:IAP 将函数结果和 R1 中的表格基址一同返回。 typedef void (*IAP) (unsigned int [ ] , unsigned int [ ]); IAP iap_entry; 设置函数指针 iap_entry=(IAP) IAP_LOCATION; 使用下面的语句来调用 IAP。 iap_entry (command , result); 使用 ADS(ARM 开发套件)的 ARM 连接器支持的符号定义文件可以进一步简化 IAP 的调用。用户 153 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 还可使用汇编程序来调用 IAP 程序。 下面的符号定义可用于连接 IAP 程序和用户代码。 #<SYMDEFS># ARM Linker, ADS1.2 [Build 826]: Last Updated: Wed May 08 16:12:23 2002 0x7fffff90 T rm_init_entry 0x7fffffa0 A rm_undef_handler 0x7fffffb0 A rm_prefetchabort_handler 0x7fffffc0 A rm_dataabort_handler 0x7fffffd0 A rm_irqhandler 0x7fffffe0 A rm_irqhandler2 0x7ffffff0 T iap_entry 根据 ARM 规范(ARM Thumb 过程调用标准 SWS ESPC 0002 A-05) ,r0, r1, r2 和 r3 寄存器能够传递最 多 4 个参数。另外的参数通过堆栈传递。最多有 4 个参数可以返回 r0, r1, r2 和 r3 寄存器。另外的参数间接 通过存储器返回。有些 IAP 调用需要的参数多于 4 个。如果使用 ARM 建议的机制来传递/返回参数,则有 可能因为不同厂商所提供的 C 编译器的差异而产生问题。建议的参数传递机制降低了这样的风险。 Flash 存储器在写或擦除操作过程中不可被访问。执行 Flash 写/擦除操作的 IAP 命令使用片内 RAM 顶 端的 32 个字节空间。如果应用程序中允许 IAP 编程,那么用户程序不应使用该空间。 表 189 IAP 命令汇总 ISP 命令 命令代码 描述 准备编程扇区 50 见表 190 将 RAM 内容复制到 Flash 51 见表 191 擦除扇区 52 见表 192 扇区查空 53 见表 193 读器件 ID 54 见表 194 读 boot 代码版本 55 见表 195 比较 56 见表 197 重新调用 ISP 57 命令代码 参数1 参数2 ARM 寄存器0 ARM 寄存器1 命令 参数表 参数n 状态码 结果1 结果2 结果n 图 56 IAP 参数传递 154 命令 结果表 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 准备编程扇区 该命令使 Flash 写/擦除操作分两步执行。 表 190 IAP 准备编程扇区命令描述 命令 准备编程扇区 命令代码:50 输入 参数 0:起始扇区号 参数 1:结束扇区号:应当大于等于起始扇区号。 CMD_SUCCESS | 状态代码 BUSY | INVALID_SECTOR 结果 无 该命令必须在执行“将 RAM 内容复制到 Flash”或“擦除扇区”命令之前执 描述 行。这两个命令的成功执行会导致相关的扇区再次被保护。该命令不能用于 boot 扇区。要准备单个扇区,可将起始和结束扇区号设置为相同值。 将 RAM 内容复制到 Flash 表 191 IAP 将 RAM 内容复制到 Flash 命令描述 命令 将 RAM 内容复制到 Flash 命令代码:5110 参数 0 (DST):要写入数据字节的目标 Flash 地址。目标地址的边界应当为 256 输入 字节。 参数 1 (SRC): 读出数据字节的源 RAM 地址。该地址应当以字为边界。 参数 2:写入字节的数目。应当为 256 |512 | 1024 | 4096 |. 参数 3:系统时钟频率(CCLK)(单位:KHz) CMD_SUCCESS | SRC_ADDR_ERROR (地址不以字为边界) | DST_ADDR_ERROR (地址边界错误) | 状态代码 SRC_ADDR_NOT_MAPPED | DST_ADDR_NOT_MAPPED | COUNT_ERROR (字节计数值不是 256 |512 | 1024 | 4096) | SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | BUSY 结果 无 该命令用于编程 Flash 存储器。受影响的扇区应当先通过调用“准备写操作的 描述 扇区”命令准备。当成功执行复制命令后,扇区将自动受到保护。该命令不能 写 boot 扇区。 擦除扇区 表 192 IAP 擦除扇区命令描述 命令 擦除扇区 命令代码:5210 输入 参数 0:起始扇区号 参数 1:结束扇区号:应当大于等于起始扇区号。 参数 2:系统时钟频率(CCLK)(单位:KHz) 155 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 命令 擦除扇区 CMD_SUCCESS | 状态代码 BUSY | SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | INVALID_SECTOR | 结果 描述 无 该命令用于擦除片内 Flash 存储器的一个或多个扇区。boot 扇区不能由该命令 擦除。要擦除单个扇区可将起始和结束扇区号设定为相同值。 扇区查空 表 193 IAP 扇区查空命令描述 命令 扇区查空 命令代码:5310 输入 参数 0:起始扇区号 参数 1:结束扇区号:应当大于或等于起始扇区号。 CMD_SUCCESS | 状态代码 BUSY | SECTOR_NOT_BLANK | INVALID_SECTOR | 结果 描述 结果 0:状态代码为 SECTOR_NOT_BLANK 时第一个非空字位置的偏移量 结果 1:非空字位置的内容 该命令用于对片内 Flash 存储器的一个或多个扇区进行查空。要查空单个扇区 可将起始和结束扇区号设定为相同值。 读器件标识号 表 194 IAP 读器件标识号命令描述 命令 读器件标识号 输入 命令代码:5410 返回代码 CMD_SUCCESS 参数:无 结果 结果 0:器件标识号 描述 该命令用于读取器件的标识号。 读 Boot 代码版本号 表 195 IAP 读 Boot 代码版本号命令描述 命令 输入 返回代码 结果 描述 读 Boot 代码版本号 命令代码:5510 参数:无 CMD_SUCCESS 结果 0:2 字节 boot 代码版本号(ASCII 格式)。将其解释为<字节 1 (主)>.< 字节 0 (次)> 该命令用于读取 boot 代码版本号。 比较 <地址 1><地址 2> <字节数> 156 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 表 196 IAP 比较命令描述 命令 比较 命令代码:5610 输入 参数 0 (DST):要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为边界。 参数 1 (SRC):要比较数据字节的起始 Flash 或 RAM 地址。该地址应当以字为边界。 参数 2:待比较的字节数。计数值应当为 4 的倍数。 CMD_SUCCESS | COMPARE_ERROR | 返回代码 COUNT_ERROR (字节数不是 4 的倍数) | ADDR_ERROR | ADDR_NOT_MAPPED 结果 描述 结果 0:当状态代码为 COMPARE_ERROR 时第一个不匹配字节的偏移地址 该命令用来比较两个地址单元的存储器内容。当源或目标地址包含从地址 0 开始的前 64 字节中的任意一个地址时, 比较的结果可能不正确。 前 64 字节可重新映射到 RAM。 重新调用 ISP 表 197 重新调用 ISP 命令 重新调用 ISP 输入 命令代码:5710 状态码 无 结果 无 描述 该命令用于在 ISP 模式下调用引导装载程序。该命令映射引导向量,将 P0.1 配置 为输入并在进入 ISP 模式之前将 vpb 分频器寄存器设为 0。当一个有效的用户程 序出现在内部 flash 存储器且 P0.14 脚不能访问来强制进入 ISP 模式时,该命令被 使用。该命令不禁止 PLL,因此当器件脱离 PLL 运行时该命令可调用引导装载 程序。这时,ISP 应用程序应在自动波特率握手后传递 PLL 频率。另一种选择是 在调用 IAP 之前禁止 PLL。 表 198 IAP 状态代码汇总 返回代码 符号 描述 0 CMD_SUCCESS 命令被成功执行。 1 INVALID_COMMAND 无效命令。 2 SRC_ADDR_ERROR 源地址没有以字为边界。 3 DST_ADDR_ERROR 目标地址的边界错误。 4 SRC_ADDR_NOT_MAPPED 源地址没有位于存储器映射中。计数值必须考虑可用性。 目标地址没有位于到存储器映射中。计数值必须考虑到 5 DST_ADDR_NOT_MAPPED 可用性。 6 COUNT_ERROR 字节计数值不是 4 的倍数或是一个非法值。 7 INVALID_SECTOR 扇区号无效。 8 SECTOR_NOT_BLANK 扇区非空。 9 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 为写操作准备扇区命令未执行。 10 COMPARE_ERROR 源和目标数据不相等。 11 BUSY Flash 编程硬件接口忙 157 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com JTAG Flash 编程接口 调试工具可以将 Flash 映像部分写入 RAM,然后根据正确的偏移重复执行 IAP 调用“将 RAM 内容复 制到 Flash” 。 EmbeddedICE 逻辑 21. 特性 通过软件调试器启动调试会话,不需要目标资源 允许软件调试器通过 JTAG 直接与内核进行对话 在 ARM7TDMI-S 内核中直接插入指令 通过插入不同类型的指令可对 ARM7TDMI-S 内核或系统状态进行检查、保存或修改 允许指令在低调试速度或高系统速度下执行 应用 EmbeddedICE 逻辑提供对片内调试的支持。对目标系统进行调试需要一个主机来运行调试软件和 EmbeddedICE 协议转换器。EmbeddedICE 协议转换器将远程调试协议命令转换成所需要的 JTAG 数据,从 而对目标系统上的 ARM7TDMI-S 内核进行访问。 描述 ARM7TDMI-S 调试结构使用现有的 JTAG* 端口来访问内核。供产品测试用的扫描链在调试状态下重 新用来捕获数据总线上的信号并向内核或存储器插入新的信息。在 ARM7TDMI-S 当中有两个 JTAG 类型的 扫描链。一个 JTAG 类型的测试访问端口控制器控制扫描链。除了扫描链之外,调试结构还使用位于 ARM7TDMI-S 核内部的 EmbeddedICE 逻辑。EmbeddedICE 使用自身的扫描链向 ARM7TDMI-S 内核插入 观察点和断点。EmbeddedICE 逻辑包含 2 个实时观察点寄存器和 1 个控制和状态寄存器。这两个观察点寄 存器或其中的一个可编程为暂停 ARM7TDMI-S 内核。当编程到 EmbeddedICE 逻辑中的值与当前出现在地 址总线、数据总线和某些控制信号上的值匹配时,内核的运行将暂停。可以屏蔽任何位使其不会影响比较 操作。观察点寄存器可以配置为观察点(即对于数据的访问)或断点(指令取指) 。观察点和断点可以按照 下面的方式进行组合: 在停止 ARM7TDMI 内核之前,必须满足观察点的两个条件。CHAIN 的功能要求在暂停内核之前 满足两个连续的条件。例如,将第一个断点设定为在访问外设时触发,而第二个断点在执行任务 切换的代码段时触发。当断点触发时,与任务切换有关的信息准备就绪以备检查。 观察点可以配置为在一段地址范围内对观察点有效。RANGE 功能允许实现一个组合的断点,例 如在访问存储器最低 256 字节但不访问最低 32 字节时产生断点。 ARM7TDMI-S 内核有一个内置的调试通信通道功能。调试通信通道允许程序在目标系统上运行,即使 进入调试状态 ,目标系统程 序与主机调试 器或其它独立 的主机进行通 信时也不会中 断程序流程。 ARM7TDMI-S 内核上运行的程序将调试通信通道作为协处理器 14 进行访问。调试通信通道允许 JTAG 端 口发送和接收数据,但不影响正常的程序流程。调试通信通道数据和控制寄存器映射到 EmbeddedICE 逻辑 中的地址。 。 * 详见 IEEE 标准 1149.1-1990《标准测试访问端口和边界扫描结构》 158 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 管脚描述 表 199 EmbeddedICE 管脚描述 管脚名称 类型 描述 TMS 输入 测试模式选择 TCK 输入 TDI 输入 测试数据输入 TDO 输出 测试数据输出 移位寄存器的串行数据输出端。 器件中的数据在 TCK 信号的下降沿输出。 测试时钟 该管脚允许 TMS 和 TDI 管脚上数据的转换。它是一个上升沿触发时钟,由 TMS 和 TCK 信号定义器件的内部状态。 输入 测试复位 nTRST TMS 管脚选择 TAP 状态机中的下一个状态 移位寄存器的串行数据输入端。 nTRST 管脚可用于复位 EmbeddedICE 逻辑中的测试逻辑。 返回的测试时钟 输出 RTCK 叠加到 JTAG 端口的额外信号。 基于 ARM7TDMI-S 处理器内核进行 设计时需要该信号。Multi-ICE(ARM 的开发系统)使用该信号来保持与低或宽范围时钟 频率的目标系统的同步。详见“ Multi-ICE 系统设计精要应用笔记注 72 ( ARM DAI 0072A)”。 复用管脚的复位状态 LPC2131/2132/2138 器件的上述 EmbeddedICE 管脚是 P1.31-26 的复用功能。如果 P1.31-26 用作调试端 口,VSS 和 P1.26/RTCK 之间必须连接一个弱偏置电阻(4.7 - 10kΩ,取决于外部 JTAG 电路) 。如果它们用 作 GPIO,无需连接偏置电阻,并且确保了任何连接到 P1.26/RTCK 的外部驱动器复位时驱动为高或处于高 阻态。 寄存器描述 EmbeddedICE 逻辑包含 16 个寄存器,见表 200。有关 ARM7TDMI-S 的调试结构的详细描述见 ARM 有限公司出版的“ARM7TDMI-S(Rev 4)技术参考手册”(ARM DDI 0234A),可从网站 http://www.arm.com 下载。 表 200 EmbeddedICE 逻辑寄存器 名称 宽度 描述 调试控制 6 强制调试状态,禁止中断 00000 调试状态 5 调试状态 00001 调试通信控制寄存器 32 调试通信控制寄存器 00100 调试通信数据寄存器 32 调试通信数据寄存器 00101 观察点 0 地址值 32 保存观察点 0 地址值 01000 观察点 0 地址屏蔽 32 保存观察点 0 地址屏蔽 01001 观察点 0 数据值 32 保存观察点 0 数据值 01010 观察点 0 数据屏蔽 32 保存观察点 0 数据屏蔽 01011 观察点 0 控制值 9 保存观察点 0 控制值 01100 观察点 0 控制屏蔽 8 保存观察点 0 控制屏蔽 01101 观察点 1 地址值 32 保存观察点 1 地址值 10000 观察点 1 地址屏蔽 32 保存观察点 1 地址屏蔽 10001 观察点 1 数据值 32 保存观察点 1 数据值 10010 观察点 1 数据屏蔽 32 保存观察点 1 数据屏蔽 10011 观察点 1 控制值 9 保存观察点 1 控制值 10100 观察点 1 控制屏蔽 8 保存观察点 1 控制屏蔽 10101 159 地址 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 方框图 调试环境的方框图如图 57 所示。 JTAG 端口 串行/并行接口 EmbeddedICE 接口协议转换器 5 EmbeddedICE 主机运行的 调试程序 ARM7TDMI-S 目标板 图 57 EmbeddedICE 调试环境方框图 嵌入式跟踪宏单元 22. 特性 跟踪 ARM 内核正在执行的指令 10 脚接口 1 个外部触发输入 所有寄存器都通过 JTAG 接口编程 不使用跟踪时不消耗功率 支持 THUMB 指令集 应用 由于微控制器带有大量的片内存储器,因此不能简单地通过观察外部管脚来确定处理器核是如何运行 的。ETM 对深嵌入处理器内核提供了实时跟踪能力。它向一个跟踪端口输出处理器执行的信息。软件调试 器允许使用 JTAG 接口对 ETM 进行配置并以用户易于理解的格式显示捕获到的跟踪信息。 描述 ETM 直接连接到 ARM 内核而不是主 AMBA 系统总线。它将跟踪信息压缩并通过一个窄带跟踪端口输 出。外部跟踪端口分析仪在软件调试器的控制下捕获跟踪信息。跟踪端口可以广播指令跟踪信息。指令跟 踪(或 PC 跟踪)显示了处理器的执行流程并提供所有已执行指令的列表。指令跟踪被显著压缩为广播分支地 址和一套用于指示流水线状态的状态信号。跟踪信息的产生可通过选择触发源进行控制。触发源包括地址 比较器、计数器和序列发生器。由于跟踪信息被压缩,软件调试器需要一个执行代码的静态映像。由于这 个限制,自修改代码无法被跟踪。 ETM 配置 ETM 宏单元使用下面的标准配置。 表 201 ETM 配置 Small 1 资源数/类型 地址比较器对 1 数据比较器 0(不支持数据跟踪) 存储器映射译码器 4 计数器 1 时序发生器 无 外部输入 2 外部输出 0 160 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 Small 1 资源数/类型 FIFOFULL 信号 是(未连接) FIFO 深度 10 字节 跟踪包宽度 4/8 详见 ARM 文档“嵌入式跟踪宏单元规范” (ARM IHI 0014E) 。 1. 管脚描述 表 202 ETM 管脚描述 管脚名称 类型 TRACECLK 输出 描述 跟踪时钟 跟踪时钟信号为跟踪端口提供时钟。PIPESTAT[2:0], TRACESYNC 和 TRACEPKT[3:0]信号以跟踪时钟的上升沿为参照。该时钟并不由 ETM 模块 产生,而是由系统时钟得来的。该时钟应当为跟踪数据信号提供足够的保持时 间。支持半速率时钟模式。跟踪数据信号应当从 TRACECLK 的时钟相位移出。 详见“ETM7 技术参考手册”(ARM DDI 0158B),而 TRACECLK 时序请参阅 “嵌入式跟踪宏单元规范”(ARM IHI 0014E)。 PIPESTAT[2:0] 输出 流水线状态 流水线状态信号提供处理器流水线执行阶段中所发生状况的指 示 TRACESYNC 输出 跟踪同步 跟踪同步信号用于指示一组跟踪包当中的第一个包。并且仅为任何 分支地址的第一个包声明为高电平。 TRACEPKT[3:0] 输出 跟踪包 跟踪包信号用于输出打包的关于流水线状态的地址和数据信息。所有 包的长度都为 8 位。一个包需要两个周期输出,在第一个周期中,Packet[3:0] 输出,第二个周期 Packet[7:4]输出。 EXTIN[0] 输入 外部触发输入 复用管脚的复位状态 LPC2131/2132/2138 器件的上述 ETM 管脚是 P1.25-16 的复用功能。如果 P1.25-16 用作调试端口,VSS 和 P1.20/TRACESYNC 之间必须连接一个弱偏置电阻(4.7kΩ) 。如果它们用作 GPIO,无需连接偏置电阻, 并且确保了任何连接到 P1.20/TRACESYNC 的外部驱动器复位时驱动为高或处于高阻态。 寄存器描述 ETM 包含 29 个寄存器,见表 203。有关它们的详细描述见 ARM 有限公司出版的 ARM IHI 0014E 文 档,可从网站 http://www.arm.com 下载。 表 203 ETM 寄存器 名称 访问 寄存器编码 控制 ETM 的一般操作 R/W 000 0000 允许调试器读取每种资源类型的数目。 RO 000 0001 保存控制事件 WO 000 0010 8 位寄存器,用于静态配置存储器映射译码器。 WO 000 0011 ETM 状态 保存挂起的溢出状态位 RO 000 0100 系统配置 保存使用 SYSOPT 总线的配置信息 RO 000 0101 跟踪使能控制 3 保存跟踪使能/禁止地址 WO 000 0110 跟踪使能控制 2 保存比较的地址 WO 000 0111 跟踪使能事件 保存使能的事件 WO 000 1000 ETM 控制 ETM 配置代码 触发事件 存储映射译码控制 描述 161 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 接上表 名称 描述 访问 寄存器编码 跟踪使能控制 1 保存包含和排除的区域 WO 000 1001 FIFOFULL 区域 保存包含和排除的区域 WO 000 1010 FIFOFULL 水平 保存认为 FIFO 已满的值 WO 000 1011 保存使能的事件 WO 000 1100 ViewData 控制 1 保存包含/排除的区域 WO 000 1101 ViewData 控制 2 保存包含/排除的区域 WO 000 1110 ViewData 控制 3 保存包含/排除的区域 WO 000 1111 地址比较器 1~16 保存比较的地址 WO 001 xxxx WO 010 xxxx ViewData 事件 地址访问类型 1~16 保存访问的类型和规格 保留 - - 000 xxxx 保留 - - 100 xxxx 初始计数值 1~4 保存计数器的初始值 WO 101 00xx 计数器使能 1~4 保存计数器时钟使能控制和事件 WO 101 01xx 计数器重装 1~4 保存计数器重装事件 WO 101 10xx 保存当前计数器值 RO 101 11xx 保存下一个状态触发的事件 - 110 00xx WO 110 10xx 计数值 1~4 时序状态和控制 外部输出 1~4 保存每个输出的控制事件 保留 - - 110 11xx 保留 - - 111 0xxx 保留 - - 111 1xxx 方框图 ETM 调试环境的方框图如图 58 所示。 跟踪端口 分析仪 10 跟踪 触发 连接器 主机运行的 调试程序 ARM JTAG 接口单元 外设 ETM 外设 RAM 5 EmbeddedICE ROM 连接器 LAN 应用板 图 58 23. ETM 调试环境方框图 REALMONITOR RealMonitor 是一个可配置的软件模块,它由 ARM 公司开发,可以提供实时的调试。本章所描述的信 息摘自 ARM 文档 RealMonitor 目标集成指南(ARM DUI 0142A) 。该器件包含一个编程到片内 ROM boot 存储器内的 RealMonitor 软件,用于特定的配置。 162 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 请参考白皮书“ 片上系统的实时调试 ”,可从网站 http://www.arm.com/support/White_Papers?Open Document 下载。 特性 允许用户在不暂停或复位系统的情况下,与当前运行的系统建立调试会话。 在其它用户应用代码调试过程中,允许用户的实时中断代码连续执行。 应用 实时调试 描述 RealMonitor 是一个轻巧的调试监视器,它允许在用户调试前台应用程序时对中断进行服务。它通过 DCC(调试通信通道)与主机进行通信,DCC 位于 EmbeddedICE 逻辑当中。RealMonitor 比 ARM 系统中传统 的调试方法更具优势。传统的调试方法包括: Angel(基于目标的调试监视器) Multi-ICE 或其它 JTAG 单元和 EmbeddedICE 逻辑(基于硬件的调试方案) 尽管这两种方法都提供健壮的调试环境,但并不适合作为一个轻巧的实时监视器。 Angel 设计成可以装载和调试在各种不同模式下独立运行的应用程序,它通过不同的连接与调试主机 进行通信(例如串口或者以太网) 。Angel 要求保存和恢复所有的处理器上下文,这样做的结果是使中断产 生延迟。Angel 作为一个全功能的基于目标的调试器,对于执行实时监视来说显得过于笨重了。 Multi-ICE 是一种硬件调试方案。 它使用内置在大多数 ARM 处理器中的 EmbeddedICE 单元来执行操作。 为了执行访问存储器或处理器寄存器这样的调试任务,Multi-ICE 必须使内核进入调试状态。处理器处于调 试状态的时间可能长达数百万个周期,这样正常的程序执行被挂起,中断也无法执行。 RealMonitor 结合了 Angel 和 Multi-ICE 的特性和机制。它提供了必需的服务和功能,此外,它还包含 了 Multi-ICE 的通信机制(使用 JTAG 的 DCC)和类似 Angel 的保存和恢复处理器上下文。RealMonitor 被 预先编程在片内 ROM 存储器当中(boot 扇区) 。当用户将其使能后,可以在部分应用程序继续运行时进行 观察和调试。详见如何使能 RealMonitor 一节的内容。 RealMonitor 部件 如图 59 所示,RealMonitor 分成两个功能部件: RMHost 位于调试器和 JTAG 单元之间。RMHost 控制器和 RealMonitor.dll 将通用的远程调试接口(RDI)请求 从调试器转换为 JTAG 单元的仅为 DCC 的 RDI 信息。有关主机 RealMonitor 集成应用调试的完整信息请参 考“ARM RMHost 用户指南” (ARM DUI 0137A) 。 RMTarget 这部分预先编程到片内 ROM 存储器(boot 扇区)并在目标硬件上运行。它使用 EmbeddedICE 逻辑并 通过 DCC 与主机进行通信。 有关 RMTarget 功能的详细信息见 RealMonitor 目标集成指南(ARM DUI 0142A)。 163 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 调试器 RDI 1.5.1 主机 RealMonitor.dll RMHost RDI 1.5.1rt JTAG 单元 RealMonitor 协议 通过 JTAG 连接 的 DCC 传输 RMTarget 目标 目标板和处理器 应用程序 图 59 RealMonitor 部件 RealMonitor 是如何工作的 通常情况下,RealMonitor 作为一个状态机,如图 60 所示。为了响应主机接收到的包,或者因为目标 板上的异步事件,RealMonitor 在运行和停止状态之间进行切换。RMTarget 一次只支持一个断点、观察点、 停止或半主机 SWI 的触发。不提供嵌套事件的保存和恢复。因此,如果用户应用程序因为一个断点而停止, 而在 IRQ 处理程序中产生了另一个断点,那么 RealMonitor 进入 Panic 状态。RealMonitor 进入该状态后将 不执行任何调试。 SWI Abort Undef 停止 运行 SWI Abort Undef 停止 Panic Go 图 60 作为状态机的 RealMonitor 一个运行在主计算机上的调试器,例如 ARM eXtended 调试器(AXD)或其它 RealMonitor 调试器可以 连接到目标,实现命令的发送和数据的接收。主机和目标之间的通信如图 59 所示。 RealMonitor 的目标部件 RMTarget 与主机部件 RMHost 通过调试通信通道(DCC)进行通信。DCC 通 过 JTAG 连接来传递数据。 当用户应用程序运行时,RMTarget 通常使用 DCC 所产生的 IRQ。这意味着,如果用户应用程序也打 算使用 IRQ,它必须将 DCC 产生的中断传递给 RealMonitor。 为了实现不间断的调试,处理器中的 EmbeddedICE-RT 逻辑在接收到一个断点时产生一个预取指中止 异常或在接收到观察点时产生一个数据中止异常。这些异常由 RealMonitor 异常处理程序进行处理,并由调 试器告知用户。这样用户应用程序可以在不停止处理器的情况下继续运行。RealMonitor 认为用户应用程序 包含下面两部分: 164 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 连续运行的前台应用程序,通常处于用户、系统或 SVC 模式。 包含中断和异常处理程序的后台应用程序,由用户系统的特定事件触发,这些事件包括: -IRQ 或 FIQ -由用户前台应用程序产生的数据和预取指中止,表示应用程序在调试时出现错误。这两种情况 都会通知主机并停止用户应用程序。 -由用户前台程序中的未定义指令所导致的未定义异常,表示在调试程序时出现错误。 RealMonitor 使用户程序一直停止到从主机接收到一个“Go”包为止。 当一个不是由用户应用程序处理的异常发生时,执行下面的操作: RealMonitor 进入查询 DCC 的一个循环。如果 DCC 读缓冲区已满,控制权传递给 m_ReceiveData() (RealMonitor 内部函数) 。如果 DCC 写缓冲区空闲,控制权传递给 m_TransmitData()(RealMonitor 内部函数)。如果没有别的事要做,函数返回调用程序。上述比较的顺序使读操作的优先级高于 写操作。 RealMonitor 停止前台应用程序。如果 IRQ 和 FIQ 在前台程序停止时已经使能,那么 IRQ 和 FIQ 可以继续得到服务。 如何使能 RealMonitor 必须执行下面的步骤才可使能 RealMonitor。在这一节的末尾给出了执行所有步骤的例程。 增加堆栈 用户必须确保在 RealMonitor 所使用的每一个处理器模式下的应用程序中都建立了堆栈。对于每一种模 式,RealMonitor 都要求一个固定数目字的堆栈空间。用户必须为 RealMonitor 和应用程序提供足够的堆栈 空间。 RealMonitor 对堆栈有下列要求: 表 204 RealMonitor 的堆栈要求 处理器模式 RealMonitor 堆栈使用(字节) 未定义 48 预取指中止 16 数据中止 16 IRQ 8 IRQ 模式 该模式下的堆栈是必不可少的。RealMonitor 用两个字保存中断处理程序的入口。在嵌套中断使能前将 它们释放。 未定义模式 该模式的堆栈也是必要的。RealMonitor 在处理一个未定义指令异常时使用 12 个字。 SVC 模式 RealMonitor 不使用该堆栈。 预取指中止模式 RealMonitor 使用 4 个字保存预取指中止中断处理程序的入口。 165 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 数据中止模式 RealMonitor 使用 4 个字保存数据中止中断处理程序的入口。 用户/系统模式 RealMonitor 不使用该堆栈。 FIQ 模式 RealMonitor 不使用该堆栈。 处理异常 这一节讲述 RealMonitor 和用户程序共用异常处理程序的重要性。 RealMonitor 异常处理 为了正常工作,RealMonitor 必须能够截获特定的中断和异常。图 61 所示为如何由 RealMonitor 自身声 明异常或与应用程序共用异常处理程序。如果用户应用程序要求共用异常,那么它必须提供函数(例如 app_IRQHandler( )) 。根据异常的特性,该处理程序可以: 将控制权传递给 RealMonitor 处理程序,例如 rm_irqhandler2() 为应用程序自身声明异常,例如 app_IRQHandler() 一个自身不带异常处理程序的应用程序可以安装 RealMonitor 低级异常处理程序,该程序直接指向处理 器的向量表。irq 处理程序必须得到向量中断控制器的地址。最简单的方法是在向量表中写一条转移指令, 转移指令的目标地址为相关的 RealMonitor 异常处理程序的起始地址。 复位 RealMonitor 提供的异常向量处理程序 rm_undef_handler() rm_prefetchabort_handler() rm_dataabort_handler() rm_irqhandler() 未定义 SWI 预取指中止 RealMonitor 和用户 IRQ 处理程序共用的 irq rm_irqhandler2() 数据中止 app_irqDispatch 保留 or IRQ App_IRQHandler() FIQ 图 61 异常处理程序 RMTarget 初始化 当处理器处于特权模式并且 IRQ 禁止时,用户必须在应用程序的初始化代码中加入一行指令:call rm_init_entry()。 例程 下面的例子显示了如何建立堆栈、VIC、初始化 RealMonitor 以及共用非向量中断: 166 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com IMPORT rm_init_entry IMPORT rm_prefetchabort_handler IMPORT rm_dataabort_handler IMPORT rm_irqhandler2 IMPORT rm_undef_handler ; 用户应用程序入口 IMPORT User_Entry CODE32 ENTRY ; 定义异常表。指令连接器将代码放置在地址 0x0000 0000。 AREA exception_table, CODE LDR pc, Reset_Address LDR pc, Undefined_Address LDR pc, SWI_Address LDR pc, Prefetch_Address LDR pc, Abort_Address NOP ; 在此处插入用户代码有效签名 LDR pc, [pc, #-0xFF0] ; 从 VIC 装载 IRQ 向量 LDR PC, FIQ_Address Reset_Address DCD __init ; 复位入口 Undefined_Address DCD rm_undef_handler ; 由 RealMonitor 提供 SWI_Address DCD 0 Prefetch_Address DCD rm_prefetchabort_handler ; 由 RealMonitor 提供 Abort_Address DCD rm_dataabort_handler ; 由 RealMonitor 提供 FIQ_Address DCD 0 ; 用户可将 FIQ 处理程序的地址放置在此处 AREA init_code, ram_end EQU ; 用户可将 SWI 处理程序的地址放置在此处 CODE 0x4000xxxx ; 片内 RAM 的顶端 __init ; /********************************************************************* ; * 为不同的处理模式建立堆栈指针。堆栈向下增加。 ; *********************************************************************/ LDR r2, =ram_end ; 得到 RAM 顶端地址 MRS r0, CPSR ; 保存当前处理器模式 ; 初始化未定义模式堆栈,供 RealMonitor 使用 BIC ORR r1, r0, #0x1f r1, r1, #0x1b MSR CPSR_c, r1 ; 为 Flash 编程程序保留顶端 32 字节。参见 Flash 存储器系统和编程章节。 SUB sp,r2,#0x1F ; 初始化中止模式堆栈,供 RealMonitor 使用 167 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 BIC r1, r0, #0x1f ORR r1, r1, #0x17 MSR CPSR_c, r1 ; 为未定义模式堆栈保留 64 字节 SUB sp,r2,#0x5F ; 初始化 IRQ 模式堆栈,供 RealMonitor 和用户程序使用 BIC r1, r0, #0x1f ORR r1, r1, #0x12 MSR CPSR_c, r1 ; 为中止模式堆栈保留 32 字节 SUB sp,r2,#0x7F ; 返回初始模式 MSR CPSR_c, r0 ; 初始化用户应用程序堆栈 ; 为 IRQ 模式堆栈保留 256 字节 SUB sp,r2,#0x17F ; /********************************************************************* ; * 建立向量中断控制器。DCC Rx 和 Tx 中断产生非向量 IRQ 请求。 ; * rm_init_entry 意识到 VIC 并使能 DBGCommRX 和 DBGCommTx 中断。 ; * 将默认向量地址寄存器编程为非向量 app_irqDispatch 的地址。 ; * 在此例中,用户可在此处建立向量 IRQ 或 FIQ ; *********************************************************************/ VICBaseAddr EQU 0xFFFFF000 ; VIC 基地址 VICDefVectAddrOffset EQU 0x34 LDR r0, =VICBaseAddr LDR r1, =app_irqDispatch STR r1, [r0,#VICDefVectAddrOffset] BL rm_init_entry ; 初始化 RealMonitor ;使能 ARM 处理器中的 FIQ 和 IRQ MRS r1, CPSR ; 读取 CPSR BIC r1, r1, #0xC0 ; 使能 IRQ 和 FIQ MSR CPSR_c, r1 ; 更新 CPSR ; /********************************************************************* ; * 获取用户程序的入口。 ; *********************************************************************/ LDR lr, =User_Entry MOV pc, lr 168 http://www.zlgmcu.com 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com ; /********************************************************************* ; * 非向量 irq 处理程序 (app_irqDispatch) ; *********************************************************************/ AREA app_irqDispatch, CODE VICVectAddrOffset EQU 0x30 app_irqDispatch ; 使能中断嵌套 STMFD sp!, {r12,r14} MRS r12, spsr ; 将 SPSR 保存到 r12 MSR cpsr_c,0x1F ; 重新使能 IRQ, 进入系统模式 ; 如果要求共用非向量中断,用户应当在此处插入代码。每个非向量共用 irq 处理程序都必须使用下列代码 ; 返回到被中断的指令。 ;MSR cpsr_c, #0x52 ; 禁止 irq, 进入 IRQ 模式 ;MSR spsr, r12 ; 从 r12 恢复 SPSR ;STMFD sp!, {r0} ;LDR r0, =VICBaseAddr ;STR r1, [r0,#VICVectAddrOffset] ; 应答。非向量 irq 已经执行完毕 ;LDMFD sp!, {r12,r14,r0} ; 恢复寄存器 ;SUBS pc, r14, #4 ; 返回到被中断的指令 ; 用户中断没有发生,因此调用 rm_irqhandler2。该处理程序没有意识到 VIC 的中断优先级,通过硬件使 ; rm_irqhandler2 返回到此处。 STMFD sp!, {ip,pc} LDR pc, rm_irqhandler2 ;rm_irqhandler2 返回到此处 MSR cpsr_c, #0x52 ; 禁止 irq, 进入 IRQ 模式 MSR spsr, r12 ; 将 SPSR 从 r12 恢复 STMFD sp!, {r0} LDR r0, =VICBaseAddr STR r1, [r0,#VICVectAddrOffset] ; 应答。非向量 irq 已经执行完毕 LDMFD sp!, {r12,r14,r0} ; 恢复寄存器 SUBS pc, r14, #4 ; 返回到被中断的指令 END RealMonitor 建立选项 RealMonitor 使用下列选项建立: RM_OPT_DATALOGGING=FALSE 该选项使能或禁止在非 RealMonitor(第三方)通道上发送任何从目标到主机的包。 RM_OPT_STOPSTART=TRUE 该选择使能或禁止对所有停止和启动调试特性的支持。 169 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com RM_OPT_SOFTBREAKPOINT=TRUE 该选项使能或禁止对软件断点的支持。 RM_OPT_HARDBREAKPOINT=TRUE 在带有 EmbeddedICE-RT 的内核上使能。该器件使用带有 EmbeddedICE-RT 的 ARM-7TDMI-S Rev 4 内核。 RM_OPT_HARDWATCHPOINT=TRUE 在带有 EmbeddedICE-RT 的内核上使能。该器件使用带有 EmbeddedICE-RT 的 ARM-7TDMI-S Rev 4 内核。 RM_OPT_SEMIHOSTING=FALSE 该选项使能或禁止对 SWI 半主 (semi-hosting)的支持。Semi-hosting 提供运行在 ARM 目标板上的代码,这 些代码具有运行 ARM 调试器的主机的一些功能。这些功能包括键盘输入、屏幕输出和磁盘 I/O 等等。 RM_OPT_SAVE_FIQ_REGISTERS=TRUE 当 RealMonitor 停止时,该选项决定是否将 FIQ 模式寄存器保存到寄存器块。 RM_OPT_READBYTES=TRUE RM_OPT_WRITEBYTES=TRUE RM_OPT_READHALFWORDS=TRUE RM_OPT_WRITEHALFWORDS=TRUE RM_OPT_READWORDS=TRUE RM_OPT_WRITEWORDS=TRUE 使能或禁止对 8/16/32 位读/写的支持。 RM_OPT_EXECUTECODE=FALSE 使能或禁止对“执行代码”缓冲区的执行代码的支持。该代码必须先下载。 RM_OPT_GETPC=TRUE 该选项使能或禁止对 RealMonitor GetPC 包的支持。当中断模式中使用了实时监视时,它可用于代码的成型。 RM_EXECUTECODE_SIZE=NA "执行代码"缓冲器规格。参见 RM_OPT_EXECUTECODE 选项。 RM_OPT_GATHER_STATISTICS=FALSE 该选项使能或禁止关于 RealMonitor 内部操作的集中统计表代码。 RM_DEBUG=FALSE 该选项使能或禁止在 RealMonitor 中额外的调试和错误检测代码。 RM_OPT_BUILDIDENTIFIER=FALSE 该选项决定是否在 RMTarget 的性能表中建立一个“建立标识符”。性能表保存在 ROM 中。 RM_OPT_SDM_INFO=FALSE SDM 向调试工具提供关于应用板和处理器的额外信息。 170 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com RM_OPT_MEMORYMAP=FALSE 该选项决定板的存储器映射是否建立到目标当中。并通过性能表得到。 RM_OPT_USE_INTERRUPTS=TRUE 该选项指定是否为中断驱动模式和查询模式建立 RMTarget。 RM_FIFOSIZE=NA 该选项指定数据记录 FIFO 缓冲区的规格(以字为单位)。 CHAIN_VECTORS=FALSE 该选项允许 RMTarget 通过µHAL(ARM HW abstraction API)支持向量链。 更改历史记录 2004 年 8 月 25 日: 根据设计要求得出的 LPC2132/2138 用户手册 2004 年 9 月 13 日: “简介”和“定时器/计数器 0 和定时器/计数器 1”章节中增加了 TIMER0/1 的计数器功能的内容。 表 23“功率控制寄存器 (PCON – 0xE01FC0C0) ( ” “系统控制模块” 一章) 中的 LPC201x 被 LPC2132/2138 代替。 表 52“管脚功能选择寄存器 2(PINSEL2 – 0xE002C014) ” ( “管脚连接模块”一章)中的保留位内容 被更改。 “GPIO”章的“寄存器描述”一节中的 PORT2/3 内容被删除。有关 PORT0 可用管脚数的描述被更新。 2004 年 9 月 14 日: “系统控制模块”一章中的“复位”和“唤醒定时器”增加了有关 RTC 的描述。 “实时时钟”一章中的“RTC 使用注意事项”内容被更新。 2004 年 9 月 15 日: “定时器/计数器 0 和定时器/计数器 1”一章中计数控制寄存器的描述被更新。 “定时器/计数器 0 和定时器/计数器 1”一章中的管脚描述中列出了所有可用的 CAP 和 MAT 管脚。 “定时器/计数器 0 和定时器/计数器 1”一章中的计数控制寄存器的描述中增加了计数器模式的详细信 息。 2004 年 9 月 16 日: “SSP 控制器(SPI1) ”一章中的印刷错误被更正。 “简介”一章中增加了 Flash 擦除/写周期和数据保护的内容。 2004 年 11 月 22 日 文档中 I2C 章节的内容被更新。 文档中遗漏的存储器加速模块(MAM)一章的内容被加上。 171