首页资源分类嵌入式系统 > LPC17XX中文数据手册.pdf

LPC17XX中文数据手册.pdf

已有 445476个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:LPC17XX

    分    享:

    文档简介

    LPC17XX中文数据手册

    文档预览

    LPC1700 系列微控制器 第第一一章章 概概述述 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 目录 第 1 章 概述······················································································································ 1 1.1 简介 ································································································································1 1.2 特性 ································································································································1 1.3 应用 ································································································································3 1.4 订购信息 ························································································································3 1.4.1 器件选项汇总·········································································································3 1.5 简化方框图 ····················································································································4 1.6 结构概述 ························································································································4 1.7 ARM Cortex-M3 处理器 ································································································5 1.7.1 Cortex-M3 配置选项 ······························································································5 1.8 片上 Flash 存储器系统 ··································································································5 1.9 片上静态 RAM ··············································································································6 1.10 方框图 ····························································································································7 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第1章 第1章 概述 1.1 简介 LPC1700 系列 Cortex-M3 微控制器用于处理要求高度集成和低功耗的嵌入式应用。ARM Cortex-M3 是下一代新生内核,它可提供系统增强型特性,例如现代化调试特性和支持更高级 别的块集成。 LPC1700 系列 Cortex-M3 微控制器的操作频率可达 100MHz。ARM Cortex-M3 CPU 具有 3 级流水线和哈佛结构,带独立的本地指令和数据总线以及用于外设的稍微低性能的第三条总线。 ARM Cortex-M3 CPU 还包含一个支持随机跳转的内部预取指单元。 LPC1700 系列 Cortex-M3 微控制器的外设组件包含高达 512KB 的 Flash 存储器、64KB 的 数据存储器、以太网 MAC、USB 主机/从机/OTG 接口、8 通道的通用 DMA 控制器、4 个 UART、 2 条 CAN 通道、2 个 SSP 控制器、SPI 接口、3 个 I2C 接口、2-输入和 2-输出的 I2S 接口、8 通 道的 12 位 ADC、10 位 DAC、电机控制 PWM、正交编码器接口、4 个通用定时器、6-输出的 通用 PWM、带独立电池供电的超低功耗 RTC 和多达 70 个的通用 I/O 管脚。 1.2 特性  ARM Cortex-M3 处理器,可在高至 100MHz 的频率下运行,并包含一个支持 8 个区的 存储器保护单元(MPU);  ARM Cortex-M3 内置了嵌套的向量中断控制器(NVIC);  具有在系统编程(ISP)和在应用编程(IAP)功能的 512KB 片上 Flash 程序存储器。 把增强型的 Flash 存储加速器和 Flash 存储器在 CPU 本地代码/数据总线上的位置进行 整合,则 Flash 可提供高性能的代码;  64KB 片内 SRAM 包括: –32KB SRAM 可供高性能 CPU 通过本地代码/数据总线访问; –2 个 16KB SRAM 模块,带独立访问路径,可进行更高吞量的操作。这些 SRAM 模 块可用于以太网、USB、DMA 存储器,以及通用指令和数据存储;  AHB 多层矩阵上具有 8 通道的通用 DMA 控制器,它可结合 SSP、I2S、UART、模数 和数模转换器外设、定时器匹配信号和 GPIO 使用,并可用于存储器到存储器的传输;  多层 AHB 矩阵内部连接,为每个 AHB 主机提供独立的总线。AHB 主机包括 CPU、 通用 DMA 控制器、以太网 MAC 和 USB 接口。这个内部连接特性提供无仲裁延迟的 通信,除非 2 个主机尝试同时访问同一个从机;  分离的 APB 总线允许在 CPU 和 DMA 之间提供更多的带宽,更少的延迟。CPU 无须 等待 APB 写操作完成;  串行接口 –以太网 MAC 带 RMII 接口和相关的 DMA 控制器; –USB 2.0 全速从机/主机/OTG 控制器,带有用于从机、主机功能的片内 PHY 和相关 的 DMA 控制器; –4 个 UART,带小数波特率发生功能、内部 FIFO、DMA 支持和 RS-485 支持。1 个 UART 带有 modem 控制 I/O 并支持 RS-485/EIA-485,全部的 UART 都支持 IrDA; –CAN 控制器,带 2 个通道; –SPI 控制器,具有同步、串行、全双工通信和可编程的数据长度; –2 个 SSP 控制器,带有 FIFO,可按多种协议进行通信。其中一个可选择用于 SPI, 并且和 SPI 共用中断。SSP 接口可以与 GPDMA 控制器一起使用; LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第1章 –3 个增强型的 I2C 总线接口,其中 1 个具有开漏输出功能,支持整个 I2C 规范和数据 速率为 1Mbit/s 的快速模式,另外 2 个具有标准的端口管脚。增强型特性包括多个 地址识别功能和监控模式; –I2S(Inter-IC Sound)接口,用于数字音频输入或输出,具有小数速率控制功能。I2S 接口可与 GPDMA 一起使用。I2S 接口支持 3-线的数据发送和接收或 4-线的组合发 送和接收连接,以及主机时钟输入/输出;  其它外设: –70 个(100 个管脚封装)通用 I/O(GPIO)管脚,带可配置的上拉/下拉电阻。AHB 总线上的所有 GPIO 可进行快速访问,支持新的、可配置的开漏操作模式;GPIO 位 于存储器中,它支持 Cortex-M3 位带宽并且由通用 DMA 控制器使用; –12 位模数转换器(ADC),可在 8 个管脚间实现多路输入,转换速率高达 1MHz, 并具有多个结果寄存器。12 位 ADC 可与 GPDMA 控制器一起使用; –10 位数模转换器(DAC),具有专用的转换定时器,并支持 DMA 操作; –4 个通用定时/计数器,共有 8 个捕获输入和 10 个比较输出。每个定时器模块都具 有一个外部计数输入。可选择特定的定时器事件来产生 DMA 请求; –1 个电机控制 PWM,支持三相的电机控制; –正交编码器接口,可监控一个外部正交编码器; –1 个标准的 PWM/定时器模块,带外部计数输入; –实时时钟(RTC)带有独立的电源域。RTC 通过专用的 RTC 振荡器来驱动。RTC 模块包括 20 字节电池供电的备用寄存器,当芯片的其它部分掉电时允许系统状态存 储在该寄存器中。电池电源可由标准的 3V 锂电池供电。当电池电压掉至 2.1V 的低 电压时,RTC 仍将会继续工作。RTC 中断可将 CPU 从任何低功率模式中唤醒; –看门狗定时器(WDT),该定时器的时钟源可在内部 RC 振荡器、RTC 振荡器或 APB 时钟三者间进行选择; –支持 ARM Cortex-M3 系统节拍定时器,包括外部时钟输入选项; –重复性的中断定时器提供可编程和重复定时的中断;  标准 JTAG 测试/调试接口以及串行线调试和串行线跟踪端口选项;  仿真跟踪模块支持实时跟踪;  4 个低功率模式:睡眠、深度睡眠、掉电、深度掉电;  单个 3.3V 电源(2.4V – 3.6V)。温度范围为-40C - 85C;  4 个外部中断输入,可配置为边沿/电平触发。PORT0 和 PORT2 上的所有管脚都可用 作边沿触发的中断源;  不可屏蔽中断(NMI)输入;  时钟输出功能,可反映主振荡器时钟、IRC 时钟、RTC 时钟、CPU 时钟或 USB 时钟 的输出状态;  当处于掉电模式时,可通过中断(包括外部中断、RTC 中断、USB 活动中断、以太网 唤醒中断、CAN 总线活动中断、PORT0/2 管脚中断和 NMI)将处理器从掉电模式中 唤醒;  每个外设都自带时钟分频器,以进一步节省功耗;  带掉电检测功能,可对掉电中断和强制复位分别设置阀值;  片内有上电复位电路;  片内晶振工作频率为 1MHz 到 24MHz;  4MHz 内部 RC 振荡器可在±1%的精度内调整,可选择用作系统时钟; LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第1章  通过片内 PLL,没有高频晶振,CPU 也可以最高频率运转。用户可从主振荡器、内部 RC 振荡器或 RTC 振荡器三者中选择一个作为 PLL 时钟源;  第二个专用的 PLL 可用于 USB 接口,以允许增加主 PLL 设置的灵活性;  用户可在管脚对应的多种功能中进行选择;  可采用 100 脚和 80 脚 LQFP 封装(14×14×1.4mm)。 1.3 应用  静电计;  照明设备;  工业网络;  报警系统;  白色家电;  电机控制; 1.4 订购信息 表 1.1 订购信息 器件型号 LPC1768FBD100 LPC1766FBD100 LPC1765FBD100 LPC1764FBD100 LPC1758FBD80 LPC1756FBD80 LPC1754FBD80 LPC1752FBD80 LPC1751FBD80 1.4.1 器件选项汇总 名称 LQFP100 LQFP80 封装 描述 版本 LQFP 封装;100 脚;本体 14×14×1.4mm SOT407-1 LQFP 封装;80 脚;本体 12×12×1.4mm SOT315-1 表 1.2 LPC1700 系列 Cortex-M3 微控制器器件的订购选项 器件型号 LPC1768FBD100 LPC1766FBD100 LPC1765FBD100 LPC1764FBD100 LPC1758FBD80 LPC1756FBD80 LPC1754FBD80 LPC1752FBD80 LPC1751FBD80 Flash 512KB 256KB 256KB 128KB 512KB 256KB 128KB 64KB 32KB SRAM 64KB 64KB 64KB 32KB 64KB 32KB 32KB 16KB 8KB 以太网 有 有 无 有 有 无 无 无 无 USB Device/Host/OTG Device/Host/OTG Device/Host/OTG Device Device/Host/OTG Device/Host/OTG Device/Host/OTG Device Device CAN I2S DAC 2 有有 2 有有 2 有有 2 无无 2 有有 2 有有 1 无有 1 无无 1 无无 封装 100 脚 100 脚 100 脚 100 脚 80 脚 80 脚 80 脚 80 脚 80 脚 采样 待定 待定 待定 待定 待定 待定 待定 待定 待定 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 1.5 简化方框图 第1章 图 1.1 LPC1768 简化方框图 1.6 结构概述 ARM Cortex-M3 包含三条 AHB-Lite 总线,一条系统总线以及 I-code 和 D-code 总线,后二 者的速率较快,且在 TCM 接口的用法类似:一条总线专用于指令取指(I-code),另一条总线 用于数据访问(D-code)。这二条内核总线的用法允许同时执行操作,即使同时要对不同的设 备目标进行操作。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第1章 LPC1700 系列Cortex-M3 微控制器使用多层AHB矩阵来连接上Cortex-M3 总线,并以灵活 的方式将其它总线主机连接到外设,允许矩阵的不同从机端口上的外设可以同时被不同的总线 主机访问,从而能获取到最优化的性能。图 1.2所示为多层矩阵连接的详细情况。 APB 外设使用多层 AHB 矩阵的独立从机端口通过两条 APB 总线连接到 CPU。这减少了 CPU 和 DMA 控制器之间的争用,可实现更好的性能。APB 总线桥配置为缓冲区写操作,使得 CPU 或 DMA 控制器无需等待 APB 写操作结束。 1.7 ARM Cortex-M3 处理器 ARM Cortex-M3 是一个通用的 32 位微处理器,它具有高性能和超低功耗的特性。Cortex-M3 还提供许多新的特性,包括 Thumb-2 指令集、低中断延时、硬件除法、可中断/可持续的多次加 载和存放指令、对中断的自动状态进行保存和恢复、紧密结合中断控制器与唤醒中断控制器、 多条内核总线可同时用于访问。 采用这样的流水处理技术,使得各个器件的处理和存储器系统可以连续进行操作。通常, 当一个指令正在执行时,第二个指令正在进行解码,而第三个指令正在存储器中被取指出来。 ARM Cortex-M3 处理器的详细描述请查看 ARM 官方网站的 Cortex-M3 技术参考手册。 1.7.1 Cortex-M3 配置选项 LPC1700 系列 Cortex-M3 微控制器使用 Cortex-M3 CPU 的 r2p0 版本,其中包含了下面所标 记的众多可配置选项。 系统选项:  包含嵌套的向量中断控制器(NVIC)。NVIC 包括 SYSTICK 定时器;  包含唤醒中断控制器(WIC)。WIC 可实现更有效的选项,将 CPU 从低功耗模式中唤 醒;  包含存储器保护单元(MPU);  包含 ROM 表。ROM 表提供了调试部件到外部调试系统的地址; 调试相关的选项:  包含 JTAG 调试接口;  包含串行线调试。串行线调试允许仅使用两条线进行调试操作,简单的跟踪功能可增 加第三条线;  包含嵌入式跟踪宏单元(ETM)。ETM 提供指令跟踪功能;  包含数据观察点和跟踪(DWT)单元。DWT 允许数据地址或数据值匹配为跟踪信息 或触发其它事件。DWT 包含 4 个比较器和计数器以用于特定的内部事件;  包含指令跟踪宏单元(ITM)。软件可写 ITM 以发送信息到跟踪端口;  包含跟踪端口接口单元(TPIU)。TPIU 编码并向外面提供跟踪信息。这可以在串行线 浏览器管脚(Serial Wire Viewer pin)或 4 位并行跟踪端口上实现;  包含 Flash 修补和断点(FPB)。FPB 可产生硬件断点并且在代码空间中重新映射特定 的地址到 SRAM 作为更改非易失性代码的暂时方法。FPB 包括 2 个文字比较器(literal comparator)和 6 个指令比较器。 1.8 片上Flash存储器系统 LPC1700 系列 Cortex-M3 微控制器含有 512KB 的片上 Flash 存储器。一个新的 2-端口 Flash 存储器加速器通过两条快速 AHB-Lite 总线将其使用性能扩至极限。该存储器可用于存放代码 和数据。对 Flash 存储器的编写有若干种方式来实现。它可通过串口来进行在系统编程。应用 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第1章 程序也可以在运行时对 Flash 进行擦除和/或编程,从而为数据存储域固件升级等操作带来了极 大的灵活性。 1.9 片上静态RAM LPC1700 系列 Cortex-M3 微控制器包含共计为 64KB 的片上静态 RAM 存储器。这包括主 32KB SRAM(CPU 和高速总线上的 3 个 DMA 控制器均可对其进行访问)以及另外两个各为 16KB 的、位于 AHB 多层矩阵独立从机端口的 SRAM 模块。 这种结构允许各自执行 CPU 和 DMA 访问操作,从而对总线主机的延迟变少或无延迟。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 1.10 方框图 第1章 图 1.2 LPC1768 方框图,CPU 和总线 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 LPC1700 系列微控制器 第第二二章章 存存储储器器映映射射 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 2 章 存储器映射 ·········································································································· 1 2.1 存储器映射和外设寻址 ·································································································1 2.2 存储器映射 ····················································································································1 2.3 APB 外设地址················································································································2 2.4 存储器重映射 ················································································································3 2.5 预取指中止和数据中止异常 ·························································································3 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第2章 第2章 存储器映射 2.1 存储器映射和外设寻址 LPC1700 系列Cortex-M3 微控制器含有一个 4GB的地址空间,如表 2.1所示为LPC1700 系 列Cortex-M3 微控制器的存储器分布。 表 2.1 LPC1700 系列 Cortex-M3 微控制器存储器分布 地址范围 0x0000 0000 - 0x0003 FFFF 0x1000 0000- 0x1000 7FFF 0x2007 C000- 0x2007 FFFF 0x2008 0000 - 0x2008 3FFF 0x2009 C000 - 0x2009 FFFF 0x4000 0000 - 0x4007 FFFF 0x4008 0000 - 0x400F FFFF 0x5000 0000 - 0x501F FFFF 0xE000 0000 - 0xE00F FFFF 用途 片上非易失性存储器 片上 SRAM 片上 SRAM,通常用于存 储外设数据 片上 SRAM,通常用于存 储外设数据 通用 I/O APB0 外设 APB1 外设 AHB 外设 Cortex-M3 相关功能 描述 Flash 存储器(512KB) 本地 SRAM-Bank0(32KB) AHB SRAM-Bank0(16KB) AHB SRAM-Bank1(16KB) 32 个外设模块,每个 16KB 32 个外设模块,每个 16KB DMA 控制器、以太网接口和 USB 接口 包括 NVIC 和系统节拍定时器 2.2 存储器映射 LPC1700 系列Cortex-M3 微控制器的存储器映射由几个不同的存储区域组成,如图 2.1所示 为复位后从用户编程角度所看到的整个地址空间映射。 图 2.1 LPC1700 系列 Cortex-M3 微控制器的存储器映射 图 2.1和表 2.2显示了从不同角度所观察到的外设地址空间。AHB外设区域为 2MB,可分配 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第2章 多达 128 个外设。APB外设区域为 1MB,可分配多达 64 个外设。每个外设空间大小都为 16KB, 这样可简化每个外设的地址译码。 此外,所有外设寄存器不管规格大小,都按照字地址进行分配(32 位边界)。这样就不再 需要使用字节定位映射的硬件来进行小边界的字节(8 位)或半字(16 位)访问。字和半字寄 存器都是一次性访问。例如,不能对一个字寄存器的最高字节执行单独的读或写操作。 2.3 APB外设地址 下表 2.2所示为APB0/1 地址映射。APB外设不会全部使用分配给它的 16KB空间。通常, 每个器件的寄存器在各个 16KB范围内采用“别名”。 表 2.2 APB0 外设和基址 APB0 外设 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19-22 23 24 - 31 基址 0x4000 0000 0x4000 4000 0x4000 8000 0x4000 C000 0x4001 0000 0x4001 4000 0x4001 8000 0x4001 C000 0x4002 0000 0x4002 4000 0x4002 8000 0x4002 C000 0x4003 0000 0x4003 4000 0x4003 8000 0x4003 C000 0x4004 0000 0x4004 4000 0x4004 8000 0x4004 C000 - 0x4005 8000 0x4005 C000 0x4006 0000 - 0x4007 C000 外设名称 看门狗定时器 定时器 0 定时器 1 UART0 UART1 未使用 PWM1 I2C0 SPI RTC GPIO 中断 引脚连接模块 SSP1 ADC CAN 验收滤波器 RAM CAN 验收滤波器寄存器 CAN 公共寄存器 CAN 控制器 1 CAN 控制器 2 未使用 I2C1 未使用 表 2.3 APB1 外设和基址 APB1 外设 0 1 2 3 4 基址 0x4008 0000 0x4008 4000 0x4008 8000 0x4008 C000 0x4009 0000 未使用 保留 SSP0 DAC 定时器 2 外设名称 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第2章 APB1 外设 5 6 7 8 9 10 11 12 13 14 15 16 - 30 31 基址 0x4009 4000 0x4009 8000 0x4009 C000 0x400A 0000 0x400A 4000 0x400A 8000 0x400A C000 0x400B 0000 0x400B 4000 0x400B 8000 0x400B C000 0x400C 0000 - 0x400F 8000 0x400F C000 外设名称 定时器 3 UART2 UART3 I2C2 未使用 I2S 未使用 重复性中断定时器 未使用 电机控制 PWM 正交编码器接口 未使用 系统控制 续上表 2.4 存储器重映射 Cortex-M3 包含一个机制:允许将中断向量表重新映射到存储器映射空间的备用单元。这 通过包含在 NVIC(嵌套向量中断控制器)中的向量表偏移寄存器来进行控制。 向量表可位于 Cortex-M3 的地址空间 1GB 范围内的任意一处。向量表必须是 128 字(512 字节)边界对齐,因为 LPC1700 系列 Cortex-M3 微控制器上的 NVIC 可分配 128 个中断。详细 描述请参考《ARM®CortexTM-M3 技术参考指南》第 8 章。 2.5 预取指中止和数据中止异常 如果试图访问一个保留地址或未分配区域的地址,LPC1700 系列Cortex-M3 微控制器将产 生适当的总线周期中止异常。这些区域是特定的Cortex-M3 微控制器器件所没有执行的存储器 映射区域。这包括图 2.1中所标记的为“保留”或“未使用”的地址空间。 试图对这些区域进行数据访问和指令取指都将会产生异常。此外,对映射到 AHB 或 APB 外设的地址空间进行任何取指,会产生预取指中止异常。 在现有的 APB 外设地址空间内,对未定义地址空间的访问不会产生数据中止异常。每个外 设内的地址译码被限定为外设内部需要判别的已定义寄存器。例如,对地址 0x4000 D000 (UART0 空间内一个未定义的地址)的访问可能导致对定义在地址 0x4000 C000 处的寄存器进 行访问。LPC1700 系列 Cortex-M3 微控制器文档并没有对外设空间内的这种地址别名定义的详 细内容进行说明,且 LPC1700 系列 Cortex-M3 微控制器不支持这种地址别名特性。 如果软件执行直接写 Flash 存储器,则 Flash 加速器产生数据中止异常。Flash 编程必须通 过使用引导代码提供的特定 Flash 编程接口来完成。 需要注意的是,只有在试图执行从非法地址中取指时,在流水线阶段,Cortex-M3 内核会 保存相关预取指令(这些指令是无意义的)的异常标志,并且只有在试图执行从非法地址中取得 的指令时,才会去处理这个预取指令终止异常。当代码在非常靠近存储器边界执行时,这种操 作可防止由预取指所造成的意外中止。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 LPC1700 系列微控制器 第第三三章章 系系统统控控制制 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 3 章 系统控制 ·············································································································· 1 3.1 简介 ································································································································1 3.2 引脚描述 ························································································································1 3.3 寄存器描述 ····················································································································1 3.4 复位 ································································································································2 3.4.1 复位源标识寄存器(RSID - 0x400F C180)························································3 3.5 掉电检测 ························································································································3 3.6 外部中断输入 ················································································································4 3.6.1 寄存器描述·············································································································4 3.6.2 外部中断标志寄存器(EXTINT - 0x400F C140)···············································4 3.6.3 外部中断模式寄存器(EXTMODE - 0x400F C148)··········································5 3.6.4 外部中断极性寄存器(EXTPOLAR - 0x400F C14C)········································6 3.7 其它系统控制和状态标志 ·····························································································7 3.7.1 系统控制和状态寄存器(SCS - 0x400F C1A0) ·················································7 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第3章 第3章 系统控制 3.1 简介 系统控制模块包括一些系统特性和控制寄存器,它们的许多功能与特定的外设无关,这些 功能包括:  复位;  掉电检测;  外部中断输入;  各种系统控制和状态;  代码安全&调试。 为了满足将来扩展的需要,每种类型的功能都有其对应寄存器,不需要的位被定义为保留 位。不同的功能不共用相同的寄存器地址。 3.2 引脚描述 表 3.1所示为与系统控制模块相关的引脚。 表 3.1 系统控制模块引脚描述 引脚名称 EINT0 EINT1 EINT2 EINT3 RESET 类型 输入 输入 输入 输入 输入 描述 外部中断输入 0-低电平/高电平或下降/上升沿有效的通用中断输 入。该引脚可用于将处理器从睡眠、深度睡眠或掉电模式中唤醒 外部中断输入 1-见上面的 EINT0 描述 外部中断输入 2-见上面的 EINT0 描述 外部中断输入 3-见上面的 EINT0 描述 外部复位输入-低电平使芯片复位,其中 I/O 口和外设将恢复其默 认状态,并使处理器从地址 0x0000 0000 开始执行 3.3 寄存器描述 所有寄存器,无论大小,都按照字地址边界对齐。详细信息请见表 3.2。 表 3.2 系统控制模块寄存器汇总 寄存器名称 外部中断 EXTINT EXTMODE EXTPOLAR 复位 RSID 系统控制寄存器 SCS 描述 外部中断标志寄存器 外部中断模式寄存器 外部中断极性寄存器 复位源标识寄存器 系统控制和状态 类型 复位值 地址 R/W 0x00 0x400F C140 R/W 0x00 0x400F C148 R/W 0x00 0x400F C14C R/W 见文中描述 0x400F C180 R/W 0x00 0x400F C1A0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第3章 3.4 复位 LPC1700 系列 Cortex-M3 微控制器有 4 个复位源: RESET 引脚复位、看门狗复位、上电复 位和掉电检测复位。 RESET 引脚为施密特触发输入引脚。任何复位源可使芯片复位有效,一旦操作电压到达一 个可使用的门限值,则启动唤醒定时器(详见“唤醒定时器”一节)。复位信号将保持有效直 至外部的复位信号被撤除,振荡器开始运行,当时钟计数超过了固定的时钟个数后,Flash控制 器已完成其初始化。复位逻辑如图 3.1所示。 图 3.1 包括唤醒定时器的复位逻辑框图 当任何一个复位源(上电复位、掉电检测复位、外部中断复位和看门狗复位)有效时,片 内 RC 振荡器开始起振。片内 RC 振荡器起振后,需要经过一段时间才能稳定。大约经过 60s 片内 RC 振荡器才能提供稳定的时钟输出,此时复位信号被锁存并且与片内 RC 振荡器时钟同 步。然后将同时启动下面两个序列:  当同步的复位无效时,2-位 IRC(片内 RC 振荡器)唤醒定时器开始计数。当 2-位 IRC 唤醒定时器超时,处理器于是跳到 Flash 以启动 ROM 的引导代码。但如果 Flash 访问 尚未准备好,则 MAM 将插入等待周期进行等待,直至 Flash 就绪;  当同步的复位无效时,9 位 Flash 唤醒定时器也开始计数。Flash 唤醒定时器产生 100s 的 Flash 启动时间。一旦定时器溢出,则启动 Flash 初始化序列(大概需要 250 个周期), 当该序列完成时, MAM(存储器加速模块)即可进行 Flash 访问。 当内部复位移除后,处理器从地址 0 开始执行,地址 0 是从 Boot Block 映射的复位向量地 址。这时,所有的处理器和外设寄存器都已被初始化为预先确定的值。 图 3.2所示为在复位后LPC1700 系列Cortex-M3 微控制器启动时, RESET 、IRC和处理器状 态之间的关系。有关由用户代码使能后的主振荡器启动序列,请见“主振荡器”一节。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第3章 图 3.2 复位后启动过程示例 3.4.1 复位源标识寄存器(RSID - 0x400F C180) 每个复位源对应该寄存器中某一位,这些标志位通过写“1”清除。4 个复位源之间的相互 关系见表 3.3的描述。 表 3.3 复位源标识寄存器(RSID)位描述 位 符号 描述 复位值 上电复位(POR)信号有效时该位置位,并清零该寄存器中其它所有的 位。但是如果上电复位信号撤销后另外一个复位信号(如外部复位)仍 0 POR 见文中描述 然保持有效,则这个复位信号对应的位置位。POR 位不受其它任何复位 源的复位影响 1 EXTR RESET 信号有效时该位置位。该位由上电复位来清零,但不受 WDT 或 见文中描述 掉电检测(BOD)复位的影响 当看门狗定时器溢出和看门狗模式寄存器的 WDTRESET 位为 1 时,该 2 WDTR 见文中描述 位置位。该位可由其它任何一个复位源清零 当 3.3V 的电源降到低于 2.6V 时,该位置位; 如果 VDD 电压从 3.3V 降低到 2.5V 然后又回升,则该位置位; 如果 VDD(3V3)电压从 3.3V 降低到 2.5V,接着再下降到 POR 有效的电压 (通常为 1V),则该位清零; 3 BODR 见文中描述 如果 VDD(3V3)电压继续从 1V 以下上升到 2.6V 以上,则该位也将置位; 该位不受外部复位或看门狗复位影响; 注:只有在复位发生且位 POR=0 时,BODR 位才指示 VDD(3V3)电压是否 在 2.6V 以下 7:4 - 保留。用户软件不要向其写入 1。从保留位读出的值未被定义 NA 3.5 掉电检测 LPC1700系列Cortex-M3微控制器包含一个VDD(3V3)引脚电压的2级检测。如果该电压变化至 2.95V左右时,掉电检测器(BOD)向中断向量控制器发出中断信号。如需产生CPU中断,那么 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第3章 需要在NVIC的中断使能寄存器中使能该中断信号;如果不需要,那么软件可通过查询原始中断 状态寄存器来检测该信号。 当 VDD(3V3)引脚的电压变化至低于 2.65V 时,第 2 级的低电压检测将触发复位信号,使 LPC1700 系列 Cortex-M3 微控制器无效。低电压下,片内各种功能部件的操作都将变得不可靠, 掉电检测复位可以防止 Flash 的内容发生改变。BOD 电路将使电压降低到 1V 以下来维持复位, 这时上电复位电路也可保持复位。 2.95V 和 2.65V 阈值都有一些滞后。正常工作时,这个滞后使得掉电检测电路能够在 2.95V 左右产生可靠的中断信号,或使用正常执行的循环事件来检测掉电条件。 但是,当使能掉电检测以使 LPC1700 系列 Cortex-M3 微控制器退出掉电模式时(器件本身 不能保证此操作——见“功率模式控制寄存器(PCON - 0x400F C0C0)”),电源电压在唤醒 定时器完成延时前恢复为正常电平,那么此时 BOD 产生的结果是:功能部件唤醒并在设置好 掉电模式后继续工作、不产生任何中断、RSID 寄存器的 BOD 位清零。由于其它所有的唤醒条 件都有锁存标志(见“外部中断标志寄存器(EXTINT – 0x400F C140)和“综合寄存器组”), 因此,这种没有任何明显原因的唤醒,可假定为掉电唤醒已结束。 3.6 外部中断输入 LPC1700 系列 Cortex-M3 微控制器包括 4 个外部中断输入作为可选的引脚功能。此外,外 部中断能够将 CPU 从掉电模式中唤醒。详情请参考“从低功耗模式中唤醒”章节的描述。 3.6.1 寄存器描述 外部中断功能具有 4 个相关的寄存器。EXTINT 寄存器包含中断标志。EXTMODE 和 EXTPOLAR 寄存器用来指定引脚使用电平或边沿触发方式。 表 3.4 外部中断寄存器 名称 描述 EXTINT 外部中断标志寄存器包含EINT0、EINT1、EINT2 和 EINT3 的中断标志。见表 3.5 外部中断模式寄存器控制每个引脚为边沿触发还是 EXTMODE 电平触发。见表 3.6 外部中断极性寄存器控制由每个引脚为哪种电平或 EXTPOLAR 边沿触发 访问 R/W R/W R/W 复位值[1] 地址 0x00 0x400F C140 0x00 0x400F C148 0x00 0x400F C14C [1] 复位值仅反映已使用位中保存的数据,它不包括保留位的内容。 3.6.2 外部中断标志寄存器(EXTINT - 0x400F C140) 当一个引脚选择使用外部中断功能时,该引脚上的电平或边沿(由 EXTPOLAR 和 EXTMODE 寄存器中的相应位来决定)将会置位 EXTINT 寄存器的中断标志。这会向 NVIC 提 交相应的中断请求,如果引脚中断使能,则产生中断。 通过向 EXTINT 寄存器的位 EINT0~位 EINT3 写入 1 来将其清零。在电平触发模式下,中 断只有在引脚处于无效状态时才能被清零。 一旦 EINT0~EINT3 中的一位被置位且相应的代码开始执行(处理唤醒和/或外部中断)时, 必须将 EXTINT 寄存器中的相应位清零。否则,在后面 EINT 引脚上触发的事件将不会被识别。 注:只要外部中断操作模式(也就是,有效电平/边沿)发生变化(包括外部中断的初始化),那么 EXTINT 寄存器中相应的位必须被清零!详细内容请见“外部中断模式寄存器(EXTMODE – 0x400F C148)”和“外部 中断极性寄存器(EXTPOLAR - 0x400F C14C)”。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第3章 例如,如果外部中断 0 引脚的低电平将系统从掉电模式中唤醒,那么为了将来还能进入掉 电模式,唤醒后的程序必须将 EINT0 位复位。如果 EINT0 位仍保持置位状态,那么后来唤醒 掉电模式的任何操作都将失败。外部中断处理也不例外。有关掉电模式的详细信息见后面章节 的描述。 表 3.5 外部中断标志寄存器(EXTINT)位描述 位 名称 描述 复位值 在电平触发模式下,如果引脚的 EINT0 功能被选用且引脚处于有效状态时, 该位置位;在边沿触发模式下,如果引脚的 EINT0 功能被选用且引脚上出现 0 EINT0 所选边沿时,该位置位 0 该位通过写入 1 来清零,但在电平触发模式下引脚处于有效状态的情况除外[1] 在电平触发模式下,如果引脚的 EINT1 功能被选用且引脚处于有效状态时, 该位置位;在边沿触发模式下,如果引脚的 EINT1 功能被选用且引脚上出现 1 EINT1 所选边沿时,该位置位 0 该位通过写入 1 来清零,但在电平触发模式下引脚处于有效状态的情况除外[1] 在电平触发模式下,如果引脚的 EINT2 功能被选用且引脚处于有效状态时, 该位置位;在边沿触发模式下,如果引脚的 EINT2 功能被选用且引脚上出现 2 EINT2 所选边沿时,该位置位 0 该位通过写入 1 来清零,但在电平触发模式下引脚处于有效状态的情况除外[1] 在电平触发模式下,如果引脚的 EINT3 功能被选用且引脚处于有效状态时, 该位置位;在边沿触发模式下,如果引脚的 EINT3 功能被选用且引脚上出现 3 EINT3 所选边沿时,该位置位 0 该位通过写入 1 来清零,但在电平触发模式下引脚处于有效状态的情况除外[1] 7:4 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA [1] 例如,如果选择 EINTx 为低电平触发且在相应的引脚上出现低电平时,该位不能被清零;该位仅在该 引脚上的信号变为高电平时才被清零。 3.6.3 外部中断模式寄存器(EXTMODE - 0x400F C148) EXTMODE 寄存器中的位用来选择每个 EINT 脚是电平触发还是边沿触发。只有选择用作 EINT 功能的引脚(见“引脚连接模块”章节的“寄存器描述”一节)并已在相关的 NVIC 寄存 器中使能相应中断,才能产生外部中断。当然,如果引脚选择用作其它功能,则产生其它功能 的中断。 注:当某个中断在 VICIntEnable 寄存器中被禁能时,软件应该只改变 EXTMODE 寄存器中相应位的值, 并且在中断使能(初始化)或重新使能前,软件向 EXTINT 写入 1。通过改变模式和不清零 EXTINT 位可以设 置外部中断。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第3章 表 3.6 外部中断模式寄存器(EXTMODE)位描述 位 名称 0 EXTMODE0 1 EXTMODE1 2 EXTMODE2 3 EXTMODE3 7:4 - 值 描述 0 EINT0 选择电平触发 1 EINT0 为边沿触发 0 EINT1 选择电平触发 1 EINT1 为边沿触发 0 EINT2 选择电平触发 1 EINT2 为边沿触发 0 EINT3 选择电平触发 1 EINT3 为边沿触发 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 复位值 0 0 0 0 NA 3.6.4 外部中断极性寄存器(EXTPOLAR - 0x400F C14C) 在电平触发模式中,EXTPOLAR 寄存器的位选择相应中断触发是高电平还是低电平有效。 在边沿触发模式中,EXTPOLAR 寄存器的位选择相应中断是上升沿触发还是下降沿触发有效。 只有引脚选择用作 EINT 功能(见“引脚连接模块”的“寄存器描述”章节),才能产生外部 中断。当然,如果引脚选择用作其它中断功能,则产生其它的中断功能)。 注:当某个中断在 VICIntEnable 寄存器中被禁能时,软件应该只改变 EXTPOLAR 寄存器中相应位的值。 并且在中断使能(初始化)或重新使能前,软件向 EXTINT 写入 1。可通过改变极性和不清零 EXTINT 位来设 置外部中断。 表 3.7 外部中断极性寄存器(EXTPOLAR)位描述 位 名称 值 描述 0 EINT0 为低电平有效或下降沿触发(由 EXTMODE0 决定) 0 EXTPOLAR0 1 EINT0 为高电平有效或上升沿触发(由 EXTMODE0 决定) 0 EINT1 为低电平有效或下降沿触发(由 EXTMODE1 决定) 1 EXTPOLAR1 1 EINT1 为高电平有效或上升沿触发(由 EXTMODE1 决定) 0 EINT2 为低电平有效或下降沿触发(由 EXTMODE2 决定) 2 EXTPOLAR2 1 EINT2 为高电平有效或上升沿触发(由 EXTMODE2 决定) 0 EINT3 为低电平有效或下降沿触发(由 EXTMODE3 决定) 3 EXTPOLAR3 1 EINT3 为高电平有效或上升沿触发(由 EXTMODE3 决定) 7:4 - - 保留,用户软件不要向其写入 1。从保留位读出的值未定义 复位值 0 0 0 0 NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第3章 3.7 其它系统控制和状态标志 下面列出了不适用于外设或其它寄存器的控制 LPC1700 系列 Cortex-M3 微控制器操作的某 些方面。 3.7.1 系统控制和状态寄存器(SCS - 0x400F C1A0) 表 3.8 系统控制和状态寄存器 (SCS)位描述 位 符号 值 描述 访问 复位值 3:0 - - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 - NA 主振荡器范围选择: 4 OSCRANGE 0 主振荡器的频率范围为 1MHz~20MHz; R/W 0 1 主振荡器的频率范围为 15MHz~24MHz。 主振荡器使能: 0 主振荡器被禁能; 5 OSCEN R/W 0 1 主振荡器被使能,且在正确的外部电路连接到 XTAL1 和 XTAL2 引脚的情况下启动。 主振荡器状态: 0 主振荡器不稳定,不能用作时钟源; 6 OSCSTAT RO 0 1 主振荡器已稳定,能够用作时钟源;主振荡器必须通过 OSCEN 位使能。 31:7 - - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 - NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 LPC1700 系列微控制器 第第四四章章 计计时时和和功功率率控控制制 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 4 章 计时和功率控制 ·································································································· 1 4.1 计时和功率控制功能汇总 ·····························································································1 4.2 寄存器描述 ····················································································································1 4.3 振荡器 ····························································································································2 4.3.1 内部RC振荡器 ·······································································································2 4.3.2 主振荡器 ················································································································3 4.3.3 RTC振荡器 ·············································································································4 4.4 时钟源选择多路复用 ·····································································································4 4.4.1 时钟源选择寄存器(CLKSRCSEL – 0x400F C10C) ·········································4 4.5 PLL0(锁相环 0)·········································································································5 4.5.1 PLL0 操作 ··············································································································5 4.5.2 PLL0 寄存器描述···································································································5 4.5.3 PLL0 控制寄存器(PLL0CON – 0x400F C080)·················································6 4.5.4 PLL0 配置寄存器(PLL0CFG – 0x400F C084) ·················································7 4.5.5 PLL0 状态寄存器(PLL0STAT – 0x400F C088) ················································9 4.5.6 PLL0 中断:PLOCK0····························································································9 4.5.7 PLL0 模式 ············································································································10 4.5.8 PLL0 馈送寄存器(PLL0FEED – 0x400F C08C)·············································10 4.5.9 PLL0 和掉电模式·································································································10 4.5.10 PLL0 频率计算中的参数 ·····················································································10 4.5.11 确定PLL0 频率参数的过程 ·················································································11 4.5.12 PLL0 频率计算举例·····························································································12 4.5.13 PLL0 设置步骤·····································································································13 4.6 PLL1(锁相环 1)·······································································································13 4.6.1 PLL1 寄存器描述·································································································14 4.6.2 PLL1 控制寄存器(PLL1CON – 0x400F C0A0)··············································15 4.6.3 PLL1 配置寄存器(PLL1CFG – 0x400F C0A4)···············································15 4.6.4 PLL1 状态寄存器(PLL1STAT – 0x400F C0A8) ·············································16 4.6.5 PLL1 中断:PLOCK1··························································································16 4.6.6 PLL1 馈送寄存器(PLL1FEED – 0x400F C0AC)············································17 4.6.7 PLL1 和掉电模式·································································································17 4.6.8 PLL1 频率计算中的参数 ·····················································································17 4.6.9 确定PLL1 频率参数的过程 ·················································································18 4.7 时钟分频器 ··················································································································18 4.7.1 CPU时钟配置寄存器(CCLKCFG – 0x400F C104) ········································19 4.7.2 USB时钟配置寄存器(USBCLKCFG – 0x400F C108) ···································19 4.7.3 IRC调整寄存器(IRCTRIM – 0x400F C1A4) ··················································20 4.7.4 外设时钟选择寄存器 0 和 1(PCLKSEL0 – 0x400F C1A8 和PCLKSEL1 – 0x400F C1AC)···················································································································20 4.8 功率控制 ······················································································································21 4.8.1 睡眠模式 ··············································································································21 4.8.2 深度睡眠模式·······································································································22 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. iii iii 广州周立功单片机发展有限公司 4.8.3 掉电模式 ··············································································································22 4.8.4 深度掉电模式·······································································································22 4.8.5 外设功率控制·······································································································23 4.8.6 寄存器描述···········································································································23 4.8.7 功率模式控制寄存器(PCON – 0x400F C0C0) ···············································23 4.8.8 从低功耗模式中唤醒 ···························································································24 4.8.9 外设功率控制寄存器(PCONP – 0x400F C0C4) ·············································24 4.8.10 功率控制注意事项 ·······························································································26 4.8.11 电源域 ··················································································································26 4.9 唤醒定时器 ··················································································································26 4.10 外部时钟输出引脚·······································································································26 4.10.1 时钟输出配置寄存器(CLKOUTCFG – 0x400F C1C8) ··································27 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. iv iv 广州周立功单片机发展有限公司 第4章 第4章 计时和功率控制 4.1 计时和功率控制功能汇总 这部分描述了 LPC1700 系列 Cortex-M3 微控制器所需的各种时钟和时钟源选择,以及功率 控制和低功耗模式的唤醒。它们的功能包括:  振荡器;  时钟源选择;  PLL;  时钟分频器;  APB 分频器;  功率控制;  唤醒定时器;  外部时钟输出。 图 4.1 LPC1700 系列 Cortex-M3 微控制器的时钟产生 4.2 寄存器描述 所有寄存器(不管大小)都按照字地址边界排列。寄存器的详细内容在每种功能描述中给 出。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第4章 表 4.1 系统控制寄存器汇总 名称 描述 时钟源选择 CLKSRCSEL 时钟源选择寄存器 锁相环(PLL0,主 PLL) PLL0CON PLL0 控制寄存器 PLL0CFG PLL0 配置寄存器 PLL0STAT PLL0 状态寄存器 PLL0FEED PLL0 馈送寄存器 锁相环(PLL1,USB PLL) PLL1CON PLL1 控制寄存器 PLL1CFG PLL1 配置寄存器 PLL1STAT PLL1 状态寄存器 PLL1FEED PLL1 馈送寄存器 时钟分频器 CCLKCFG CPU 时钟配置寄存器 USBCLKCFG USB 时钟配置寄存器 IRCTRIM IRC 调整寄存器(IRC Trim Register) PCLKSEL0 外设时钟选择寄存器 0 PCLKSEL1 外设时钟选择寄存器 1 功率控制 PCON 功率控制寄存器 PCONP 外设功率控制寄存器 应用 CLKOUTCFG 时钟输出配置寄存器 访问 复位值 地址 R/W 0 0x400F C10C R/W 0 0x400F C080 R/W 0 0x400F C084 RO 0 0x400F C088 WO NA 0x400F C08C R/W 0 0x400F C0A0 R/W 0 0x400F C0A4 RO 0 0x400F C0A8 WO NA 0x400F C0AC R/W 0 0x400F C104 R/W 0 0x400F C108 R/W 0xA0 0x400F C1A4 R/W 0 0x400F C1A8 R/W 0 0x400F C1AC R/W 0 0x400F C0C0 R/W 0x03BE 0x400F C0C4 R/W 0 0x400F C1C8 4.3 振荡器 LPC1700 系列Cortex-M3 微控制器包括 3 个独立的振荡器,它们分别为主振荡器、内部RC 振荡器和RTC振荡器。每个振荡器可根据特定的应用要求来选用,请见图 4.1。 复位后,LPC1700 系列 Cortex-M3 微控制器自动选择内部 RC 振荡器作为系统的时钟源, 用户可以通过软件方式修改时钟源选择寄存器。这使得系统能在没有外部晶振的情况下运行, 并允许 Boot Loader 代码在一个已知的频率下操作。 4.3.1 内部RC振荡器 内部 RC 振荡器(IRC)可用作看门狗定时器的时钟源,也可以用作驱动 PLL0 和 CPU 的 时钟源。IRC 的精度达不到 USB 接口的时间基准精度要求(USB 接口需要一个更精确的时间 基准以遵循 USB 规范)。而且,如果 CAN 波特率高于 100kbit/s,则 IRC 不应用于 CAN1/2 模 块。IRC 的额定频率为 4MHz。 在上电或任何芯片复位时,LPC1700 系列 Cortex-M3 微控制器使用 IRC 作为时钟源。此后, 软件可将其切换为另一种可用的时钟源。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第4章 4.3.2 主振荡器 主振荡器(外部晶体振荡器)可作为 CPU 的时钟源(不管是否使用 PLL0)。主振荡器工作 在 1MHz~24MHz 下。该频率可通过主 PLL(PLL0)来提高,其值可高达 CPU 操作频率的最 大值。振荡器输出称为 OSC_CLK。PLLCLKIN 选择用作 PLL0 输入时钟,为了便于频率等式 的书写及本文档的描述,将 ARM 处理器时钟频率称为 CCLK。PLLCLKIN 和 CCLK 的频率相 同,除非 PLL0 有效且已连接。详细内容请参考本章“PLL0(锁相环 0)”的描述。 LPC1700 系列 Cortex-M3 微控制器振荡器可工作在两种模式下:从属模式和振荡模式。 从属模式下,输入时钟信号应该与一个 100pF的电容(图 4.2(a)的Cc)相连,其幅值至少 为 200mVrms。这种配置下XTAL2 引脚可以不连接。 振荡模式中使用的外部元件和模型见图 4.2的(b)和(c),以及表 4.2和表 4.3。由于片内集成 了反馈电阻,只需在外部连接一个晶体和电容Cx1、Cx2 就可形成基本模式的振荡电路(基本频 率用L、CL和Rs来表示)。图 4.2 (c)的电容Cp是并联封装电容,其值不能大于 7pF。参数Fc、CL、 Rs和Cp都由晶体制造商提供。 图 4.2 振荡器模式和模型:a)从属模式,b)振荡模式,c)外部晶体模型(用来评估 CX1/X2 的值) 表 4.2 振荡模式下 CX1/X2 的建议取值(晶体和外部元件参数)低频模式(OSCRANGE=0) 基本振荡频率 FOSC 1MHz~5MHz 5MHz~10MHz 10MHz~15MHz 15MHz~20MHz 晶体负载电容 CL 10pF 20pF 30pF 10pF 20pF 30pF 10pF 20pF 10pF 最大晶体串联电阻 Rs <300 <300 <300 <300 <200 <100 <160 <60 <80 外部负载 电容 Cx1,Cx2 18pF,18pF 39pF,39pF 57pF,57pF 18pF,18pF 39pF,39pF 57pF,57pF 18pF,18pF 39pF,39pF 18pF,18pF LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第4章 表 4.3 振荡模式下 CX1/X2 的建议取值(晶体和外部元件参数)高频模式(OSCRANGE=1) 基本振荡频率 FOSC 15MHz~20MHz 20MHz~25MHz 晶体负载电容 CL 10pF 20pF 10pF 20pF 最大晶体串联电阻 Rs <180 <100 <160 <80 外部负载 电容 Cx1,Cx2 18pF,18pF 39pF,39pF 18pF,18pF 39pF,39pF 由于芯片操作总是从内部 RC 振荡器开始,且主振荡器在某些应用中并没有使用,因此主 振荡器只能由软件请求来启动。通过把 SCS 寄存器的 OSCEN 置位可实现这种操作,如表 3.8 所述。主振荡器提供了一个状态标志(SCS 寄存器中的 OSCSTAT 位),使程序可据此得知振荡 器何时可用。待确定振荡器运行稳定后,软件可控制切换为主振荡器模式使其作为时钟源。在 启动主振荡器之前,频率范围必须通过配置 SCS 寄存器中的 OSCRANGE 位来选择。 4.3.3 RTC振荡器 RTC 振荡器可提供 1Hz 到 32KHz 的 RTC 时钟输出,可用作 PLL0、CPU 和/或看门狗定时 器的时钟源。 4.4 时钟源选择多路复用 某些时钟源可选择用来驱动 PLL0、CPU 和片内外围设备。这些可用的时钟源包括主振荡 器、RTC 振荡器和内部 RC 振荡器。 只有在 PLL0 断开连接时,才可更换输入时钟源。关于在系统中如何使用 PLL0 改变时钟 源的详细描述,请见“PLL0 设置序列”。 注意下列有关时钟源选择的限制:  IRC 振荡器不应用作(通过 PLL0)USB 子系统的时钟源;  如果 CAN 波特率高于 100kbit/s,则 IRC 振荡器不应用作(通过 PLL0)CAN 控制器 的时钟源。 4.4.1 时钟源选择寄存器(CLKSRCSEL – 0x400F C10C) CLKSRCSEL 寄存器包含了选择 PLL0 时钟源的位。 表 4.4 时钟源选择寄存器位描述 位 符号 值 描述 复位值 如下选择 PLL0 的时钟源: 00 选择内部 RC 振荡器作为 PLL0 时钟源(默认) 01 选择主振荡器作为 PLL0 时钟源 1:0 CLKSRC 10 选择 RTC 振荡器作为 PLL0 时钟源 0 11 保留,不使用该值 注:不适当地设置该值,或改变该值的不正确序列都会导致器件不能正确地 操作 7:2 - 0 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第4章 4.5 PLL0(锁相环 0) PLL0 支持从 32KHz 到 25MHz 范围内的输入时钟频率。时钟源在 CLKSRCSEL 寄存器中 选择(见“时钟源选择多路复用”的描述)。PLL 将输入时钟升频,然后再分频以提供给 CPU、 外设或 USB 子系统使用的实际时钟。需要注意的是 USB 子系统有其自身特定的 PLL(见“PLL1” 的描述)。PLL0 可产生的时钟频率高达 100MHz,是 CPU 所允许的最大值。 4.5.1 PLL0 操作 PLL 输入(频率范围从 32KHz 到 50MHz)首先被一个“N”的值分频,“N”值的范围可以从 1 到 256。该输入分频在相同的输入频率下,提供更多种可能的输出频率范围。 PLL倍频器的操作在PLL输入分频器之后进行。通过使用电流控制振荡器(CCO)由“M”的值 (支持的M值范围从 6 到 512,以及如表 4.8所示的值)来倍频输入分频器的输出。从而产生的 频率必须在 275MHz到 550MHz频率范围内。倍频器操作是先使用M值分频CCO输出,然后使 用相位-频率检测器将分频后的CCO输出与倍频器输入相比较。根据误差输出不同的电流值来控 制CCO的振荡频率。 PLL0 输出还有其它的分频器,使其频率下降到CPU、外设和USB子系统所需要的值。PLL0 输出分频器在“时钟分频器”中描述。PLL0 的方框图请见图 4.3。 PLL0CON 寄存器控制 PLL 有效。PLL0CFG 寄存器控制 PLL0 倍频器和分频器的值。为了 避免程序对 PLL0 正在使用的相关参数意外修改或 PLL 失效,芯片厂商对这两个寄存器进行了 保护。由于所有的芯片操作,包括看门狗定时器,在这种配置的情况下都可能依赖于 PLL0(例 如当 PLL 正在提供芯片时钟时),因此意外改变 PLL0 的设置将导致微控制器执行不期望或错 误的操作。保护是由一个类似于操作看门狗定时器的代码序列来实现,详情请参阅 PLL0FEED 寄存器的描述。 PLL0 在系统进入掉电模式时会自动关闭并断开。PLL0 必须通过软件配置、使能和连接到 系统。 很重要的一点是,要按照“PLL0 设置序列”中描述的设置步骤来进行,否则 PLL 可能不 操作! 当在用户 Flash 中没有有效代码(由校验和字段决定)或在启动时拉低 ISP 使能引脚(P2.10) 时,芯片将进入 ISP 模式并且引导代码将用 IRC 设置 PLL。因此,当用户启动 JTAG 来调试应 用代码时,不能假设 PLL 被禁能。用户启动代码必须按照本章中说明的步骤来断开与 PLL 的 连接。 4.5.2 PLL0 寄存器描述 PLL0 由PLL寄存器进行控制,见表 4.5。下面给出更详细的描述。 注:不适当地设置 PLL0 值会导致器件不能正确地操作! 表 4.5 PLL0 寄存器 名称 PLL0CON 描述 PLL0 控制寄存器。保存更新 PLL0 控制位的寄存器。写 入该寄存器的值只有在发生有效的 PLL0 馈送序列后才 起作用 访问 R/W 复位值[1] 0 地址 0x400F C080 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第4章 名称 PLL0CFG PLL0STAT PLL0FEED 描述 PLL0 配置寄存器。保持更新 PLL0 配置值的寄存器。写 入该寄存器的值只有在发生有效的 PLL0 馈送序列后才 起作用 PLL0 状态寄存器。PLL0 控制和配置信息的读回寄存器。 如果对 PLL0CON 或 PLL0CFG 执行了写操作,但没有发 生 PLL0 馈送序列,则这些值将不会反映当前 PLL0 的状 态。读取该寄存器提供了控制 PLL0 和 PLL0 状态的实际 值 PLL0 馈送寄存器。该寄存器使能 PLL0 控制和配置信息 的装载,它将 PLL0CON 和 PLL0CFG 寄存器中的 PLL0 控制和配置信息载入到实际影响 PLL0 操作的映像寄存 器中 访问 R/W RO WO [1] 复位值仅反映在使用位中保存的数据,它不反映保留位的内容。 复位值[1] 0 0 NA 续上表 地址 0x400F C084 0x400F C088 0x400F C08C 图 4.3 PLL0 方框图 4.5.3 PLL0 控制寄存器(PLL0CON – 0x400F C080) PLL0CON 寄存器包含了使能和连接 PLL0 的位。使能 PLL0 以允许它尝试锁定倍频器和分 频器的当前设定值。连接 PLL0 使 PLL0 输出作为处理器和大多数片内外设的时钟源。对 PLL0CON 寄存器的更改,只有在执行了正确的 PLL0 馈送序列后才生效(见“PLL0 馈送寄存 器(PLL0FEED – 0x400F C08C)”的描述)。 表 4.6 PLL0 控制寄存器位描述 位 符号 描述 复位值 PLL0 使能。当该位为 1 并且在有效的PLL0 馈送之后,该位将激活PLL0 0 PLLE0 0 并允许其锁定到指定的频率。见PLL0STAT寄存器,表 4.9 PLL0 连接。在使能和锁定PLL0 后将PLLC0 设为 1,后面跟随有效的PLL0 馈送序列使PLL0 作为CPU时钟源、AHB外设的时钟源,以及APB外设 1 PLLC0 0 的时钟源。PLL0 输出可以用来计时USB子系统(如果频率为 48MHz)。 见PLL0STAT寄存器,表 4.9 7:2 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA PLL0 在用作时钟源之前必须进行设置、使能并锁定。当 PLL 时钟源从振荡器时钟切换到 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第4章 PLL0 输出或反过来操作时,内部同步电路确保不会产生干扰。在 PLL0 锁定后,需要软件来进 行连接,硬件是不会主动完成 PLL0 连接的。此外,PLL0 脱离锁定状态时,硬件是不会主动断 开 PLL0 连接的;这时振荡器很可能已变得不稳定,此时断开 PLL0 也没用了。 4.5.4 PLL0 配置寄存器(PLL0CFG – 0x400F C084) PLL0CFG 寄存器包含 PLL0 倍频器和分频器值。对 PLL0CFG 寄存器的更改仅在执行了正 确的 PLL 馈送序列后才生效(见“PLL0 馈送寄存器(PLL0FEED – 0x400F C08C)”的描述)。 有关 PLL 频率、倍频器和分频器值的计算,请见“PLL0 频率计算”。 表 4.7 PLL0 配置寄存器位描述 位 14:0 15 23:16 31:24 符号 MSEL0 NSEL0 - 描述 PLL0 倍频器值。在PLL0 频率计算中提供“M”值。存储在这里的值为M-1。 支持的M值有从 6~512 的整数值,以及如表 4.8所示的值 注:有些 M 值硬件并不支持。有关 MSEL0 正确值的选取,见“PLL0 频 率计算” 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 PLL0 预分频器值。在 PLL0 频率计算中提供“N”值。存储在这里的值为 N-1,支持的 N 值范围是 1~32 注:有关 NSEL0 正确值的选取,见“PLL0 频率计算” 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 复位值 0 NA 0 NA 表 4.8 使用 32KHz RTC 振荡器为 PLL0 时钟源时可用的 M 值 倍频值(M) 4272 4395 4578 4725 4807 5127 5188 5400 5493 5859 6042 6075 6104 6409 6592 6750 6836 6866 6958 预分频值(N) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FCCO 279.9698 288.0307 300.0238 309.6576 315.0316 336.0031 340.0008 353.8944 359.9892 383.9754 395.9685 398.1312 400.0317 420.0202 432.0133 442.3680 448.0041 449.9702 455.9995 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第4章 倍频值(M) 7050 7324 7425 7690 7813 7935 8057 8100 8545 8789 9155 9613 10254 10376 10986 11719 12085 12207 12817 12817 13184 13184 13672 13733 13733 13916 14099 14420 14648 15381 15381 15564 15625 15869 16113 16479 17578 18127 18311 19226 19775 LPC1700 用户手册 预分频值(N) 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 3 3 2 2 2 3 3 3 3 3 3 FCCO 462.0288 479.9857 486.6048 503.9718 512.0328 520.0282 528.0236 530.8416 280.0026 287.9980 299.9910 314.9988 336.0031 340.0008 359.9892 384.0082 396.0013 399.9990 419.9875 279.9916 432.0133 288.0089 448.0041 450.0029 300.0020 455.9995 461.9960 315.0097 479.9857 504.0046 336.0031 340.0008 512.0000 519.9954 527.9908 359.9892 383.9973 395.9904 400.0099 419.9984 431.9915 续上表 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第4章 倍频值(M) 20508 20599 20874 21149 21973 23071 23438 23804 24170 预分频值(N) 3 3 3 3 3 3 3 3 3 FCCO 448.0041 449.9920 455.9995 462.0070 480.0075 503.9937 512.0109 520.0063 528.0017 续上表 4.5.5 PLL0 状态寄存器(PLL0STAT – 0x400F C088) PLL0STAT 寄存器提供了当前生效的 PLL0 真实工作参数和状态,这是一个只读寄存器。 PLL0STAT 可能与 PLL0CON 和 PLL0CFG 中的值不同,这是因为对这些寄存器的更改只有在执 行了正确的 PLL0 馈送序列后才生效(见“PLL0 馈送寄存器(PLL0FEED – 0x400F C08C)”)。 表 4.9 PLL0 状态寄存器位描述 位 14:0 15 23:16 24 25 26 31:27 符号 MSEL0 NSEL0 PLLE0_STAT PLLC0_STAT PLOCK0 - 描述 读回 PLL0 倍频器值。这是 PLL0 当前使用的值,它比实际的倍 频器值少 1 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 读回 PLL0 预分频器值。这是 PLL0 当前使用的值,它比实际的 分频器值少 1 读回 PLL0 使能位。当该位为 1 时,PLL0 处于激活状态;当该 位为 0 时,PLL0 关闭。当进入掉电模式时,该位自动清零 读回 PLL0 连接位。当 PLLC0 和 PLLE0 都为 1 时,PLL0 作为 LPC1700 系列 Cortex-M3 微控制器的时钟源被连接;当 PLLC0 或 PLLE0 位为 0 时,PLL0 被旁路,当进入掉电模式时,该位自 动清零 反映 PLL0 的锁定状态。当该位为 0 时,PLL0 未锁定;当该位 为 1 时,PLL0 锁定到指定的频率。见下文中的细节 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 复位值 0 NA 0 0 0 0 NA 4.5.6 PLL0 中断:PLOCK0 PLL0STAT 寄存器的 PLOCK0 位反映 PLL0 的锁定状态。当使能 PLL0 或改变参数时,PLL0 在新的条件下需要一些时间来完成锁定,可通过监控 PLOCK0 位来确定连接 PLL0 的时间。当 PLL 参考频率(参考频率 FREF 与 N 分频器输出的频率相等,即 FREF=FIN/N)小于 100KHz 或 大于 20MHz 时,PLOCK0 的值可能不稳定。在这些情况下,可假设 PLL 启动后经过一段时间 即稳定下来。当 FREF 大于 400KHz 时,这个时间为 500s;当 FREF 小于 400KHz 时,这个时间 为 200/FREF 秒。 PLOCK0 位连接到中断控制器。这样可使用软件使能 PLL0,而无需等待 PLL0 锁定。当发 生中断时,可以连接 PLL0 并禁止中断。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第4章 4.5.7 PLL0 模式 PLLE0 和PLLC0 的组合见表 4.10。 表 4.10 PLL0 控制位组合 PLLC0 0 0 1 1 PLLE0 0 1 0 1 PLL 功能 PLL0 被关闭并断开连接。PLL0 的输出时钟与输入时钟相同 PLL0 被激活但是尚未连接。PLL0 可在 PLOCK0 有效后连接 与 00 组合相同。这样消除了 PLL0 已被连接但没有使能的可能性 PLL0 被激活且已被连接作为系统时钟源 4.5.8 PLL0 馈送寄存器(PLL0FEED – 0x400F C08C) 必须将正确的馈送序列写入 PLL0FEED 寄存器才能使 PLL0CON 和 PLL0CFG 寄存器的更 改生效。馈送序列如下:  将值 0xAA 写入 PLL0FEED;  将值 0x55 写入 PLL0FEED。 这两个写操作的顺序必须正确,而且必须是在相同的地址空间(0x400F C000~0x400F FFFF)内没有其它寄存器访问。因此,如果有一个中断服务程序在对该空间内的一个寄存器执 行写操作,那么在执行 PLL0 馈送操作时必须禁止中断。如果写入的值不正确、或没有满足前 两个条件,那么对 PLL0CON 或 PLL0CFG 寄存器的更改都不会生效。 表 4.11 PLL 馈送寄存器位描述 位 功能 描述 复位值 PLL0 馈送序列必须写入该寄存器才能使 PLL0 配置和控制寄 7:0 PLL0FEED 0x00 存器的更改生效 4.5.9 PLL0 和掉电模式 掉电模式会自动关闭并断开 PLL0。从掉电模式唤醒不会自动恢复原先的 PLL0 参数,必须 在软件中恢复 PLL0。通常,可以在中断服务程序的开始激活 PLL0、等待锁定并连接 PLL0, 该中断服务程序也可以在掉电唤醒时调用。需要注意的一点,那就是不要试图在掉电唤醒之后 简单地执行馈送序列来重新启动 PLL0。在建立 PLL 锁定之前,这种操作将会同时使能并连接 PLL0。 4.5.10 PLL0 频率计算中的参数 在 PLL0 计算的过程中,会用到一些参数,如下表所示: 表 4.12 PLL 频率参数 参数 FIN FCCO N M FREF 描述 时钟源选择多路复用中 PLL 输入时钟的频率 系统时钟频率(PLL 电流控制振荡器的输出) PLL0CFG 寄存器的 NSEL0 位的 PLL0 预分频值(PLL0CFG NSEL0 字段+1)。N 是从 1~ 32 之间的一个整数 PLL0CFG 寄存器中 MSEL0 位的 PLL0 倍频值(PLL0CFG MSEL0 字段+1)。并不是所有 可能的 M 值都被支持。见下文 PLL 内部参考频率,FIN 被 N 分频 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 广州周立功单片机发展有限公司 第4章 PLL0 输出频率(当 PLL0 被激活且连接时)的公式: FCCO =(2×M×FIN)/ N PLL 输入和设定必须满足下面的条件:  FIN 的范围:32KHz~50MHz;  FCCO 的范围:275MHz~550MHz。 可通过求解 PLL 等式来得到其它的 PLL 参数: M =(FCCO×N)/(2×FIN) N =(2×M×FIN)/ FCCO FIN =(FCCO×N)/(2×M) 允许的 M 值: 在较高的振荡器频率下(超过 1MHz),允许 M 值的范围从 6~512。这是支持主振荡器和 IRC 操作的整个 M 值范围。 对于较低频率,特别是在RTC振荡器用来计时PLL0 时,选择了 65 个M值用于支持波特率 产生和CAN/USB操作,这些值在表 4.13中给出。 表 4.13 使用低频时钟输入的倍频值 低频 PLL 倍频值(M) 4272 4395 4578 4725 4807 5127 5188 5400 5493 5859 6042 6075 6104 6409 6592 6750 6836 6866 6958 7050 7324 7425 7690 7813 7935 8057 8100 8545 8789 9155 9613 10254 10376 10986 11719 12085 12207 12817 13184 13672 13733 13916 14099 14420 14648 15381 15564 15625 15869 16113 16479 17578 18127 18311 19226 19775 20508 20599 20874 21149 21973 23071 23438 23804 24170 4.5.11 确定PLL0 频率参数的过程 通过使用 NXP 提供的电子数据表可简单确定 PLL0 参数。如果要手动确定 PLL0 参数,那 么可使用下面的步骤来进行:  确定是否需使用 USB,以及是否由 PLL0 驱动。USB 要求一个占空比为 50%的 48MHz 时钟源,也就是说,FCCO 必须是 48MHz 的偶数整数倍(即 96MHz 的整数倍),误差 范围极小;  选择所需的处理器操作频率(FCCLK)。这取决于处理器的吞吐量要求,所支持的特定 的 UART 波特率等。记住外设可在较低时钟频率下运行,这个频率可以低于处理器的 频率(见“时钟分频器”和“功率控制”)。找出与所需 FCCLK 的倍数接近的一个 FCCO 值,再与步骤 1 中 USB 所要求的 FCCO 值相比较,较低的 FCCO 值,处理器功耗也更低。  选择 PLL 输入频率(FIN)的值。这可从主振荡器、RTC 振荡器或片内 RC 振荡器中 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第4章 选择。使用 USB 功能时,需选择主振荡器。记住如果使用 PLL1 而不是 PLL0 来驱动 USB 子系统,会影响选择主振荡器的频率。  计算 M 和 N 的值来产生十分精确的 FCCO 频率。将所需的 M 值减 1(即,M-1)写入 PLL0CFG 寄存器的 MSEL0 字段。将所需的 N 值减 1(即,N-1)写入 PLL0CFG 寄存 器的 NSEL0 字段。 总的来说,建议使用一个较小的 N 值,这样可以降低 CCO 的倍频数。由于在某些情况下 很难找到最好的值,因此可以使用电子数据表或类似的方法来立即获得多种可能的值,再从中 选择出一个最好的值。有关这方面的电子数据表可从 NXP 公司获取。 4.5.12 PLL0 频率计算举例 下面的例子说明了如何根据系统要求来设置 PLL0 的值。 例子 1) 假设:  在应用中使用 USB 接口并且由 PLL0 驱动。在 PLL 操作范围(275MHz~550MHz) 内,96MHz 的最小整数倍频值为 288MHz;  预期的 CPU 速率为 60MHz;  使用外部 4MHz 晶振作为系统时钟源。 计算: M =(FCCO×N)/(2×FIN) 假设 N=1,这产生 PLL0 所需的最小倍频值,因此 M=288×106/(2×4×106)=36。因为结 果是整数,所以没有必要进一步找出一系列更好的 PLL0 配置值。写入 PLL0CFG 的值为 0x23(N-1=0;M-1=35=0x23)。 所需的 FCCLK 可以通过分频 FCCO(288×106/60×106=4.8)来确定。能产生最接近所需值 FCCLK 的分频整数值为 5,从而获得实际的 FCCLK 为 57.6MHz。 如果一定要获得准确的 60MHz 频率,那么 FCCLK 必须能够被分频为 48MHz 和 60MHz。此 时,只有令 FCCO=480MHz,才能满足要求。通过 10 分频,得到 USB 子系统所需的占空比为 50%的 48MHz 频率;通过 8 分频,得到 60MHz 的 CPU 时钟。令 FCCO 为 480MHz 的 PLL0 设 置参数是 N=1 和 M=60。 例子 2) 假设:  在应用中将不使用 USB 接口;  预期的 CPU 速率为 72MHz;  使用 32.768 KHz RTC 时钟源作为系统时钟源。 计算: M =(FCCO×N)/(2×FIN) 要产生所需的 FCCLK,而在 PLL0 操作范围内,最小的 FCCO 为 288MHz(4×72MHz)。假设 N=1,产生 PLL 所需的最小倍频值。 因此,M=288×106/(2×32,768)=4,394.53125。由于这不是一个整数,所以我们并不能得到 一个非常精确的 288MHz频率。我们需要定制一个表格,将不同的结果表示出来,请见表 4.14。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 广州周立功单片机发展有限公司 第4章 表 4.14 可能的 PLL 值例子 N M 1 4394.53125 M 舍入值 4395 FREF(Hz) 32768 FCCO(Hz) 288.0307 实际 CCLK(Hz) 72.0077 %误差 0.0107 2 8789.0625 8789 16384 287.9980 71.9995 -0.0007 3 13183.59375 13184 10922.67 288.0089 72.0022 0.0031 4 17578.125 17578 8192 287.9980 71.9995 -0.0007 5 21972.65625 21973 6553.6 288.0045 72.0011 0.0016 若 N=6,则 M 的值会超出范围,因此 N 只能取 1~5。在上表中,计算出的 M 值被舍入为 最接近的整数,以使 CPU 实际频率在最大操作频率(72MHz)的±0.5%范围内。 总的来说,当 PLL 输入为低频时钟信号时,参考频率值 FREF 越大,PLL 越稳定。考虑 PLL 的稳定性,表格的第一项是最佳选择;考虑时钟精度,那么表格的第二项是最佳选择。 记住,当PLL0 时钟源的频率低于约 1MHz时,并非所有的M值都可用。由上面的例子可知, 表 4.14中所有舍入的M值都支持,这些值可在表 4.13中确认。 如果 PLL0 计算建议使用不支持的倍频值,则必须忽略这些值并检查其它值以找出最适合 的值。从计数值中计数所得的倍频值也可能是好的选择。 对于表的第二项,写入 PLL0CFG 的值将会是 0x12254(N-1=1=0x1;M-1=8788=0x2254)。 4.5.13 PLL0 设置步骤 要对 PLL0 进行正确初始化,须按照下列步骤操作: a)如果 PLL0 已被连接,则用一个馈送序列断开与 PLL0 的连接。 b)用一个馈送序列禁止 PLL0。 c)如果需要,可在没有 PLL0 的情况下改变 CPU 时钟分频器的设置以加速操作。 d)操作“时钟源选择控制寄存器”以改变时钟源。 e)写 PLL0CFG 并用一个馈送序列使其有效。PLL0CFG 只能在 PLL0 被禁止时更新。 f)用一个馈送序列使能 PLL0。 g)改变 CPU 时钟分频器设置,使之与 PLL0 一起操作。在连接 PLL0 之前完成这个操作是 很重要的。 h)通过监控 PLL0STAT 寄存器的 PLOCK0 位,或使用 PLOCK0 中断来等待 PLL0 实现锁 定。此外,当使用低频时钟作为 PLL0 的输入时(也就是 32KHz),需要等待一个固定 的时间。当 PLL 参考频率(REFCLK 的频率 FREF 与预分频器值分频所得的 PLL 输入 频率相等)少于 100KHz 或大于 20MHz 时,PLOCK0 的值可能不稳定。在这些情况 下,启动 PLL 后等待一段时间即可。当 FREF 大于 400KHz 时,这个时间为 500s;当 FREF 少于 400KHz 时,这个时间为 200/FREF 秒。 i)用一个馈送序列连接 PLL0。 需要注意的是不要合并上面的任何一个步骤。例如,不能用相同的馈送序列同时更新 PLL0CFG 和使能 PLL0。 4.6 PLL1(锁相环 1) PLL1 仅接受主振荡器的时钟输入,并且为 USB 子系统提供一个固定的 48MHz 时钟。除 了从 PLL0 产生 USB 时钟外,这是产生 USB 时钟的另一种选择。 PLL1 在复位时禁止和掉电。如果PLL1 保持禁止,那么可以由PLL0 提供USB时钟。如果 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 13 13 广州周立功单片机发展有限公司 第4章 PLL1 通过PLL1CON寄存器(见“PLL1 控制寄存器”)使能和连接,那么自动选择PLL1 来驱动 USB子系统(见图 4.1)。 PLL1CON 寄存器控制 PLL1 有效。PLL1CFG 寄存器控制 PLL1 倍频器和分频器的值。为 了避免程序对 PLL1 正在使用的相关参数意外修改或 PLL1 失效,芯片厂商对这两个寄存器进 行了保护。该保护是由一个类似于操作看门狗定时器的代码序列来实现,详情请参阅 PLL1FEED 寄存器的描述。 PLL1 仅支持从 10MHz到 25MHz范围内的输入时钟频率。该输入频率通过使用电流控制振 荡器(CCO)可升频为 48MHz的USB时钟。倍频值可以是从 1~32 的整数值(对于USB,倍频值 不能高于 4)。CCO的操作范围从 156MHz到 320MHz,因此当PLL1 正在提供所需的输出频率时, 环路中有一个额外的分频器使CCO保持在其频率范围内操作。输出分频器可设为由 2、4、8 或 16 分频来产生输出时钟。由于最小的输出分频值为 2,因此确保PLL1 输出有 50%占空比。PLL1 的方框图如图 4.4所示。 4.6.1 PLL1 寄存器描述 PLL1 由PLL寄存器进行控制,见表 4.15。下面给出更详细的描述。写任何不使用的位将忽 略,读任何不使用的位将返回逻辑 0。 注:不适当地设置 PLL1 值会导致 USB 子系统不能正确地操作! 表 4.15 PLL1 寄存器 名称 PLL1CON PLL1CFG PLL1STAT PLL1FEED 描述 PLL1 控制寄存器。保存更新 PLL1 控制位的寄存器。 写入该寄存器的值只有在发生有效的 PLL1 馈送序 列后才起作用 PLL1 配置寄存器。保持更新 PLL1 配置值的寄存器。 写入该寄存器的值只有在发生有效的 PLL1 馈送序 列后才起作用 PLL1 状态寄存器。PLL1 控制和配置信息的读回寄 存器。如果对 PLL1CON 或 PLL1CFG 执行了写操作, 但没有发生 PLL1 馈送序列,则这些值将不会反映当 前 PLL1 的状态。读取该寄存器提供了控制 PLL1 和 PLL1 状态的实际值 PLL1 馈送寄存器。该寄存器使能 PLL1 控制和配置 信息的装载,它将 PLL1CON 和 PLL1CFG 寄存器中 的 PLL1 控制和配置信息载入到实际影响 PLL1 操作 的映像寄存器中 访问 R/W R/W RO WO [1] 复位值仅反映在使用位中保存的数据,它不反映保留位的内容。 复位值[1] 地址 0 0x400F C0A0 0 0x400F C0A4 0 0x400F C0A8 NA 0x400F C0AC LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 14 14 广州周立功单片机发展有限公司 第4章 图 4.4 PLL1 方框图 4.6.2 PLL1 控制寄存器(PLL1CON – 0x400F C0A0) PLL1CON 寄存器包含了使能和连接 PLL1 的位。使能 PLL1 以允许它尝试锁定倍频器和分 频器的当前设定值。连接 PLL1 使 PLL1 输出作为 USB 子系统的时钟源。对 PLL1CON 寄存器 的更改,只有在执行了正确的 PLL1 馈送序列后才生效(见“PLL1 馈送寄存器”和“PLL1 配 置寄存器”的描述)。 表 4.16 PLL1 控制寄存器位描述 位 符号 描述 复位值 PLL1 使能。当该位为 1 并且在有效的PLL1 馈送之后,该位将激活PLL1 0 PLLE1 0 并允许其锁定为指定的频率。见PLL1STAT寄存器,表 4.18 PLL1 连接。在使能和锁定PLL1 后将PLLC设为 1,后面跟随有效的PLL1 1 PLLC1 馈送序列使PLL1 作为USB子系统的时钟源(通过USB时钟分频器)。见 0 PLL1STAT寄存器,表 4.18 7:2 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA PLL1 在用作 USB 子系统的时钟源之前必须进行设置、使能并锁定。在 PLL1 连接之前, 硬件不会确保 PLL1 的锁定状态。此外,在 PLL1 脱离锁定状态时,硬件是不会主动断开 PLL1 连接的。 4.6.3 PLL1 配置寄存器(PLL1CFG – 0x400F C0A4) PLL1CFG 寄存器包含 PLL1 倍频器和分频器值。对 PLL1CFG 寄存器的更改仅在执行了正 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 15 15 广州周立功单片机发展有限公司 第4章 确的 PLL1 馈送序列后才生效(见“PLL1 馈送寄存器”的描述)。有关 PLL1 频率、倍频器和 分频器值的计算,请见“确定 PLL1 频率参数的过程”。 表 4.17 PLL1 配置寄存器位描述 位 符号 描述 PLL1 倍频器值。在 PLL1 频率计算中提供“M”值 4:0 MSEL1 注:有关 MSEL1 正确值的选取,见“PLL0 频率计算” 复位值 0 PLL1 分频器值。在 PLL1 频率计算中提供“P”值 6:5 PSEL1 0 注:有关 PSEL1 正确值的选取,见“PLL0 频率计算” 7 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA 4.6.4 PLL1 状态寄存器(PLL1STAT – 0x400F C0A8) PLL1STAT 寄存器提供了当前生效的 PLL1 真实工作参数和状态,这是一个只读寄存器。 PLL1STAT 可能与 PLL1CON 和 PLL1CFG 中的值不同,这是因为对这些寄存器的更改只有在执 行了正确的 PLL1 馈送序列后才生效(见“PLL1 馈送寄存器(PLL1FEED – 0x400F C0AC)”)。 表 4.18 PLL1 状态寄存器位描述 位 符号 描述 复位值 4:0 MSEL1 读回 PLL1 倍频器值。这是 PLL1 当前使用的值 0 6:5 PSEL1 读回 PLL1 分频器值。这是 PLL1 当前使用的值 0 7 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA 读回 PLL1 使能位。当该位为 1 时,PLL1 处于激活状态;当该位 8 PLLE1_STAT 0 为 0 时,PLL1 关闭。当进入掉电模式时,该位自动清零 读回 PLL1 连接位。当 PLLC 和 PLLE 都为 1 时,PLL1 作为微控 9 PLLC1_STAT 制器的时钟源被连接;当 PLLC 或 PLLE 位为 0 时,PLL1 被旁路, 0 微控制器直接使用振荡器时钟。当进入掉电模式时,该位自动清零 反映 PLL1 的锁定状态。当该位为 0 时,PLL1 未锁定;当该位为 10 PLOCK1 0 1 时,PLL1 锁定为指定的频率 15:11 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA PLLE1 和PLLC1 的组合见表 4.19。 表 4.19 PLL1 控制位组合 PLLC1 0 0 1 1 PLLE1 0 1 0 1 PLL1 功能 PLL1 被关闭并断开连接 PLL1 被激活但是尚未连接。PLL1 可在 PLOCK1 有效后连接 与 00 组合相同。这样消除了 PLL1 已被连接但没有使能的可能性 PLL1 被激活且连接。PLL1 作为 USB 子系统的时钟源 4.6.5 PLL1 中断:PLOCK1 PLL1STAT 寄存器的 PLOCK1 位反映 PLL1 的锁定状态。当使能 PLL1 或改变参数时,PLL1 在新的条件下需要一些时间来完成锁定,可通过监控 PLOCK1 位来确定连接 PLL1 的时间。 PLOCK1 位连接到中断控制器。这样可使用软件使能 PLL1,而无需等待 PLL1 锁定。当发 生中断时,可以连接 PLL1 并禁止中断。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 16 16 广州周立功单片机发展有限公司 第4章 4.6.6 PLL1 馈送寄存器(PLL1FEED – 0x400F C0AC) 必须将正确的馈送序列写入 PLL1FEED 寄存器才能使 PLL1CON 和 PLL1CFG 寄存器的更 改生效。馈送序列如下:  将值 0xAA 写入 PLL1FEED;  将值 0x55 写入 PLL1FEED。 这两个写操作的顺序必须正确,而且必须是在相同的地址空间(0x400F C000~0x400F FFFF)内没有其它寄存器访问。因此,如果有一个中断服务程序在对该空间内的一个寄存器执 行写操作,那么在执行 PLL1 馈送操作时必须禁止中断。如果写入的值不正确、或没有满足前 两个条件,那么对 PLL1CON 或 PLL1CFG 寄存器的更改都不会生效。 表 4.20 PLL1 馈送寄存器位描述 位 功能 描述 复位值 PLL1 馈送序列必须写入该寄存器才能使 PLL1 配置和控制寄 7:0 PLL1FEED 0x00 存器的更改生效 4.6.7 PLL1 和掉电模式 掉电模式会自动关闭并断开 PLL1。从掉电模式唤醒不会自动恢复原先的 PLL 参数,必须 在软件中恢复 PLL。通常,可以在中断服务程序的开始激活 PLL、等待锁定并连接 PLL,该中 断服务程序也可以在掉电唤醒时调用。需要注意的一点,那就是不要试图在掉电唤醒之后简单 地执行馈送序列来重新启动 PLL。在建立 PLL 锁定之前,这种操作将会同时使能并连接 PLL。 如果不选择USB数据线上的操作将微控制器从掉电模式中唤醒(见“从低功耗模式中唤 醒”),那么在进入掉电模式时,系统和USB PLL将自动关闭并断开连接,如上面所述。但是, 在USBWAKE=1 和USB_need_clock=1 的情况下,不可能进入掉电模式,任何尝试置位PD位将 失败,使PLL保持在当前的状态。 4.6.8 PLL1 频率计算中的参数 在 PLL1 计算的过程中,会用到一些参数,如下表所示: 表 4.21 确定 PLL 频率的参数 参数 描述 FOSC FCCO USBCLK M P 晶体振荡器的频率 PLL1 电流控制振荡器的频率 PLL1 输出频率(48MHz 用于 USB) PLL1CFG 寄存器中 MSEL1 位的 PLL1 倍频值 PLL1CFG 寄存器中 PSEL1 位的 PLL1 分频值 PLL1 输出频率(当 PLL1 被激活且连接时)的公式: USBCLK = M×FOSC 或 USBCLK =FCCO/(2×P) CCO 频率可如下计算: FCCO = USBCLK×2×P 或 FCCO = FOSC×M×2×P PLL1 输入和设定必须满足下面的条件:  FOSC 的范围:10MHz~25MHz; LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 17 17 广州周立功单片机发展有限公司 第4章  USBCLK 为 48MHz;  FCCO 的范围:156MHz~320MHz。 4.6.9 确定PLL1 频率参数的过程 USB 的 PLL1 配置步骤如下: a)所需的 PLL1 输出频率为 USBCLK=48MHz。 b)选择振荡器频率(FOSC)。USBCLK 必须是 FOSC 的整数倍(非小数),表示 FOSC 的值可 能是 12MHz、16MHz 和 24MHz。 c)计算M的值来配置MSEL1 位。M=USBCLK/FOSC。在这种情况下,M值可能是 2、3 或 4 (FOSC=24MHz、16MHz或 12MHz)。将所需的M值减 1(即,M-1)写入PLL1CFG 的MSEL1 位(见表 4.23)。 d)计算P的值来配置PSEL1 位,使得FCCO的频率在其限定的 156MHz到 320MHz范围内。 使用FCCO = USBCLK×2×P来计算FCCO。要使FCCO的频率在允许范围内,唯一的P值 是P=2。P=2 时写入PLL1CFG的PSEL1 位的值为‘01’(见表 4.22)。 表 4.22 PLL1 分频值 PSEL1 位(PLL1CFG 位[6:5]) P 的值 00 1 01 2 10 4 11 8 表 4.23 PLL1 倍频值 MSEL1 位(PLL1CFG 位[4:0]) 00000 00001 00010 00011 … 11110 11111 M 的值 1 2 3 4 … 31 32 4.7 时钟分频器 PLL0 的输出经过分频后供 CPU 和 USB 子系统使用(如果使用 PLL0,见“PLL1”的描述)。 由于提供了各自的分频器,因此可单独确定 USB 子系统和 CPU 频率,在正常操作下,USB 子 系统总是需要占空比为 50%的 48MHz 频率。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 18 18 广州周立功单片机发展有限公司 第4章 图 4.5 PLL 和时钟分频器 4.7.1 CPU时钟配置寄存器(CCLKCFG – 0x400F C104) PLL0 输出时钟必须要经过分频才能提供给 CPU 使用,PLL0 输出的分频由 CCLKCFG 寄 存器进行控制。当 PLL0 被旁路时,可通过 1 分频。当 PLL0 正在运行时,输出必须经过分频 以使 CPU 时钟频率(CCLK)工作在限定的范围内。可使用一个 8 位分频器进行选择,包括降 低 CPU 的操作频率来暂时节省功耗而无需关闭 PLL0。 注:当在应用中使用 USB 接口时,FCCLK 必须至少为 18MHz 以便于支持 USB 子系统的内部操作。 表 4.24 CPU 时钟配置寄存器位描述 位 符号 描述 复位值 从 PLL0 输出中选择建立 CPU 时钟(CCLK)的分频值 分频值只能是 0 和奇数值(1、3、5…,255)并且可以在编程 CCLKSEL 7:0 CCLKSEL 位时使用 0x00 注:当置位 CCLKSEL 位时使用偶数值(2、4、6…,254)可能会 导致操作错误 CCLK 从 PLL0 输出信号中得到,通过 CCLKSEL+1 分频。当 CCLKSEL=1 时,CCLK 的 频率是 PLL0 输出频率的一半;当 CCLKSEL=3 时,CCLK 的频率是 PLL0 输出频率的四分之 一,如此类推。 4.7.2 USB时钟配置寄存器(USBCLKCFG – 0x400F C108) 注:该寄存器仅在 PLL1 禁止时使用。如果 PLL1 使能,则其输出自动用作 USB 时钟源,且必须配置 PLL1 为 USB 子系统提供正确的 48MHz 时钟。 USBCLKCFG 寄存器控制对 PLL0 输出时钟的分频,然后提供给 USB 子系统使用。PLL0 输出必须被分频以使 USB 时钟频率为 48MHz,占空比为 50%。在 PLL 操作范围内,4 位的分 频器允许从 48MHz 的任意偶数倍(即 96MHz 的任意倍数)中获得正确的 USB 时钟。 注:内部RC时钟不应用作USB的时钟源,因为USB规范需要更精确的时钟,见表 4.4。 表 4.25 USB 时钟配置寄存器位描述 位 符号 描述 复位值 从 PLL0 输出中选择建立 USB 时钟的分频值 3:0 USBSEL 0 注:不正确设置该值可能会导致 USB 接口的错误操作 7:4 - 保留,用户软件不要向其写入 1。从保留位读出的值未被定义 NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 19 19 广州周立功单片机发展有限公司 第4章 USB 时钟从 PLL0 输出信号中得到,通过 USBSEL+1 分频。当 USBSEL=1 时,USB 的时 钟频率是 PLL0 输出频率的一半。 4.7.3 IRC调整寄存器(IRCTRIM – 0x400F C1A4) 该寄存器用于调整片内 4MHz 振荡器。 表 4.26 IRC 调整寄存器位描述 位 符号 描述 7:0 IRCtrim IRC 调整值。它控制片内 4MHz 的 IRC 频率 15:8 - 保留。软件必须写 0 到这些位 复位值 0xA0 NA 4.7.4 外设时钟选择寄存器 0 和 1(PCLKSEL0 – 0x400F C1A8 和PCLKSEL1 – 0x400F C1AC) 在外设时钟选择寄存器中,每组位控制了提供给对应外设的时钟信号的速率,请见表 4.27、 表 4.28和表 4.29。 注:RTC 模块的外设时钟固定为 CCLK / 8。 表 4.27 外设时钟选择寄存器 0 位描述 位 1:0 3:2 5:4 7:6 9:8 11:10 13:12 15:14 17:16 19:18 21:20 23:22 25:24 27:26 29:28 31:30 符号 PCLK_WDT PCLK_TIMER0 PCLK_TIMER1 PCLK_UART0 PCLK_UART1 PCLK_PWM1 PCLK_I2C0 PCLK_SPI PCLK_SSP1 PCLK_DAC PCLK_ADC PCLK_CAN1 PCLK_CAN2 PCLK_ACF 描述 WDT 的外设时钟选择 TIMER0 的外设时钟选择 TIMER1 的外设时钟选择 UART0 的外设时钟选择 UART1 的外设时钟选择 保留 PWM1 的外设时钟选择 I2C0 的外设时钟选择 SPI 的外设时钟选择 保留 SSP1 的外设时钟选择 DAC 的外设时钟选择 ADC 的外设时钟选择 CAN1 的外设时钟选择 CAN2 的外设时钟选择 CAN 滤波器的外设时钟选择 复位值 00 00 00 00 00 NA 00 00 00 NA 00 00 00 00 00 00 表 4.28 外设时钟选择寄存器 1 位描述 位 1:0 3:2 5:4 7:6 9:8 11:10 符号 PCLK_QEI PCLK_GPIOINT PCLK_PCB PCLK_I2C1 PCLK_SSP0 描述 正交编码器接口的外设时钟选择 GPIO 中断的外设时钟选择 引脚连接模块的外设时钟选择 I2C1 的外设时钟选择 保留 SSP0 的外设时钟选择 复位值 00 00 00 00 NA 00 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 20 20 广州周立功单片机发展有限公司 第4章 位 13:12 15:14 17:16 19:18 21:20 23:22 25:24 27:26 29:28 31:30 符号 PCLK_TIMER2 PCLK_TIMER3 PCLK_UART2 PCLK_UART3 PCLK_I2C2 PCLK_I2S PCLK_RIT PCLK_SYSCON PCLK_MC 描述 TIMER2 的外设时钟选择 TIMER3 的外设时钟选择 UART2 的外设时钟选择 UART3 的外设时钟选择 I2C2 的外设时钟选择 I2S 的外设时钟选择 保留 重复中断定时器的外设时钟选择 系统控制模块的外设时钟选择 电机控制 PWM 的外设时钟选择 续上表 复位值 00 00 00 00 00 00 NA 00 00 00 表 4.29 外设时钟选择寄存器位值 PCLKSEL0 和 PCLKSEL1 各 个外设的时钟选择选项 功能 复位值 00 PCLK_peripheral = CCLK/4 01 PCLK_ peripheral = CCLK 10 PCLK_ peripheral = CCLK/2 00 PCLK_peripheral = CCLK/8,CAN1、CAN2 和 CAN 滤波部件 11 除外,当选择“11”时,PCLK_CAN1/PCLK1_CAN2/PCLK_ACF = CCLK/6 4.8 功率控制 LPC1700 系列 Cortex-M3 支持多种功率控制的特性:睡眠模式、深度睡眠模式、掉电模式 和深度掉电模式。CPU 时钟速率可通过改变时钟源、重新配置 PLL 值和/或改变 CPU 时钟分频 器值来控制,这允许用户根据应用要求在功率和处理速度之间进行权衡。此外,“外设功率控制 器”可以关断每个片内外设,从而对系统功耗进行良好的调整。 通过Cortex-M3 执行WFI(等待中断)或WFE(等待异常)指令进入任何低功耗模式。 Cortex-M3 内部支持两种低功耗模式:睡眠模式和深度睡眠模式,它们通过Cortex-M3 系统控制 寄存器中的SLEEPDEEP位来选择。掉电和深度掉电模式通过PCON寄存器中的位来选择,见表 4.31。 LPC1700 系列 Cortex-M3 还具有一个独立电源域,可为 RTC 和电池 RAM 供电,以便在维 持 RTC 和电池 RAM 正常操作时,关闭其它设备的电源。 4.8.1 睡眠模式 注:LPC1700 系列 Cortex-M3 微控制器的睡眠模式对应于 LPC2xxx 系列 ARM 器件的空闲模式。更改名 字是因为 ARM 将低功耗模式控制与 Cortex-M3 结合起来。LPC1700 系列 Cortex-M3 微控制器文档在适当的地 方会使用 Cortex-M3 术语。 当进入睡眠模式时,内核时钟停止,且PCON的SMFLAG位置位,见表 4.31。从睡眠模式 中恢复并不需要任何特殊的序列,但要重新使能ARM内核的时钟。 在睡眠模式下,指令的执行被中止直至复位或中断出现。外设在 CPU 内核处于睡眠模式期 间继续运转,并可产生中断使处理器恢复执行指令。睡眠模式下,处理器内核自身、存储器系 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 21 21 广州周立功单片机发展有限公司 第4章 统、有关控制器及内部总线停止工作,因此这些器件的动态功耗会降低。 只要出现任何使能的中断,CPU 内核就会从睡眠模式中唤醒。 4.8.2 深度睡眠模式 注:LPC1700 系列 Cortex-M3 微控制器的深度睡眠模式对应于 LPC2300 和 LPC2400 系列 ARM 器件的睡 眠模式。更改名字是因为 ARM 将低功耗模式控制与 Cortex-M3 结合起来。LPC1700 系列 Cortex-M3 微控制器 文档在适当的地方会使用 Cortex-M3 术语。 当芯片进入深度睡眠模式时,主振荡器掉电且所有内部时钟停止,PCON的DSFLAG位置 位,见表 4.31。IRC保持运行并且可配置为驱动看门狗定时器,允许看门狗唤醒CPU。由于RTC 中断也可用作唤醒源,32KHz的RTC振荡器不停止。Flash进入就绪模式,这样可以实现快速唤 醒。PLL自动关闭并断开连接。CCLK和USBCLK时钟分频器自动复位为 0。 在深度睡眠模式期间,保存处理器状态以及寄存器、外设寄存器和内部 SRAM 的值,并且 将芯片引脚的逻辑电平保持为静态。可通过复位或某些的特定中断(能够在没有时钟的情况下 工作)来终止深度睡眠模式和恢复正常操作。由于芯片的所有动态操作被中止,因此深度睡眠 模式使功耗降低为一个极小的值。 在唤醒深度睡眠模式时,如果 IRC 在进入深度睡眠模式前被使用,则 2 位 IRC 定时器开始 计数,并且在定时器超时(4 周期)后,恢复代码执行和外设活动。如果使用主振荡器,则 12 位主振荡器定时器开始计数,并且在定时器超时(4096 周期)时将恢复代码执行。用户必须记 得在唤醒后要重新配置所需的 PLL 和时钟分频器。 只要相关的中断使能时,器件就可从深度睡眠模式中唤醒。这些中断包括 NMI、外部中断 EINT0 到 EINT3、GPIO 中断、以太网 Wake-On-LAN 中断、掉电检测、RTC 报警中断、看门狗 定时器超时、USB 输入引脚跳变或 CAN 输入引脚跳变。 4.8.3 掉电模式 掉电模式执行在深度睡眠模式下的所有操作,但也关闭了Flash存储器。进入掉电模式使 PCON中的PDFLAG位置位,见表 4.31。这节省了更多功耗。但是唤醒后,在访问Flash存储器 中的代码或数据前,必须等待Flash恢复。 当芯片进入掉电模式时,IRC、主振荡器和所有时钟都停止。如果 RTC 已使能则它继续运 行,RTC 中断也可用来唤醒 CPU。Flash 被强制进入掉电模式。PLL 自动关闭并断开连接。CCLK 和 USBCLK 时钟分频器自动复位为 0。 掉电模式唤醒时,如果在进入掉电模式前使用了 IRC,那么经过 IRC 的启动时间(60s) 后,2 位 IRC 定时器开始计数并且在 4 个周期内停止计数(expiring)。如果用户代码在 SRAM 中,那么在 IRC 计数 4 个周期后,用户代码会立即执行;如果代码在 Flash 中运行,那么在 IRC 计数 4 个周期后,启动 Flash 唤醒定时器,100s 后完成 Flash 的启动,开始执行代码。当定时 器超时时,可以访问 Flash。用户必须记得在唤醒后要重新配置 PLL 和时钟分频器。 只要相关的中断使能时,器件就可从深度睡眠模式中唤醒。这些中断包括 NMI、外部中断 EINT0 到 EINT3、GPIO 中断、以太网 Wake-On-LAN 中断、掉电检测、RTC 报警中断、USB 输入引脚跳变或 CAN 输入引脚跳变。 4.8.4 深度掉电模式 在深度掉电模式中,关断整个芯片的电源(实时时钟、 RESET 引脚、WIC和RTC备用寄存 器除外)。进入深度掉电模式使PCON中的DPDFLAG位置位,见表 4.31。为了优化功率,用户 有其它的选择,可关断或保留 32KHz振荡器的电源。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 22 广州周立功单片机发展有限公司 第4章 当使用外部复位信号、或使能 RTC 中断和产生 RTC 中断时,可将器件从深度掉电模式中 唤醒。 4.8.5 外设功率控制 外设的功率控制特性允许在应用中关闭不需要的外设,从而节省额外的功耗。这在 PCONP 寄存器中详细描述。 4.8.6 寄存器描述 关于功率控制功能使用的寄存器,请见表 4.30。详细描述如下表所示。 表 4.30 功率控制寄存器 名称 PCON PCONP 描述 功率控制寄存器。该寄存器含有使能LPC1700 系 列Cortex-M3 微控制器的一些低功耗模式的控制 位。见表 4.31 外设寄存器的功率控制。该寄存器含有使能和禁 能各个外设功能的控制位,可通过关闭应用中不 需要的外设来减少功耗 访问 R/W R/W [1] 复位值仅指在使用位中保存的数据,不包括保留位的内容。 4.8.7 功率模式控制寄存器(PCON – 0x400F C0C0) 低功耗模式通过PCON寄存器来控制,如表 4.31所示。 复位值[1] 0x00 访问 0x400F C0C0 0x400F C0C4 表 4.31 功率模式控制寄存器位描述 位 符号 描述 复位值 功率模式控制位 0。该位控制进入掉电模式。详细内容见“低功耗 0 PM0 0 模式的编码”。 功率模式控制位 1。该位控制进入深度掉电模式。详细内容见“低 1 PM1 0 功耗模式的编码”。 掉电低功耗模式。当 BODRPM 为 1 时,掉电检测电路将在芯片进 入掉电模式或深度睡眠模式时关断,使功耗进一步降低。此时,不 2 BODRPM 能使用掉电检测作为掉电模式的唤醒源。当该位为 0 时,掉电检测 0 功能在掉电模式和深度睡眠模式中保持有效。有关掉电检测的详细 内容请见“系统控制模块”。 掉电全局禁能。当 BOGD 为 1 时,掉电检测电路一直被完全禁止, 3 BOGD 且不消耗功率。当该位为 0 时,掉电检测电路被使能。有关掉电检 0 测的详细内容请见“系统控制模块”。 掉电复位禁能。当 BORD 为 1 时,低压检测的第二阶段(2.6V) 将不会导致芯片复位。当 BORD 为 0 时,复位被使能。低压检测 4 BORD 0 的第一阶段(2.9V)Brown-out 中断不受影响。有关掉电检测的详 细内容请见“系统控制模块”。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 23 23 广州周立功单片机发展有限公司 第4章 位 7:3 8 9 10 11 31:12 符号 - SMFLAG DSFLAG PDFLAG DPDFLAG - 描述 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 睡眠模式进入标志。当成功进入睡眠模式时该位置位。通过向该位 写入 1 由软件将其清零。 深度睡眠进入标志。当成功进入深度睡眠模式时该位置位。通过向 该位写入 1 由软件将其清零。 掉电进入标志。当成功进入掉电模式时该位置位。通过向该位写入 1 由软件将其清零。 深度掉电进入标志。当成功进入深度掉电模式时该位置位。通过向 该位写入 1 由软件将其清零。 保留,用户软件不要向其写入 1。从保留位读出的值未被定义。 续上表 复位值 NA 0[1][2] 0[1][2] 0[1][2] 0[1][3] NA [1] 在特定的时间内只有一个标志有效。 [2] 硬件复位仅用于内核电源的上电或通过掉电检测事件进行硬件复位。 [3] 硬件复位仅用于上电事件(Vbat)。 PCON中的PM1 和PM0 位在必要时允许进入低功耗模式。这些位的编码允许向后兼容先前 仅支持睡眠模式和掉电模式的器件。表 4.32给出了LPC1700 系列Cortex-M3 微控制器支持的 3 种低功耗模式的编码。 表 4.32 低功耗模式的编码 PM1, PM0 00 01 10 11 描述 正如 Cortex-M3 系统控制寄存器的 SLEEPDEEP 位所定义,执行 WFI 或 WFE 进入睡眠或深度睡眠模式 如果 Cortex-M3 系统控制寄存器的 SLEEPDEEP 位为 1,则执行 WFI 或 WFE 进 入掉电模式 保留,不应使用这些设置 如果 Cortex-M3 系统控制寄存器的 SLEEPDEEP 位为 1,则执行 WFI 或 WFE 进 入深度掉电模式 4.8.8 从低功耗模式中唤醒 任何使能的中断均可将 CPU 从睡眠模式中唤醒。某些特定的中断可将处理器从深度睡眠模 式或掉电模式中唤醒。 若特定的中断使能则允许中断将 CPU 从深度睡眠模式或掉电模式中唤醒。唤醒后,将继续 执行适当的中断服务程序。这些中断为 NMI、外部中断 EINT0 到 EINT3、GPIO 中断、以太网 Wake-On-LAN 中断、掉电检测中断、RTC 报警中断。此外,如果看门狗定时器由 IRC 振荡器 驱动,则看门狗定时器也可将器件从深度睡眠模式中唤醒。 可以将 CPU 从深度睡眠或掉电模式中唤醒的其它功能有 CAN 活动中断(由 CAN 总线引 脚上的活动产生)和 USB 活动中断(由 USB 总线引脚上的活动产生)。相关的功能必须映射 到引脚且对应的中断必须使能才能实现唤醒。 4.8.9 外设功率控制寄存器(PCONP – 0x400F C0C4) 可通过 PCONP 寄存器关闭特定外设模块的时钟源来关闭外设,以实现节电的目的。有少 数外设功能不能被关闭(看门狗定时器、引脚连接模块和系统控制模块)。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 24 24 广州周立功单片机发展有限公司 第4章 某些外设(特别是那些含有模拟功能的外设)的功耗可能与时钟无关。这些外设有独立的 禁能控制,可关闭其电路来减少功耗。有关外设特定的节省功耗的信息,请参考描述该外设的 相关章节。PCONP中的每个位都控制一个外设,如表 4.33所示。 如果外设控制位为 1,则外设被使能。如果外设控制位为 0,则外设的时钟被禁能(关闭) 以节省功耗。例如,如果位 19 为 1,则 I2C1 接口使能。如果位 19 为 0,则 I2C1 接口禁止。 注:仅当外设在 PCONP 寄存器中使能时,才能够从外设寄存器中有效读取和有效写入外设寄存器。 表 4.33 外设功率控制寄存器位描述 位 符号 描述 复位值 0 - 保留 NA 1 PCTIM0 定时器/计数器 0 功率/时钟控制位 1 2 PCTIM1 定时器/计数器 1 功率/时钟控制位 1 3 PCUART0 UART0 功率/时钟控制位 1 4 PCUART1 UART1 功率/时钟控制位 1 5 - 保留 NA 6 PWM1 PWM1 功率/时钟控制位 1 7 PCI2C0 I2C0 接口功率/时钟控制位 1 8 PCSPI SPI 接口功率/时钟控制位 1 9 PCRTC RTC 功率/时钟控制位 1 10 PCSSP1 SSP1 接口功率/时钟控制位 1 11 - 保留 NA A/D 转换器(ADC)功率/时钟控制位 12 PCAD 0 注:在清零该位之前清零 AD0CR 中的 PDN 位;在置位 PDN 之前置位该位 13 PCCAN1 CAN 控制器 1 功率/时钟控制位 0 14 PCCAN2 CAN 控制器 2 功率/时钟控制位 0 15 PCGPIO GPIO 1 16 PCRIT 重复中断定时器功率/时钟控制位 0 17 PCMC 电机控制 PWM 0 18 PCQEI 正交编码器接口功率/时钟控制位 0 19 PCI2C1 I2C1 接口功率/时钟控制位 1 20 - 保留 NA 21 PCSSP0 SSP0 接口功率/时钟控制位 1 22 PCTIM2 定时器 2 功率/时钟控制位 0 23 PCTIM3 定时器 3 功率/时钟控制位 0 24 PCUART2 UART2 功率/时钟控制位 0 25 PCUART3 UART3 功率/时钟控制位 0 26 PCI2C2 I2C 接口 2 功率/时钟控制位 1 27 PCI2S I2S 接口功率/时钟控制位 0 28 - 保留 NA 29 PCGPDMA GP DMA 功能功率/时钟控制位 0 30 PCENET 以太网模块功率/时钟控制位 0 31 PCUSB USB 接口功率/时钟控制位 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 25 25 广州周立功单片机发展有限公司 第4章 需要注意的是 DAC 外设在 PCONP 中没有控制位。要使能 DAC,必须通过配置 PINSEL1 寄存器在相关的引脚 P0.26 上选择其输出。见“引脚功能选择寄存器 1”的描述。 4.8.10 功率控制注意事项 复位后,PCONP 寄存器的值设置成使能所选的接口和外围功能(受 PCONP 控制的)。因 此,除了对外设相关的寄存器进行配置外,用户应用程序可能还需要访问 PCONP 寄存器,使 能对应的外设。 在需要控制功率的系统中,需要在 PCONP 寄存器中使能必要的外设,寄存器的其它“保 留”位或当前不使用的外设所对应的位都必须清零。 4.8.11 电源域 LPC1700 系列 Cortex-M3 微控制器提供两个独立的电源域,允许在保持实时时钟有效的情 况下断开设备电源。 VBAT 引脚提供到 RTC 的电源。RTC 功耗很低,可由外部电池供电。只要器件内核电源存 在(该电源可用于为 RTC 供电),那么在主电源可用的情况下无需使用电池的电源。 4.9 唤醒定时器 在上电或使用 4MHz IRC 振荡器作为时钟源将 LPC1700 系列 Cortex-M3 从掉电模式中唤醒 时,LPC1700 系列 Cortex-M3 开始操作。这使得芯片在这些情况下快速操作。如果应用需要主 振荡器或 PLL,那么软件将需要使能这些特性并在它们用作时钟源之前等待其变为稳定。 当主振荡器开始激活时,唤醒定时器允许软件确保主振荡器完全工作,然后处理器将其用 作时钟源并开始执行指令。这在上电、所有类型的复位以及任何原因所导致上述功能关闭时非 常重要。由于振荡器和其它功能在掉电模式下关闭,因此使处理器从掉电模式中唤醒要使用唤 醒定时器。 唤醒定时器通过检测晶振是否能可靠来监视,以让代码安全执行。当给芯片加电或某个事 件使芯片退出掉电模式时,振荡器需要一段时间来产生足够振幅的信号以驱动时钟逻辑。时间 的长度取决于许多因素,包括 VDD(3V3)的上升速率(上电时)、晶振的类型及其电气特性(如果 使用石英晶振)、其它任何外部电路(例如电容)和振荡器在现有环境下自身的特性。 一旦检测到一个时钟,唤醒定时器就对固定的时钟数(4096 个时钟)进行计数,然后设置 标志(SCS 寄存器中的 OSCSTAT 位)表示主振荡器已准备使用。接着软件可切换为主振荡器 并且启动所需的 PLL。详细内容请参考本章的“主振荡器描述”。 4.10 外部时钟输出引脚 为了便于系统测试和开发,任何一个内部时钟均可引入CLKOUT功能(在P1.27 引脚上可 使用),如图 4.6所示。 通过 CLKOUT 可观察到的时钟有 CPU 时钟(cclk)、主振荡器(osc_clk)、内部 RC 振 荡器(irc_osc)、USB 时钟(usb_clk)和 RTC 时钟(rtc_clk)。 LPC1700 用户手册 图 4.6 CLKOUT 选择 ©2010 Guangzhou ZLGMCU Development CO., LTD. 26 26 广州周立功单片机发展有限公司 第4章 4.10.1 时钟输出配置寄存器(CLKOUTCFG – 0x400F C1C8) CLKOUTCFG 寄存器控制选择在 CLKOUT 引脚上出现的内部时钟,并允许通过一个整数 值(多达 16)对时钟进行分频。分频器可用来产生与其中一个片内时钟相关的系统时钟。对于 大多数时钟源,可由 1 分频。当选择 CPU 时钟且该时钟高于 50MHz 时,输出必须经过分频, 使得频率在适当的范围内。 注:CLKOUT 复用器主要用于在可能的时钟源之间完全切换而不受干扰。分频器也可用来改变分频值而 不受干扰。 表 4.34 时钟输出配置寄存器位描述 位 3:0 7:4 8 9 31:10 符号 CLKOUTSEL CLKOUTDIV CLKOUT_EN CLKOUT_ACT - 值 0000 0001 0010 0011 0100 其它 0000 0001 0010 … 1111 描述 复位值 选择 CLKOUT 功能的时钟源 选择 CPU 时钟作为 CLKOUT 的时钟源 选择主振荡器作为 CLKOUT 的时钟源 选择内部 RC 振荡器作为 CLKOUT 的时钟源(默认) 0 选择 USB 时钟作为 CLKOUT 的时钟源 选择 RTC 振荡器作为 CLKOUT 的时钟源 保留,不使用这些设置 分频值为输出时钟的整数值减 1 时钟经过 1 分频 时钟经过 2 分频 0 时钟经过 3 分频 … 时钟经过 16 分频 CLKOUT 使能控制,允许切换 CLKOUT 源而不受干扰。 清零该位在下一个下降沿停止 CLKOUT。置位该位使能 0 CLKOUT CLKOUT 有效指示(activity indication)。当 CLKOUT 使 能 时 读 为 1 , 当 CLKOUT 禁 止 时 读 为 0 , 通 过 0 CLKOUT_EN 位进行该操作,并且时钟已停止 保留,用户软件不应向其写入 1。从保留位读出的值未定 NA 义 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 27 27 LPC1700 系列微控制器 第第 55 章章 存存储储器器加加速速模模块块 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 5 章 存储器加速模块 ·································································································· 1 5.1 简介 ································································································································1 5.2 操作 ································································································································1 5.3 存储器加速模块·············································································································2 5.3.1 Flash 存储器组 ·······································································································2 5.3.2 Flash 编程问题 ·······································································································2 5.4 存储器加速模块配置 ·····································································································2 5.5 寄存器描述 ····················································································································2 5.6 存储器加速模块配置寄存器(FLASHCFG – 0x400F C000) ····································3 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第5章 第5章 存储器加速模块 5.1 简介 当 LPC1700 系列 Cortex-M3 微控制器从 Flash 运行程序代码时, 存储器加速模块的设计极 大的提高了处理器性能,同时也节省了整个系统功率。存储器加速模块还改进了访问 Flash 存储 器数据的速度和功率。 5.2 操作 存储器加速模块将需要的下一个 Cortex-M3 指令及时锁存以防止 CPU 取指暂停。LPC1700 系列 Cortex-M3 微控制器只使用一组 Flash 存储器。存储器加速模块组中含有 8 个 128 位的缓冲 区,以可配置的方式用于存放指令和数据。缓冲区数组中的每一个 128 位值包含 4 条 32 位指令、 8 条 16 位指令或两种指令的某些组合。在连续执行代码的过程中,缓冲区通常包含着当前的指 令和当前指令的整个 Flash 行,或包含之前请求地址的一个 Flash 数据行。缓冲区根据它们所用 作的用途(如指令缓冲区或数据缓冲区)和它们完成访问的时间来进行标记。该信息用于实现缓 冲区替换策略。 Cortex-M3 在代码存储器空间为指令访问(ICode)和数据访问(DCode)提供了单独的总线。 这些总线和通用 DMA 控制器的主机端口,均由 AHB 多层矩阵进行仲裁。任何对 Flash 存储器 地址空间的访问都会反映到存储器加速模块中。 如果同时对 CPU 发出 Flash 指令取指和 Flash 数据访问请求时,多层矩阵会令数据访问占据 优先权。这是因为暂停数据访问总是会减慢执行速度,而暂停指令取指通常则不会减慢系统执行 速度。当 Flash 数据访问完成时,任何之前早已在处理的 Flash 取指或预取指都要重新启动。 Flash 读操作和某些其它方面的存储器加速模块操作的时间是可编程的,这在本章节的后面 进行描述。 分支和其它程序流的变化会导致前面所讲述的连续指令取指出现中断。存储器加速模块中的 缓冲区替换策略尽量保留可重新使用的信息,直至信息再次被使用。 如果在不使用正常 Flash 编程接口(通过 Boot ROM 函数调用)的情况下而直接写 Flash 存 储器时,存储器加速模块会产生一个数据中止信号。 如果指令取指不符合缓冲区数组的现存内容要求,或该 Flash 行的预取指的指令还没有启动 时,CPU 会暂停执行,而此时相关的 128 位 Flash 行的取指将会启动。如果预取指已启动但仍未 结束时,CPU 暂停的时间会更短,因为所要求的 Flash 访问已在处理当中。 通常,只要对预取指的地址进行访问,或对其后继地址也不在另一个缓冲区的缓冲区进行访 问时,Flash 预取指开始。为了最小化 CPU 暂停时间,可执行数据访问来中止正在进行中的预取 指操作。 虽然预取指 Flash 行由 Flash 存储器锁存,但是直到 CPU 执行到预取指 Flash 行所包含的地 址时,存储器加速模块才会捕获该缓冲区的行。如果内核需要的指令地址既不在缓冲区、也不在 预取指的 Flash 行中,那么预取指令行将被丢弃。 某些特别情况存在这种可能性:CPU 会请求对已包含在指令缓冲区的地址进行数据访问, 数据将直接被从缓冲区中读出,就好象指令缓冲区是一个数据缓冲区。相反,当 CPU 请求的指 令地址位于现存的数据缓冲区时,则可对数据缓冲区应用该指令,且能将该数据缓冲区改变为指 令缓冲区。这就使得可在存储器加速模块作出下一次要覆写哪一个缓冲区的决定时能对缓冲区作 出不同的处理。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第5章 5.3 存储器加速模块 存储器加速模块分成几个功能模块:  AHB-Lite 总线接口,可接受 Cortex-M3 指令总线、数据总线和通用 DMA 控制器的访 问;  8 个 128 位缓冲区数组;  存储器加速模块控制逻辑,包括地址比较和 Flash 控制;  Flash 存储器接口。 图 5.1所示为存储器加速模块和数据通路的简化方框图。 图 5.1 显示所有总线连接的 Fash 加速器模块简化框图 在以下的描述中,术语“取指”一词表示 CPU 发出的一个直接的 Flash 读请求。“预取指” 一词表示对当前处理器取指地址之后的地址执行 Flash 读操作。 5.3.1 Flash存储器组 LPC1700 系列 Cortex-M3 微控制器存储器加速模块只存在一组 Flash 存储器。 Flash 编程功能不受存储器加速模块控制,而是作为一个独立的功能进行处理。“Boot ROM” 扇区包含了可被用户应用程序调用的 Flash 编程算法和一个可对 Flash 存储器进行编程的装载程 序。 5.3.2 Flash编程问题 在编程和擦除操作过程中不允许访问 Flash 存储器,如果在 Flash 存储器忙于处理编程的时 候请求对 Flash 地址进行存储器访问,存储器加速模块必需要强制 CPU 等待。在某些情况下, 代码执行的延迟会导致看门狗超时。用户必须注意到这种可能性,并采取措施来确保在编程或擦 除 Flash 存储器时不会出现非预期的看门狗复位,从而避免系统故障。 为了防止从 Flash 存储器中读取无效的数据,在 Flash 编程或擦除操作开始后,LPC1700 系 列 Cortex-M3 微控制器 Flash 缓冲区不缓冲任何数据。任何对 Flash 地址的读操作都将会在完成 Flash 编程操作之后启动新的取指操作。 5.4 存储器加速模块配置 在复位后,存储器加速模块默认为使能状态。软件可以随时将存储器访问加速打开或关闭, 或随时更改加速配置,这可使程序以最高速度运行,而运行某些对时间要求更精确的代码时,可 以以较慢但预测性更高的速度运行代码。 5.5 寄存器描述 存储器加速模块受到如表 5.1所列的寄存器的控制。详细描述如下。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第5章 表 5.1 存储器加速模块寄存器汇总 名称 FLASHCFG 描述 存储器加速模块配置寄存器。控制在存储 器加速模块缓冲区和Flash访问定时值所使 用的方式,见表 5.2 访问 R/W 复位值[1] 地址 0x507A 0x400F C000 [1] 复位值仅指使用位中保存的数据,不包括保留位的内容。 5.6 存储器加速模块配置寄存器(FLASHCFG – 0x400F C000) 7 个配置位从所有的存储器加速模块操作模式中选择相关的操作模式,如表 5.2所示。 在复位后,存储器加速模块功能使能,Flash 访问定时值被设为 6 个时钟(默认值)。软件 可以随时将存储器访问加速打开或关闭,这可使应用程序以最高速度运行。而运行某些对时间要 求更精确的代码时,,要以较慢但预测性更高的速度运行代码。 改变存储器加速模块操作模式会导致加速器所有锁存的内容无效,需要执行新的 Flash 读操 作。这可确保存储器加速模块与 CPU 操作同步。 表 5.2 存储器加速模块配置寄存器位描述 位 符号 值 描述 复位值 取指配置。这些位决定如何使用存储器加速模块缓冲区来进行指 令取指操作: 00 Flash 中的指令取指不用进行缓冲。每次从 CPU 中执行指令取指, 1:0 FETCHCFG 都会导致执行 Flash 存储器读操作 10 01 使用一个缓冲区来处理所有指令取指的缓冲操作 10 所有缓冲区可用于指令取指缓冲操作 11 保留,不使用该设置 数据配置。这些位决定如何使用存储器加速模块来进行数据访 问: 00 Flash 的数据访问不用进行缓冲。每次从 CPU 中执行数据请求, 3:2 DATACFG 都会导致执行 Flash 存储器读操作 10 01 使用一个缓冲区来处理所有数据访问的缓冲操作 10 所有缓冲区可用于数据访问缓冲操作 11 保留,不使用该设置 加速使能: 0 Flash 加速禁止。每次 CPU 执行 Flash 读请求时,都会占用 4 ACCEL FlASHTIM+1 个时钟。 1 1 Flash 加速使能。将缓冲和预取指操作组合(由其它 FLASHCFG 配置位指定)可以增加操作速度 预取指使能: 0 不执行预取指指令。 5 PREFEN 1 1 如果 FETCHCFG 字段不为 00,自动读取下一个紧跟着当前指令 执行地址的 Flash 行 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第5章 位 6 11:7 15:12 符号 PREFOVR - FLASHTIM 值 0 1 0000 0001 0010 0011 0100 0101 其它 续上表 描述 复位值 预取指忽略。仅当 PREFEN = 1,且对下一个不进行缓冲或预取 指的 Flash 行的指令取指完成时,才会应用该位: 任何之前启动的预取指不会被中止。 1 任何之前启动的预取指会被中止,将启动下一个连续的 Flash 行 的预取指 保留,用户软件不应向保留位写入 1。从保留位读出的值未定义 NA Flash 访问时间。该字段的值加 1 等于访问 Flash 所用到的 CPU 时钟数: 警告:不恰当设置该值可能会致使器件操作错误 注:下面的频率是根据该时间值而计算出来的 Flash 访问使用 1 个 CPU 时钟。用于高达 20MHz 的 CPU 时钟。 Flash 访问使用 2 个 CPU 时钟。用于高达 40MHz 的 CPU 时钟。 0x5 Flash 访问使用 3 个 CPU 时钟。用于高达 60MHz 的 CPU 时钟。 Flash 访问使用 4 个 CPU 时钟。用于高达 80MHz 的 CPU 时钟。 Flash 访问使用 5 个 CPU 时钟。用于高达 100MHz 的 CPU 时钟。 Flash 访问使用 6 个 CPU 时钟。该“安全”设置在任何的条件下 都有效。 用于未来更高速的器件 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 LPC1700 系列微控制器 第第 66 章章 嵌嵌套套向向量量中中断断控控制制器器 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 6 章 嵌套向量中断控制器 ·························································································· 1 6.1 特性 ································································································································1 6.2 描述 ································································································································1 6.3 中断源 ····························································································································1 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第6章 第6章 嵌套向量中断控制器 6.1 特性  ARM Cortex-M3 内部包含有嵌套向量中断控制器;  与内核紧密联系的中断控制器,可支持低中断延时;  可对系统异常和外设中断进行控制;  支持 33 个嵌套向量中断;  32 个可编程的中断优先级;  硬件优先级屏蔽;  可重定位的向量表;  不可屏蔽中断;  软件中断功能。 6.2 描述 嵌套向量中断控制器(NVIC)是 Cortex-M3 的一个内部器件。与 CPU 紧密结合,降低了中 断延时,让新进中断可以得到高效处理。 可参考《ARM®CortexTM-M3 技术参考指南》来获取 NVIC 操作的详细描述。 6.3 中断源 表 6.1列出了每一个外设功能所对应的中断源。每一个外围设备可以有一条或几条中断线连 接到向量中断控制器。多个中断源也可以共用一条中断线。除过ARM内核指定的某些标准外, 哪一条中断线连接到哪一个中断源是无关紧要的或没有优先级的。 表 6.1 连接到向量中断控制器(VIC)的中断源 VIC 通道号 向量偏移量 16 0x40 17 0x44 18 0x48 19 0x4C 20 0x50 21 0x54 功能 WDT TIMER0 TIMER1 Timer 2 Timer 3 UART0 标志 看门狗中断(WDINT) 匹配 0-1(MR0、MR1) 捕获 0-1(CR0、CR1) 匹配 0-2(MR0、MR1、MR2) 捕获 0-1(CR0、CR1) 匹配 0-3 捕获 0-1 匹配 0-3 捕获 0-1 Rx 线状态(RLS) 发送保持寄存器空(THRE) Rx 数据可用(RDA) 字符超时指示(CTI) 自动波特率结束(ABEO) 自动波特率超时(ABTO) LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 VIC 通道号 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 向量偏移量 0x58 0x5C 0x60 0x64 0x68 0x6C 0x70 0x74 0x78 0x7C 0x80 0x84 0x88 0x8C 0x90 功能 标志 Rx 线状态(RLS) 发送保持寄存器空(THRE) Rx 数据可用(RDA) UART1 字符超时指示(CTI) Modem 控制改变 自动波特率结束(ABEO) 自动波特率超时(ABTO) Rx 线状态(RLS) 发送保持寄存器空(THRE) UART 2 Rx 数据可用(RDA) 字符超时指示(CTI) 自动波特率结束(ABEO) 自动波特率超时(ABTO) Rx 线状态(RLS) 发送保持寄存器空(THRE) UART 3 Rx 数据可用(RDA) 字符超时指示(CTI) 自动波特率结束(ABEO) 自动波特率超时(ABTO) PWM1 PWM1 的匹配 0-6 PWM1 的捕获 0-1 I2C0 SI(状态改变) I2C1 SI(状态改变) I2C2 SI(状态改变) SPI 中断标志(SPIF) SPI 模式错误(MODF) SSP0 的 Tx FIFO 一半为空 SSP0 SSP0 的 Rx FIFO 一半为满 SSP0 的接收超时 SSP0 的接收溢出 Tx FIFO 一半为空 SSP1 Rx FIFO 一半为满 接收超时 接收溢出 PLL0(主 PLL) PLL0 锁定(PLOCK0) 计数器增加(RTCCIF) RTC 报警(RTCALF) 外部中断 外部中断 0(EINT0) 外部中断 外部中断 1(EINT1) 外部中断 外部中断 2(EINT2) 第6章 续上表 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第6章 VIC 通道号 37 38 39 40 41 42 43 44 45 46 47 48 49 50 向量偏移量 0x94 0x98 0x9C 0xA0 0xA4 0xA8 0xAC 0xB0 0xB4 0xB8 0xBC 0xC0 0xC4 0xC8 续上表 功能 外部中断 ADC BOD USB CAN GP DMA I2S 以太网 重复性中断定时 器 电机控制 PWM 正交编码器 PLL1(USB PLL) USB 活动中断 标志 外部中断 3(EINT3) 注:EINT3 通道与 GPIO 中断共用 A/D 转换器转换结束 掉电检测 USB_INT_REQ_LP 、 USB_INT_REQ_HP 、 USB_INT_REQ_DMA CAN Common、CAN 0 Tx、CAN 0 Rx、CAN 1 Tx、CAN 1 Rx DMA 通道 0 的 IntStatus、DMA 通道 1 的 IntStatus irq、dmareq1、dmareq2 WakeupInt、SoftInt、TxDoneInt、TxFinishedInt、 TxErrorInt 、 TxUnderrunInt 、 RxDoneInt 、 RxFinishedInt、RxErrorInt、RxOverrunInt RITINT IPER[2:0]、IPW[2:0]、ICAP[2:0]、FES INX_Int 、 TIM_Int 、 VELC_Int 、 DIR_Int 、 ERR_Int、ENCLK_Int、POS0_Int、POS1_Int、 POS2_Int 、 REV_Int 、 POS0REV_Int 、 POS1REV_Int、POS2REV_Int PLL1 Lock(PLOCK1) USB_NEED_CLK CAN 活动中断 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 LPC1700 系列微控制器 第第 77 章章 引引脚脚配配置置 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 7 章 引脚配置 ·············································································································· 1 7.1 LPC176x 引脚配置 ········································································································1 7.1.1 引脚布局 ················································································································1 7.1.2 LPC1768 引脚描述·································································································1 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 7.1 LPC176x引脚配置 7.1.1 引脚布局 第7章 引脚配置 第7章 图 7.1 LPC176x 引脚布局 7.1.2 LPC1768 引脚描述 表 7.1 引脚描述 符号 P0[0]~P0[31] P0[0]/RD1/TXD3/ SDA1 P0[1]/TD1/RXD3/ SCL1 P0[2]/TXD0/AD0[7] P0[3]/RXD0/AD0[6] 引脚 46[1] 47[1] 98 99 类型 I/O I/O I O I/O I/O O I I/O I/O O I I/O I I 描述 P0 口:P0 口是一个 32 位 I/O 口。每个位都有独立的方向控制。P0 口引脚的操作取决于引脚连接模块所选择的功能。P0 口的引脚 12、 13、14 和 31 不可用 P0[0] —通用数字输入/输出引脚 RD1-CAN1 接收器输入 TXD3-UART3 的发送器输出 SDA1-I2C1 数据输入/输出(不兼容 I2C 标准总线的开漏引脚) P0[1] —通用数字输入/输出引脚 TD1-CAN1 发送器输出 RXD3-UART3 的接收器输入 SCL1-I2C1 时钟输入/输出(不兼容 I2C 标准总线的开漏引脚) P0[2]—通用数字输入/输出引脚。5V 容差引脚,可提供数字 I/O 功 能(带滞后 TTL 电平)和模拟输入。当配置为 ADC 输入时,引脚 的数字部分禁能 TXD0—UART0 的发送器输出 AD0[7]-A/D 转换器 0,输入 7 P0[3]—通用数字输入/输出引脚。5V 容差引脚,可提供数字 I/O 功 能(带滞后 TTL 电平)和模拟输入。当配置为 ADC 输入时,引脚 的数字部分禁能 RXD0—UART0 的接收器输入 AD0[6]-A/D 转换器 0,输入 6 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第7章 符号 P0[4]/I2SRX_CLK/ RD2/CAP2[0] P0[5]/I2SRX_WS/ TD2/CAP2[1] P0[6]/I2SRX_SDA/ SSEL1/MAT2[0] P0[7]/I2STX_CLK/ SCK1/MAT2[1] P0[8]/I2STX_WS/ MISO1/MAT2[2] P0[9]/I2STX_SDA/ MOSI1/MAT2[3] P0[10]/TXD2/ SDA2/MAT3[0] P0[11]/RXD2/ SCL2/MAT3[1] P0[15]/TXD1/ SCK0/SCK 引脚 81[1] 80[1] 79[1] 78[1] 77[1] 76[1] 48[1] 49[1] 62[1] 类型 I/O I/O I I I/O I/O O I I/O I/O I/O O I/O I/O I/O O I/O I/O I/O O I/O I/O I/O O I/O O I/O O I/O I I/O O I/O O I/O I/O 续上表 描述 P0[4]—通用数字输入/输出引脚 I2SRX_CLK—接收时钟。它由主机驱动,从机接收。该信号对应 于 I2S 总线规范中的信号 SCK RD2—CAN2 接收器输入 CAP2[0]—定时器 2 的捕获输入,通道 0 P0[5]—通用数字输入/输出引脚 I2SRX_WS—接收字选择。它由主机驱动,从机接收。该信号对应 于 I2S 总线规范中的信号 WS TD2—CAN2 发送器输出 CAP2[1]—定时器 2 的捕获输入,通道 1 P0[6]—通用数字输入/输出引脚 I2SRX_SDA—接收数据。它由发送器驱动,接收器读取。该信号 对应于 I2S 总线规范中的信号 SD SSEL1—SSP1 的从机选择 MAT2[0]—定时器 2 的匹配输出,通道 0 P0[7]—通用数字输入/输出引脚 I2STX_CLK—发送时钟。它由主机驱动,从机接收。该信号对应 于 I2S 总线规范中的信号 SCK SCK1—SSP1 的串行时钟 MAT2[1]—定时器 2 的匹配输出,通道 1 P0[8]—通用数字输入/输出引脚 I2STX_WS—发送字选择。它由主机驱动,从机接收。该信号对应 于 I2S 总线规范中的信号 WS MISO1—SSP1 的主机输入、从机输出 MAT2[2]—定时器 2 的匹配输出,通道 2 P0[9]—通用数字输入/输出引脚 I2STX_SDA—发送数据。它由发送器驱动,接收器读取。该信号 对应于 I2S 总线规范中的信号 SD MOSI1—SSP1 的主机输出、从机输入 MAT2[3]—定时器 2 的匹配输出,通道 3 P0[10]—通用数字输入/输出引脚 TXD2—UART2 的发送器输出 SDA2—I2C2 的数据输入/输出(这不一个开漏引脚) MAT3[0]—定时器 3 的匹配输出,通道 0 P0[11]—通用数字输入/输出引脚 RXD2—UART2 的接收器输入 SCL2—I2C2 的时钟输入/输出(这不一个开漏引脚) MAT3[1]—定时器 3 的匹配输出,通道 1 P0[15]—通用数字输入/输出引脚 TXD1—UART1 的发送器输出 SCK0—SSP0 的串行时钟 SCK—SPI 的串行时钟 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第7章 符号 P0[16]/RXD1/ SSEL0/SSEL P0[17]/CTS1/ MISO0/MISO P0[18]/DCD1/ MOSI0/MOSI P0[19]/DSR1/ SDA1 P0[20]/DTR1/SCL1 P0[21]/RI1/RD1 P0[22]/RTS1/TD1 P0[23]/AD0[0]/ I2SRX_CLK/ CAP3[0] P0[24]/AD0[1]/ I2SRX_WS/ CAP3[1] 引脚 63[1] 61[1] 60[1] 59[1] 58[1] 57[1] 56[1] 9 8 类型 I/O I I/O I/O I/O I I/O I/O I/O I I/O I/O I/O I I/O I/O O I/O I/O I I I/O O O I/O I I/O I I/O I I/O I 续上表 描述 P0[16]—通用数字输入/输出引脚 RXD1—UART1 的接收器输入 SSEL0—SSP0 的从机选择 SSEL—SPI 的从机选择 P0[17]—通用数字输入/输出引脚 CTS1—UART1 的清零发送输入 MISO0—SSP0 的主机输入、从机输出 MISO—SPI 的主机输入、从机输出 P0[18]—通用数字输入/输出引脚 DCD1—UART1 的数据载波检测输入 MOSI0—SSP0 的主机输出、从机输入 MOSI—SPI 的主机输出、从机输入 P0[19]—通用数字输入/输出引脚 DSR1—UART1 的数据设置就绪输入 SDA1—I2C1 数据输入/输出(这不是遵从 I2C 总线的开漏引脚) P0[20]—通用数字输入/输出引脚 DTR1—UART1 的数据终端就绪输出。该信号也可配置为 RS-485/EIA-485 输出使能信号 SCL1—I2C1 时钟输入/输出(这不是遵从 I2C 总线的开漏引脚) P0[21]—通用数字输入/输出引脚 RI1—UART1 的铃声指示输入 RD1—CAN1 接收器输入 P0[22]—通用数字输入/输出引脚 RTS1—UART1 的 请 求 发 送 输 出 。 该 信 号 也 可 配 置 为 RS-485/EIA-485 输出使能信号 TD1—CAN1 发送器输出 P0[23]—通用数字输入/输出引脚。5V 容差引脚,可提供数字 I/O 功能(带滞后 TTL 电平)和模拟输入。当配置为 ADC 输 入时,引脚的数字部分禁能 AD0[0]—A/D 转换器 0,输入 0 I2SRX_CLK—接收时钟。它由主机驱动,从机接收。该信号 对应于 I2S 总线规范中的信号 SCK CAP3[0]—定时器 3 的捕获输入,通道 0 P0[24]—通用数字输入/输出引脚。5V 容差引脚,可提供数字 I/O 功能(带滞后 TTL 电平)和模拟输入。当配置为 ADC 输 入时,引脚的数字部分禁能 AD0[1]—A/D 转换器 0,输入 1 I2SRX_WS—接收字选择。它由主机驱动,从机接收。该信号 对应于 I2S 总线规范中的信号 WS CAP3[1]—定时器 3 的捕获输入,通道 1 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第7章 符号 P0[25]/AD0[2]/ I2SRX_SDA/ TXD3 P0[26]/AD0[3]/ AOUT/RXD3 P0[27]/SDA0/ USB_SDA 引脚 7 6 25 类型 I/O I I/O O I/O I O I I/O I/O 续上表 描述 P0[25]—通用数字输入/输出引脚。5V 容差引脚,可提供数字 I/O 功能(带滞后 TTL 电平)和模拟输入。当配置为 ADC 输 入时,引脚的数字部分禁能 AD0[2]—A/D 转换器 0,输入 2 I2SRX_SDA—接收数据。它由发送器驱动,接收器读取。该 信号对应于 I2S 总线规范中的信号 SD TXD3—UART3 的发送器输出 P0[26]—通用数字输入/输出引脚。5V 容差引脚,可提供数字 I/O 功能(带滞后 TTL 电平、模拟输入和模拟输出)。当配置 为 ADC 输入或 DAC 输出时,引脚的数字部分禁能 AD0[3]—A/D 转换器 0,输入 3 AOUT—D/A 转换器输出 RXD3—UART3 的接收器输入 P0[27]—通用数字输入/输出引脚。开漏 5V 耐受数字 I/O 引脚, 兼容于 100KHz 标准模式、400KHz 高速模式和 1MHz 高速模 式 Plus 的 I2C 总线规范。该引脚要求用外部上拉提供输出功 能。当电源关闭时,连接到 I2C 总线的该引脚悬空且不会干扰 I2C 线。开漏配置可以应用于该引脚上的全部功能 SDA0—I2C0 数据输入/输出。开漏输出(遵从 I2C 总线规范) USB_SDA—USB 端口 I2C 串行数据(OTG 收发器) P0[28]/SCL0/ USB_SCL P0[29]/USB_D+ P0[30]/USB_D− P1[0]~P1[31] I/O I/O P0[28]—通用数字输入/输出引脚。开漏 5V 耐受数字 I/O 引脚, 兼容于 100KHz 标准模式、400KHz 高速模式和 1MHz 高速模 式 Plus 的 I2C 总线规范。该引脚要求用外部上拉提供输出功 能。当电源关闭时,连接到 I2C 总线的该引脚悬空且不会干扰 24 I2C 线。开漏配置可以应用于该引脚上的全部功能 SCL0—I2C0 时钟输入/输出。开漏输出(遵从 I2C 总线规范) I/O USB_SCL—USB 端口 I2C 串行时钟(OTG 收发器) I/O I/O P0[29]—通用数字输入/输出引脚。引脚提供数字 I/O 和 USB 功能。其设计符合 USB 规范 2.0 版本(只有全速和低速模式) 29 USB_D+—USB 双向 D+线 I/O I/O P0[30]—通用数字输入/输出引脚。引脚提供数字 I/O 和 USB 功能。其设计符合 USB 规范 2.0 版本(只有全速和低速模式) 30 USB_D−—USB 双向 D−线 I/O P1 口:P1 口是 32 位的 I/O 端口,每一位都具有独立的方向 控制。P1 口引脚的操作取决于引脚连接模块所选择的引脚功 I/O 能。P1 口引脚的 P1.2、P1.3、P1.5、P1.6、P1.7、P1.11、P1.12 和 P1.13 不可用 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第7章 符号 P1[0]/ ENET_TXD0 P1[1]/ ENET_TXD1 P1[4]/ ENET_TX_EN P1[8]/ ENET_CRS P1[9]/ ENET_RXD0 P1[10]/ ENET_RXD1 P1[14]/ ENET_RX_ER P1[15]/ ENET_REF_CLK P1[16]/ ENET_MDC P1[17]/ ENET_MDIO P1[18]/ USB_UP_LED/ PWM1[1]/CAP1[0] P1[19]/MC0A/ USB _ PPWR / CAP1[1] P1[20]/MCFB0/ PWM1[2]/SCK0 P1[21]/MCABORT/ PWM1[3]/SSEL0 引脚 95[1] 94[1] 93[1] 92[1] 91[1] 90[1] 89[1] 88[1] 87[1] 86[1] 32[1] 33[1] 34[1] 35[1] 类型 I/O O I/O O I/O O I/O I I/O I I/O I I/O I I/O I I/O O I/O I/O I/O O O I I/O O O I I/O I O I/O I/O O O I/O 续上表 描述 P1[0]—通用数字输入/输出引脚 ENET_TXD0—以太网发送数据 0 P1[1]—通用数字输入/输出引脚 ENET_TXD1—以太网发送数据 1 P1[4]—通用数字输入/输出引脚 ENET_TX_EN—以太网发送数据使能 P1[8]—通用数字输入/输出引脚 ENET_CRS—以太网载波侦听 P1[9]—通用数字输入/输出引脚 ENET_RXD0—以太网接收数据 P1[10]—通用数字输入/输出引脚 ENET_RXD1—以太网接收数据 P1[14]—通用数字输入/输出引脚 ENET_RX_ER—以太网接收错误 P1[15]—通用数字输入/输出引脚 ENET_REF_CLK—以太网参考时钟 P1[16]—通用数字输入/输出引脚 ENET_MDC—以太网 MIIM 时钟 P1[17]—通用数字输入/输出引脚 ENET_MDIO—以太网 MIIM 数据输入和输出 P1[18]—通用数字输入/输出引脚 USB_UP_LED—USB GoodLink LED 指示器。当设备被配置时 (非控制端点使能),它为低电平。当设备不被配置或在全局 挂起期间,它为高电平 PWM1[1]—脉冲宽度调制器 1,通道 1 输出 CAP1[0]—定时器 1 的捕获输入,通道 0 P1[19]—通用数字输入/输出引脚 MC0A—电机控制 PWM 通道 0,输出 A USB _ PPWR —USB 端口的端口电源使能信号 CAP1[1]—定时器 1 的获捕输入,通道 1 P1[20]—通用数字输入/输出引脚 MCFB0—电机控制 PWM 通道 0,反馈输入。同时是正交编码 器接口 PHA 输入 PWM1[2]—脉冲宽度调制器 1,通道 2 输出 SCK0—SSP0 的串行时钟 P1[21]—通用数字输入/输出引脚 MCABORT—电机控制 PWM,紧急中止 PWM1[3]—脉冲宽度调制器 1,通道 3 输出 SSEL0—SSP0 的从机选择 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第7章 符号 P1[22]/MC0B/ USB_PWRD/ MAT1[0] P1[23]/MCFB1/ PWM1[4]/MISO0 P1[24]/MCFB2/ PWM1[5]/MOSI0 P1[25]/MC1A/ CLKOUT/MAT1[1] P1[26]/MC1B/ PWM1[6]/CAP0[0] P1[27]/CLKOUT/ USB _ OVRCR / CAP0[1] P1[28]/MC2A/ PCAP1[0]/MAT0[0] P1[29]/MC2B/ PCAP1[1]/ MAT0[1] P1[30]/VBUS/ AD0[4] 引脚 36[1] 37[1] 38[1] 39[1] 40[1] 43[1] 44[1] 45[1] 21 类型 I/O O I O I/O I O I/O I/O I O I/O I/O O O O I/O O O I I/O O I I I/O O I O I/O O I O I/O I I 续上表 描述 P1[22]—通用数字输入/输出引脚 MC0B—电机控制 PWM 通道 0,输出 B USB_PWRD—USB 端口的电源状态(主电源开关) MAT1[0]—定时器 1 的匹配输出,通道 0 P1[23]—通用数字输入/输出引脚 MCFB1—电机控制 PWM 通道 1,反馈输入。同时还是正交编 码器接口 PHB 输入 PWM1[4]—脉冲宽度调制器 1,通道 4 输出 MISO0—SSP0 的主机输入、从机输出 P1[24]—通用数字输入/输出引脚 MCFB2—电机控制 PWM 通道 2,反馈输入。同时还是正交编 码器接口 INDEX 输入 PWM1[5]—脉冲宽度调制器 1,通道 5 输出 MISO0—SSP0 的主机输出、从机输入 P1[25]—通用数字输入/输出引脚 MC1A—电机控制 PWM 通道 1,输出 A CLKOUT—时钟输出引脚 MAT1[1]—定时器 1 的匹配输出,通道 1 P1[26]—通用数字输入/输出引脚 MC1B—电机控制 PWM 通道 1,输出 B PWM1[6]—脉冲宽度调制器 1,通道 6 输出 CAP0[0]—定时器 0 的捕获输入,通道 0 P1[27]—通用数字输入/输出引脚 CLKOUT—时钟输出引脚 USB _ OVRCR —USB 端口过载电流状态 CAP0[1]—定时器 0 的捕获输入,通道 1 P1[28]—通用数字输入/输出引脚 MC2A—电机控制 PWM 通道 2,输出 A PCAP1[0]—PWM1 的捕获输入,通道 0 MAT0[0]—定时器 0 的匹配输出,通道 0 P1[29]—通用数字输入/输出引脚 MC2B—电机控制 PWM 通道 2,输出 B PCAP1[1]—PWM1 的捕获输入,通道 1 MAT0[1]—定时器 0 的匹配输出,通道 0 P1[30]—通用数字输入/输出引脚。5V 的容差引脚,提供数字 I/O 功能(带滞后 TTL 电平)和模拟输入。当配置为 ADC 输 入时,引脚的数字部分禁能 VBUS—监控 USB 总线电源的存在 注:要发生 USB 复位时,该信号必须为高电平 AD0[4]—A/D 转换器 0,输入 4 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第7章 符号 P1[31]/SCK1/ AD0[5] P2[0]~P2[31] P2[0]/PWM1[1]/ TXD1 P2[1]/PWM1[2]/ RXD1 P2[2]/PWM1[3]/ CTS1/ TRACEDATA[3] P2[3]/PWM1[4]/ DCD1/ TRACEDATA[2] P2[4]/PWM1[5]/ DSR1/ TRACEDATA[1] P2[5]/PWM1[6]/ DTR1/ TRACEDATA[0] P2[6]/PCAP1[0]/ RI1/TRACECLK P2[7]/RD2/ RTS1 引脚 20 75[1] 74[1] 73[1] 70[1] 69[1] 68[1] 67[1] 66[1] 类型 I/O I/O I I/O I/O O O I/O O I I/O O I O I/O O I O I/O O I O I/O O O O 续上表 描述 P1[31]—通用数字输入/输出引脚。5V 的容差引脚,提供数字 I/O 功能(带滞后 TTL 电平)和模拟输入。当配置为 ADC 输 入时,引脚的数字部分禁能 SCK1—SSP1 的串行时钟 AD0[5]—A/D 转换器 0,输入 5 P2 口:P2 口是一个 32 位 I/O 口,每个位都具有独立的方向 控制。P2 口引脚的操作取决于引脚连接模块所选择的功能。 P2 口的引脚 P2.14~P2.31 不可用 P2[0]—通用数字输入/输出引脚 PWM1[1]—脉冲宽度调制器 1,通道 1 输出 TXD1—UART1 的发送器输出 P2[1]—通用数字输入/输出引脚 PWM1[2]—脉冲宽度调制器 1,通道 2 输出 RXD1—UART1 的接收器输入 P2[2]—通用数字输入/输出引脚 PWM1[3]—脉冲宽度调制器 1,通道 3 输出 CTS1—UART1 的清零发送输入 TRACEDATA[3]—跟踪数据,位 3 P2[3]—通用数字输入/输出引脚 PWM1[4]—脉冲宽度调制器 1,通道 4 输出 DCD1—UART1 的数据载波检测输入 TRACEDATA[2]—跟踪数据,位 2 P2[4]—通用数字输入/输出引脚 PWM1[5]—脉冲宽度调制器 1,通道 5 输出 DSR1—UART1 的数据设置就绪输入 TRACEDATA[1]—跟踪数据,位 1 P2[5]—通用数字输入/输出引脚 PWM1[6]—脉冲宽度调制器 1,通道 6 输出 DTR1—UART1 的 数 据 终 端 就 绪 输 出 。 也 可 配 置 为 RS-485/EIA-485 输出使能信号 TRACEDATA[0]—跟踪数据,位 0 I/O P2[6]—通用数字输入/输出引脚 I PCAP1[0]—PWM1 的捕获输入,通道 0 I RI1—UART1 的铃声指示输入 O TRACECLK—跟踪时钟 I/O P2[7]—通用数字输入/输出引脚 I RD2—CAN2 的接收器输入 O RTS1 — UART1 的 请 求 发 送 输 出 。 也 可 以 配 置 为 RS-485/EIA-485 输出使能信号 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第7章 符号 P2[8]/TD2/ TXD2/ENET_MDC P2[9]/ USB_CONNECT/ RXD2 P2[10]/ EINT0 /NMI P2[11]/ EINT1 / I2STX_CLK P2[12]/ EINT2 / I2STX_WS P2[13]/ EINT3 / I2STX_SDA P3[0]~P3[31] P3[25]/MAT0[0]/ PWM1[2] P3[26]/STCLK/ MAT0[1]/PWM1[3] 引脚 65[1] 64[1] 53 52 51 50 27[1] 26[1] 类型 I/O O O O I/O O I I/O I/O I I I/O I I/O I/O I I/O I/O I I/O I/O I/O O O I/O I O O 续上表 描述 P2[8]—通用数字输入/输出引脚 TD2—CAN2 的发送器输出 TXD2—UART2 的发送器输出 ENET_MDC—以太网 MIIM 时钟 P2[9]—通用数字输入/输出引脚 USB_CONNECT— 在 软 件 控 制 下 , 该 信 号 用 于 切 换 一 个 1.5K的外部电阻。它可以与 SoftConnect USB 特性一起使用 RXD2—UART2 的接收器输入 ENET_MDIO—以太网 MIIM 数据输入和输出 P2[10]—通用数字输入/输出引脚。5V 容差脚,具有 5ns 的干 扰过滤,提供带滞后 TTL 电平的数字 I/O 功能 注:当 RESET 为低电平时,该引脚的低电平强制片内引导程 序控制复位后的器件进入 ISP 模式。见“Flash 存储器接口和 编程”章节中的“简介”描述 EINT0 —外部中断 0 输入 NMI—非屏蔽中断输入 P2[11]—通用数字输入/输出引脚。5V 容差脚,具有 5ns 的干 扰过滤,提供带滞后 TTL 电平的数字 I/O 功能 EINT1 —外部中断 1 输入 I2STX_CLK—发送时钟。它由主机驱动,从机接收。该信号 对应于 I2S 总线规范中的 SCK 信号 P2[12]—通用数字输入/输出引脚。5V 容差脚,具有 5ns 的干 扰过滤,提供带滞后 TTL 电平的数字 I/O 功能 EINT2 —外部中断 2 输入 I2STX_WS—发送字选择。它由主机驱动,从机接收。该信号 对应于 I2S 总线规范中的 WS 信号 P2[13]—通用数字输入/输出引脚。5V 容差脚,具有 5ns 的干 扰过滤,提供带滞后 TTL 电平的数字 I/O 功能 EINT3 —外部中断 3 输入 I2STX_SDA—发送数据。它由发送器驱动,接收器读取。该 信号对应于 I2S 总线规范中的 SD 信号 P3 口:P3 口是一个 32 位 I/O 口,每个位都具有独立的方向 控制。P3 引脚的操作取决于引脚连接模块所选择的功能。P3 口的引脚 P3.0~P3.24、P3.27~P3.31 不可用 P3[25]—通用数字输入/输出引脚 MAT0[0]—定时器 0 的匹配输出,通道 0 PWM1[2]—脉冲宽度调制器 1,输出 2 P3[26]—通用数字输入/输出引脚 STCLK—系统节拍定时器时钟输入 MAT0[1]—定时器 0 的匹配输出,通道 1 PWM1[3]—脉冲宽度调制器 1,输出 3 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第7章 符号 P4[0]~P4[31] P4[28]/RX_MCLK/ MAT2[0]/TXD3 P4[29]/TX_MCLK/ MAT2[1]/RXD3 TDO/SWO TDI TMS/SWDIO TRST TCK/SWDCLK RTCK RSTOUT RESET XTAL1 XTAL2 RTCX1 RTCX2 VSS VSSA VDD(3V3) VREG(3V3) VDDA VREFP 引脚 82[1] 85[1] 1[1] 2[1] 3[1] 4[1] 5[1] 100[1] 14 类型 I/O I/O I O O I/O I O I O O I I I/O I I I I/O O 17 I 22[2] I 23[2] O 16[2] I 18[2] O 31、41、55、 72、97、83[2] I 11[2] I 28、54、71、 96[2] I 42、84[2] I 10[2] I 12[2] I 续上表 描述 P4 口:P4 口是一个 32 位 I/O 口,每个位都具有独立的方向 控制。P4 口引脚的操作取决于引脚连接模块所选择的功能。 P4 口的引脚 P4.0~P4.27、P4.30 和 P4.31 不可用 P4[28]—通用数字输入/输出引脚 RX_MCLK—I2S 接收主机时钟 MAT2[0]—定时器 2 的匹配输出,通道 0 TXD3—UART3 的发送器输出 P4[29]—通用数字输入/输出引脚 TX_MCLK—I2S 发送主机时钟 MAT2[1]—定时器 2 的匹配输出,通道 1 RXD3—UART3 的接收器输入 TDO—JTAG 接口的测试数据输出 SWO—串行线跟踪输出 TDI—JTAG 接口的测试数据输入 TMS—JTAG 接口的测试模式选择 SWDIO—串行线调试数据输入/输出 TRST —JTAG 接口的测试复位 TCK—JTAG 接口的测试时钟 SWDCLK—串行线时钟 RTCK—JTAG 接口的控制信号 RSTOUT — 这 是 3.3V 的 引 脚 。 该 引 脚 上 的 低 电 平 表 示 LPC1700 系列 ARM 初步用户手册处于复位状态 外部复位输入:该引脚为低电平时将器件复位,并使 I/O 口和 外设恢复默认状态,处理器从地址 0 开始执行。该引脚为 5V 容差引脚,带 20ns 干扰过滤,滞后 TTL 电平 振荡器电路和内部时钟发生器电路的输入 振荡器放大器的输出 RTC 振荡器电路的输入 RTC 振荡器电路的输出 地:0V 参考点 模拟地:0V 参考点。标称电压与 VSS 相同,但应当互相隔离 以减少噪声和故障 3.3V 电源:I/O 口的电源电压 3.3V 调节器电源:这是仅用于片内电压调节器的电源 模拟 3.3V 引脚电源:标称电压与 VDD(3V3)相同,但应当互相 隔离以减少噪声和故障。该电压也用来向 ADC 和 DAC 供电 ADC 正极参考电源:标称电压与 VDDA 相同,但应当互相隔 离以减少噪声和故障。该引脚上的电平用作 ADC 和 DAC 的 参考电平 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第7章 符号 VREFN VBAT n.c. 引脚 15[2] 19[2] 13 类型 I I - 续上表 描述 ADC 负极参考电源:标称电压与 VSS 相同,但应当互相隔离 以减少噪声和故障。该引脚上的电平用作 ADC 和 DAC 的参 考电平 RTC 引脚电源:RTC 外设的 3.3V 电源端 不连接 [1] 5V 容差引脚可提供带滞后 TTL 电平的数字 I/O 功能。 [2] 引脚提供特别的模拟功能。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 LPC1700 系列微控制器 第第 88 章章 引引脚脚连连接接模模块块 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 8 章 引脚连接模块 ······································································································ 1 8.1 如何阅读该章 ················································································································1 8.2 描述 ································································································································1 8.3 引脚功能选择寄存器 ·····································································································1 8.4 引脚模式选择寄存器 ·····································································································1 8.5 寄存器描述 ····················································································································2 8.5.1 引脚功能选择寄存器 0(PINSEL0 - 0x4002 C000) ···········································3 8.5.2 引脚功能选择寄存器 1(PINSEL1 - 0x4002 C004) ···········································3 8.5.3 引脚功能选择寄存器 2(PINSEL2 - 0x4002 C008) ···········································4 8.5.4 引脚功能选择寄存器 3(PINSEL3 - 0x4002 C00C) ··········································5 8.5.5 引脚功能选择寄存器 4(PINSEL4 - 0x4002 C010) ···········································5 8.5.6 引脚功能选择寄存器 5(PINSEL5 - 0x4002 C014) ···········································6 8.5.7 引脚功能选择寄存器 6(PINSEL6 - 0x4002 C018) ···········································6 8.5.8 引脚功能选择寄存器 7(PINSEL7 - 0x4002 C01C) ··········································6 8.5.9 引脚功能选择寄存器 8(PINSEL8 - 0x4002 C020) ···········································6 8.5.10 引脚功能选择寄存器 9(PINSEL9 - 0x4002 C024) ···········································6 8.5.11 引脚功能选择寄存器 10(PINSEL10 - 0x4002 C028) ·······································6 8.5.12 引脚模式选择寄存器 0(PINMODE0 - 0x4002 C040) ······································7 8.5.13 引脚模式选择寄存器 1(PINMODE1 - 0x4002 C044) ······································7 8.5.14 引脚模式选择寄存器 2(PINMODE2 - 0x4002 C048) ······································7 8.5.15 引脚模式选择寄存器 3(PINMODE3 - 0x4002 C04C)······································8 8.5.16 引脚模式选择寄存器 4(PINMODE4 - 0x4002 C050) ······································8 8.5.17 引脚模式选择寄存器 5(PINMODE5 - 0x4002 C054) ······································8 8.5.18 引脚模式选择寄存器 6(PINMODE6 - 0x4002 C058) ······································8 8.5.19 引脚模式选择寄存器 7(PINMODE7 - 0x4002 C05C)······································9 8.5.20 引脚模式选择寄存器 8(PINMODE8 - 0x4002 C060) ······································9 8.5.21 引脚模式选择寄存器 9(PINMODE9 - 0x4002 C064) ······································9 8.5.22 开漏引脚模式选择寄存器 0(PINMODE_OD0 - 0x4002 C068) ·······················9 8.5.23 开漏引脚模式选择寄存器 1(PINMODE_OD1 - 0x4002 C06C) ····················10 8.5.24 开漏引脚模式选择寄存器 2(PINMODE_OD2 - 0x4002 C070) ·····················10 8.5.25 开漏引脚模式选择寄存器 3(PINMODE_OD3 - 0x4002 C074) ·····················10 8.5.26 开漏引脚模式选择寄存器 4(PINMODE_OD4 - 0x4002 C078) ·····················11 8.5.27 I2C 引脚配置寄存器 4(I2CPADCFG - 0x4002 C07C) ····································11 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第8章 第8章 引脚连接模块 8.1 如何阅读该章 表 8.1所示为LPC1700 系列Cortex-M3 的PINSEL寄存器的功能。 表 8.1 PINSEL 寄存器汇总 寄存器 PINSEL0 PINSEL1 PINSEL2 PINSEL3 PINSEL4 PINSEL5 PINSEL6 PINSEL7 PINSEL8 PINSEL9 PINSEL10 控制 P0 低半位 P0 高半位 P1 低半位(以太网) P1 高半位 P2 低半位 P2 高半位 P3 低半位 P3 高半位 P4 低半位 P4 高半位 跟踪端口使能 表格 表 8.6 表 8.7 表 8.8 表 8.9 表 8.10 未使用 未使用 表 8.11 未使用 表 8.12 表 8.13 8.2 描述 引脚连接模块使得微控制器的大部分引脚具有 1 个以上的功能。配置寄存器控制多路开关以 实现引脚与片内外设之间的连接。 外设应优先连接到适当的引脚,再激活,需要的话使能相关中断。任何一个没有映射到相关 功能引脚的使能外设,都将被认为是未定义的。 当选择了引脚上的一个功能时,该引脚上其它可用功能无效。 8.3 引脚功能选择寄存器 PINSEL寄存器控制器件引脚的功能,如表 8.2所示。这些寄存器中的每一组位对应着特定的 器件引脚功能。 表 8.2 引脚功能选择寄存器位 PINSEL0 到 PINSEL9 的值 00 01 10 11 功能 基本(默认)功能,通常为 GPIO 口 第一个可选的功能 第二个可选的功能 第三个可选的功能 复位后的值 00 仅当引脚选择 GPIO 功能时,GPIO 寄存器中的方向控制位才有效。对于其它功能来说,方 向是自动控制的。每个外围器件通常有不同的引脚配置,因此每个引脚可能有不同的功能组合。 有关特定器件的详细内容,请见相关的数据手册。 8.4 引脚模式选择寄存器 PINMODE 寄存器控制所有端口的工作模式。这包括使用片内上拉/下拉电阻的特性和特定 的开漏操作模式。除过用于 I2C0 接口的 I2C 引脚和 USB 引脚(见“引脚模式选择寄存器 1 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第8章 (PINMODE1 - 0x4002 C044)),不管该引脚选择用作何种功能,都可以为每一个端口引脚选 择片内上拉/下拉电阻。使用三个位来控制端口引脚的模式,其中二个位位于 PINMODE 寄存器 中,另一个位于 PINMODE_OD 寄存器中。在 PINSEL 寄存器中未使用的引脚看作为保留位。 表 8.3 引脚模式选择寄存器位 PINMODE0 到 PINMODE9 的值 00 01 10 11 功能 引脚使能片内上拉电阻 中继模式(见下文) 引脚没有使能片内上拉或下拉电阻 引脚使能片内下拉电阻 复位后的值 00 当引脚处于逻辑高电平时,中继模式使能上拉电阻;当引脚处于逻辑低电平时,使能下拉电 阻。当引脚配置为输入且不是通过外部驱动时,引脚将保持上一个已知状态。 PINMODE_OD 寄存器控制端口的开漏模式。当引脚被配置为输出且值为 0 时,开漏模式会 正常地将引脚电平拉低。但是,如果输出引脚值为 1,则引脚的输出驱动关闭,等同于改变了引 脚的方向。这样的组合就模拟了一个开漏输出。 表 8.4 开漏引脚模式选择寄存器位 PINMODE_OD0 到 PINMODE_OD4 的值 0 1 功能 引脚处于正常模式(非开漏模式) 引脚处于开漏模式 复位后的值 00 8.5 寄存器描述 引脚控制模块包含 11 个寄存器,如表 8.5所示。在外部复位、看门狗复位、上电复位(POR) 和掉电检测复位(BOD)发生时,该模块中的所有寄存器均复位为“0”。 表 8.5 引脚连接模块寄存器映射 名称 PINSEL0 PINSEL1 PINSEL2 PINSEL3 PINSEL4 PINSEL5 PINSEL6 PINSEL7 PINSEL8 PINSEL9 PINSEL10 PINMODE0 PINMODE1 PINMODE2 PINMODE3 PINMODE4 描述 引脚功能选择寄存器 0 引脚功能选择寄存器 1 引脚功能选择寄存器 2 引脚功能选择寄存器 3 引脚功能选择寄存器 4 引脚功能选择寄存器 5 引脚功能选择寄存器 6 引脚功能选择寄存器 7 引脚功能选择寄存器 8 引脚功能选择寄存器 9 引脚功能选择寄存器 10 引脚模式选择寄存器 0 引脚模式选择寄存器 1 引脚模式选择寄存器 2 引脚模式选择寄存器 3 引脚模式选择寄存器 4 访问 R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 地址 0x4002 C000 0x4002 C004 0x4002 C008 0x4002 C00C 0x4002 C010 0x4002 C014 0x4002 C018 0x4002 C01C 0x4002 C020 0x4002 C024 0x4002 C028 0x4002 C040 0x4002 C044 0x4002 C048 0x4002 C04C 0x4002 C050 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第8章 名称 PINMODE5 PINMODE6 PINMODE7 PINMODE8 PINMODE9 PINMODE_OD0 PINMODE_OD1 PINMODE_OD2 PINMODE_OD3 PINMODE_OD4 I2CPADCFG 描述 引脚模式选择寄存器 5 引脚模式选择寄存器 6 引脚模式选择寄存器 7 引脚模式选择寄存器 8 引脚模式选择寄存器 9 开漏模式控制寄存器 0 开漏模式控制寄存器 1 开漏模式控制寄存器 2 开漏模式控制寄存器 3 开漏模式控制寄存器 4 I2C 引脚配置寄存器 访问 R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值[1] 0 0 0 0 0 0 0 0 0 0 0 续上表 地址 0x4002 C054 0x4002 C058 0x4002 C05C 0x4002 C060 0x4002 C064 0x4002 C068 0x4002 C06C 0x4002 C070 0x4002 C074 0x4002 C078 0x4002 C07C [1] 复位值仅反映已使用位中保存的数据,它不包括保留位的内容。 8.5.1 引脚功能选择寄存器 0(PINSEL0 - 0x4002 C000) PINSEL0 寄存器控制端口 0 低半部分的位功能。仅当引脚选择使用 GPIO 功能时,FIO0DIR 寄存器中的方向控制位才有效。对于其它功能来说,方向是自动控制的。 对于 100 引脚封装,引脚功能选择寄存器 0 的位功能描述如表 8.6所述。, 表 8.6 引脚功能选择寄存器 0 描述 PINSEL0 1:0 3:2 5:4 7:6 9:8 11:10 13:12 15:14 17:16 19:18 21:20 23:22 29:24 31:30 引脚名称 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P0.8 P0.9 P0.10 P0.11 P0.15 00 GPIO P0.0 GPIO P0.1 GPIO P0.2 GPIO P0.3 GPIO P0.4 GPIO P0.5 GPIO P0.6 GPIO P0.7 GPIO P0.8 GPIO P0.9 GPIO P0.10 GPIO P0.11 保留 GPIO P0.15 01 RD1 TD1 TXD0 RXD0 I2SRX_CLK I2SRX_WS I2SRX_SDA I2STX_CLK I2STX_WS I2STX_SDA TXD2 RXD2 保留 TXD1 10 TXD3 RXD3 AD0.7 AD0.6 RD2 TD2 SSEL1 SCK1 MISO1 MOSI1 SDA2 SCL2 保留 SCK0 11 SDA1 SCL1 保留 保留 CAP2.0 CAP2.1 MAT2.0 MAT2.1 MAT2.2 MAT2.3 MAT3.0 MAT3.1 保留 SCK 复位值 00 00 00 00 00 00 00 00 00 00 00 00 0 00 8.5.2 引脚功能选择寄存器 1(PINSEL1 - 0x4002 C004) PINSEL1 寄存器控制端口 0 高半部分的位功能。仅当引脚选择使用 GPIO 功能时,FIO0DIR 寄存器中的方向控制位才有效。对于其它功能来说,方向是自动控制的。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第8章 对于 100 引脚封装,引脚功能选择寄存器 1 的位功能描述如表 8.7所述。 表 8.7 引脚功能选择寄存器 1 描述 PINSEL1 1:0 3:2 5:4 7:6 9:8 11:10 13:12 15:14 17:16 19:18 21:20 23:22 25:24 引脚名称 P0.16 P0.17 P0.18 P0.19 P0.20 P0.21 P0.22 P0.23 P0.24 P0.25 P0.26 P0.27[1] P0.28[1] 00 GPIO P0.16 GPIO P0.17 GPIO P0.18 GPIO P0.19 GPIO P0.20 GPIO P0.21 GPIO P0.22 GPIO P0.23 GPIO P0.24 GPIO P0.25 GPIO P0.26 GPIO P0.27 GPIO P0.28 01 RXD1 CTS1 DCD1 DSR1 DTR1 RI1 RTS1 AD0.0 AD0.1 AD0.2 AD0.3 SDA0 SCL0 27:26 P0.29 GPIO P0.29 USB_D+ 29:28 P0.30 GPIO P0.30 USB_D− 31:30 - 保留 保留 [1] 引脚 P0.27 和引脚 P0.28 是遵从 I2C 总线的开漏引脚。 10 SSEL0 MISO0 MOSI0 保留 保留 保留 保留 I2SRX_CLK I2SRX_WS I2SRX_SDA AOUT USB_SDA USB_SCL 保留 保留 保留 11 SSEL MISO MOSI SDA1 SCL1 RD1 TD1 CAP3.0 CAP3.1 TXD3 RXD3 保留 保留 保留 保留 保留 复位值 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8.5.3 引脚功能选择寄存器 2(PINSEL2 - 0x4002 C008) PINSEL2 寄存器控制端口 1 低半部分的位功能,它包含以太网相关功能引脚。仅当引脚选 择使用 GPIO 功能时,FIO1DIR 寄存器中的方向控制位才有效。对于其它功能来说,方向是自动 控制的。 对于 100 引脚封装,引脚功能选择寄存器 2 的位功能描述如表 8.8所述。 表 8.8 引脚功能选择寄存器 2 描述 PINSEL2 1:0 3:2 7:4 9:8 15:10 17:16 19:18 21:20 27:22 29:28 31:30 引脚名称 P1.0 P1.1 P1.4 P1.8 P1.9 P1.10 P1.14 P1.15 00 GPIO P1.0 GPIO P1.1 保留 GPIO P1.4 保留 GPIO P1.8 GPIO P1.9 GPIO P1.10 保留 GPIO P1.14 GPIO P1.15 01 ENET_TXD0 ENET_TXD1 保留 ENET_TX_EN 保留 ENET_CRS ENET_RXD0 ENET_RXD1 保留 ENET_RX_ER ENET_REF_CLK 10 保留 保留 保留 保留 保留 保留 保留 保留 保留 保留 保留 11 保留 保留 保留 保留 保留 保留 保留 保留 保留 保留 保留 复位值 0 0 0 0 0 0 0 0 0 0 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第8章 8.5.4 引脚功能选择寄存器 3(PINSEL3 - 0x4002 C00C) PINSEL3 寄存器控制端口 1 高半部分的位功能。仅当引脚选择使用 GPIO 功能时,FIO1DIR 寄存器中的方向控制位才有效。对于其它功能来说,方向是自动控制的。 对于 100 引脚封装,引脚功能选择寄存器 3 的位功能描述如表 8.9所述。 表 8.9 引脚功能选择寄存器 3 描述 PINSEL3 1:0 3:2 5:4 7:6 9:8 11:10 13:12 15:14 17:16 19:18 21:20 23:22 25:24 27:26 29:28 31:30 引脚名称 P1.16 P1.17 P1.18 P1.19 P1.20 P1.21 P1.22 P1.23 P1.24 P1.25 P1.26 P1.27 P1.28 P1.29 P1.30 P1.31 00 GPIO P1.16 GPIO P1.17 GPIO P1.18 GPIO P1.19 GPIO P1.20 GPIO P1.21 GPIO P1.22 GPIO P1.23 GPIO P1.24 GPIO P1.25 GPIO P1.26 GPIO P1.27 GPIO P1.28 GPIO P1.29 GPIO P1.30 GPIO P1.31 01 ENET_MDC ENET_MDIO USB_UP_LED MC0A MCFB0 MCABORT MC0B MCFB1 MCFB2 MC1A MC1B CLKOUT MC2A MC2B 保留 保留 10 保留 保留 PWM1.1 USB _ PPWR PWM1.2 PWM1.3 USB_PWRD PWM1.4 PWM1.5 CLKOUT PWM1.6 USB _ OVRCR PCAP1.0 PCAP1.1 VBUS SCK1 11 保留 保留 CAP1.0 CAP1.1 SCK0 SSEL0 MAT1.0 MISO0 MOSI0 MAT1.1 CAP0.0 CAP0.1 MAT0.0 MAT0.1 AD0.4 AD0.5 复位值 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8.5.5 引脚功能选择寄存器 4(PINSEL4 - 0x4002 C010) PINSEL4 寄存器控制端口 2 低半部分的位功能。仅当引脚选择使用 GPIO 功能时,FIO2DIR 寄存器中的方向控制位才有效。对于其它功能来说,方向是自动控制的。 对于 100 引脚封装,引脚功能选择寄存器 4 的位功能描述如表 8.10所述。 表 8.10 引脚功能选择寄存器 4 描述 PINSEL4 1:0 3:2 5:4 7:6 9:8 11:10 13:12 15:14 17:16 19:18 21:20 引脚名称 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P2.8 P2.9 P2.10 00 GPIO P2.0 GPIO P2.1 GPIO P2.2 GPIO P2.3 GPIO P2.4 GPIO P2.5 GPIO P2.6 GPIO P2.7 GPIO P2.8 GPIO P2.9 GPIO P2.10 01 PWM1.1 PWM1.2 PWM1.3 PWM1.4 PWM1.5 PWM1.6 PCAP1.0 RD2 TD2 USB_CONNECT EINT 0 10 TXD1 RXD1 CTS1 DCD1 DSR1 DTR1 RI1 RTS1 TXD2 RXD2 NMI 11 保留 保留 保留[1] 保留[1] 保留[1] 保留[1] 保留[1] 保留 ENET_MDC ENET_MDIO 保留 复位值 00 00 00 00 00 00 00 00 00 00 00 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第8章 PINSEL4 23:22 25:24 27:26 31:28 引脚名称 P2.11 P2.12 P2.13 - 00 值的功能 GPIO P2.11 GPIO P2.12 GPIO P2.13 保留 01 值的功能 EINT1 EINT 2 EINT 3 保留 10 值的功能 保留 保留 保留 保留 11 值的功能 I2STX_CLK I2STX_WS I2STX_SDA 保留 续上表 复位值 00 00 00 0 [1] 当通过开发工具或写 PINSEL10 寄存器来选择功能时,这些引脚支持调试跟踪功能。详情请参考“引脚 选择功能寄存器 10(PINSEL10 – 0x4002 C028)” 8.5.6 引脚功能选择寄存器 5(PINSEL5 - 0x4002 C014) PINSEL5 寄存器不用于 LPC1700 系列 ARM Cortex-M3。所有位为保留位。 8.5.7 引脚功能选择寄存器 6(PINSEL6 - 0x4002 C018) PINSEL6 寄存器不用于 LPC1700 系列 ARM Cortex-M3。所有位为保留位。 8.5.8 引脚功能选择寄存器 7(PINSEL7 - 0x4002 C01C) PINSEL7 寄存器控制端口 3 高半部分的位功能。仅当引脚选择使用 GPIO 功能时,FIO3DIR 寄存器中的方向控制位才有效。对于其它功能来说,方向是自动控制的。 对于 100 引脚封装,引脚功能选择寄存器 7 的位功能描述如表 8.11所述。 表 8.11 引脚功能选择寄存器 7 位描述 PINSEL7 17:0 19:18 21:20 31:22 引脚名称 - P3.25 P3.26 - 00 保留 GPIO P3.25 GPIO P3.26 保留 01 保留 保留 STCLK 保留 10 保留 MAT0.0 MAT0.1 保留 11 保留 PWM1.2 PWM1.3 保留 复位值 0 0 0 0 8.5.9 引脚功能选择寄存器 8(PINSEL8 - 0x4002 C020) PINSEL8 寄存器不用于 LPC1700 系列 ARM Cortex-M3。所有位为保留位。 8.5.10 引脚功能选择寄存器 9(PINSEL9 - 0x4002 C024) PINSEL9 寄存器控制端口 4 高半部分的位功能。仅当引脚选择使用 GPIO 功能时,FIO4DIR 寄存器中的方向控制位才有效。对于其它功能来说,方向是自动控制的。 对于 100 引脚封装,引脚功能选择寄存器 9 的位功能描述如表 8.12所述。 表 8.12 引脚功能选择寄存器 9 位描述 PINSEL9 23:0 25:24 27:26 31:28 引脚名称 - P4.28 P4.29 - 00 保留 GPIO P4.28 GPIO P4.29 保留 01 保留 RX_MCLK TX_MCLK 保留 10 保留 MAT2.0 MAT2.1 保留 8.5.11 引脚功能选择寄存器 10(PINSEL10 - 0x4002 C028) 仅使用该寄存器的位 3 来控制 P2.2 至 P2.6 的跟踪功能。 11 保留 TXD3 RXD3 保留 复位值 0 0 0 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第8章 表 8.13 引脚功能选择寄存器 10 位描述 位 符号 2:0 - 3 GPIO/TRACE 31:4 - 值 描述 - 保留。软件不应写 1 到这些位 TPIU 接口引脚控制 0 TPIU 接口被禁能 1 TPIU 接口被使能。TPIU 信号在对它们进行控制的 引脚上可用,不管 PINSEL4 的内容如何 - 保留。软件不应写 1 到这些位 8.5.12 引脚模式选择寄存器 0(PINMODE0 - 0x4002 C040) 该寄存器控制 PORT0 引脚 P0.0 到 P0.15 的上拉/下拉电阻配置。 复位值 NA 0 NA 表 8.14 引脚模式选择寄存器 0 描述 PINMODE0 符号 1:0 P0.00 模式 … 31:30 P0.15 模式 值 描述 PORT0 引脚 0 片内上拉/下拉电阻控制 00 P0.0 引脚使能上拉电阻 01 P0.0 引脚使能中继模式 10 P0.0 引脚既不上拉,也不下拉 11 P0.0 引脚使能下拉电阻 PORT0 引脚 P0.15 片内上拉/下拉电阻控制 复位值 00 00 8.5.13 引脚模式选择寄存器 1(PINMODE1 - 0x4002 C044) 该寄存器控制 PORT0 引脚 P0.16 到 P0.26 的上拉/下拉电阻配置。详细内容请见“引脚模式 选择寄存器值”章节。 表 8.15 引脚模式选择寄存器 1 描述 PINMODE1 1:0 … 21:20 31:21 符号 P0.16 模式 P0.26 模式 - 描述 PORT0 引脚 P0.16 的片内上拉/下拉电阻控制 PORT0 引脚 P0.26 的片内上拉/下拉电阻控制 保留 复位值 00 00 注:引脚选择模式不能用于引脚 P0.27 至 P0.30。引脚 P0.27 和 P0.28 为专用的 I2C 开漏引脚,没有上拉/下 拉。引脚 P0.29、P0.30 为 USB 特定的引脚,不能配置为上拉或下拉电阻控制。引脚 P0.29、P0.30 还必须具有相 同的方向,因为它们作为 USB 功能的单元进行操作,见“GPIO 端口方向寄存器 FIOxDIR(FIO0DIRFIO4DIR – 0x2009 C0000x2009 C080)”章节。 8.5.14 引脚模式选择寄存器 2(PINMODE2 - 0x4002 C048) 该寄存器控制 PORT1 引脚 P1.0 到 P1.15 的上拉/下拉电阻配置。详细内容请见“引脚模式选 择寄存器值”章节。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第8章 表 8.16 引脚模式选择寄存器 2 描述 PINMODE2 1:0 … 31:30 符号 P1.00 模式 描述 PORT1 引脚 P1.0 的片内上拉/下拉电阻控制 P1.15 模式 PORT1 引脚 P1.15 的片内上拉/下拉电阻控制 复位值 00 00 8.5.15 引脚模式选择寄存器 3(PINMODE3 - 0x4002 C04C) 该寄存器控制 PORT1 引脚 P1.16 到 P1.31 的上拉/下拉电阻配置。详细内容请见“引脚模式 选择寄存器值”章节。 表 8.17 引脚模式选择寄存器 3 描述 PINMODE3 1:0 … 31:30 符号 P1.16 模式 描述 PORT1 引脚 P1.16 的片内上拉/下拉电阻控制 P1.31 模式 PORT1 引脚 P1.31 的片内上拉/下拉电阻控制 复位值 00 00 8.5.16 引脚模式选择寄存器 4(PINMODE4 - 0x4002 C050) 该寄存器控制 PORT2 引脚 P2.0 到 P2.15 的上拉/下拉电阻配置。详细内容请见“引脚模式选 择寄存器值”章节。 表 8.18 引脚模式选择寄存器 4 描述 PINMODE4 1:0 … 31:30 符号 P2.00 模式 描述 PORT2 引脚 P2.0 的片内上拉/下拉电阻控制 P2.15 模式 PORT2 引脚 P2.15 的片内上拉/下拉电阻控制 复位值 00 00 8.5.17 引脚模式选择寄存器 5(PINMODE5 - 0x4002 C054) 该寄存器控制 PORT2 引脚 P2.16 到 P2.31 的上拉/下拉电阻配置。详细内容请见“引脚模式 选择寄存器值”章节。 表 8.19 引脚模式选择寄存器 5 描述 PINMODE5 1:0 … 31:30 符号 P2.16 模式 保留 P2.31 模式 保留 描述 复位值 00 00 8.5.18 引脚模式选择寄存器 6(PINMODE6 - 0x4002 C058) 该寄存器控制 PORT3 引脚 P3.0 到 P3.15 的上拉/下拉电阻配置。详细内容请见“引脚模式选 择寄存器值”章节。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第8章 表 8.20 引脚模式选择寄存器 6 位描述 PINMODE6 1:0 … 31:30 符号 P3.00 模式 描述 PORT3 引脚 P3.0 的片内上拉/下拉电阻控制 P3.15 模式 PORT3 引脚 P3.15 的片内上拉/下拉电阻控制 复位值 00 00 8.5.19 引脚模式选择寄存器 7(PINMODE7 - 0x4002 C05C) 该寄存器控制 PORT3 引脚 P3.16 到 P3.31 的上拉/下拉电阻配置。详细内容请见“引脚模式 选择寄存器值”章节。 表 8.21 引脚模式选择寄存器 7 位描述 PINMODE7 1:0 … 31:30 符号 P3.16 模式 描述 PORT3 引脚 P3.16 的片内上拉/下拉电阻控制 P3.31 模式 PORT2 引脚 P3.31 的片内上拉/下拉电阻控制 复位值 00 00 8.5.20 引脚模式选择寄存器 8(PINMODE8 - 0x4002 C060) 该寄存器控制 PORT4 引脚 P4.0 到 P4.15 的上拉/下拉电阻配置。详细内容请见“引脚模式选 择寄存器值”章节。 表 8.22 引脚模式选择寄存器 8 描述 PINMODE8 1:0 … 31:30 符号 P4.00 模式 P4.15 模式 描述 PORT4 引脚 P4.0 的片内上拉/下拉电阻控制 PORT4 引脚 P4.15 的片内上拉/下拉电阻控制 复位值 00 00 8.5.21 引脚模式选择寄存器 9(PINMODE9 - 0x4002 C064) 该寄存器控制 PORT4 引脚 P4.16 到 P4.31 的上拉/下拉电阻配置。详细内容请见“引脚模式 选择寄存器值”章节。 表 8.23 引脚模式选择寄存器 9 描述 PINMODE9 1:0 … 31:30 符号 P4.16 模式 描述 PORT4 引脚 P4.16 的片内上拉/下拉电阻控制 P4.31 模式 PORT4 引脚 P4.31 的片内上拉/下拉电阻控制 复位值 00 00 8.5.22 开漏引脚模式选择寄存器 0(PINMODE_OD0 - 0x4002 C068) 该寄存器控制 PORT0 引脚的开漏模式。详细内容请见“引脚模式选择寄存器值”章节。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第8章 表 8.24 开漏引脚模式选择寄存器 0 描述 PINMODE0 符号 值 描述 复位值 PORT0 引脚 0 开漏模式控制 0 P0.00 开漏模式 0 P0.0 引脚处于正常模式(非开漏模式) 0 1 P0.0 引脚处于开漏模式 … PORT0 引脚 31 开漏模式控制 31 P0.31 开漏模式 0 P0.31 引脚处于正常模式(非开漏模式) 0 1 P0.31 引脚处于开漏模式 如果端口 0 引脚 P0.27 和 P0.28 用于 I2C 总线操作,则应使用 I2C PADCFG 寄存器来对它们 进行设置。PINMODE_OD0 寄存器位 27 和 28 对这些引脚无影响,它们与标准的开漏 I2C 总线 引脚兼容。 另外,端口 0 引脚 P0.0、P0.1、P0.10、P0.11、P0.19、P0.20 可以用于 I2C 总线,使用标准 端口的引脚功能。如果应用了此功能,要使用 PINMODE_OD0 寄存器的相关位将其配置为开漏 模式。 8.5.23 开漏引脚模式选择寄存器 1(PINMODE_OD1 - 0x4002 C06C) 该寄存器控制 PORT1 引脚的开漏模式。详细内容请见“引脚模式选择寄存器值”章节。 表 8.25 开漏引脚模式选择寄存器 1 位描述 PINMODE0 符号 0 P1.00 开漏模式 … 31 P1.31 开漏模式 值 描述 PORT1 引脚 0 开漏模式控制 0 P1.0 引脚处于正常模式(非开漏模式) 1 P1.0 引脚处于开漏模式 PORT1 引脚 31 开漏模式控制 0 P1.31 引脚处于正常模式(非开漏模式) 1 P1.31 引脚处于开漏模式 复位值 0 0 8.5.24 开漏引脚模式选择寄存器 2(PINMODE_OD2 - 0x4002 C070) 该寄存器控制 PORT2 引脚的开漏模式。详细内容请见“引脚模式选择寄存器值”章节。 表 8.26 开漏引脚模式选择寄存器 2 位描述 PINMODE0 符号 0 P2.00 开漏模式 … 31 P2.31 开漏模式 值 描述 PORT2 引脚 0 开漏模式控制 0 P2.0 引脚处于正常模式(非开漏模式) 1 P2.0 引脚处于开漏模式 PORT2 引脚 31 开漏模式控制 0 P2.31 引脚处于正常模式(非开漏模式) 1 P2.31 引脚处于开漏模式 8.5.25 开漏引脚模式选择寄存器 3(PINMODE_OD3 - 0x4002 C074) 复位值 0 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 广州周立功单片机发展有限公司 第8章 该寄存器控制 PORT3 引脚的开漏模式。详细内容请见“引脚模式选择寄存器值”章节。 表 8.27 开漏引脚模式选择寄存器 3 位描述 PINMODE0 符号 0 P3.00 开漏模式 … 31 P3.31 开漏模式 值 描述 PORT3 引脚 0 开漏模式控制 0 P3.0 引脚处于正常模式(非开漏模式) 1 P3.0 引脚处于开漏模式 PORT3 引脚 31 开漏模式控制 0 P3.31 引脚处于正常模式(非开漏模式) 1 P3.31 引脚处于开漏模式 复位值 0 0 8.5.26 开漏引脚模式选择寄存器 4(PINMODE_OD4 - 0x4002 C078) 该寄存器控制 PORT4 引脚的开漏模式。详细内容请见“引脚模式选择寄存器值”章节。 表 8.28 开漏引脚模式选择寄存器 4 位描述 PINMODE0 符号 0 P4.00 开漏模式 … 31 P4.31 开漏模式 值 描述 PORT4 引脚 0 开漏模式控制 0 P4.0 引脚处于正常模式(非开漏模式) 1 P4.0 引脚处于开漏模式 PORT4 引脚 31 开漏模式控制 0 P4.0 引脚处于正常模式(非开漏模式) 1 P4.0 引脚处于开漏模式 复位值 0 0 8.5.27 I2C引脚配置寄存器 4(I2CPADCFG - 0x4002 C07C) 为了支持多种的 I2C 总线操作模式,允许 I2CPADCFG 寄存器将 I2C 引脚配置为只可用于 I2C0 接口。对于标准或高速模式 I2C 使用中,I2CPADCFG 的 4 个位应为 0(该寄存器的默认值)。 对于高速模式 Plus,SDADRV0 和 SCLDRV0 位应为 1。当这些引脚用于非 I2C 总线操作时,可 能会要求将 SDAI2C0 和 SCLI2C0 设置为 1 来关闭 I2C 过滤功能和电压转换速率控制功能。见下 表所示。 表 8.29 I2C 引脚配置寄存器位描述 I2CPADCFG 符号 0 SDADRV0 1 SDAI2C0 2 SCLDRV0 值 描述 复位值 SDA0 引脚 P0.27 的驱动模式控制 0 SDA0 引脚处于标准驱动模式 0 1 SDA0 引脚处于高速模式 Plus 驱动模式 SDA0 引脚 P0.27 的 I2C 模式控制 0 SDA0 引脚使能 I2C 干扰过滤和电压转换速率控制 0 1 SDA0 引脚禁能 I2C 干扰过滤和电压转换速率控制 SCL0 引脚 P0.28 的驱动模式控制 0 SCL0 引脚处于标准驱动模式 0 1 SCL0 引脚处于高速模式 Plus 驱动模式 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第8章 I2CPADCFG 符号 3 SCLI2C0 31:4 - 续上表 值 描述 复位值 SCL0 引脚 P0.28 的 I2C 模式控制 0 SCL0 引脚使能 I2C 干扰过滤和电压转换速率控制 0 1 SCL0 引脚禁能 I2C 干扰过滤和电压转换速率控制 保留。用户软件不应向保留位写入 1。从保留位读 NA 出的值未定义 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 LPC1700 系列微控制器 第第 99 章章 通通用用输输入入输输出出 GGPPIIOO 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 9 章 通用输入/输出(GPIO) ···················································································· 1 9.1 基本配置 ························································································································1 9.2 特性 ································································································································1 9.3 应用 ································································································································1 9.4 引脚描述 ························································································································2 9.5 寄存器描述 ····················································································································2 9.6 GPIO 使用注意事项 ····································································································12 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第9章 第9章 通用输入/输出(GPIO) 9.1 基本配置 GPIO 可通过下列寄存器进行功能配置:  功率:总是使能;  引脚:请参考“引脚功能选择寄存器值”来查看相关的 GPIO 引脚和模式;  唤醒:如有需要,GPIO 端口 0 和端口 2 可用于唤醒操作,见“从低功耗模式唤醒”章 节;  中断:GPIO中断可在IO0/2IntEnR(表 9.15)或IO0/2IntEnF(表 9.16)中使能。使用对 应的中断置位使能寄存器即可在NVIC中使能中断。 9.2 特性 9.2.1 数字I/O端口  加速 GPIO 功能: - GPIO 寄存器被转移到外设 AHB 总线,以实现高速的 I/O 时序; - 屏蔽寄存器允许将某些端口位作为一组进行操作,而其它位不变; - 所有 GPIO 寄存器都可以字节、半字和字寻址; - 整个端口值可用一条指令写入; - GPIO 寄存器可由 GP DMA 进行访问;  位电平置位和清零寄存器允许用一条指令置位清零一个端口的任意位;  所有 GPIO 寄存器支持 Cortex-M3 位带操作;  GPIO 寄存器可由 GPDMA 控制器进行访问,允许对 GPIO 进行 DMA 数据操作,使之 与 DMA 请求同步;  单个端口的方向可控制;  所有 I/O 口在复位后默认为上拉输入。 9.2.2 可产生中断的数字端口  PORT0 和 PORT2 端口的每个引脚都可以提供中断功能;  每个端口上的中断可被编程为上升沿、下降沿或边沿产生中断;  边沿检测是异步的,因此可以在没有时钟的情况下(例如掉电模式)操作。使用这种特 性,就无需电平触发中断;  可掉电唤醒;  寄存器为软件提供挂起的上升沿中断、挂起的下降沿中断和整个挂起的 GPIO 中断;  GPIO0 和 GPIO2 中断与外部中断 3 事件共用相同的 NVIC 通道。 9.3 应用  通用 I/O;  驱动 LED 或其它的指示器;  控制片外器件;  检测数字输入信号及边沿信号;  可掉电唤醒器件。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第9章 9.4 引脚描述 表 9.1 GPIO 引脚描述 引脚名称 P0[30:0][1] P1[31:0][2] P2[13:0] P3[26:25] P4[29:28] 类型 描述 输入/ 输出 通用输入/输出。它们通常与其它外设功能共用,因此,并非全部 GPIO 都可在一 个应用中使用。在一个特定的器件中,封装选项会影响可用的 GPIO 数目。 某些引脚会受到引脚可选功能要求的限制。例如,I2C0 引脚为开漏引脚,用于该 引脚上可选择的任何功能。详细内容请参考“LPC1768 引脚描述” [1] P0[14:12]不可用。 [2] P1[2]、P1[3]、P1[7:5]、P1[13:11]不可用。 9.5 寄存器描述 由于要求与基于 LPC2300 系列 ARM7 产品兼容,LPC1700 系列 Cortex-M3 微控制器使用五 个 32 位通用 I/O 端口的部分功能。有关特定 GPIO 口的详细用法,见“引脚功能选择寄存器值” 章节。 表 9.2中的寄存器反映了所有GPIO口可用的增强型GPIO特性。这些寄存器位于AHB总线上, 以便于进行高速的读写时序。它们也可作为字节、半字和字长的数据进行访问。屏蔽寄存器允许 访问一个GPIO端口的一组位,而不影响其它位。 表 9.2 GPIO 寄存器映射(局部总线可访问寄存器-增强型 GPIO 特性) 通用名称 FIODIR FIOMASK FIOPIN 描述 访问 高速 GPIO 端口方向控制寄存器。该 R/W 寄存器单独控制每个端口引脚的方向 高速端口屏蔽寄存器。写、置位、清 零和读端口(通过写 FIOPIN、FIOSET、 FIOCLR 和读 FIOPIN 来执行)改变或 R/W 返回时,只对该寄存器中为“0”的位 有效 高速端口引脚值寄存器,与 FIOMASK 结合使用。不管引脚方向或可选的功 能选择如何,数字端口引脚的当前状 态可从该寄存器中读出(只要引脚不 配 置 为 ADC 的 输 入 )。 通 过 与 FIOMASK 寄 存 器 进 行 反 向 相 与 R/W (AND)来屏蔽读出某些位。写该寄 存器,向 FIOMASK 中为“0”的位填 入对应的值 注:如果读 FIOPIN 寄存器,那么不管 物理引脚的状态如何,在 FIOMASK 寄存器中被“1”屏蔽的位将始终读出 0 复位值[1] 0x0 0x0 PORTn 寄存器地址和名称 FIO0DIR – 0x2009 C000 FIO1DIR – 0x2009 C020 FIO2DIR – 0x2009 C040 FIO3DIR – 0x2009 C060 FIO4DIR – 0x2009 C080 FIO0MASK - 0x2009 C010 FIO1MASK - 0x2009 C030 FIO2MASK - 0x2009 C050 FIO3MASK - 0x2009 C070 FIO4MASK - 0x2009 C090 FIO0PIN - 0x2009 C014 FIO1PIN - 0x2009 C034 0x0 FIO2PIN - 0x2009 C054 FIO3PIN - 0x2009 C074 FIO4PIN - 0x2009 C094 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第9章 通用名称 FIOSET FIOCLR 描述 高速端口输出置位寄存器,与 FIOMASK 结合使用。该寄存器控制输 出引脚的状态。写 1 使相应的端口引 脚产生高电平。写 0 没有影响。读该 寄存器返回端口输出寄存器的当前内 容。只可以更改 FIOMASK 中为 0 的 位,即非屏蔽位。 高速端口输出清零寄存器,与 FIOMASK 结合使用。该寄存器控制输 出引脚的状态。写 1 使相应的端口引 脚产生低电平。写 0 没有影响。只可 以更改 FIOMASK 中为 0 的位,即非 屏蔽位。 访问 R/W WO 复位值[1] 0x0 0x0 [1] 复位值仅反映已使用位中保存的数据,它不包括保留位的内容。 续上表 PORTn 寄存器地址和名称 FIO0SET - 0x2009 C018 FIO1SET - 0x2009 C038 FIO2SET - 0x2009 C058 FIO3SET - 0x2009 C078 FIO4SET - 0x2009 C098 FIO0CLR - 0x2009 C01C FIO1CLR - 0x2009 C03C FIO2CLR - 0x2009 C05C FIO3CLR - 0x2009 C07C FIO4CLR - 0x2009 C09C 表 9.3 GPIO 中断映射寄存器 通用名称 描述 IntEnR 上升沿的 GPIO 中断使能 IntEnF 下降沿的 GPIO 中断使能 IntStatR 上升沿的 GPIO 中断状态 IntStatF 下降沿的 GPIO 中断状态 IntClr IntStatus GPIO 中断清零 GPIO 整体中断状态 访问 R/W R/W RO RO WO RO 复位值[1] 0x0 0x0 0x0 0x0 0x0 0x00 PORTn 寄存器地址&名称 IO0IntEnR – 0x4002 8090 IO2IntEnR – 0x4002 80B0 IO0IntEnF – 0x4002 8094 IO2IntEnF – 0x4002 80B4 IO0IntStatR - 0x4002 8084 IO2IntStatR - 0x4002 80A4 IO0IntStatF - 0x4002 8088 IO2IntStatF - 0x4002 80A8 IO0IntClr - 0x4002 808C IO2IntClr - 0x4002 80AC IOIntStatus - 0x4002 8080 [1] 复位值仅反映已使用位中保存的数据,它不包括保留位的内容。 9.5.1 GPIO端口方向寄存器FIOxDIR(FIO0DIRFIO4DIR- 0x2009 C0000x2009 C080) 当引脚被配置为 GPIO 功能时,该寄存器可用来控制引脚的方向。勿必根据引脚功能来设置 每个引脚的方向。 注:GPIO 引脚 P0.29 和 P0.30 与 USB D+/-引脚共用,并且具有相同的方向。如果 FP0DIR 位 29 或位 30 在 FIO0DIR 寄存器中被配置为零,则 P0.29 和 P0.30 都为输入。如果 FP0DIR 位 29 和位 30 被配置为 1,则 P0.29 和 P0.30 都为输出。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第9章 表 9.4 高速 GPIO 端口方向寄存器位描述 位 符号 值 描述 复位值 FP0DIR FP1DIR 31:0 FP2DIR FP3DIR FP4DIR 高速 GPIO 方向 PORTx 控制位。FIOxDIR 的位 0 控制引脚 Px.0,FIOxDIR 的位 31 控制引脚 Px.31 0x0 0 控制的引脚为输入引脚 1 控制的引脚为输出引脚 除了 32 位长和仅可以进行字访问的FIODIR寄存器外,每个高速GPIO口也可通过一些字节 和半字访问的寄存器来控制,见表 9.5。这些额外的寄存器除了提供与FIODIR寄存器相同的功能 外,还可以更容易、更高速地访问物理端口引脚。 表 9.5 高速 GPIO 端口方向控制字节和半字访问寄存器描述 通用寄存器 名称 描述 寄存器长度 (位)&访问 FIOxDIR0 高速 GPIO 端口 x 方向控制寄存器 0。FIOxDIR0 寄存器中的位 0 对应 引脚 Px.0…位 7 对应引脚 Px.7 (8 位) R/W FIOxDIR1 高速 GPIO 端口 x 方向控制寄存器 1。FIOxDIR1 寄存器中的位 0 对应 引脚 Px.8…位 7 对应引脚 Px.15 (8 位)R/W FIO0DIR2 高速 GPIO 端口 x 方向控制寄存器 2。FIOxDIR2 寄存器中的位 0 对应 引脚 Px.16…位 7 对应引脚 Px.23 (8 位)R/W FIOxDIR3 高速 GPIO 端口 x 方向控制寄存器 3。FIOxDIR3 寄存器中的位 0 对应 引脚 Px.24…位 7 对应引脚 Px.31 (8 位)R/W FIOxDIRL 高速 GPIO 端口 x 方向控制低半字 寄存器。FIOxDIRL 寄存器中的位 0 对应引脚 Px.0…位 15 对应引脚 Px.15 16(位)R/W FIOxDIRU 高速 GPIO 端口 x 方向控制高半字 寄存器。FIOxDIRU 寄存器中的位 0 对应引脚 Px.16…位 15 对应引脚 Px.31 16(位)R/W 复位值 0x00 0x00 0x00 0x00 0x0000 0x0000 PORTn 寄存器 地址&名称 FIO0DIR0 – 0x2009 C000 FIO1DIR0 – 0x2009 C020 FIO2DIR0 – 0x2009 C040 FIO3DIR0 – 0x2009 C060 FIO4DIR0 – 0x2009 C080 FIO0DIR1 - 0x2009 C001 FIO1DIR1 - 0x2009 C021 FIO2DIR1 - 0x2009 C041 FIO3DIR1 - 0x2009 C061 FIO4DIR1 - 0x2009 C081 FIO0DIR2 - 0x2009 C002 FIO1DIR2 - 0x2009 C022 FIO2DIR2 - 0x2009 C042 FIO3DIR2 - 0x2009 C062 FIO4DIR2 - 0x2009 C082 FIO0DIR3 - 0x2009 C003 FIO1DIR3 - 0x2009 C023 FIO2DIR3 - 0x2009 C043 FIO3DIR3 - 0x2009 C063 FIO4DIR3 - 0x2009 C083 FIO0DIRL - 0x2009 C000 FIO1DIRL - 0x2009 C020 FIO2DIRL - 0x2009 C040 FIO3DIRL - 0x2009 C060 FIO4DIRL - 0x2009 C080 FIO0DIRU - 0x2009 C002 FIO1DIRU - 0x2009 C022 FIO2DIRU - 0x2009 C042 FIO3DIRU - 0x2009 C062 FIO4DIRU - 0x2009 C082 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第9章 9.5.2 GPIO 端 口 输 出 设 置 寄 存 器 FIOxSET ( FIO0SETFIO7SET - 0x2009 C0180x2009 C098) 当引脚在输出模式中被配置为 GPIO 时,该寄存器在端口引脚产生高电平输出。向该寄存器 的某些位写入“1”时,对应的引脚产生高电平。写入“0”无效。如果需要引脚输出低电平或第 二种功能,那么写 1 到 FIOxSET 的相应位无效。 读 FIOxSET 寄存器返回该寄存器的值,该值由前一次对 FIOxSET 和 FIOxCLR(或前面提 到的 FIOxPIN)的写操作确定,它不反映任何外部环境对 I/O 引脚的影响。 通过 FIOxSET 寄存器访问的端口引脚受到 FIOxMASK 寄存器相应位的限制(见“高速 GPIO 端口屏蔽寄存器 FIOxMASK(FIO0MASKFIO7MASK - 0x2009 C0100x2009 C090)。 表 9.6 高速 GPIO 端口输出设置寄存器位描述 位 符号 值 描述 复位值 FP0SET FP1SET 31:0 FP2SET FP3SET FP4SET 高速 GPIO 输出值设置位。FIOxSET 的位 0 控制引脚 Px.0, FIOxSET 的位 31 控制引脚 Px.31 0x0 0 控制的引脚输出不改变 1 控制的引脚输出被设为高电平 除了 32 位长和仅可以进行字访问的FIOxSET寄存器外,每个高速GPIO口也可通过一些字节 和半字访问的寄存器来控制,见表 9.7。这些额外的寄存器除了提供与FIOxSET寄存器相同的功 能外,还可以更容易、更高速地访问物理端口引脚。 表 9.7 高速 GPIO 端口输出设置字节和可半字访问的寄存器描述 通用寄存器 名称 描述 寄存器长度(位)& 访问 FIOxSET0 高速 GPIO 端口 x 输出设置寄存 器 0。FIOxSET0 寄存器中的位 0 对应引脚 Px.0…位 7 对应引脚 Px.7 (8 位)R/W FIOxSET1 高速 GPIO 端口 x 输出设置寄存 器 1。FIOxSET1 寄存器中的位 0 对应引脚 Px.8…位 7 对应引脚 Px.15 (8 位)R/W FIOxSET2 高速 GPIO 端口 x 输出设置寄存 器 2。FIOxSET2 寄存器中的位 0 对应引脚 Px.16…位 7 对应引脚 Px.23 (8 位)R/W FIOxSET3 高速 GPIO 端口 x 输出设置寄存 器 3。FIOxSET3 寄存器中的位 0 对应引脚 Px.24…位 7 对应引脚 Px.31 (8 位)R/W 复位值 0x00 0x00 0x00 0x00 PORTn 寄存器 地址&名称 FIO0SET0 - 0x2009 C018 FIO1SET0 - 0x2009 C038 FIO2SET0 - 0x2009 C058 FIO3SET0 - 0x2009 C078 FIO4SET0 - 0x2009 C098 FIO0SET1 - 0x2009 C019 FIO1SET1 - 0x2009 C039 FIO2SET1 - 0x2009 C059 FIO3SET1 - 0x2009 C079 FIO4SET1 - 0x2009 C099 FIO0SET2 - 0x2009 C01A FIO1SET2 - 0x2009 C03A FIO2SET2 - 0x2009 C05A FIO3SET2 - 0x2009 C07A FIO4SET2 - 0x2009 C09A FIO0SET3 - 0x2009 C01B FIO1SET3 - 0x2009 C03B FIO2SET3 - 0x2009 C05B FIO3SET3 - 0x2009 C07B FIO4SET3 - 0x2009 C09B LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第9章 续上表 通用寄存器 名称 描述 寄存器长度 (位)&访问 FIOxSETL 高速 GPIO 端口 x 输出设置低半字 寄存器。FIOxSETL 寄存器中的位 0 对应引脚 Px.0…位 15 对应引脚 Px.15 16(位)R/W FIOxSETU 高速 GPIO 端口 x 输出设置高半字 寄存器。FIOxSETU 寄存器中的位 0 对应引脚 Px.16…位 15 对应引脚 Px.31 16(位)R/W 复位值 0x0000 0x0000 PORTn 寄存器 地址&名称 FIO0SETL - 0x2009 C018 FIO1SETL - 0x2009 C038 FIO2SETL - 0x2009 C058 FIO3SETL - 0x2009 C078 FIO4SETL - 0x2009 C098 FIO0SETU - 0x2009 C01A FIO1SETU - 0x2009 C03A FIO2SETU - 0x2009 C05A FIO3SETU - 0x2009 C07A FIO4SETU - 0x2009 C09A 9.5.3 GPIO端口输出清零寄存器FIOxCLR(FIO0CLRFIO07CLR - 0x2009 C01C0x2009 C09C) 当引脚在输出模式中被配置为 GPIO 时,该寄存器在端口引脚产生低电平输出。向某些位写 入“1”会使相应的引脚产生低电平,同时清零 FIOxSET 寄存器的相应位。写入“0”无效。如 果引脚被配置为输入或其它功能,那么写 FIOxCLR 对引脚没有影响。 通过 FIOxCLR 寄存器访问的端口引脚受到 FIOxMASK 寄存器相应位的限制(见“高速 GPIO 端口屏蔽寄存器(FIO0MASKFIO7MASK - 0x2009 C0100x2009 C090)。 表 9.8 高速 GPIO 端口输出清零寄存器位描述 位 符号 值 描述 复位值 FP0CLR FP1CLR 31:0 FP2CLR FP3CLR FP4CLR 高速 GPIO 输出值清零位。FIOxCLR 的位 0 控制引脚 Px.0, FIOxCLR 的位 31 控制引脚 Px.31 0x0 0 控制的引脚输出不改变 1 控制的引脚输出设为低电平 除了 32 位长和仅可以进行字访问的FIOxCLR寄存器外,每个高速GPIO口也可通过一些字节 和半字访问的寄存器来控制,见表 9.9。这些额外的寄存器除了提供与FIOxCLR寄存器相同的功 能外,还可以更容易、更高速地访问物理端口引脚。 表 9.9 高速 GPIO 端口输出清零字节和可半字访问的寄存器描述 通用寄存器 名称 描述 寄存器长度 (位)&访问 FIOxCLR0 高速 GPIO 端口 x 输出清零寄存器 0。FIOxCLR0 寄存器中的位 0 对 应引脚 Px.0…位 7 对应引脚 Px.7 (8 位) WO 复位值 0x00 PORTn 寄存器 地址&名称 FIO0CLR0 - 0x2009 C01C FIO1CLR0 - 0x2009 C03C FIO2CLR0 - 0x2009 C05C FIO3CLR0 - 0x2009 C07C FIO4CLR0 - 0x2009 C09C LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第9章 通用寄存器 名称 描述 寄存器长度 (位)&访问 FIOxCLR1 高速 GPIO 端口 x 输出清零寄存器 1。FIOxCLR1 寄存器中的位 0 对 应引脚 Px.8…位 7 对应引脚 Px.15 (8 位) WO FIOxCLR2 高速 GPIO 端口 x 输出清零寄存器 2。FIOxCLR2 寄存器中的位 0 对 应 引 脚 Px.16… 位 7 对 应 引 脚 Px.23 (8 位) WO FIOxCLR3 高速 GPIO 端口 x 输出清零寄存器 3。FIOxCLR3 寄存器中的位 0 对 应 引 脚 Px.24… 位 7 对 应 引 脚 Px.31 (8 位) WO FIOxCLRL 高速 GPIO 端口 x 输出清零低半字 寄存器。FIOxCLRL 寄存器中的 位 0 对应引脚 Px.0…位 15 对应引 脚 Px.15 16(位) WO FIOxCLRU 高速 GPIO 端口 x 输出清零高半字 寄存器。FIOxCLRU 寄存器中的 位 0 对应引脚 Px.16…位 15 对应 引脚 Px.31 16(位) WO 复位值 0x00 0x00 0x00 0x0000 0x0000 续上表 PORTn 寄存器 地址&名称 FIO0CLR1 - 0x2009 C01D FIO1CLR1 - 0x2009 C03D FIO2CLR1 - 0x2009 C05D FIO3CLR1 - 0x2009 C07D FIO4CLR1 - 0x2009 C09D FIO0CLR2 - 0x2009 C01E FIO1CLR2 - 0x2009 C03E FIO2CLR2 - 0x2009 C05E FIO3CLR2 - 0x2009 C07E FIO4CLR2 - 0x2009 C09E FIO0CLR3 – 0x2009 C01F FIO1CLR3 – 0x2009 C03F FIO2CLR3 – 0X2009 C05F FIO3CLR3 – 0x2009 C07F FIO4CLR3 – 0x2009 C09F FIO0CLRL - 0x2009 C01C FIO1CLRL - 0x2009 C03C FIO2CLRL - 0x2009 C05C FIO3CLRL - 0x2009 C07C FIO4CLRL - 0x2009 C09C FIO0CLRU - 0x2009 C01E FIO1CLRU - 0x2009 C03E FIO2CLRU - 0x2009 C05E FIO3CLRU - 0x2009 C07E FIO4CLRU - 0x2009 C09E 9.5.4 GPIO端口引脚值寄存器FIOxPIN(FIO0PINFIO7PIN- 0x2009 C0140x2009 C094) 该寄存器提供了端口引脚的值,可配置这些值来执行仅为数字的功能。该寄存器将给出引脚 的当前逻辑值,而不管引脚是否配置为输入或输出,或作为 GPIO 或作为其它可选的数字功能。 例如,特殊的端口引脚可能具有 GPIO 输入、GPIO 输出、UART 接收和 PWM 输出等可选功能。 无论该引脚配置成何种功能,都可以从相应的 FIOxPIN 寄存器中读出其当前的逻辑状态。 如果引脚配置为模拟功能,当选择了模拟配置时,引脚状态不能被读出。将引脚选择用作 A/D 输入会断开与引脚数字部分的连接。在这种情况下,从 FIOxPIN 寄存器中读出的引脚值无 效。 写 FIOxPIN 寄存器时,FIOxPIN 寄存器的值会保存到端口输出寄存器,而无需使用 FIOxSET 和 FIOxCLR 寄存器来获得整个写入值。由于这种特性影响整个端口,因此在应用中时要小心。 通过 FIOxPIN 寄存器访问的端口引脚受到 FIOxMASK 寄存器相应位的限制(见“高速 GPIO 端口屏蔽寄存器(FIO0MASKFIO7MASK - 0x2009 C0100x2009 C090)。 只有在屏蔽寄存器(见“高速 GPIO 端口屏蔽寄存器(FIO0MASKFIO7MASK - 0x2009 C0100x2009 C090)中用 0 屏蔽的引脚与高速 GPIO 端口引脚值寄存器的当前内容相互关联。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第9章 表 9.10 高速 GPIO 端口引脚值寄存器位描述 位 符号 值 描述 复位值 FP0VAL FP1VAL 31:0 FP2VAL FP3VAL 高速 GPIO 输出值设置位。FIOxCLR 的位 0 对应引脚 Px.0, FIOxCLR 的位 31 对应引脚 Px.31 0 控制的引脚输出设为低电平 0x0 1 控制的引脚输出设为高电平 FP4VAL 除了 32 位长和仅可以进行字访问的FIOxPIN寄存器外,每个高速GPIO口也可通过一些字节 和可半字访问的寄存器来控制,见表 9.11。这些额外的寄存器除了提供与FIOxPIN寄存器相同的 功能外,还可以更容易、更高速地访问物理端口引脚。 表 9.11 高速 GPIO 端口引脚值字节和可半字访问的寄存器描述 通用寄存器 名称 描述 寄存器长度 (位)&访问 FIOxPIN0 高速 GPIO 端口 x 引脚值寄存器 0。FIOxPIN0 寄存器中的位 0 对 应引脚 Px.0…位 7 对应引脚 Px.7 (8 位) R/W FIOxPIN1 高速 GPIO 端口 x 引脚值寄存器 1。FIOxPIN1 寄存器中的位 0 对 应引脚 Px.8…位 7 对应引脚 Px.15 (8 位) R/W FIOxPIN2 高速 GPIO 端口 x 引脚值寄存器 2。FIOxPIN2 寄存器中的位 0 对 应 引 脚 Px.16… 位 7 对 应 引 脚 Px.23 (8 位) R/W FIOxPIN3 高速 GPIO 端口 x 引脚值寄存器 3。FIOxPIN3 寄存器中的位 0 对 应 引 脚 Px.24… 位 7 对 应 引 脚 Px.31 (8 位) R/W FIOxPINL 高速 GPIO 端口 x 引脚值低半字寄 存器。FIOxPINL 寄存器中的位 0 对应引脚 Px.0…位 15 对应引脚 Px.15 16(位) R/W 复位值 0x00 0x00 0x00 0x00 0x0000 PORTn 寄存器 地址&名称 FIO0PIN0 - 0x2009 C014 FIO1PIN0 - 0x2009 C034 FIO2PIN0 - 0x2009 C054 FIO3PIN0 - 0x2009 C074 FIO4PIN0 - 0x2009 C0944 FIO0PIN1 - 0x2009 C015 FIO1PIN1 - 0x2009 C035 FIO2PIN1 - 0x2009 C055 FIO3PIN1 - 0x2009 C075 FIO4PIN1 - 0x2009 C095 FIO0PIN2 - 0x2009 C016 FIO1PIN2 - 0x2009 C036 FIO2PIN2 - 0x2009 C056 FIO3PIN2 - 0x2009 C076 FIO4PIN2 - 0x2009 C096 FIO0PIN3 - 0x2009 C017 FIO1PIN3 - 0x2009 C037 FIO2PIN3 - 0x2009 C057 FIO3PIN3 - 0x2009 C077 FIO4PIN3 - 0x2009 C097 FIO0PINL - 0x2009 C014 FIO1PINL - 0x2009 C034 FIO2PINL - 0x2009 C054 FIO3PINL - 0x2009 C074 FIO4PINL - 0x2009 C094 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第9章 续上表 通用寄存器 名称 描述 FIOxPINU 高速 GPIO 端口 x 引脚值高半字寄 存器。FIOxPINU 寄存器中的位 0 对应引脚 Px.16…位 15 对应引脚 Px.31 寄存器长度 (位)&访问 16(位) R/W 复位值 0x0000 PORTn 寄存器 地址&名称 FIO0PINU - 0x2009 C016 FIO1PINU - 0x2009 C036 FIO2PINU - 0x2009 C056 FIO3PINU - 0x2009 C076 FIO4PINU - 0x2009 C096 9.5.5 高速GPIO端口屏蔽寄存器FIOxMASK(FIO0MASKFIO7MASK - 0x2009 C0100x2009 C090) 该寄存器用来屏蔽某些端口引脚,被屏蔽的引脚将无法通过 FIOxPIN、FIOxSET 或 FIOxCLR 寄存器写访问。当读 FIOxPIN 寄存器时,屏蔽寄存器还将过滤相应端口的内容。 通过读或写访问,该寄存器中为“0”的位使能相应物理引脚的访问。如果该寄存器中的位 为“1”,则相应位将不会通过写访问改变,并且读操作时将不会在更新的 FIOxPIN 寄存器中反 映出来。有关软件的例子,请见“GPIO 使用注意事项”章节。 表 9.12 高速 GPIO 端口屏蔽寄存器位描述 位 符号 值 描述 复位值 FP0MASK FP1MASK FP2MASK 31:0 FP3MASK FP4MASK 高速 GPIO 物理引脚访问控制 0 控制的引脚受到 FIOxSET、FIOxCLR 和 FIOxPIN 寄存器的写操 作影响。引脚的当前状态可从 FIOxPIN 寄存器中读出。 0x0 1 控制的引脚不受 FIOxSET、FIOxCLR 和 FIOxPIN 寄存器的写操 作影响。读取 FIOxPIN 寄存器时,该位将不会通过物理引脚的状 态更新 除了 32 位长和仅可以进行字访问的FIOxMASK寄存器以外,每个高速GPIO口也可通过一些 字节和可半字访问的寄存器来控制,见表 9.13。这些额外的寄存器除了提供与FIOxMASK寄存器 相同的功能外,还可以更容易、更高速地访问物理端口引脚。 表 9.13 高速 GPIO 端口屏蔽字节和可半字访问的寄存器描述 通用寄存 器名称 描述 寄存器长度 (位)&访问 FIOxMASK0 高速 GPIO 端口 x 屏蔽寄存 器 0。FIOxMASK0 寄存器中 的位 0 对应引脚 Px.0…位 7 对应引脚 Px.7 (8 位) R/W FIOxMASK1 高速 GPIO 端口 x 屏蔽寄存 器 1。FIOxMASK1 寄存器中 的位 0 对应引脚 Px.8…位 7 对应引脚 Px.15 (8 位) R/W 复位值 0x0 0x0 PORTn 寄存器 地址&名称 FIO0MASK0 - 0x2009 C010 FIO1MASK0 - 0x2009 C030 FIO2MASK0 - 0x2009 C050 FIO3MASK0 - 0x2009 C070 FIO4MASK0 - 0x2009 C090 FIO0MASK1 - 0x2009 C011 FIO1MASK1 - 0x2009 C031 FIO2MASK1 - 0x2009 C051 FIO3MASK1 - 0x2009 C071 FIO4MASK1 - 0x2009 C091 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第9章 通用寄存 器名称 FIOxMASK2 描述 高速 GPIO 端口 x 屏蔽寄存 器 2。FIOxMASK2 寄存器中 的位 0 对应引脚 Px.16…位 7 对应引脚 Px.23 寄存器长度 (位)&访问 (8 位) R/W FIOxMASK3 高速 GPIO 端口 x 屏蔽寄存 器 3。FIOxMASK3 寄存器中 的位 0 对应引脚 Px.24…位 7 对应引脚 Px.31 (8 位) R/W FIOxMASKL 高速 GPIO 端口 x 屏蔽低半 字寄存器。FIOxMASKL 寄 存器中的位 0 对应引脚 Px.0…位 15 对应引脚 Px.15 16(位) R/W FIOxMASKU 高速 GPIO 端口 x 屏蔽高半 字寄存器。FIOxMASKU 寄 存器中的位 0 对应引脚 Px.16…位 15 对应引脚 Px.31 16(位) R/W 复位值 0x0 0x0 0x0 0x0 续上表 PORTn 寄存器 地址&名称 FIO0MASK2 - 0x2009 C012 FIO1MASK2 - 0x2009 C032 FIO2MASK2 - 0x2009 C052 FIO3MASK2 - 0x2009 C072 FIO4MASK2 - 0x2009 C092 FIO0MASK3 - 0x2009 C013 FIO1MASK3 - 0x2009 C033 FIO2MASK3 - 0x2009 C053 FIO3MASK3 - 0x2009 C073 FIO4MASK3 - 0x2009 C093 FIO0MASKL - 0x2009 C010 FIO1MASKL - 0x2009 C030 FIO2MASKL - 0x2009 C050 FIO3MASKL - 0x2009 C070 FIO4MASKL - 0x2009 C090 FIO0MASKU - 0x2009 C012 FIO1MASKU - 0x2009 C032 FIO2MASKU - 0x2009 C052 FIO3MASKU - 0x2009 C072 FIO4MASKU - 0x2009 C092 9.5.6 GPIO中断寄存器 下列寄存器对端口 0 和端口中 2 的引脚功能进行配置,以产生中断。 1. GPIO整体中断状态寄存器(IOIntStatus – 0x4002 8080) 该寄存器为只读寄存器,它反映了所有支持 GPIO 中断的 GPIO 端口上挂起的中断状态。每 个端口只使用一个状态位。 表 9.14 GPIO 整体中断状态寄存器位描述 位 符号 值 描述 复位值 PORT0 GPIO 中断挂起状态 0 P0Int 0 在 PORT0 上没有挂起的中断 0 1 在 PORT0 上至少有一个挂起的中断 1 - - 保留,从保留位读出的值未定义 NA PORT2 GPIO 中断挂起状态 2 P2Int 0 在 PORT2 上没有挂起的中断 0 1 在 PORT2 上至少有一个挂起的中断 31:2 - - 保留。从保留位读出的值未定义 NA 2. 上升沿寄存器的GPIO中断使能(IO0IntEnR - 0x4002 8090 和IO2IntEnR - 0x4002 80B0) 这些读写寄存器的每个位使能相应 GPIO 端口引脚的上升沿中断。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 广州周立功单片机发展有限公司 第9章 表 9.15 上升沿寄存器的 GPIO 中断使能位描述 位 符号 值 描述 复位值 上升沿中断触发使能位。IOxIntEnR 的位 0 对应引脚 Px.0, P0xER IOxIntEnR 的位 31 对应引脚 Px.31 31:0 0 P2xER 0 上升沿中断在控制的引脚上禁能 1 上升沿中断在控制的引脚上使能 3. 下降沿寄存器的GPIO中断使能(IO0IntEnF - 0x4002 8094 和IO2IntEnF - 0x4002 80B4) 这些读写寄存器的每个位使能相应 GPIO 端口引脚的下降沿中断。 表 9.16 下降沿寄存器的 GPIO 中断使能位描述 位 符号 值 描述 复位值 下降沿中断触发使能位。IOxIntEnF 的位 0 对应引脚 Px.0, P0xEF IOxIntEnF 的位 31 对应引脚 Px.31 31:0 0 P2xEF 0 下降沿中断在控制的引脚上禁能 1 下降沿中断在控制的引脚上使能 4. 上升沿寄存器的GPIO中断状态((IO0IntStatR – 0x4002 8084 和IO2IntStatR - 0x4002 80A4) 这些只读寄存器的每个位表示相应端口的上升沿中断状态。 表 9.17 上升沿寄存器的 GPIO 状态位描述 位 符号 值 描述 复位值 上升沿中断状态。IOxIntStatR 的位 0 对应引脚 Px.0, P0xREI IOxIntStatR 的位 31 对应引脚 Px.31 31:0 0 P2xREI 0 对应引脚上没有上升沿中断 1 对应引脚上出现上升沿中断 5. 下降沿寄存器的GPIO中断状态((IO0IntStatF - 0x4002 8088 和IO2IntStatF - 0x4002 80A8) 这些只读寄存器的每个位表示相应端口的下降沿中断状态。 表 9.18 下降沿寄存器的 GPIO 状态位描述 位 符号 值 描述 复位值 下降沿中断状态。IOxIntStatF 的位 0 对应引脚 Px.0, P0xFEI IOxIntStatF 的位 31 对应引脚 Px.31 31:0 0 P2xFEI 0 对应引脚上没有下降沿中断 1 对应引脚上出现下降沿中断 6. GPIO中断清零寄存器((IO0IntClr - 0x4002 808C和IO2IntClr - 0x4002 80AC) 向这些只写寄存器的位写入“1”,将清零相应 GPIO 端口引脚的中断。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第9章 表 9.19 下降沿寄存器的 GPIO 状态位描述 位 符号 值 描述 清零 GPIO 端口中断。IOxIntClr 的位 0 对应引脚 Px.0, P0xCI IOxIntClr 的位 31 对应引脚 Px.31 31:0 P2xCI 0 在 IOxIntStatR 和/或 IOxIntStatF 中的相应位不改变 1 在 IOxIntStatR 和/或 IOxIntStatF 中的相应位清零 9.6 GPIO使用注意事项 实例:GPIO 端口上 0s 和 1s 的瞬时输出 方法 1:使用 32 位(字)可访问的高速 GPIO 寄存器 FIO0MASK = 0xFFFF00FF ; FIO0PIN = 0x0000A500; 方法 2:使用 16 位(半字)可访问的高速 GPIO 寄存器 FIO0MASKL = 0x00FF; FIO0PINL = 0xA500; 方法 3:使用 8 位(字节)可访问的高速 GPIO 寄存器 FIO0PIN1 = 0xA5; 复位值 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 LPC1700 系列微控制器 第第 1100 章章 以以太太网网 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 10 章 以太网················································································································ 1 10.1 基本配置 ························································································································1 10.2 简介 ································································································································1 10.3 特性 ································································································································2 10.4 结构与操作 ····················································································································2 10.5 DMA 引擎功能 ··············································································································3 10.6 DMA 操作概述 ··············································································································4 10.7 以太网包 ························································································································4 10.8 综述 ································································································································5 10.9 引脚描述 ························································································································6 10.10 寄存器和软件接口·········································································································6 10.11 以太网 MAC 寄存器定义······························································································8 10.12 控制寄存器定义···········································································································16 10.13 接收过滤寄存器定义···································································································23 10.14 模块控制寄存器的定义 ·······························································································25 10.15 描述符和状态格式·······································································································27 10.16 以太网模块功能描述···································································································33 10.17 中断 ······························································································································33 10.18 AHB 带宽·····················································································································55 10.19 CRC 计算 ·····················································································································57 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第 10 章 第10章 以太网 10.1 基本配置 使用以下寄存器来对以太网控制器进行配置:  功率:在 PCONP 寄存器中置位 PCENET;  时钟;  引脚:以太网引脚通过 PINSEL 寄存器使能,通过 PINMODE 寄存器选择它们的模式, 见“引脚连接模块”章节的“寄存器描述”小节;  唤醒:以太网端口上的活动可将微控制器从掉电模式中唤醒,见“从低功耗模式唤醒” 小节;  中断:使用相关的中断置位使能寄存器在 NVIC 中使能中断;  初始化:见本章的“初始化”描述。 注:复位时,以太网模块被禁止(PCENET=0)。 10.2 简介 以太网模块包含一个功能齐全的 10Mbps 或 100Mbps 以太网 MAC(媒体访问控制器),以 太网 MAC 通过使用 DMA 硬件加速功能来优化其性能。以太网模块具有大量的控制寄存器组, 可以提供:半双工/全双工操作、流控制、控制帧、重发硬件加速、接收包过滤以及 LAN 上的唤 醒等。利用分散-集中式(Scatter-Gather)DMA 进行自动的帧发送和接收操作,减轻了 CPU 的工作 量。 以太网模块是一个 AHB 主机,驱动 AHB 总线矩阵。通过矩阵,它可以访问片上所有的 RAM 存储器。建议以太网使用 RAM 的方法是专门使用其中一个 RAM 模块来处理以太网通信。那么 该模块只能由以太网和 CPU,或许 GPDMA 进行访问,从而获取以太网功能的最大带宽。 以太网模块使用 RMII(简化的媒体独立接口)协议和片上 MIIM(媒体独立接口管理)串 行总线、还有 MDIO(管理数据输入/输出)来实现与片外以太网 PHY 之间的连接。 表 10.1 以太网的缩写词与定义 缩写词 AHB CRC DMA Double-word FCS Fragment Frame Half-word LAN MAC MII MIIM 定义 先进的高性能总线 循环冗余校验 直接存储器访问 64 位实体 帧校验序列(CRC) 一个以太网帧或其中的一部分;一个以太网帧可以是一个或多个片段(fragment) 一个以太网帧由目标地址、源地址、长度/类型区、有效载荷以及帧校验序列组成 16 位实体 局域网 媒体访问控制器 媒体独立接口 MII 管理 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第 10 章 缩写词 Octet Packet PHY RMII Rx TCP/IP Tx VLAN WoL Word 定义 8 位数据实体,在 IEEE 802.3 中用作“字节” 通过以太网传输的帧;一个包由导言、起始帧定界符和以太网帧组成 以太网物理层 简化的 MII 接收 传输控制协议/网际协议。以太网使用的最常规的高级协议。 发送 虚拟局域网 LAN 上唤醒 32 位实体 续上表 10.3 特性  以太网标准支持: - 10M 或 100Mbps PHY 器件,包括 10 Base-T、100 Base-TX、100 Base-FX 和 100 Base-T4; - 与 IEEE 标准 802.3 完全兼容; - 与 802.3x 全双工流控和半双工背压流控完全兼容; - 灵活的发送帧和接收帧选项; - 支持 VLAN 帧。  存储器管理: - 独立的发送和接收缓冲区存储器,映射为共享的 SRAM; - 带有分散/集中式 DMA 的 DMA 管理器以及帧描述符数组; - 通过缓冲和预取来实现存储器通信的优化。  以太网增强的功能: - 接收进行过滤; - 发送和接收均支持多播帧和广播帧; - 发送操作可选择自动插入 FCS(CRC); - 可选择在发送操作时自动进行帧填充; - 发送和接收均支持超长帧传输,允许帧长度为任意值; - 多种接收模式; - 出现冲突时自动后退并重新传送帧信息; - 通过时钟切换实现功率管理; - 支持“LAN 上唤醒”的功率管理功能,以便将系统唤醒,该功能可使用接收过滤 器或魔法帧检测过滤器来实现。  物理接口: - 通过标准的简化 MII(RMII)接口来连接外部 PHY 芯片; - 通过媒体独立接口管理(MIIM)接口可对 PHY 寄存器进行访问。 10.4 结构与操作 图 10.1显示了以太网模块的内部结构。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 10 章 图 10.1 以太网方框图 以太网模块的框图由下列各项组成:  主机寄存器模块,包括软件上使用的寄存器以及处理以太网模块的 AHB 访问的寄存器。 主机寄存器与发送通道、接收通道以及 MAC 相连;  到 AHB 的 DMA 接口。该接口用于连接 AHB 主机,使得以太网模块能够访问以太网 SRAM,从而实现描述符的读操作、状态的写操作以及数据缓冲区的读/写操作;  以太网 MAC,通过 RMII 接口与片外 PHY 相连;  发送数据通道,包括: - 发送 DMA 管理器,用于从存储器中读取描述符和数据并将状态写入存储器; - 发送重试模块,对以太网的重试和中止情况进行处理; - 发送流量控制模块,能够插入以太网暂停帧。  接收数据通道,包括: - 接收 DMA 管理器,用于从存储器中读取描述符并将数据和状态写入存储器; - 以太网 MAC,通过分析帧头中的部分信息来检测帧类型; - 接收过滤器,通过使用不同的过滤机制来滤除特定的以太网帧; - 接收缓冲区,实现了对接收帧的延迟,以便将接收帧中的特定帧滤除后再将接收帧 保存到存储器中。 10.5 DMA引擎功能 以太网模块通过加速的 DMA 硬件来优化性能。位于 AHB 总线上的独立的分散/集中式 DAM 引擎可大大减轻 ARM7 CPU 的数据传输负担。 存放在存储器中的描述符包括以太网帧片段的相关信息。一个片段可以是一个完整的帧或一 个极小的数据量。每个描述符都含有一个指针,指向相关的数据存储器缓冲区,描述符还含有片 段缓冲区的大小以及如何发送或接收片段的详情。 描述符存放在由以太网模块中的指针寄存器设定的存储器数组中。其它寄存器确定数组的大 小,并指向将被 DMA 引擎使用的每个数组中的下一个描述符以及将被以太网设备驱动器使用的 每个数组中的下一个描述符。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 10 章 10.6 DMA操作概述 DMA 引擎利用存储器中的“接收描述符数组”和“发送描述符数组”来管理收发数据,与 描述符对应的存储器缓冲区可以保存一个完整的以太网帧或其中的一部分。在发送以太网帧时, 发送 DMA 引擎会利用“发送描述符”(一个或多个)将多个存储器片段中的数据“集中”起来, 并按顺序发送出去。在接收以太网帧时,接收 DMA 引擎也根据所需要使用的“接收描述符”(一 个或多个),将接收到的数据“分散”保存到多个存储器片段中。 描述符数组的基址寄存器,表示描述符数组入口数目的寄存器以及描述符数组输入/输出指 针都包含在以太网模块中。描述符入口以及所有的发送包和接收包数据都存放在存储器中,它不 是以太网模块的一部分。描述符入口告知相关的帧数据存放在存储器中的位置、数据如何处理, 以及每个以太网处理结果的状态。 DMA 引擎中的硬件控制了如何将以太网 MAC 的输入数据保存到存储器中,从而把与状态 相关的片段保存起来,并针对输入的数据让硬件接收指针向前移动。驱动软件必须对接收到的数 据的位置、描述符数据地址的更改进行处理(以避免不必要的数据移动),并让软件接收指针向 前移动。这两个指针在描述符数组中创建了一个环形队列,它们允许 DMA 硬件和驱动软件知道 在使用时哪个描述符(若有的话)是可用的,以及该描述符数组是为空还是为满。 同样,驱动软件必须建立指向将被以太网 MAC 发送出去的数据的指针,给出每个数据片段 的指令,并针对流出的数据让软件发送指针向前移动。DMA 引擎中的硬件读取该信息并在可能 的情况下将数据发送到以太网 MAC 接口,从而对状态进行更新并让硬件发送指针向前移动。 10.7 以太网包 图 10.2描述了以太网包中的不同区域。 图 10.2 以太网包的组成 一个以太网包由一个导言、一个起始帧定界符和一个以太网帧组成。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 10 章 以太网帧由目标地址、源地址、一个可选的 VLAN 区、长度/类型区、有效载荷以及帧校验 序列组成。 每个地址包含 6 个字节,每个字节包含 8 个位。传输操作从最低有效位开始。 10.8 综述 10.8.1 分区 以太网模块和相关的设备驱动软件提供了位于 OSI 参考模型(见 IEEE 标准 802.3)中数据 链路层的媒体访问控制(MAC)子层的功能。MAC 子层向下一个更高的协议级,即 MAC 客户 层,通常是逻辑链路控制子层提供发送和接收信息帧的服务。设备驱动软件实现了与 MAC 客户 层的接口。它在以太网模块内建立寄存器,保持指向存储器中的帧的描述符数组并通过中断接收 从以太网模块中返回的结果。在发送帧时,软件通过提供指向目标地址区域、源地址区域、长度 /类型区域、MAC 客户数据区域的指针,以及帧检验序列区域中的 CRC(可选),来建立以太网 帧中的一部分信息。最好能使用以太网内核的分散/集中功能将帧区域串联起来,以避免不必要 的数据复制。在发送信息包时,硬件增加了“导言”和“起始帧定界符”,并可选择自动增加 CRC(如果软件有此要求)。在接收信息包时,硬件将清除“导言”和“起始帧定界符”,并将 信息包的剩余部分(即包括目标地址、源地址、长度/类型区域、MAC 客户数据和帧校验序列(FCS) 在内的以太网帧)传递给设备驱动软件。 以太网模块除了含有 MAC 以外,还含有接收和发送 DMA 管理器,用于控制 MAC 和 AHB 接口之间的接收和发送数据流。帧信息通过主机存储器中的描述符数组进行传递,这样硬件才能 在没有软件/CPU 支持的情况下处理多个帧。帧可以由多个片段组成,利用分散/集中式 DMA 可 以访问这些片段。DMA 管理器使用预取指和缓冲处理来优化存储器的带宽。 接收过滤器模块用于对接收到的帧进行过滤,看是否被寻址到这个以太网站,然后丢弃不符 合要求的数据帧。接收过滤器含有一个完全地址过滤器和一个 Hash 过滤器。 以太网模块支持“LAN 上唤醒”的功率管理功能,因此,当在 LAN 上接收到“唤醒帧”时, 可将系统从掉电模式中唤醒。在掉电模式下,有一部分时钟是关闭的。“唤醒帧”是通过“接收 过滤器模块”或通过“魔法帧检测技术”来识别的。触发一次中断即可将系统唤醒。 “中断逻辑模块”能够用来发出中断、将中断屏蔽以及查询中断。中断模块向主机系统发送 中断请求信号,中断可通过软件来使能、清除和设置。 以太网的流量控制模块实现了 IEEE 802.3/条款 31 的流量控制功能。接收流的控制帧由 MAC 自动处理。发送流的控制帧由软件启动。在半双工模式中,流量控制模块通过只发送连续的“导 言”来产生“背压”,在发送操作时,流量控制由暂停中断实现,以避免 jabber 超出限制。 以太网模块具有标准的简化的媒体独立接口(RMII),可以通过它来与外部以太网 PHY 芯 片相连。PHY 芯片内的寄存器通过 MIIM 总线的串行管理连接(MIIM),由 AHB 接口进行访 问(操作频率通常是 2.5MHz)。 10.8.2 PHY器件实例 兼容的PHY器件实例如表 10.2所示。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 10 章 表 10.2 PHY 器件实例 制造商 器件型号 Broadcom ICS Intel LSI Logic Micrel National SMSC BCM5221 ICS1893 LXT971A L80223、L80225、L80227 KS8721 DP83847、DP83846、DP83843 LAN83C185 10.9 引脚描述 表 10.3所示为简化的媒体独立接口(RMII)与外部PHY连接所使用的信号。 表 10.3 以太网 RMII 的引脚描述 管脚名 类型 管脚描述 ENET_TX_EN ENET_TXD[1:0] ENET_RXD[1:0] ENET_RX_ER ENET_CRS 输出 输出 输入 输入 输入 发送数据使能 发送数据,2 位 接收数据,2 位 接收错误 载波侦听/数据有效 ENET_REF_CLK/ ENET_RX_CLK 输入 参考时钟 表 10.4所示为用于外部PHY的媒体独立接口管理(MIIM)的信号。 表 10.4 以太网 MIIM 管脚描述 管脚名 ENET_MDC ENET_MDIO 类型 输出 输入/输出 MIIM 时钟 MI 数据输入和输出 管脚描述 10.10 寄存器和软件接口 以太网模块的软件接口由寄存器以及发送与接收描述符的格式定义组成。这两方面的内容将 在下面的两个小节中描述。 10.10.1 寄存器映射 表 10.5列出了寄存器、寄存器地址和其它基本信息。寄存器所需的全部AHB地址空间为 4KB。 在一次硬件复位或由命令寄存器中的 RegReset 位进行软件复位之后,所有寄存器中的全部 位都被复位为“0”,有特殊说明的除外。 有些寄存器中含有未使用的位,在通过 AHB 接口对这些位执行读操作时将返回“0”。对 未使用的位执行写操作时,不会产生任何影响。 寄存器映射包括在以太网 MAC 中的寄存器和内核周围的寄存器,内核周围的寄存器用于控 制 DMA 传输、流控制和过滤。 对保留地址或保留位执行读操作时,所得的数据是不可预知的。而对保留地址和保留位执行 写操作将没有影响。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 10 章 对只写寄存器执行读操作将在 AHB 接口上返回读操作错误。对只读寄存器执行写操作将在 AHB 接口上返回写操作错误。 表 10.5 寄存器定义 符号 MAC 寄存器 MAC1 MAC2 IPGT IPGR CLRT MAXF SUPP TEST MCFG MCMD MADR MWTD MRDD MIND - SA0 SA1 SA2 - 控制寄存器 Command Status RxDescriptor RxStatus RxDescriptorNumber RxProduceIndex RxConsumeIndex TxDescriptor TxStatus TxDescriptorNumber TxProduceIndex TxConsumeIndex 地址 0x5000 0000 0x5000 0004 0x5000 0008 0x5000 000C 0x5000 0010 0x5000 0014 0x5000 0018 0x5000 001C 0x5000 0020 0x5000 0024 0x5000 0028 0x5000 002C 0x5000 0030 0x5000 0034 0x5000 00380x5000 00FC 0x5000 0040 0x5000 0044 0x5000 0048 0x5000 004C0x5000 00FC 0x5000 0100 0x5000 0104 0x5000 0108 0x5000 010C 0x5000 0110 0x5000 0114 0x5000 0118 0x5000 011C 0x5000 0120 0x5000 0124 0x5000 0128 0x5000 012C R/W 描述 R/W MAC 配置寄存器 1 R/W MAC 配置寄存器 2 R/W 连续两包的内部包间隙寄存器 R/W 非连续两包的内部包间隙寄存器 R/W 冲突窗口/重试寄存器 R/W 最大帧寄存器 R/W PHY 支持寄存器 R/W 测试寄存器 R/W MII Mgmt 配置寄存器 R/W MII Mgmt 命令寄存器 R/W MII Mgmt 地址寄存器 WO MII Mgmt 写数据寄存器 RO MII Mgmt 读数据寄存器 RO MII Mgmt 指示寄存器 保留,用户软件不应该向保留位写入 1。从保留 - 位读出的值是未定义的 R/W 站地址 0 寄存器 R/W 站地址 1 寄存器 R/W 站地址 2 寄存器 保留,用户软件不应该向保留位写入 1。从保留 - 位读出的值是未定义的 R/W 命令寄存器 RO 状态寄存器 R/W 接收描述符基址寄存器 R/W 接收状态基址寄存器 R/W 接收描述符数目寄存器 RO 接收产生索引寄存器 R/W 接收消耗索引寄存器 R/W 发送描述符基址寄存器 R/W 发送状态基址寄存器 R/W 发送描述符数目寄存器 R/W 发送产生索引寄存器 RO 发送消耗索引寄存器 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 10 章 续上表 符号 - TSV0 TSV1 RSV - FlowControlCounter FlowControlStatus 接收过滤寄存器 RxFilterCtrl RxFilterWoLStatus RxFilterWoLClear 地址 0x5000 01300x5000 0154 0x5000 0158 0x5000 015C 0x5000 0160 0x5000 01640x5000 016C 0x5000 0170 0x5000 0174 0x5000 01780x5000 01FC 0x5000 0200 0x5000 0204 0x5000 0208 - 0x5000 020C HashFilterL HashFilterH - 模块控制寄存器 IntStatus IntEnable IntClear IntSet 0x5000 0210 0x5000 0214 0x5000 02180x5000 0FDC 0x5000 0FE0 0x5000 0FE4 0x5000 0FE8 0x5000 0FEC - 0x5000 0FF0 PowerDown 0x5000 0FF4 - 0x5000 0FF8 R/W 描述 保留,用户软件不应该向保留位写入 1。从保留 - 位读出的值是未定义的 RO 发送状态向量 0 寄存器 RO 发送状态向量 1 寄存器 RO 接收状态向量寄存器 保留,用户软件不应该向保留位写入 1。从保留 - 位读出的值是未定义的 R/W 流控制计数器寄存器 RO 流控制状态寄存器 保留,用户软件不应该向保留位写入 1。从保留 - 位读出的值是未定义的 接收过滤器控制寄存器 接收过滤器 WoL 状态寄存器 接收过滤器 WoL 清零寄存器 保留,用户软件不应该向保留位写入 1。从保留 位读出的值是未定义的 Hash 过滤器表 LSBs 寄存器 Hash 过滤器表 MSBs 寄存器 保留,用户软件不应该向保留位写入 1。从保留 位读出的值是未定义的 RO 中断状态寄存器 R/W 中断使能寄存器 WO 中断清零寄存器 WO 中断置位寄存器 保留,用户软件不应该向保留位写入 1。从保留 - 位读出的值是未定义的 R/W 掉电寄存器 保留,用户软件不应该向保留位写入 1。从保留 - 位读出的值是未定义的 表中的第 3 列是寄存器的访问属性:只读、只写、读/写。 所有 AHB 寄存器的写操作(除访问中断寄存器外)都被记录(post),即 AHB 操作将在写 数据真正提交给寄存器之前完成。而对中断寄存器的访问只能在将数据提交给寄存器之后通过接 受写入的数据来完成。 10.11 以太网MAC寄存器定义 本小节将对以太网模块寄存器映射中的各个寄存器的位进行定义。 10.11.1 MAC配置寄存器 1(MAC1 - 0x5000 0000) LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 10 章 MAC配置寄存器 1(MAC1)的地址为 0x5000 0000。其位定义如表 10.6所示。 表 10.6 MAC 配置寄存器 1 的位描述 位 0 1 2 3 4 7:5 8 9 10 11 13:12 14 15 31:16 符号 RECEIVE ENABLE PASS ALL RECEIVE FRAMES RX FLOW CONTROL TX FLOW CONTROL LOOPBACK RESET TX RESET MCS/TX RESET RX RESET MCS/RX SIMULATION RESET SOFT RESET - 功能 复位值 将该位置位可允许对接收帧进行接收。MAC 在内部将该 0 控制位与输入的接收信息流同步 当该位使能(置位)时,MAC 将传递所有的帧信息,而 不考虑类型(常规帧与控制帧)。当该位禁能时,MAC 0 不传递有效的控制帧 当该位使能(置位)时,MAC 遵照接收到的 PAUSE 流控 制帧采取动作。当该位禁能时,忽略接收到的 PAUSE 流 0 控制帧 当该位使能(置位)时,允许发送 PAUSE 流控制帧。当 0 该位禁能时,阻止流控制帧 该位置位将导致 MAC 发送接口被回送到 MAC 接收接口。 0 该位清零将执行正常操作 未使用 0x0 该位置位将使发送功能逻辑进入复位状态 0 该位置位将使 MAC 控制子层/发送逻辑复位。MCS 逻辑执 0 行流控制 该位置位将使以太网接收逻辑进入复位状态 0 该位置位将使 MAC 控制子层/接收逻辑复位。MCS 逻辑执 0x0 行流控制 保留,用户软件不应该向保留位写入 1。从保留位读出的 0x0 值是未定义的 该位置位将使发送功能中的随机数发生器复位 0 该位置位将使 MAC 内除主机接口以外的所有模块进入复 1 位状态 保留,用户软件不应该向保留位写入 1。从保留位读出的 0x0 值是未定义的 10.11.2 MAC配置寄存器 2(MAC2 - 0x5000 0004) MAC配置寄存器 2(MAC2)的地址为 0x5000 0004,其位定义如表 10.7所示。 表 10.7 MAC 配置寄存器 2 的位描述 位 符号 0 FULL-DUPLEX FRAME LENGTH 1 CHECKING HUGE FRAME 2 ENABLE 功能 当该位使能(置位)时,MAC 工作在全双工模式下。当 该位禁能时,MAC 工作在半双工模式下 当该位使能(置位)时,将发送帧和接收帧的长度与长度 /类型区域进行比较。如果长度/类型区域表示的是长度, 则执行检验操作。对于每一个接收到的帧,不匹配的状态 将在 StatusInfo 字中报告 复位值 0 0 当该位使能(置位)时,可发送和接收任意长度的帧 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 10 章 位 符号 3 DELAYED CRC 4 CRC ENABLE 5 PAD/CRC ENABLE 6 VLAN PAD ENABLE AUTO DETECT PAD 7 ENABLE PURE PREAMBLE 8 ENFORCEMENT LONG PREAMBLE 9 ENFORCEMENT 11:10 12 NO BACKOFF BACK PRESSURE/ 13 NO BACKOFF 14 EXCESS DEFER 31:15 - 续上表 功能 如果 IEEE 802.3 帧的起始处包含专有的头信息,则该位可 确定该信息的字节数。当该位为 1 时,添加 4 个字节的头 信息(CRC 功能会忽略这几个字节);为 0 时,没有头信 息 该位置位时将在每帧上添加 CRC,而不管是否需要。如果 PAD/CRC ENABLE 置位,则该位必须置位,如果提交给 MAC 的帧包含 CRC,则将该位清零 该位置位使得MAC填充(pad)所有的短帧。如果提交给 MAC的帧含有有效的长度,则将该位清零。该位与AUTO PAD ENABLE和VLAN PAD ENABLE一起使用。填充功能 的详细信息请见表 10.8 该位置位可使MAC将所有的短帧填充到 64 字节并添加一 个有效的CRC。各种填充特性的详细信息请见表 10.8 注:如果 PAD/CRC ENABLE 位被清零,则忽略该位 该位置位可使MAC自动检测帧类型。通过将源地址之后的 两个字节与 0x8100(VLAN协议ID)进行比较,可以将帧 类型确定为被标记还是没有被标记,然后再进行填充。表 10.8根据该寄存器的配置,提供了有关填充功能的描述 注:如果 PAD/CRC ENABLE 位被清零,则忽略该位 当该位使能(置位)时,MAC 将验证导言的内容,以确 保包含 0x55 并且无误。导言有误的包会被丢弃。当该位 禁能时,不对导言进行检验 当该位使能(置位)时,MAC 只允许接收含有的导言字 节小于 12 的包;当该位禁能时,MAC 按照标准,允许导 言为任意长度 保留。用户不应该向保留位写入 1。从保留位读取的值是 未定义的 当该位使能(置位)时,MAC 将在冲突之后立即重发, 而 不 是 使 用 标 准 中 指 定 的 二 进 制 指 数 后 退 ( Binary Exponential Backoff)算法 当该位使能(置位)时,MAC 在背压过程中偶然导致了 一次冲突之后将立即重发,无需后退,从而减少进一步冲 突的机会,确保发送包能够发送出去 当该位使能(置位)时,MAC 将按照标准,服从载波侦 听的结果。当该位禁能时,MAC 将在延迟超出限制时中 止 保留。用户不应该向保留位写入 1。从保留位读取的值是 未定义的 复位值 0 0 0 0 0 0 0 0x0 0 0 0 0x0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 广州周立功单片机发展有限公司 第 10 章 表 10.8 填充操作 类型 任意 任意 任意 任意 自动检测填充使能 MAC2[7] x 0 x 1 VLAN 填充使能 MAC2[6] x 0 1 0 填充/CRC 使能 MAC2[5] 0 1 1 1 动作 不填充或不添加 CRC 校验 填充到 60 字节,添加 CRC 填充到 64 字节,添加 CRC 如果没有被标记,则填充到 60 字 节 并 添 加 CRC ; 如 果 被 标 记 VLAN,则填充到 64 字节并添加 CRC 10.11.3 连续两包的内部包间隔寄存器(IPGT-0x5000 0008) 连续两包的内部包间隔寄存器(IPGT)的地址为 0x5000 0008。其位定义如表 10.9所示。 表 10.9 连续两包的内部包间隔寄存器的位描述 位 符号 功能 复位值 这是一个可编程的字段,表示在任何已发送的包的结尾与 下一个包的开始之间的最小可能的时间间隔(该时间间隔 用半字节时间偏差的个数来表示)。在全双工模式中,该 寄存器的值应该是所需的时间间隔(半字节时间偏差数) 减去 3。在半双工模式中,该寄存器的值应该是所需的时 BACK-TO-BACK 6:0 间间隔(半字节时间偏差数)减去 6。在全双工模式中, 0x0 INTER-PACKET-GAP 建议的设置为 0x15(21d),它表示最小的 IPG 为 960ns (在 100Mbps 模式下)或 9.6µs(在 10Mbps 模式下)。 在半双工模式中,建议的设置为 0x12(18d),它也表示 最小的 IPG 为 960ns(在 100Mbps 模式下)或 9.6µs(在 10Mbps 模式下) 31:7 - 保留。用户不应该向保留位写入 1。从保留位读取的值是 0x0 未定义的 10.11.4 非连续的两包的内部包间隔寄存器((IPGR - 0x5000 000C) 非连续两包的内部包间隔寄存器(IPGR)的地址为 0x5000 000C。其位定义如表 10.10所示。 表 10.10 非连续两包的内部包间隔寄存器的位描述 位 符号 功能 复位值 这是一个可编程的字段,表示非连续两包的内部包 NON-BACK-TO-BACK 间隔。建议的值为 0x12(18d),它表示最小的 IPG 6:0 0x0 INTER-PACKET-GAP PART2 为 960ns(在 100Mbps 模式下)或 9.6µs(在 10Mbps 模式下) 7- 保留。用户不应该向保留位写入 1。从保留位读取 0x0 的值是未定义的 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第 10 章 位 符号 NON-BACK-TO-BACK 14:8 INTER-PACKET-GAP PART1 31:15 - 续上表 功能 这是一个可编程的字段,表示在 IEEE802.3/4.2.3.2.1 “服从载波(Carrier Deference)”中涉及到的可选 的 CarrierSense 窗口。如果在 IPGR1 时间段内检测 到载波,则 MAC 认为载波存在。但如果载波是在 IPGR1 之后变为有效,则 MAC 继续计时 IPGR2 并 发送,这样必然引起一次冲突,确保对媒体的访问 失败。该字段的范围为 0x0~IPGR2。建议的值为 0xC(12d) 保留。用户不应该向保留位写入 1。从保留位读取 的值是未定义的 复位值 0x0 0x0 10.11.5 冲突窗口/重试寄存器(CLRT - 0x5000 0010) 冲突窗口/重试寄存器(CLRT)的地址为 0x5000 0010,其位定义如表 10.11所示: 表 10.11 冲突窗口/重试寄存器位描述 位 符号 RETRANSMISSION 3:0 MAXIMUM 7:4 - COLLISION 13:8 WINDOW 31:14 - 功能 这是一个可编程的字段,表示在由于冲突过多而中止发送 包之前,一次冲突之后尝试重新发送的次数。标准规定尝 试的次数为 0xF(15d),见 IEEE 802.3/4.2.3.2.5 保留。用户不应该向保留位写入 1。从保留位读取的值是 未定义的 这是一个可编程的字段,表示在适当配置网络中发生冲突 的时间槽(slot time)或冲突窗口。该字段的默认值为 0x37 (55d),表示在导言和 SFD 之后有 56 个字节窗口 保留。用户不应该向保留位写入 1。从保留位读取的值是 未定义的 复位值 0xF 0x0 0x37 NA 10.11.6 最大帧寄存器(MAXF - 0x5000 0014) 最大帧寄存器(MAXF)的地址为 0x5000 0014,其位定义如表 10.12所示。 表 10.12 最大帧寄存器位描述 位 15:0 31:16 符号 MAXIMUM FRAME LENGTH - 功能 该字段的复位值为 0x0600,它表示最大的接收帧为 1536 个 字节。没有被标记的最大以太网帧为 1518 个字节。被标记 的帧会加上 4 个字节,总共 1522 个字节。如果所需的最大 长度限制比复位值小,则可对该 16 位字段进行编程 未使用 复位值 0x0600 0x0 10.11.7 PHY支持寄存器(SUPP - 0x5000 0018) PHY支持寄存器(SUPP)的地址为 0x5000 0018。SUPP寄存器用于对RMII接口进行附加控 制。其位定义如表 10.13所示。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 广州周立功单片机发展有限公司 第 10 章 表 10.13 PHY 支持寄存器位描述 位 符号 7:0 - 8 SPEED 31:9 - 功能 未使用 该位配置简化的 MII 逻辑以用于当前的操作速率。当该位置位时,选 择 100Mbps 模式;当该位清零时,选择 10Mbps 模式 未使用 复位值 0x0 0 0x0 在 PHY 支持寄存器中未使用的位应保留为 0。 10.11.8 测试寄存器(TEST - 0x5000 001C) 测试寄存器(TEST)的地址为 0x5000 001C。其位定义如表 10.14所示。这些位只供测试使 用。 表 10.14 测试寄存器位描述 位 符号 功能 复位值 SHORTCUT PAUSE 0 该位将有效的 PAUSE 量子从 64 字节时间减少到 1 字节时间 0 QUANTA 1 TEST PAUSE 该位使 MAC 控制子层禁止传输,就好像接收到了暂停时间 0 参数为非零的 PAUSE 接收控制帧 TEST 2 BACKPRESSURE 该位置位将使 MAC 在链路上产生背压。背压时将发送导言, 0 唤起载波侦听。来自系统的发送包将在背压过程中发送出去 31:3 - 未使用 0x0 10.11.9 MII Mgmt配置寄存器(MCFG - 0x5000 0020) MII Mgmt配置寄存器(MCFG)的地址为 0x5000 0020,其位定义如表 10.15所示。 表 10.15 MII Mgmt 配置寄存器位描述 位 符号 0 SCAN INCREMENT SUPPRESS 1 PREAMBLE 5:2 CLOCK SELECT 14:6 15 RESET MII MGMT 31:16 - 功能 复位值 该位置位使得 MII 管理硬件越过 PHY 来执行读周期。当该位 置位时,MII 管理硬件通过 PHY ADDRESS[4:0]中设置的值从 0 地址 1 执行读周期。该位清零可允许连续地读取相同的 PHY 该位置位使得 MII 管理硬件执行不带有 32 位导言的读/写周 期。该位清零使周期可正常执行。有一部分 PHY 是禁止导言 0 的 该字段由时钟分频逻辑在创建MII管理时钟(MDC)时使用。 IEEE 802.3u规定该时钟不能超过 2.5MHz。但是,有部分PHY 0 支持高达 12.5MHz的时钟速率。AHB总线时钟(HCLK)被特 定的数值分频。该字段的值的定义参考下表 10.16 未使用 0x0 该位将 MII 管理硬件复位 0 未使用 0x0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 13 13 广州周立功单片机发展有限公司 第 10 章 表 10.16 时钟选择的编码 时钟选择 位5 位4 位3 主机时钟 4 分频 0 0 0 主机时钟 6 分频 0 0 1 主机时钟 8 分频 0 0 1 主机时钟 10 分频 0 1 0 主机时钟 14 分频 0 1 0 主机时钟 20 分频 0 1 1 主机时钟 28 分频 0 1 1 主机时钟 36 分频 1 0 0 主机时钟 40 分频 1 0 0 主机时钟 44 分频 1 0 1 主机时钟 48 分频 1 0 1 主机时钟 52 分频 1 1 0 主机时钟 56 分频 1 1 0 主机时钟 60 分频 1 1 1 主机时钟 64 分频 1 1 1 位2 最大 AHB 时钟 x 10 0 15 1 20 0 25 1 35 0 50 1 70 0 80 1 90 0 100 1 120 0 130 1 140 0 150 1 160 10.11.10 MII Mgmt命令寄存器(MCMD - 0x5000 0024) MII Mgmt命令寄存器(MCMD)的地址为 0x5000 0024,其位定义如表 10.17所示。 表 10.17 MII Mgmt 命令寄存器位描述 位 符号 0 READ 1 SCAN 31:2 - 功能 该位促使 MII 管理硬件执行一次读周期。读取的数据在寄存器 MRDD (MII Mgmt 读数据)中返回 该位促使 MII 管理硬件连续地执行读周期。该特性是非常有用的,例如 可用于监控链接的失败 未使用 复位值 0 0 0x0 10.11.11 MII Mgmt地址寄存器(MADR - 0x5000 0028) MII Mgmt地址寄存器(MADR)的地址为 0x5000 0028,其位定义如表 10.18所示。 表 10.18 MII Mgmt 地址寄存器位描述 位 4:0 7:5 12:8 31:13 符号 REGISTER ADDRESS - PHY ADDRESS - 功能 该字段表示 Mgmt 周期的 5 位寄存器地址,因此,最多可访问 32 个寄存器 未使用 该字段表示 Mgmt 周期的 5 位 PHY 地址,因此,最多可寻址 31 个 PHY(0 被保留) 未使用 复位值 0x0 0x0 0x0 0x0 10.11.12 MII Mgmt写数据寄存器(MWTD - 0x5000 002C) LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 14 14 广州周立功单片机发展有限公司 第 10 章 MII Mgmt写数据寄存器(MWTD)为只写寄存器,其地址为 0x5000 002C。该寄存器的位 定义如表 10.19所示。 表 10.19 MII Mgmt 写数据寄存器位描述 位 15:0 31:16 符号 WRITE DATA - 功能 当对该字段执行写操作时,MII Mgmt 使用这 16 位数据以及在 MII Mgmt 地址寄存器(MADR)中预先配置的 PHY 和寄存器地址来执行写周期 未使用 复位值 0x0 0x0 10.11.13 MII Mgmt读数据寄存器(MRDD - 0x5000 0030) MII Mgmt读数据寄存器(MRDD)为只读寄存器,其地址为 0x5000 0030.。该寄存器的位定 义如表 10.20所示。 表 10.20 MII Mgmt 读数据寄存器位描述 位 15:0 31:16 符号 READ DATA - 功能 在 MII Mgmt 的一个读周期之后,能从这个字段中读取 16 位数据 未使用 复位值 0x0 0x0 10.11.14 MII Mgmt指示寄存器(MIND - 0x5000 0034) MII Mgmt指示寄存器(MIND)为只读寄存器,其地址为 0x5000 0034。该寄存器的位定义 如表 10.21所示。 表 10.21 MII Mgmt 指示寄存器位描述 位 符号 功能 复位值 0 BUSY 当该位返回 1 时,表示 MII Mgmt 当前正在执行 MII Mgmt 读或写周期 0 1 SCANNING 当该位返回 1 时,表示扫描操作(连续的 MII Mgmt 读周期)正在进行 0 2 NOT VALID 当该位返回 1 时,表示 MII Mgmt 读周期还没有完成,读数据也是无效的 0 3 MII Link Fail 当该位返回 1 时,表示出现 MII Mgmt 链接失败 0 31:4 - 未使用 0x0 这里有两个通过 MII 管理控制器访问 PHY 的实例。 在没有使用扫描的情况下执行 PHY 写操作时,步骤如下: a)向 MCMD 写入 0; b)将 PHY 地址和寄存器地址写入 MADR; c)将数据写入 MWTD; d)等待 MIND 中的“busy”位清零。 在没有使用扫描的情况下执行 PHY 读操作时,步骤如下: a)向 MCMD 写入 1; b)将 PHY 地址和寄存器地址写入 MADR; c)等待 MIND 中的“busy”位清零; d)向 MCMD 写入 0; e)从 MRDD 中读取数据。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 15 15 广州周立功单片机发展有限公司 第 10 章 10.11.15 站地址 0 寄存器(SA0 - 0x5000 0040) 站地址 0 寄存器(SA0)的地址为 0x5000 0040,其位定义如表 10.22所示。 表 10.22 站地址 0 寄存器位描述 位 符号 功能 7:0 15:8 31:16 STATION ADDRESS,第 2 个字节 STATION ADDRESS,第 1 个字节 - 该字段包含站地址的第 2 个字节 该字段包含站地址的第 1 个字节 未使用 站地址用于完全地址过滤和发送暂停控制帧。包中的字节顺序请参考图 10.2。 复位值 0x0 0x0 0x0 10.11.16 站地址 1 寄存器(SA1 - 0x5000 0044) 站地址 1 寄存器(SA1)的地址为 0x5000 0044,其位定义如表 10.23所示。 表 10.23 站地址 1 寄存器位描述 位 符号 功能 7:0 15:8 31:16 STATION ADDRESS,第 4 个字节 STATION ADDRESS,第 3 个字节 - 该字段包含站地址的第 4 个字节 该字段包含站地址的第 3 个字节 未使用 站地址用于完全地址过滤和发送暂停控制帧。包中的字节顺序请参考图 10.2。 复位值 0x0 0x0 0x0 10.11.17 站地址 2 寄存器(SA2 - 0x5000 0048) 站地址 2 寄存器(SA2)的地址为 0x5000 0048。其位定义如表 10.24所示。 表 10.24 站地址 2 寄存器位描述 位 7:0 15:8 31:16 符号 STATION ADDRESS,第 6 个字节 STATION ADDRESS,第 5 个字节 - 功能 该字段包含站地址的第 6 个字节 该字段包含站地址的第 5 个字节 未使用 复位值 0x0 0x0 0x0 站地址用于完全地址过滤和发送暂停控制帧。包中的字节顺序请参考图 10.2。 10.12 控制寄存器定义 10.12.1 命令寄存器(Command - 0x5000 0100) 命令寄存器(Command)的地址为 0x5000 0100,其位定义如表 10.25所示。 表 10.25 命令寄存器位描述 位 符号 0 RxEnable 1 TxEnable 2- 3 RegReset 4 TxReset 5 RxReset 功能 接收使能 发送使能 未使用 向该位写入“1”时,所有的通道和主机寄存器均复位。MAC 需要 单独进行复位 向该位写入“1”时,发送通道复位 向该位写入“1”时,接收通道复位 复位值 0 0 0x0 0 0 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 16 16 广州周立功单片机发展有限公司 第 10 章 续上表 位 符号 功能 复位值 该位被设为“1”时,将小于 64 字节的短帧传递到存储器中,除非 6 PassRuntFrame 0 该短帧的 CRC 有误。如果该位被设为“0”,则将短帧滤除 该位被设为“1”时,禁止对接收过滤,即把所有接收到的帧都写 7 PassRxFilter 0 入存储器中 使能 IEEE 802.3/条款 31 的流控,即在全双工下发送暂停控制帧, 8 TxFlowControl 0 在半双工下发送连续的导言 9 RMII 10 FullDuplex 31:11 - 该位被设为“1”时,选择 RMII 模式;该位在以太网初始化期间 0 必须被置为“1”。见“初始化”章节 该位被设为“1”表示在全双工模式下操作 0 未使用 0x0 所有的位都可以执行读和写操作。Tx/RxReset 位为只写位,这二位的读操作将返回 0。 10.12.2 状态寄存器(Status - 0x5000 0104) 状态寄存器(Status)为只读寄存器,其地址为 0x5000 0104。其位定义如表 10.26所示。 表 10.26 状态寄存器位描述 位 符号 功能 复位值 0 RxStatus 如果该位为 1,接收通道处于活动状态;如果为 0,接收通道不工作 0 1 TxStatus 如果该位为 1,发送通道处于活动状态;如果为 0,发送通道不工作 0 31:2 - 未使用 0x0 该寄存器的值表示了两个通道的状态。当状态为“1”时,通道处于活动状态,表明:  在发送或接收帧信息的同时,通道使能,且命令寄存器中的 Rx/TxEnable 位置位,否则 通道是禁止的;  对于发送通道,发送队列不为空,即 ProduceIndex!=ConsumeIndex;  对于接收通道,接收队列未满,即 ProduceIndex!=ConsumeIndex-1。 如果通道被命令寄存器中的 Rx/TxEnable 位的软件复位禁止,并且通道已将当前帧的状态和 数据提交给了存储器,则该通道的状态由活动变为静止。如果“发送队列”为空,或者“接收队 列”为满,并且状态和数据都已提交给了存储器,则通道状态变为静止。 10.12.3 接收描述符基址寄存器(RxDescriptor - 0x5000 0108) 接收描述符基址寄存器(RxDescriptor)的地址为 0x5000 0108,其位定义如表 10.27所示。 表 10.27 接收描述符基址寄存器位描述 位 符号 功能 复位值 1:0 - 固定为“00” - 31:2 RxDescriptor 接收描述符基址的 MSB 0x0 接收描述符的基址是一个字边界对齐的字节地址,即 LSB1:0 固定为“00”。该寄存器含有 描述符数组的最低地址。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 17 17 广州周立功单片机发展有限公司 第 10 章 10.12.4 接收状态基址寄存器(RxStatus - 0x5000 010C) 接收状态基址寄存器(RxStatus)的地址为 0x5000 010C,其位定义如表 10.28所示。该寄存器 含有描述符数组的最低地址。 表 10.28 接收状态基址寄存器位描述 位 符号 功能 2:0 - 固定为“000” 31:3 RxStatus 接收状态基址的 MSB 接收状态的基址是一个双字对齐的字节地址,即 LSB2:0 固定为“000”。 复位值 0x0 10.12.5 接收描述符数目寄存器(RxDescriptor - 0x5000 0110) 接收描述符数目寄存器(RxDescriptorNumber)的地址为 0x5000 0110,其位定义如表 10.29 所示。 表 10.29 接收描述符数目寄存器位描述 位 符号 功能 复位值 在以 RxDescriptor 为基址的描述符数组中的描述符数目。 15:0 RxDescriptorNumber 0x0 描述符的数目为减 1 编码(minus one encoded) 31:16 - 未使用 0x0 接收描述符数目寄存器定义了以 RxDescriptor 为基址的描述符数组中的描述符数目。描述符 的数目应该与状态数目相等。寄存器使用减 1 编码,即,如果数组有 8 个元素,则该寄存器的值 应为 7。 10.12.6 接收产生索引寄存器(RxProduceIndex - 0x5000 0114) 接收产生索引寄存器(RxProduceIndex)为只读寄存器,它的地址是 0x5000 0114。其位定 义如表 10.30所示。 表 10.30 接收产生索引寄存器位描述 位 符号 功能 复位值 15:0 RxProduceIndex 下一次将被接收通道填充的描述符的索引 0x0 31:16 - 未使用 0x0 接收产生索引寄存器定义了下一次将被硬件接收处理填充的描述符。在接收到一帧信息之 后,硬件将索引加 1。一旦它与 RxDescriptorNumber 的值相等,该寄存器的值回到 0。如果 RxProduceIndex 的值等于 RxConsumIndex-1,则描述符数组已满,此时,接收任何帧都将引起缓 冲区溢出错误。 10.12.7 接收消耗索引寄存器(RxConsumeIndex - 0x5000 0118) 接收消耗索引寄存器(RxConsumeIndex)的地址为 0x5000 0118,其位定义如表 10.31所示。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 18 18 广州周立功单片机发展有限公司 第 10 章 表 10.31 接收消耗索引寄存器位描述 位 符号 功能 复位值 15:0 RxConsumeIndex 下一次将被接收处理的描述符的索引 31:16 - 未使用 0x0 接收消耗索引寄存器定义了下一次将被软件接收驱动程序处理的描述符。当 RxProduceIndex 等于 RxConsumIndex 时,接收数组为空。一旦数组不为空,软件就可处理由 RxConsumIndex 指 向的帧。在处理完一帧信息之后,软件应让 RxConsumIndex 加 1。如果它与 RxDescriptorNumber 的值相等,则该寄存器的值回到 0。如果 RxProduceIndex 等于 RxConsumIndex-1,则数组已满, 此时,接收任何帧都将引起缓冲溢出错误。 10.12.8 发送描述基址寄存器(TxDescriptor - 0x5000 011C) 发送描述符基址寄存器(TxDescriptor)的地址为 0x5000 011C,其位定义如表 10.32所示。 表 10.32 发送描述符基址寄存器位描述 位 符号 功能 复位值 1:0 - 固定为“00” - 31:2 TxDescriptor 发送描述符基址的 MSB 0x0 发送描述符的基址是一个字对齐的字节地址,即 LSB1:0 固定为“00”。该寄存器含有描述 符数组的最低地址。 10.12.9 发送状态基址寄存器(TxStatus- 0x5000 0120) 发送状态基址寄存器(TxStatus)的地址为 0x5000 0120,其位定义如表 10.33所示。 表 10.33 发送状态基址寄存器位描述 位 符号 功能 复位值 1:0 - 固定为“00” - 31:2 TxStatus 发送状态基址的 MSB 0x0 发送状态的基址是一个字对齐的字节地址,即 LSB1:0 固定为“00”。该寄存器含有状态数 组的最低地址。 10.12.10 发送描述符数目寄存器(TxDescriptorNumber - 0x5000 0124) 发送描述符数目寄存器(TxDescriptorNumber)的地址为x5000 0124,其位定义如表 10.34所 示。 表 10.34 发送描述符数目寄存器位描述 位 符号 功能 复位值 在以 TxDescriptor 为基址的描述符数组中的描述符数目。 15:0 TxDescriptorNumber 该寄存器采用减 1 编码(minus one encoded) 31:16 - 未使用 0x0 发送描述符数目寄存器定义了以 TxDescriptor 为基址的描述符数组中的描述符数目。描述符 的数目应该与状态数目相等。寄存器使用减 1 编码,即,如果数组有 8 个元素,则该寄存器的值 应为 7。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 19 19 广州周立功单片机发展有限公司 第 10 章 10.12.11 发送产生索引寄存器(TxProduceIndex- 0x5000 0128) 发送产生索引寄存器(TxProduceIndex)的地址为 0x5000 0128,其位定义如表 10.35所示。 表 10.35 发送产生索引寄存器位描述 位 符号 功能 复位值 15:0 TxProduceIndex 下一次将被发送软件驱动程序填充的描述符的索引 0x0 31:16 - 未使用 0x0 发送产生索引寄存器定义了下一次将被软件发送驱动程序填充的描述符。如果 TxProduceIndex 的值等于 TxConsumeIndex,则描述符数组为空。如果发送硬件使能,则只要描 述符数组不为空它就可以启动帧发送操作。软件处理完一帧之后会将 TxProduceIndex 加 1。一旦 它与 TxDescriptorNumber 相等,该值必须回到 0。如果 TxProduceIndex 等于 TxConsumeIndex-1, 则描述符数组为满,软件应停止产生新的描述符,直到硬件已发送一部分帧并更新 TxConsumeIndex。 10.12.12 发送消耗索引寄存器(TxConsumeIndex – 0x50000 012C) 发送消耗索引寄存器(TxConsumeIndex)为只读寄存器,其地址为 0x5000 012C,其位定义 如表 10.36所示。 表 10.36 发送消耗索引寄存器位描述 位 符号 功能 复位值 15:0 TxConsumIndex 下一次将被发送通道发送的描述符的索引 0x0 31:16 - 未使用 0x0 发送消耗索引寄存器定义了下一次将被硬件发送处理发送描述符。当发送完一帧之后,硬件 将 TxConsumIndex 加 1。如果它与 TxDescriptorNumber 的值相等,则该寄存器的值回到 0。如果 TxConsumIndex 等于 TxProduceIndex,则描述符数组为空,发送通道将停止发送,直到软件产生 新的描述符。 10.12.13 发送状态向量 0 寄存器(TSV0 - 0x5000 0158) 发送状态向量 0 寄存器(TSV0)为只读寄存器,其地址为 0x5000 0158。发送状态向量寄存 器存放的是由MAC返回的最新发送状态。由于状态向量超过 4 个字节,因此,状态分布在两个 寄存器TSV0 和TSV1 中。这两个寄存器是供调试使用的,因为驱动软件和以太网模块之间的通 信主要通过帧描述符来实现。只要MAC的内部状态有效,状态寄存器的内容就是有效的,并且 仅当发送和接收处理都停止时才执行读操作。表 10.37列出了TSV0 寄存器的定义。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 20 20 广州周立功单片机发展有限公司 第 10 章 表 10.37 发送状态向量 0 寄存器位描述 位 0 1 2 3 4 5 6 7 8 9 10 11 27:12 28 29 30 31 符号 CRC error Length check error Length out of range[1] Done Multicast Broadcast Packet Defer Excessive Defer Excessive Collision Late Collision Giant Underrun Total bytes Control frame Pause Backpressure VLAN 功能 包中附带的 CRC 与内部产生的 CRC 不相等 表示帧长度区域的值与实际的数据个数不相等,并且此时的 帧长度/类型区域不表示类型 表示帧类型/长度区域的值大于 1500 个字节 包发送完成 包的目标地址为多播地址(multicast address) 包的目标地址为广播地址 包至少被延迟了一次尝试,但还没有达到延迟期限 包在 100Mbps 下的延迟时间超出了 6071 个半字节时间,在 10Mbps 下的延迟时间超出了 24287 个位时间 包由于超过最大允许的冲突次数而被中止 产生的冲突超出了冲突窗口,即超出了 512 个位时间 帧中的字节数大于 TSV1 的发送字节计数字段中能够表示的 字节数 主机方引起的缓冲区下溢 包括冲突尝试在内的传输字节总数 该帧是一个控制帧 该帧是一个带有有效 PAUSE 操作码的控制帧 前面应用了载波侦听方式的背压 帧长度/类型区域含有 0x8100,它是 VLAN 的协议标识符 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0x0 0 0 0 0 [1] EMAC 不区分帧类型和帧长度。例如,当接收到 IP(0x8000)或 ARP(0x0806)包时,EMAC 将帧类 型与最大长度进行比较并给出“长度超出范围”错误。事实上,该位不是一个错误指示,而只仅仅是由芯片产生 的、关于接收帧状态的一个说明。 10.12.14 发送状态向量 1 寄存器(TSV1- 0x5000 015C) 发送状态向量 1 寄存器(TSV1)为只读寄存器,其地址为 0x5000 015C。发送状态向量寄存 器存放的是由MAC返回的最新发送状态。状态向量超过 4 个字节,因此状态分布在两个寄存器 TSV0 和TSV1 中。这两个寄存器是供调试使用的,因为驱动软件和以太网模块之间的通信主要 通过帧描述符来实现。只要MAC的内部状态有效,状态寄存器的内容就是有效的,并且仅当发 送和接收处理都停止时才执行读操作。表 10.38列出了TSV1 寄存器的位定义。 表 10.38 发送状态向量 1 寄存器位描述 位 符号 15:0 Transmit byte count 19:16 Transmit collision count 31:20 - 功能 发送帧中的字节总数,不包括冲突的字节数 当前帧在发送过程中遇到的冲突次数,该值不能达到冲突的最 大次数(16) 未使用 复位值 0x0 0x0 0x0 10.12.15 接收状态向量寄存器(RSV - 0x5000 0160) 接收状态向量寄存器(RSV)为只读寄存器,其地址为 0x5000 0160。接收状态向量寄存器 存放的是由MAC返回的最新接收状态。该寄存器是供调试使用的,因为驱动软件和以太网模块 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 21 21 广州周立功单片机发展有限公司 第 10 章 之间的通信主要通过帧描述符来实现。只要MAC的内部状态有效,状态寄存器的内容就是有效 的,并且仅当发送和接收处理都停止时才执行读操作。表 10.39列出了RSV寄存器的位定义。 表 10.39 接收状态向量寄存器位描述 位 符号 15:0 Received byte count 16 Packet previously ignored 17 RXDV event previously seen 18 Carrier event previously seen 19 Receive code violation 20 CRC error 21 Length check error 22 Length out of range[1] 23 Receive OK 24 Multicast 25 Broadcast 26 Dribble Nibble 27 Control frame 28 PAUSE 29 Unsupported Opcode 30 VLAN 31 - 功能 表示接收到的帧信息的长度 表示漏掉(drop)了一个包 表示上一次发现的接收事件其长度不够,不能成为一个 有效的包 表示上一次接收统计之后的某个时候,检测到载波事件 表示接收到的 PHY 数据不代表一个有效的接收代码 包中附带的 CRC 与内部产生的 CRC 不相等 表示帧长度区域与实际的数据个数不相等,且此时的帧 长度区域不表示类型 表示帧类型/长度区域的值大于 1518 个字节 表示接收包含有效的 CRC 并且没有符号错误 包的目标地址为多播地址(multicast address) 包的目标地址为广播地址 表示接收到包之后又接收到另一个 1~7 位的数据。此 时形成了一个 nibble,称作 dribble nibble,但没有发送 出去 该帧是一个控制帧 该帧是一个带有有效 PAUSE 操作码的控制帧 当前帧是控制帧,但含有未知的操作码 帧长度/类型区域含有 0x8100,它是 VLAN 的协议标识 符 未使用 复位值 0x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x0 [1] EMAC 不区分帧类型和帧长度。例如,当接收到 IP(0x8000)或 ARP(0x0806)包时,EMAC 将帧类 型与最大长度进行比较并给出“长度超出范围”错误。事实上,该位不是一个错误指示,而只仅仅是由芯片产生 的、关于接收帧状态的一个说明。 10.12.16 流控制计数器寄存器(FlowControlCounter- 0x5000 0170) 流控制计数器寄存器(FlowControlCounter)的地址为 0x5000 0170。表 10.40列出了该寄存 器的位定义。 表 10.40 流控制计数器寄存器位描述 位 15:0 31:16 符号 MirrorCounter PauseTimer 功能 在全双工模式下,该字段指定了重新发送暂停控制帧之前的周期数 在全双工模式下,该字段指定了插入暂停流控制帧的暂停定时器区 域的值。在半双工模式下,该字段指定了背压周期数 复位值 0x0 0x0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 22 广州周立功单片机发展有限公司 第 10 章 10.12.17 流控制状态寄存器(FlowControlStatus-0x5000 0174) 流控制状态寄存器(FlowControlStatus)为只读寄存器,其地址为 0x5000 0174。表 10.41列 出了该寄存器的位定义。 表 10.41 流控制状态寄存器位描述 位 15:0 31:16 符号 MirrorCounterCurrent - 功能 在全双工模式下,该字段表示数据通道的镜像计数器 (mirror counter)的当前值,该计数器最高可达到流控制 计数器寄存器的 MirrorCounter 字段指定的值;在半双工模 式下,该字段的值可达到流控制计数器寄存器的 PauseTimer 字段的值 未使用 复位值 0x0 0x0 10.13 接收过滤寄存器定义 10.13.1 接收过滤器控制寄存器(RxFilterCtrl- 0x5000 0200) 接收过滤器控制寄存器(RxFilterCtrl)的地址为 0x5000 0200。表 10.42列出了该寄存器的位 定义。 表 10.42 接收滤波器控制寄存器位描述 位 符号 0 AcceptUnicastEn 1 AcceptBroadcastEn 2 AcceptMulticastEn 3 AcceptUnicastHashEn 4 AcceptMulticastHashEn 5 AcceptPerfectEn 11:6 - 12 MagicPacketEnWoL 13 RxFilterEnWoL 31:14 - 功能 复位值 将该位设为“1”时,接受所有的单播帧(unicast frame) 0 将该位设为“1”时,接受所有的广播帧(broadcast frame) 0 将该位设为“1”时,接受所有的多播帧(multicast frame) 0 将该位设为“1”时,接受通过不完全 hash 过滤器(imperfect 0 hash filter)的单播帧 将该位设为“1”时,接受通过不完全 hash 过滤器(imperfect 0 hash filter)的多播帧 将该位设为“1”时,接受目标地址与站地址相同的帧 0 保留,用户不应该向保留位写入“1”。从保留位读出的 NA 值是未定义的 将该位设为“1”时,魔法包过滤器(magic packet filter) 0 的结果在匹配时将产生一个 WoL 中断 将该位设为“1”时,完全地址匹配过滤器与不完全 hash 0 过滤器的结果在匹配时将产生一个 WoL 中断 未使用 0x0 10.13.2 接收过滤器WoL状态寄存器(RxFilterWoLStatus- 0x5000 0204) 接收滤波器LAN上唤醒状态寄存器(RxFilterWoLStatus)为只读寄存器,其地址为 0x5000 0204。表 10.43列出了该寄存器的位定义。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 23 23 广州周立功单片机发展有限公司 第 10 章 表 10.43 接收过滤器 WoL 状态寄存器位描述 位 符号 功能 复位值 0 AcceptUnicastWoL 当该值为“1”时,一个单播帧引起 WoL 0 1 AcceptBroadcastWoL 当该值为“1”时,一个广播帧引起 WoL 0 2 AcceptMulticastWoL 当该值为“1”时,一个多播帧引起 WoL 0 当该值为“1”时,一个通过不完全 hash 过滤器的单播 3 AcceptUnicastHashWoL 0 帧引起 WoL 当该值为“1”时,一个通过不完全 hash 过滤器的多播 4 AcceptMulticastHashWoL 0 帧引起 WoL 5 AcceptPerfectWoL 当该值为“1”时,完全地址匹配过滤器引起 WoL 0 6 - 未使用 0x0 7 RxFilterWoL 当该值为“1”时,接收过滤器引起 WoL 0 当该值为“1”时,魔法包过滤器(magic packet filter) 8 MagicPacketWoL 0 引起 WoL 31:9 - 未使用 0x0 该寄存器中的位记录了产生 WoL 的原因。这些位可通过对 RxFilterWoLClear 寄存器执行写 操作来清零。 10.13.3 接收过滤器WoL清零寄存器(RxFilterWoLClear - 0x5000 0208) 接收过滤器LAN上唤醒清零寄存器(RxFilterWoLClear)为只写寄存器,其地址为 0x5000 0208。表 10.44列出了该寄存器的位定义。 表 10.44 接收过滤器 WoL 清零寄存器位描述 位 符号 功能 复位值 0 AcceptUnicastWoLClr 0 1 AcceptBroadcastWoLClr 0 2 AcceptMulticastWoLClr 向位 0~5 的其中一位写入“1”时,RxFilterWoLStatus 0 3 AcceptUnicastHashWoLClr 寄存器中对应的状态位被清零 0 4 AcceptMulticastHashWoLClr 0 5 AcceptPerfectWoLClr 67 RxFilterWoLClr 8 MagicPacketWoLClr 31:9 - 0 未使用 0x0 向位 7 和/或 8 写入“1”时,RxFilterWoLStatus 寄存 0 器中对应的状态位被清零 0 未使用 0x0 该寄存器中的位为“只写”位,向相应的位写入“1”可将 RxFilterWoLStatus 寄存器中的对 应位复位。 10.13.4 Hash过滤器表LSBs寄存器(HashFilterL- 0x5000 0210) Hash过滤器表LSBs寄存器(HashFilterL)的地址为 0x5000 0210。表 10.45列出了该寄存器 的位定义。Hash过滤器表的使用详情请参考“接收过滤”小节。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 24 24 广州周立功单片机发展有限公司 第 10 章 表 10.45 Hash 过滤器表 LSBs 寄存器位描述 位 符号 功能 31:0 HashFilterL 用于接收过滤的不完全过滤器 hash 表的位 31:0 复位值 0x0 10.13.5 Hash过滤器表MSBs寄存器(HashFilterH- 0x5000 0214) Hash过滤器表MSBs寄存器(HashFilterH)的地址为 0x5000 0214。表 10.46列出了该寄存器 的位定义。Hash过滤器表的使用详情请参考“接收过滤”小节。 表 10.46 Hash 过滤器表 MSBs 寄存器位描述 位 符号 功能 31:0 HashFilterH 用于接收过滤的不完全过滤器 Hash 表的位 63:32 复位值 0x0 10.14 模块控制寄存器的定义 10.14.1 中断状态寄存器(IntStatus- 0x5000 0FE0) 中断状态寄存器(IntStatus)是一个只读寄存器,其地址为 0x5000 0FE0。中断状态寄存器 的位定义如表 10.47所示。注意:所有位都是带异步置位的触发器,如果在时钟禁止的情况下出 现唤醒事件,则我们能够将这个异步置位使能来产生中断。 表 10.47 中断状态寄存器位描述 位 符号 0 RxOverrunInt 1 RxErrorInt 2 RxFinishedInt 3 RxDoneInt 4 TxUnderrunInt 5 TxErrorInt 6 TxFinishedInt 7 TxDoneInt 11:8 12 SoftInt 13 WakeupInt 31:14 - 功能 在接收队列中出现重大的溢出错误时中断置位。这个重大的中断应 该通过 Rx 软件复位来解决。该位在出现一个非重大的溢出错误时不 会置位 接 收 出 现 错 误 时 中 断 触 发 。 接 收 错 误 包 括 : AlignmentError 、 RangeError、LengthError、SymbolError、CRCError 或 NoDescriptor 或 Overrun 当所有的接收描述符均已处理完时,即当传输满足 ProduceIndex= = consumeIndex 时中断触发 在接收描述符处理完成,并且描述符控制区域中的中断位被置位时 中断触发 在发送队列中出现重大的溢出错误时中断置位。这个重大的中断应 该通过 Tx 软件复位来解决。该位在出现一个非重大的溢出错误时不 会置位 发 送 出 现 错 误 时 中 断 触 发 。 发 送 错 误 包 括 : LateColision 、 ExcessiveCollision 和 ExcessiveDefer、NoDescriptor 或 Underrun 当所有的发送描述符均已处理完时,即当传输满足 ProduceIndex= = consumeIndex 时中断触发 在描述符已发送完成,并且描述符控制区域中的中断位被置位时中 断触发 未使用 软件向 IntSet 寄存器的 SoftintSet 位写入 1 时中断触发 接收过滤器检测到一个唤醒事件触发的中断 未使用 复位值 0 0 0 0 0 0 0 0 0x0 0 0 0x0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 25 25 广州周立功单片机发展有限公司 第 10 章 中断状态寄存器为只读寄存器。通过 IntSet 寄存器可实现置位操作,通过 IntClear 寄存器可 实现复位操作。 10.14.2 中断使能寄存器(IntEnable- 0x5000 0FE4) 中断使能寄存器(IntEnable)的地址为 0x5000 0FE4,其位定义如表 10.48所示。 表 10.48 中断使能寄存器位描述 位 符号 0 RxOverrunIntEn 1 RxErrorIntEn 2 RxFinishedIntEn 3 RxDoneIntEn 4 TxUnderrunIntEn 5 TxErrorIntEn 6 TxFinishedIntEn 7 TxDoneIntEn 11:8 12 SoftIntEn 13 WakeupIntEn 31:14 - 功能 使能在接收缓冲区溢出或描述符下溢时的中断触发 使能接收错误时的中断触发 使能当所有接收描述符已完成,即传输满足 ProduceIndex= = ConsumeIndex 时的中断触发 使能在接收描述符已处理完成并且描述符控制区域中的中断 位置位时的中断触发 使能在发送缓冲区或描述符下溢时的中断触发 使能发送错误时的中断触发 使能当所有发送描述符已处理完,即传输满足 ProduceIndex= =ConsumeIndex 时的中断触发 使能在描述符已发送完成并且描述符控制区域中的中断位置 位时的中断触发 未使用 使能由 IntStatus 寄存器中的 SoftInt 位触发的中断,通过软件 向 IntSet 寄存器的 SoftIntSet 位写入“1”来产生中断触发 使能由接收过滤器检测到的唤醒事件触发的中断 未使用 复位值 0 0 0 0 0 0 0 0 0x0 0 0 0x0 10.14.3 中断清零寄存器(IntClear- 0x5000 0FE8) 中断清零寄存器(IntClear)为只写寄存器,其地址为 0x5000 0FE8。该寄存器的位定义如表 10.49所示。 表 10.49 中断清零寄存器位描述 位 符号 0 RxOverrunIntClr 1 RxErrorIntClr 2 RxFinishedIntClr 3 RxDoneIntClr 4 TxUnderrunIntClr 5 TxErrorIntClr 6 TxFinishedIntClr 7 TxDoneIntClr 11:8 - 12 SoftIntClr 13 WakeupIntClr 31:14 - 功能 复位值 0 0 0 向位 0~7 的其中一位写入“1”可将中断状态寄存器 IntStatus 中 0 的对应位清零 0 0 0 0 未使用 0x0 向位 12 和/或 13 写入“1”可将中断状态寄存器 IntStatus 中的对 0 应位清零 0 未使用 0x0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 26 26 广州周立功单片机发展有限公司 第 10 章 中断清零寄存器为只写寄存器。向该寄存器的某个位写入“1”可将中断状态寄存器的对应 位清零;写入“0”将不影响中断状态。 10.14.4 中断置位寄存器(IntSet - 0x5000 0FEC) 中断置位寄存器(IntSet)为只写寄存器,其地址为 0x5000 0FEC。该寄存器的位定义如表 10.50所示。 表 10.50 中断置位寄存器位描述 位 符号 功能 复位值 0 RxOverrunIntSet 0 1 RxErrorIntSet 0 2 RxFinishedIntSet 0 3 RxDoneIntSet 向位 0~7 的其中一位写入“1”可将中断状态寄存器 0 4 TxUnderrunIntSet (IntStatus)中的对应位置位 0 5 TxErrorIntSet 0 6 TxFinishedIntSet 0 7 TxDoneIntSet 0 11:8 - 未使用 0x0 12 SoftIntSet 向位 12 和/或 13 写入“1”可将中断状态寄存器(IntStatus) 0 13 WakeupIntSet 中的对应位置位 0 31:14 - 未使用 0x0 中断置位寄存器为只写寄存器。向该寄存器的某个位写入“1”可将中断状态寄存器中的对 应位置位;写入“0”将不影响中断状态。 10.14.5 掉电寄存器(PowerDown - 0x5000 0FF4) 掉电寄存器(PowerDown)用于控制对以太网AHB寄存器的访问,即阻塞除了访问 PowerDown寄存器之外的所有AHB访问。该寄存器的地址为 0x5000 0FF4,其位定义如表 10.51所 示。 表 10.51 掉电寄存器位描述 位 符号 功能 复位值 30:0 - 未使用 0x0 如果该位为“真”,则除了访问 PowerDown 寄存器之外 31 PowerDownMACAHB 0 的所有 AHB 访问都将返回读/写错误 当位 31 置位时,对 MACAHB 接口上(访问 PowerDown 寄存器除外)的所有读和写访问都 将返回一个错误。 10.15 描述符和状态格式 本节定义了发送和接收分散/集中式 DMA 引擎的描述符格式。每个以太网帧均由一个或多 个片段组成。每个片段对应一个描述符。以太网模块中的 DMA 管理器能够将一个以太网帧中的 多个片段进行分散(用于接收)和集中(用于发送)。 10.15.1 接收描述符和状态 图 10.3描述了接收描述符在存储器中的规划。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 27 27 广州周立功单片机发展有限公司 第 10 章 图 10.3 接收描述符在存储器中的规划 接收描述符存放在存储器的一个数组中。数组的基址存放在 RxDescriptor 寄存器中,并且应 该与 4 字节地址边界对齐。数组中描述符的个数存放在 RxDescriptorNumber 寄存器中,该寄存 器使用减 1 编码,例如,如果数组有 8 个元素,则该寄存器的值应该是 7。还有一个与描述符平 行的“状态数组”。对于描述符数组中的每个元素,“状态数组”中均有一个相关的状态区域。 状态数组的基址存放在 RxStatus 寄存器中,并且该基址必须与 8 字节地址边界对齐。在操作过 程中(当接收通道使能时),不可以对 RxDescriptor、RxStatus 和 RxDescriptorNumber 寄存器进 行修改。 另有两个寄存器 RxConsumeIndex 和 RxProduceIndex,用于定义下一个将被硬件和软件使用 的描述符单元。这两个寄存器可充当计数器,从 0 开始计数并在计数值到达 RxDescriptorNumber 寄存器中的值时回到 0。RxProduceIndex 包含的是将被接收到的下一帧数据填充的描述符的索引。 RxConsumeIndex 由软件来编程,它是软件接收驱动程序下一次即将处理的描述符的索引。当 RxProduceIndex==RxConsumeIndex 时,接收缓冲区为空。当 RxProduceIndex==RxConsumeIndex-1 (考虑到它是一个封包设计)时,接收缓冲区满,新接收到的数据将产生溢出,除非软件驱动程 序将一个或多个描述符释放。 每个“接收描述符”在存储器中占据两个字(8 个字节)。同样,每个“状态区域”也在存 储器中占据两个字(8 个字节)。每个接收描述符均由一个“数据包指针(PACKET)”和一个 “控制字(CONTROL)”组成,指针(接收描述符区域中的包)指向用来存放接收数据的数据 缓冲区,控制字包含的是控制信息。数据包区域的地址偏移量为 0,控制区域的地址偏移量为 4 字节。有关描述符地址的定义如表 10.52所示。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 28 28 广州周立功单片机发展有限公司 第 10 章 表 10.52 接收描述符的区域 符号 地址偏移量 字节 描述 Packet 0x0 Control 0x4 4 用来存放接收数据的数据缓冲区的基址 4 控制信息,见表 10.53 数据缓冲区指针(即接收描述符区域中的包)是一个 32 位字节对齐的地址,它包含的是数 据缓冲区的基址。控制字各个位的定义如表 10.53所列。 表 10.53 接收描述符控制字 位 符号 描述 数据缓冲区的字节数。这是设备驱动程序为一帧或帧片段保留的缓冲区字节数,即被“数 10:0 30:11 31 Size - Interrupt 据包区域”指向的缓冲区的字节数。Size 的值采用的是减 1 编码,例如,如果缓冲区为 8 字节,则 Size 的值为 7 未使用 该位表示当该帧或帧片段中的数据以及相关的状态信息已提交给存储器时,是否确实产生 了一个 RxDone 中断 表 10.54列出了状态数组中的接收状态的区域。 表 10.54 接收状态的区域 符号 地址偏移量 字节 描述 StatusInfo 0x0 StatusHashCRC 0x4 4 接收状态的返回标志,见表 10.56 4 目标地址 hash CRC 和源地址 Hash CRC 的串联 每个接收状态均由两个字组成。StatusHashCRC包含的是两个串联的 9 位hash CRC,这两个 CRC是通过计算接收帧中的目标地址和源地址得来的。在检测到目标地址和源地址之后,只对 StatusHashCRC进行一次计算,然后保存该值,供同一帧中的所有片段使用。两个串联的CRC如表 10.55所示。 表 10.55 接收状态 Hash CRC 字 位 符号 描述 8:0 15:9 24:16 31:25 SAHashCRC - DAHashCRC - 从源地址中计算而得的 Hash CRC 未使用 从目标地址中计算而得的 Hash CRC 未使用 StatusInfo字包含的是由MAC返回的标志和由接收通道产生的反映接收状态的标志。表 10.56 列出了StatusInfo字的位定义。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 29 29 广州周立功单片机发展有限公司 第 10 章 表 10.56 接收状态信息字 位 10:0 17:11 18 19 20 21 22 23 24 25 26 27 28 29 30 31 符号 RxSize ControlFrame VLAN FailFilter Multicast Broadcast CRCError SymbolError LengthError RangeError[1] AlignmentError Overrun NoDescriptor LastFlag Error 描述 传输给一个片段缓冲区的实际数据的字节数。换句话说,它是 DAM 管理器针对一 个描述符实际写入的帧或片段的字节数。该值可能与描述符控制区域中 Size 位(表 示器件驱动程序分配的缓冲区大小)的值有所不同。该字段采用减 1 编码,例如, 如果缓冲区有 8 个字节,则 RxSize 的值为 7 未使用 表示这一个用于流控制的控制帧,它可以是一个暂停帧也可以是一个带有不支持 的操作码的帧 表示一个 VLAN 帧 表示这帧信息的 Rx 过滤失败。这样的帧将不能正常地传递到存储器中。但由于缓 冲区大小的限制,帧中可能已有一部分信息传递到了存储器。一旦发现某帧的 Rx 过滤失败,就将该帧的剩余部分丢弃,而不传递到存储器中。但如果命令寄存器 中的 PassRxFilter 位置位,则整帧都将传递到存储器中 当接收到一个多播帧时置位 当接收到一个广播帧时置位 接收到的帧有一个 CRC 错误 在接收过程中,PHY 通过 PHY 接口报告有一个位错误 该帧的帧长度区域指定了一个有效的帧长度,但它与实际的数据长度不相等 接收到的包超出了包长度的最大限制 当检测到 dribble 位和一个 CRC 错误时,将“对齐错误”作上标记。这与 IEEE std.802.3/条款 4.3.2 是一致的 接收溢出。适配器不能接收数据流 没有新的 Rx 描述符可用,并且对于当前的接收描述符中的缓冲区大小来说,帧信 息太长 该位置位表示这个描述符是一帧中的最后一个片段。如果一帧只由一个片段组成, 则该位也是置位的 表 示 在 该 帧 的 接 收 过 程 中 出 现 错 误 。 它 是 AlignmentError 、 RangeError 、 LengthError、SymbolError、CRCError 和 Overrun 逻辑“或”的结果 [1] EMAC 不区分帧类型和帧长度。例如,当接收到 IP(0x8000)或 ARP(0x0806)包时,EMAC 将帧类 型与最大长度进行比较并给出“长度超出范围”错误。事实上,该位不是一个错误指示,而只仅仅是由芯片产生 的、关于接收帧状态的一个说明。 对于具有多个片段的帧,该帧中除了最后一个片段之外的所有片段中的 AlignmentError、 RangeError 、LengthError、SymbolError、CRCError 位的值都是 0。同样,FailFilter 、Multicast、 Broadcast、VLAN、ControlFrame 位的值是未定义的。而该帧中最后一个片段的状态是从 MAC 中将上述位的值复制过来而得的。所有片段都将具有有效的 LastFrag、RxSize、Error、Overrun 和 NoDescriptor 位。 10.15.2 发送描述符和状态 图 10.4描述了发送描述符在存储器中的规划。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 30 30 广州周立功单片机发展有限公司 第 10 章 图 10.4 发送描述符在存储器中的规划 发送描述符存放在存储器的一个数组中。发送描述符数组的最低地址存放在 TxDescriptor 寄 存器中,并且该地址必须与 4 字节地址边界对齐。数组中描述符的个数存放在 TxDescriptorNumber 寄存器中,该寄存器使用减 1 编码,例如,如果数组有 8 个元素,则寄存器的值为 7。还有一个 与描述符平行的“状态数组”。对于描述符数组中的每个元素,“状态数组”中均有一个相关的 状态区域。状态数组的基址存放在 TxStatus 寄存器中,并且该地址也必须是 4 字节地址边界对齐。 在操作过程中(当发送通道使能时),不可以对 TxDescriptor、TxStatus 和 TxDescriptorNumber 寄存器进行修改。 另有两个寄存器 TxConsumeIndex 和 TxProduceIndex,用于定义下一个将被硬件和软件使用 的描述符单元索引。这两个寄存器可充当计数器,从 0 开始计数并在计数值到达 TxDescriptorNumber 寄存器中的值时回到 0。TxProduceIndex 表示的是将被软件驱动程序填充的 下一个描述符的索引。TxConsumeIndex 表示的是将被硬件发送的下一个描述符的索引。当 TxProduceIndex==TxConsumeIndex 时,发送缓冲区为空。当 TxProduceIndex==TxConsumeIndex-1 时(考虑到它是一个封包设计),发送缓冲区满,软件驱动程序不能添加新的描述符,直到硬件 发送了一个或多个帧来将描述符释放。 每个发送描述符在存储器中占据两个字(8 个字节)。同样,每个状态区域在存储器中占据 1 个字(4 个字节)。每个发送描述符均由一个指针和一个控制字组成,指针(发送描述符区域 中的数据包PACKET)指向发送数据的数据缓冲区,控制字包含的是控制信息。数据包区域有一 个零地址偏移量,控制区域有一个 4 字节地址偏移量,如表 10.57所示。 表 10.57 发送描述符的区域 符号 Packet Control 地址偏移量 0x0 0x4 字节 4 4 描述 包含发送数据的数据缓冲区的基址 控制信息,见表 10.58 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 31 31 广州周立功单片机发展有限公司 第 10 章 数据缓冲区指针(即发送描述符区域中的包)是一个 32 位字节对齐的地址,它包含的是数 据缓冲区的基址。控制字各个位的定义如表 10.58所列。 表 10.58 发送描述符的控制字 位 符号 描述 10:0 25:11 26 27 28 29 30 Size Override Huge Pad CRC Last 数据缓冲区的字节数。这是帧或片段需被 DMA 管理器取出时的字节数。在大多数情况下, 该值与由描述符数据包区域指向的数据缓冲区的字节数相等。Size 的值采用减 1 编码,例 如,如果缓冲区为 8 字节,则 Size 的值为 7 未使用 忽略(override)每一帧。如果为“真”,则位 30:27 将不考虑 MAC 内部寄存器的默认值; 如果为“假”,则位 30:27 将被忽略并使用 MAC 的默认值 如果为“真”,则使能超长帧,不限制帧长度;如果为“假”,将发送的字节数限制到最 大的帧长度(MAXF[15:0]的值) 如果为“真”,将短帧填充到 64 字节 如果为“真”,将一个硬件 CRC 添加到帧内 如果为“真”,表示这是用于发送帧中最后一个片段的描述符。如果为“假”,则表示应 添加来自下一个描述符的片段 如果为“真”,表示当该帧或帧片段中的数据已发送完成,并且相关的状态信息已提交给 31 Interrupt 存储器时,将产生一个 TxDone 中断 表 10.59显示了状态数组中发送状态的区域。 表 10.59 发送状态的区域 符号 地址偏移量 字节 描述 StatusInfo 0x0 4 发送状态的返回标志,见表 10.60 每个发送状态均由 1 个StatusInfo字组成。它包含的是由MAC返回的标志和由发送通道产生 的反映发送状态的标志。表 10.60列出了StatusInfo字的位定义。 表 10.60 发送状态的信息字 位 符号 描述 20:0 24:21 25 CollisionCount Defer 未使用 这个包遭遇的冲突次数,该值可高达重新发送的最大值 这个包由于媒体被占据而遭遇延迟。该延迟不是一个错误,除非出现延迟超出限制 的情况 26 ExcessiveDefer 这个包遭遇的延迟超出了最大的延迟限制并被中止 27 ExcessiveCollision 表示这个包超出了最大的冲突限制并被中止 28 LateCollision 冲突窗口超出范围,导致发送包中止 29 Underrun 由于适配器没有产生发送数据而出现 Tx 下溢 30 NoDescriptor 发送流由于描述符不可用而被中断 发 送 过 程 中 出 现 的 错 误 。 它 是 Underrun 、 LateCollision 、 ExcessiveCollision 、 31 Error ExcessiveDefer 逻辑“或”的结果 对于具有多个片段的帧,该帧中除了最后一个片段之外的所有片段中的 LateCollision、 ExcessiveCollision、ExcessiveDefer、Defer 和 CollisionCount 位的值都为 0。该帧中最后一个片段 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 32 32 广州周立功单片机发展有限公司 第 10 章 的状态是从 MAC 中将上述位的值复制过来而得的。所有片段都将具有有效的 Error、NoDescriptor 和 Underrun 位。 10.16 以太网模块功能描述 本节定义了能够处理 10/100 以太网 MAC 的 DMA 功能。在介绍了以太网模块的 DMA 概念 以及基本的发送和接收功能之后,本节将详细描述诸如流控制、接收过滤等高级特性。 10.16.1 概述 以太网模块通过 RMII 接口与片外 PHY 芯片相连,从而接收/发送以太网包。 通常,在系统启动过程中将对以太网模块进行初始化。以太网模块的软件初始化应包括描述 符数组、状态数组以及接收片段缓冲区的初始化。 在发送一个包时,软件驱动程序必须合理设置控制寄存器和发送描述符,以便在将信息发送 给硬件之前,通过将 TxProduceIndex 寄存器加 1 来指向发送包的数据缓冲区。在发送完成之后, 硬件将 TxConsumeIndex 加 1,并可选择产生中断。 以太网模块接收时,硬件将从 PHY 中接收信息包并使用由软件驱动程序配置的过滤机制。 在接收一个包时,硬件将从存储器中读取描述符,以找到对应的接收器数据缓冲区的位置。以太 网硬件部分会将接收到的数据写入到数据缓冲区中,接收状态在接收描述符的状态字中返回。可 选择产生中断向软件告知:已成功接收完一个信息包。注意:DMA 管理器将对高达 3 个描述符 进行预取指和缓冲操作。 10.16.2 AHB接口 以太网模块的寄存器连接到一个 AHB 从接口,以允许 CPU 对寄存器进行访问。 AHB接口有一个 32 位的数据通道,它只支持字访问并具有一个 4KB的地址空间。表 10.5列 出了以太网模块的寄存器。 除了访问 IntSet、IntClear 和 IntEnable 寄存器之外的所有 AHB 写访问都具有“加速”模式, 而这几个中断寄存器的 AHB 写操作必须按顺序执行。 如果 PowerDown 寄存器的 PowerDown 位置位,只能正常访问 PowerDown 寄存器,访问其 它寄存器时,都将会返回一个读或写错误。 以太网模块在以下情况产生总线错误:  对只写寄存器执行AHB读访问时,AHB接口将返回一个读错误。同样,对只读寄存器 执行AHB写访问时,将返回一个写错误。对保留寄存器执行AHB读或写访问时,将返 回一个AHB读或写错误。这些错误被传送回CPU。寄存器的读和写属性如表 10.5所示;  如果 PowerDown 位置位,则只能访问 PowerDown 寄存器,访问其它 AHB 寄存器都将 返回一个错误响应。 10.17 中断 以太网模块有一个中断请求,通过向量中断控制器输出给 CPU。 中断服务程序必须读取 IntStatus 寄存器才能确定中断源。所有的中断状态都能够由软件向 IntSet 寄存器执行写操作来置位;也可由软件向 IntClear 寄存器执行写操作来清零。 发送和接收通道只能将中断状态置位,而不能将它们清零。SoftInt 中断不能由硬件置位,软 件能够用它来进行测试中断服务程序。 10.17.1 直接存储器访问(DMA) LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 33 广州周立功单片机发展有限公司 第 10 章 1. 描述符数组 以太网模块包括两个 DMA 管理器。DMA 管理器使得 MAC 直接与存储器之间进行帧传输 成为可能,并且几乎不需要处理器的支持,也不需要使每一帧都触发一次中断。 DMA 管理器利用存放在存储器中的帧描述符数组和状态数组来工作。描述符和状态充当以 太网硬件和设备驱动软件之间的接口。接收帧和发送帧各有一个描述符数组。使用帧描述符的缓 冲功能可以减少描述符所占用的存储器通信量和存储器带宽。 每个帧描述符包含两个 32 位区域:第一个区域是数据指针,指向包含一帧或一个片段的数 据缓冲区,而另一个区域是与该帧或片段相关的控制字。 软件驱动程序必须将“描述符数组”和“状态数组”的基址写入 TxDescriptor/RxDescriptor 和 TxStatus/RxStatus 寄存器中。描述符/状态在各自数组中的数目也必须写入 TxDescriptorNumber/RxDescriptorNumber 寄存器中。描述符在数组中的个数与对应的状态数组中 的状态个数是一致的。 发送描述符数组、接收描述符数组和发送状态数组需要 4 字节(32 位)地址边界对齐的, 而接收状态数组需要 8 字节(64 位)地址边界对齐。 2. 描述符的拥有权 设备驱动软件和以太网硬件都能同时对描述符数组执行读和写操作,以“产生”和“消耗” 描述符。在两者同时请求的情况下,AHB 总线仲裁将使 DMA 硬件具有更高的优先级。一个描 述符的“拥有者”可以是设备驱动软件也可以是以太网硬件。只有描述符的“拥有者”才能描述 符进行读写操作。通常,描述符和状态的“使用”和“拥有”顺序是这样的:首先,设备驱动程 序“拥有”并建立描述符;其次,设备驱动软件将描述符/状态的“拥有权”传递给以太网模块, 这时,以太网模块会读取描述符并将信息写入状态区域;然后,以太网模块将描述符的“拥有权” 传递回设备驱动程序,驱动程序使用状态信息并重复利用描述符以供其它帧使用。软件必须预先 分配好用来存放描述符数组的存储器。 软件通过将 TxProduceIndex/RxConsumeIndex 寄存器加 1(如果到达数组边界则回到 0), 能够将描述符和状态的拥有权移交给硬件。硬件通过更新 TxConsumeIndex/ RxProduceIndex 寄存 器来将描述符和状态移交给软件。 在将一个描述符移交给了接收和发送 DMA 硬件之后,设备驱动软件不能修改描述符或通过 将 TxProduceIndex/RxConsumeIndex 寄存器减 1 来收回描述符,因为硬件可能已经预取了这些描 述符。此时,设备驱动软件必须等待,直到帧信息发送完成,否则设备驱动程序必须将发送和/ 或接收通道进行软复位,从而将描述符数组复位。 3. 连续的顺序及封包设计 当从数组中读取“描述符”以及将“状态”写入数组时,这些操作都是按连续的顺序进行的 并且采用的是封包设计(wrap-around)。顺序连续是:当以太网模块已完成对描述符/状态的读/ 写操作时,下一个将会读/写的描述符/状态是在下一个更高的相邻的存储器地址中的描述符/状 态。封包是:当以太网模块对数组(最高存储器地址)中的最后一个描述符/状态完成读/写操作之 后,它下一个读/写的描述符/状态将是位于数组基址的第一个描述符/状态。 4. 描述符数组的满状态和空状态 描述符数组可以为空状态、部分满状态和满状态。当所有的描述符都被其生产者拥有时,描 述符数组为空。如果其生产者和消耗者各自拥有一部分描述符,并且各自忙于处理这些描述符, 则这样的描述符数组处于“部分满”状态。当所有的描述符(有一个除外)都被消耗者拥有时, 该描述符数组为满,此时,生产者没有更多的空间来处理帧信息。为了便于描述,我们将描述符 的“拥有权”使用“消耗索引”和“生产索引”来指示。“生产索引”是生产者拥有的数组的第 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 34 34 广州周立功单片机发展有限公司 第 10 章 一个元素,也是下面将被帧信息生产者所使用的数组元素的索引(生产者可能已使用了这个元素 和后面的元素)。“消耗索引”是消耗者拥有的数组的第一个元素,也是下面将被帧信息的消耗 者所消耗掉的数组元素的编号(这个元素和后面的元素可能正处于消耗处理过程中)。如果消耗 索引等于生产索引,则描述符数组为空,所有数组元素都被生产者拥有。如果消耗索引等于生产 索引加 1,则数组为满,所有数组元素(生产索引中有一个元素除外)都被消耗者拥有。处于满 状态的描述符数组仍有一个数组元素保持为空,因此,通过查看生产索引和消耗索引的值,我们 就可以很容易地区分满状态和空状态。一个数组至少必须具有 2 个元素才能表示一个满状态的描 述符数组,此时,生产索引的值为 0,消耗索引的值为 1。在确定一个描述符数组是否为满时必 须考虑数组的封包。因此,当“生产索引”等于数组中的最后一个元素并且“消耗索引”等于数 组中的第一个元素时,也意味着数组为满。当“生产索引”和“消耗索引”不相等并且“消耗索 引”不等于“生产索引”加 1 时(考虑封包设计),描述符数组处于“部分满”状态,消耗者和 生产者都拥有足够的描述符,从而能在描述符数组上有效地操作。 5. 中断位 描述符有一个可通过软件进行编程的中断位。当以太网模块正在处理一个描述符并发现该位 处于置位状态时,它通过将 IntStatus 寄存器中的 RxDoneInt 或 TxDoneInt 位传递给中断输出管脚 来触发一个中断(在将状态提交给存储器之后)。如果描述符中的中断位没有置位,则 RxDoneInt 和 TxDoneInt 也不置位并且也不触发中断(注意:IntEable 中的对应位必须置位才能触发中断), 这样可以灵活地管理描述符数组。例如,设备驱动程序能够添加 10 帧信息给 Tx 描述符数组, 可将数组中描述符编号 5 的中断位置位。这样可以在发送完编号为 5 的描述符后触发中断,调用 中断服务程序。设备驱动程序能够在不打断连续的帧传输的情况下向描述符数组添加另一组帧信 息。 6. 帧片段 为保证在存放帧信息时具有最大的灵活性,我们可以将帧信息分为多个帧片段,这些片段可 以放在存储器的不同位置。此时,可以为每个帧片段分配一个描述符。因此,描述符能够指向一 帧或一帧中的一个片段。通过分散/集中式 DMA,我们可以使用这些片段:发送帧由存储器中的 多个片段集中而得,接收帧可以分散到存储器的多个片段中。 通过将片段串在一起,我们可以在小存储器空间中创建长帧。片段的另一个使用是:对位于 不同地点的帧头和帧有效负载进行定位,从而可以在不执行数据复制操作的情况下将它们连接起 来。 对于发送操作,使用描述符控制区域中的 Last 位来指示该片段是否为一帧信息中的最后一 个片段;对于接收操作,使用状态字的 StatusInfo 区域中的 LastFrag 位指示该片段是否为这帧信 息中的最后一个片段。如果 Last(Frag)位为 0,那么下一个描述符属于同一个以太网帧。如果 Last(Frag)位为 1,则下一个描述符是一个新的以太网帧。 10.17.2 初始化 复位后,以太网软件驱动程序需对以太网模块进行初始化。在初始化过程中,软件需完成:  将软件复位条件从 MAC 中移除;  通过 MAC 的 MIIM 接口配置 PHY;  选择 RMII 模式;  配置发送和接收 DMA 引擎,包括描述符数组;  配置 MAC 中的主机寄存器(MAC1、MAC2 等等);  使能接收和发送数据通道。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 35 35 广州周立功单片机发展有限公司 第 10 章 根据使用的 PHY 不同,软件需通过 MII 管理接口来初始化 PHY 中的寄存器。软件通过对 MAC 的 MCFG、MCMD、MADR 寄存器进行编程来读写 PHY 寄存器。写数据应该写入 MWTD 寄存器,读数据和状态信息可以从 MRDD 和 MIND 寄存器中读取。 以太网模块支持 RMII PHY。在初始化过程中,软件必须通过对命令寄存器进行设置来选择 RMII 模式。 在切换到 RMII 模式之前,默认的软件复位(MAC1 寄存器的位 15)必须失效。在该操作过 程中必需要运行 phy_ref_clk,且将其内部连接上。 设备驱动软件通过分配存储器中的“描述符数组”和“状态数组”来完成对发送和接收 DMA 引擎的初始化。发送和接收功能各自都有专门的描述符和状态数组。这些数组的基址需在 TxDescriptor/TxStatus 和 RxDescriptor/RxStatus 寄存器中编程。数组中描述符的数目要与数组中 状态的数目相等。 请注意:1 个发送描述符、接收描述符和接收状态都是 8 个字节,而 1 个发送状态是 4 个字 节。所有的描述符数组和发送状态必须是 4 字节边界对齐;接收状态必须是 8 字节边界对齐的。 描述符数组中描述符的数目需使用减 1 编码写入到 TxDescriptorNumber/RxDescriptorNumber 寄存 器中。即,寄存器中的值是描述符的数目减去 1。例如,如果描述符数组有 4 个描述符,则该寄 存器的值应为 3。 在建立了描述符数组后,我们要在使能接收数据通道之前为接收描述符分配帧缓冲区。接收 描述符的“数据包区域”使用对应帧缓冲区的基址来填充。接收描述符控制区域包含的是数据缓 冲区的大小,这个值使用的是减 1 编码。 接收通道有一个可配置的过滤功能,用于丢弃/忽略指定的以太网帧。过滤功能也应该在初 始化过程中配置。 在发出硬件复位之后,MAC 中的软件复位位将生效。使能以太网模块之前必须将软件复位 条件移除。 有两个地方的接收功能需使能:一个是接收 DMA 管理器需使能;另一个是 MAC 的接收数 据通道需使能。为防止接收 DMA 引擎出现溢出,在通过将 MAC1 寄存器中的 RECEIVE ENABLE 位置位来使能 MAC 中的接收通道之前,应先通过将命令寄存器中的 RxEnable 位置位来将接收 DMA 引擎使能。 发送 DMA 引擎可在任何时候通过置位命令寄存器中的 TxEnable 位来使能。 在将数据通道使能之前,用户可以对 MAC 中的几个选项进行设置:例如自动流控制、发送 到接收的回送(用于验证)、全双工/半双工模式等。 在没有对接收和发送通道进行(软)复位的情况下,描述符数组的基址和描述符数组的大小 不可以修改。 10.17.3 发送过程 1. 概述 本小节将简要地对发送过程进行描述。 2. 设备驱动程序建立描述符和数据 如果描述符数组为满,则设备驱动程序需要等待描述符数组处于非满状态时,才能写入一个 新的描述符。如果描述符数组不为满,则设备驱动程序应使用由 TxDescriptor 指向的数组中第 TxProduceIndex 个编号的描述符。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 36 36 广州周立功单片机发展有限公司 第 10 章 描述符中的指针设置为指向即将发送的一个数据帧或帧片段。描述符命令区域中的 Size 应 该设置为片段缓冲区中的字节数,它使用的是减 1 编码。其它控制信息可以在描述符的控制区域 中指示(interrupt、Last、CRC、Pad 位)。 在对描述符执行了写操作之后,设备驱动程序通过将 TxProduceIndex 寄存器加 1(要考虑封 包)来将描述符移交给硬件。 如果发送通道被禁能,则设备驱动程序需要将命令寄存器中的 TxEnable 位置位来使能发送 通道。 在发送除了最后一个片段之外的多个片段时,描述符中的 Last 位必须设置为 0;而对于最后 一个片段,Last 位必须设置为 1。在一帧信息发送完毕并将发送状态提交给存储器后,如果想触 发一次中断,用户需将描述符控制区域中的 Interrupt 位设置为 1。为了使硬件在以太网帧的帧序 列控制区域中添加一个 CRC,需要将描述符的 CRC 位置位。如果软件没有添加 CRC,则必须执 行硬件添加 CRC 功能。为了使能短帧的自动填充功能来达到最小必需的帧长度,用户要将描述 符控制区域中的 Pad 位设置为 1。在通常的应用程序中,我们都会将 CRC 和 Pad 位设置为 1。 设备驱动程序可以使用 InEnable 寄存器建立中断来等待来自硬件的完成信号,或者也可以 周期地查询发送过程。当硬件消耗位于数组开始处的描述符时,设备驱动程序还可以在在描述符 数组的结尾添加新的帧。 设备驱动程序可通过将命令寄存器中的 TxEnable 位复位为“0”来停止发送处理。但时,此 时发送操作不会立即停止:先将正在发送的帧数据包的全部数据发送完毕,然后将状态提交给存 储器,最后才会停止发送操作。读取 Status 寄存器的 TxStatus 位可以实现设备驱动程序对发送通 道的监控。 一旦发送通道使能,并且对应的 TxConsumeIndex != TxProduceIndex,即硬件仍需要处理描 述符数组中的帧信息,此时,Status 寄存器的 TxStatus 位将返回“1”(工作状态)。 3. Tx DMA管理器读取Tx描述符数组 当 TxEnable 位置位时,TxDMA 管理器从 TxDescriptor 和 TxConsumeIndex 确定的存储器地 址处读取发送描述符。请求的描述符数目由硬件拥有的描述符总数决定: TxProduceIndex-TxConsumeIndex。描述符的块传输可降低存储器负担。从存储器中返回的读数 据将进行缓冲并根据需要消耗。 4. Tx DMA管理器发送数据 在读取描述符之后,发送 DMA 引擎从存储器中读取相关的帧数据并发送。在传输完成之后, TxDMA 管理器将状态信息写回状态区域的 StatusInfo 和 StatusHashCRC 字中。TxConsumeIndex 的值只有在状态信息已提交给存储器之后才能更新(是否提交完成将由存储器接口中的一个内部 标签协议检验)。TxDAM 管理器继续发送帧信息,直到描述符数组为空。如果发送描述符数组 为空,则 Status 寄存器中的 TxStatus 位将返回“0”(停止状态)。同时,以太网硬件将置位 InStatus 寄存器中的 TxFinishedInt 位。但此时发送通道仍是使能的。 在加载描述符时,TxDMA 管理器会查询描述符控制区域的 Last 位。如果 Last 位为 0,则表 示该帧由多个片段组成。TxDMA 管理器将主机存储器中的所有片段集中起来,访问一串帧描述 符并将它们发送出去作为以太网线路上的一个以太网帧。当 TxDMA 管理器发现一个描述符其控 制区域中的 Last 位为 1 时,则表示它是该帧中的最后一个片段,这样,我们就找到了帧结尾。 5. 更新ConsumeIndex 每次当 TxDMA 管理器向存储器提交一个状态字时,表明它完成了描述符的发送过程,并让 TxConsumeIndex 加 1(要考虑它是一个封包),将描述符移交给设备驱动软件。软件可在硬件 移交完成之后重新使用描述符进行新的发送操作。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 37 37 广州周立功单片机发展有限公司 第 10 章 设备驱动软件通过读取 TxConsumeIndex 寄存器的值来查看发送过程进行的程度,从而能够 了解 DMA 管理器的进程。当 Tx 描述符数组完全为空时,TxConsumeIndex 寄存器保留其最后一 个值。 6. 写发送状态 在 RMII 总线上发送了帧信息之后,帧描述符的状态信息字(StatusInfo)由 DMA 管理器更 新。 如果描述符是用于帧的最后一个片段(或者是用于整个帧(如果没有片段)),则根据帧发 送的成功与失败,决定是否将状态寄存器中的错误标志(Error、LateCollision、ExcessiveCollision、 Underrun、ExcessiveDefer、Defer)置位。CollisionCount 区域表示帧发送时遭遇到的冲突次数, 最大值为 MAC 的 Collision 窗口/重试寄存器中的重发次数值。 在 TxDMA 管理器接收了帧信息中数据之后,会立即将该片段的状态写入存储器中(帧信息 中的最后一个片段除外)。每个片段的状态信息都可以通过 AHB 接口返回错误标志,不仅仅局 限于最后一个片段。如果以太网模块在多片段帧的发送过程中检测到一个发送错误,则它将仍通 过 AHB 接口读取该帧剩下的所有片段。在检测到错误之后,以太网模块会丢弃剩下的发送数据。 如果在多片段帧的发送过程中存在多个错误,则错误状态会反复出现,直到最后一个片段。最后 一个片段以外的片段的状态会在 TxDMA 管理器接受了帧信息中的数据之后立即写入存储器。如 果很早就检测到了错误,则状态中将包含错误的信息。最后一个片段的状态只会在以太网线路上 完成了发送操作之后写入存储器。因此,最后一个片段的状态将始终反映帧中任何地方出现的所 有错误。 上一个发送帧的状态也可通过读取 TSV0 和 TSV1 寄存器来查询。这两个寄存器不会报告一 个单独片的状态也不会存储前一个发送帧的信息。它们主要是供调试使用的,因为驱动软件和以 太网模块之间的通信通过帧描述符来实现。只要 MAC 的内部状态有效,状态寄存器就有效,通 常在发送和接收处理停止时才读取这两个寄存器。 7. 发送错误处理 如果在发送过程中出现错误,则 TxDMA 管理器将通过写入状态数组中的发送状态字 (StatusInfo)和中断状态寄存器(IntStatus)来报告错误。 发送过程可产生以下几种类型的错误:LateCollision、ExcessiveCollision、ExcessiveDefer、 Underrun 和 NoDescriptor。上述错误在发送状态字(StatusInfo)中都有对应的位。除了在 StatusInfo 字中有单独的位之外,Status 中的 Error 位还是 LateCollision、ExcessiveCollision、ExcessiveDefer 相“或”的结果。错误位会传递到 IntStatus 寄存器中;当出现 LateCollision、ExcessiveCollision、 ExcessiveDefer 或 NoDescriptor 错误时,IntStatus 寄存器中的 TxError 位将置位;Underrun 错误 会在 IntStatus 寄存器的 TxUnderrun 位报告。 以下三种情况下出现 Underrun 错误:  多片段发送中的下一个片段不可用。这不是一个重大的错误。NoDescriptor 状态将在前 一个片段上返回,IntStatus 中的 TxError 位将会置位;  当以太网模块已开始发送帧信息时,发送片段的数据不可用。这不是一个重大的错误。 Underrun 状态将在传输时返回,IntStatus 中的 TxError 位将会置位;  当先前的一个状态仍等待通过存储器接口进行传输时,发送状态流暂停并且必须写入一 个新的状态。这是一个重大的错误,只能通过硬件的软复位解决。 第一种和第二种情况不是重大错误,设备驱动程序必须重新发送帧信息或让更高的软件层重 发帧信息。在第三种情况下,硬件处于未定义状态,需通过将命令寄存器中的 TxReset 位置位来 实现软复位。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 38 38 广州周立功单片机发展有限公司 第 10 章 在报告了 LateCollision、ExcessiveCollision、ExcessiveDefer 或 Underrun 错误之后,该错误 帧将中止发送,该帧余下的数据和片段会被丢弃,并继续发送描述符数组中的下一帧数据。 设备驱动程序应获取发送错误信息并采取必要的操作。 8. 发送触发中断 发送通道可以产生 4 种不同的中断类型:  如果描述符控制区域中的中断位置位,则在片段发送完成并将相关的发送状态提交给了 存储器之后,TxDMA 会将 IntStatus 寄存器中的 TxDoneInt 位置位。即使不是最后一个 片段的描述符,这个中断位仍可用于产生一个中断;  如果在以太网硬件使能时描述符数组为空,则硬件将置位 IntStatus 寄存器中的 TxFinishedInt 位;  如果 AHB 接口不是以一个足够高的带宽消耗发送状态,则在 IntStatus 寄存器中的 TxUnderrun 位置位的情况下发送可能出现下溢。这是一个致命的错误,要求对发送队 列进行软复位;  在出现发送错误(LateCollision、ExcessiveCollision 或 ExcessiveDefer)或者对于多片段 帧设备驱动程序只提供初始帧的描述符而不提供帧剩余部分的描述符(即出现 NoDescriptor 错误),或者在出现非重大的溢出错误时,硬件会将 IntStatus 寄存器中的 TxErrorInt 位置位。 上述所有中断均可通过置位或复位 IntEnable 寄存器中的对应位来使能或禁能。使能或禁能 操作不影响 IntStatus 寄存器的内容,只是决定是否将中断状态传递给 CPU(通过向量中断控制 器)。 不管是单个帧引起的中断还是整个序列引起的中断,它们都是 DMA 管理器和设备驱动程序 之间进行通信的良好方式,可以触发设备驱动程序来查询已完成处理的描述符的状态字。 9. 发送示例 图 10.5使用一个例子来阐明发送处理,在该例子中,我们使用了一个 8 字节的帧头和 12 字 节的帧有效负载。 LPC1700 用户手册 图 10.5 发送示例的存储器和寄存器 ©2010 Guangzhou ZLGMCU Development CO., LTD. 39 39 广州周立功单片机发展有限公司 第 10 章 复位之后,DMA 寄存器的值为零。在初始化过程中,设备驱动程序将在存储器中分配描述 符数组和状态数组。上述示例分配了 4 个描述符数组;描述符数组为 4×2×4 字节并且是 4 字节 地址边界对齐。由于描述符的数目与状态数目相等,因此,状态数组也由 4 个元素组成;状态数 组为 4×1×4 字节并且是 4 字节地址边界对齐。设备驱动程序将描述符数组的基址(0x7FE0 10EC) 写入 TxDescriptor 寄存器并将状态数组的基址(0x7FE0 11F8)写入 TxStatus 寄存器中。设备驱动程 序还将描述符和状态的数目减 1(3)写入 TxDescriptorNumber 寄存器中。数组中的描述符和状 态不需要初始化。 发送通道可通过置位命令寄存器中的 TxEnable 位来使能。如果在发送通道使能时没有帧信 息需要发送,则 TxFinishedInt 中断标志将置位。为减轻处理器的中断负担,通过将 IntEnable 寄 存器中的相关位置位,用户可以只将需要的中断使能。 现在,假设应用软件想使用 TCP/IP 协议发送一个 12 字节的帧(在实际的应用程序中,帧信 息将大于 12 字节)。TCP/IP 堆栈将在该帧上添加一个帧头。帧头不一定要紧跟在存储器的有效 负载数据之前。设备驱动程序能够对 TxDMA 进行编程来将帧头和有效负载数据集中起来。为了 能完成这项工作,设备驱动程序将对第一个描述符进行编程,使它能指向帧头;描述符中的 Last 标志将设置为 False/0 以表示这是一个多片段发送。设备驱动程序将对下一个描述符进行编程, 使它指向实际的有效负载数据。有效负载缓冲区的最大容量为 2kB,因此,一个描述符足以描述 该缓冲区。但在上述例子有效负载分布在两个描述符中。数组的第一个描述符用于描述帧头,第 二个描述符描述有效负载的前 8 个字节;第三个描述符描述剩下的 4 个字节。在第三个描述符中, 控制字的 Last 位设置为 True/1,表示它是帧信息的最后一个描述符。在上例中,描述符控制区 域的中断位在帧信息的最后一个片段置位,以便在发送完成之后触发一个中断。描述符控制区域 的 Size 区域设置为帧缓冲区的字节数,采用的是减 1 编码。 注:在实际的设备驱动程序中,有效负载通常只在大于 2KB 时才分布于多个描述符中。还要注意:有效负 载无需设备驱动程序复制就可以传送到硬件中(零拷贝设备驱动程序)。 建立了描述符之后,由于设备驱动程序已经对 3 个描述符进行编程,所以将 TxProduceIndex 寄存器加 3。如果在初始化过程中没有将发送通道使能,则设备驱动程序需立即使能该通道。 在发送通道使能的情况下,一旦以太网模块检测到 TxProdeceIndex 不等于 TxConsumeIndex (复位之后,这两个寄存器皆为零),它将立即启动发送操作。TxDMA 从存储器中读取描述符。 存储器系统将返回描述符,以太网模块在读取发送数据片段的同时一个接一个地接收它们。 一旦发送的读数据从存储器中返回,以太网模块就会尝试通过 RMII 接口在以太网线路上启 动发送操作。 在发送完一帧信息的每一个片段之后,TxDMA 会将片段的发送状态写入状态数组。最后一 个片段之外的所有片段的状态将在 TxDMA 管理器接受了数据之后立即写入。最后一个片段的状 态只能在以太网线路完成发送操作之后写入。 最后一个片段的描述符的中断位是置位的,因此,在将最后一个片段的状态提交给了存储器 之后,以太网模块将触发一个 TxDoneInt 中断,该中断可触发设备驱动程序查询状态信息。 在上述例子中,当以太网模块没有将 TxConsumeIndex 加 1 时,设备驱动程序不能添加新的 描述符,因为描述符数组处于满状态(尽管还有一个描述符没有设置)。只有当硬件将第一个片 段的状态提交给了存储器并且 DMA 管理器将 TxConsumeIndex 设置为 1 时,设备驱动程序才能 设置下一个(第 4 个)描述符。第 4 个描述符可以在发送完第一帧信息之前进行设置。 在上述例子中,硬件将 CRC 添加到了帧信息上。如果是设备驱动软件添加 CRC,则驱动程 序需要计算 CRC,并在进行另一个集中式 DMA 操作时将这个 CRC 添加到某一个帧片段上。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 40 40 广州周立功单片机发展有限公司 第 10 章 每个数据字节通过 RMII 接口以四个 2 位值的方式发送。以太网模块添加导言、帧头定界符、 并在硬件 CRC 使能时添加 CRC 帧尾(trailer)。一旦在 RMII 接口上启动发送操作,该操作在 没有出现下溢错误时是不能被中断的。这也是为什么描述符和数据读命令要尽可能快地发送和传 输。 使用 RMII PHY 时,以太网模块和 PHY 之间的数据通信的操作频率为 50MHz。在 10Mbps 模式中,数据只能每 10 个时钟周期发送一次。 10.17.4 接收过程 本小节将对接收过程进行描述,设备驱动软件的活动也将包括在内。 1. 设备驱动软件建立描述符 在初始化接收描述符和状态数组以便接收来自以太网线路的帧信息之后,我们必须在 MAC1 寄存器和控制寄存器中将接收数据通道使能。 在初始化过程中,描述符中的每个指针(Packet 区域)设置为指向数据片段缓冲区。缓冲区 的大小为描述符控制区域中 Size 位的值。另外,描述符控制区域有一个 Interrupt 位,该位可在 填充一个片段缓冲区并将其状态提交给存储器之后产生中断。 在初始化和使能接收通道之后,所有的描述符都由接收硬件占有,并且不可以通过软件来修 改,硬件将 RxProduceIndex 加 1(表示已接收到帧信息)后,便将描述符的拥有权移交给设备驱 动程序。设备驱动程序可在(软)复位接收通道后修改描述符。 2. RxDMA管理器读取Rx描述符数组 当命令寄存器中的 RxEnable 位置位时,RxDMA 管理器读取由 RxDescriptor 和 RxProduceIndex 确定的存储器地址中的描述符。以太网模块会在 RMII 接口上的实际接收数据到 达之前开始读取描述符(描述符预取)。被读取的描述符的大小由硬件拥有的描述符总数决定: RxConsumeIndex-RxProduceIndex-1。描述符的块传输可降低存储器负担。存储器返回的读数据 根据需要进行缓冲和消耗。 3. RxDMA管理器接收数据 在读取描述符之后,接收 DMA 引擎从 RMII 接口接收通过接收过滤器返回的数据。与过滤 标准不匹配的接收帧不会保存到存储器。一旦帧信息通过了接收过滤器,数据就会写入与描述符 相关的片段缓冲区中,RxDMA 的写操作不会超过缓冲区的容量。当接收到的帧信息超过一个描 述符的片段缓冲区时,该帧将写入描述符数组的多个片段缓冲区中。在多片段接收的情况下,最 后一个片段的状态数组中的 LastFrag 位为 1,其它片段的 LastFrag 位都为“0”。帧信息的最后 一个片段数据可能不会填满一个缓冲区,再接收其它帧时,会将数据写入下一个描述符的片段缓 冲区中。 接收完一个片段之后,RxDMA 管理器将状态信息写回状态数组的 StatusInfo 和 StatusHashCRC 字中,同时将描述符的片段缓冲区的字节数写入状态字的 RxSize 中。 RxProdeceIndex 的值只在片段数据和片段状态信息已提交给存储器之后(这将由存储器接口中的 内部标签协议检验)才会更新。RxDMA 管理器继续接收帧信息,直到描述符数组为满。如果描 述符数组已满,则以太网硬件将置位 IntStatus 寄存器的 RxFinishedInt 位。接收通道仍是使能的。 如果接收描述符数组为满,则接收任何新数据都将产生溢出错误和中断。 4. 更新ProduceIndex 每当 RxDMA 管理器提交一个数据片段和相关的状态字给存储器时,表示它已完成描述符的 接收操作,并且让 RxProduceIndex 加 1(考虑到封包设计),将描述符移交给设备驱动软件。当 处理完接收数据时,软件通过将描述符移交给硬件使得描述符能够重新用于新的接收操作。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 41 41 广州周立功单片机发展有限公司 第 10 章 设备驱动软件通过读取 RxProduceIndex 寄存器来查看接收处理进行的程度,从而了解 DMA 管理器的进程。当 Rx 描述符数组完全为空时,RxProduceIndex 保留其最后一个值。 5. 写接收状态 当从 RMII 总线上接收了帧信息之后,帧描述符的 StatusInfo 和 StatusHashCRC 由 DMA 管 理器更新。 如果该描述符是用于帧信息的最后一个片段或整个帧(如果没有片段),则 DMA 管理器会 根据帧信息是否接收成功来设置 StatusInfo 中的错误标志(Error、NoDescriptor、Overrun、 AlignmentError、RangeError、LengthError、SymbolError 或 CRCError)。RxSize 区域的值为实际 写入片段缓冲区的字节数,它采用的是减 1 编码。除了最后一个片段,RxSize 的值将与缓冲区 的大小相等。一个包的目标地址和源地址的 Hash CRC 是对该包的所有片段进行一次计算得来的, 然后将该值存放在与对应片段相关的状态字 StatusHashCRC 中。如果接收操作报告了一个错误, 则这一个接收帧中剩下的所有数据会被丢弃,接收状态区域中的 LastFrag 位将置位,因此,除了 最后一个片段,其余片段的错误标志将始终为零。 最后一个接收帧的状态也可以通过读取 RSV 寄存器来查询。该寄存器不基于片段来报告, 也不存储前一个接收帧的信息。RSV 主要是用于调试的,因为驱动软件和以太网模块之间的通 信是通过帧描述符来实现的。 6. 接收错误处理 当在接收过程中出现错误时,RxDMA 管理器将通过写入状态数组的接收 StatusInfo 和中断 状态寄存器 IntStatus 来报告错误。 接收过程可产生以下几种类型的错误:AlignmentError、RangeError、LengthError、 SymbolError、CRCError、Overrun 和 NoDescriptor。上述错误在接收 StatusInfo 中都有对应的位。 除了在 StatusInfo 中有单独的位之外,StatusInfo 中的 Error 位还是 AlignmentError、RangeError、 LengthError、SymbolError、CRCError 相“或”的结果。错误状态也会传递给 IntStatus 寄存器; 如果出现 AlignmentError、RangeError、LengthError、SymbolError、CRCError 或 NoDescriptor 错 误,则 IntStatus 寄存器中的 RxError 位置位;非重大的溢出错误在 IntStatus 寄存器的 RxError 位 报告;重大的溢出错误在 IntStatus 寄存器的 RxOverrun 位报告。在出现重大的溢出错误时,需通 过置位命令寄存器中的 RxReset 位将 Rx 通道进行软复位。 溢出错误可以有三种情况:  在多片段接收的情况下,下一个描述符丢失。此时,前一个描述符的状态字中的 NoDescriptor 置位,IntStatus 寄存器中的 RxError 也置位。该错误不是重大错误;  接收数据接口上的数据流暂停,破坏数据包。此时,状态字中的溢出位置位,IntStatus 寄存器中的 RxError 也置位。该错误不是重大错误;  当前一个状态仍等待通过存储器接口进行传输的同时,接收状态流暂停并且必须要写入 一个新的状态。该错误将破坏硬件状态,需要对硬件实施软复位。该错误被检测并将 IntStatus 寄存器中的 Overrun 位置位。 第一种溢出条件将导致帧信息不完整,此时,NoDescriptor 状态置位,IntStatus 寄存器中的 RxError 也置位。软件应放弃接收到的一部分帧。在第二种溢出条件中,帧数据将被破坏,从而 使 Status 字中的 Overrun 状态位置位,同时 IntError 中断位也是置位的。在第三种情况下,接收 错误不能在接收状态数组中报告,它会破坏硬件状态;该错误还在 IntStatus 寄存器的 Overrun 位 报告。此时,用户应使用命令寄存器中的 RxReset 位来对硬件实施软复位。 设备驱动程序应获取上面的接收错误并采取动作。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 42 42 广州周立功单片机发展有限公司 第 10 章 7. 接收触发中断 接收通道可以产生 4 种不同类型的中断:  如果描述符控制区域中的 Interrupt 位置位,则在接收了一个片段并将相关的数据和状态 提交给存储器之后,RxDMA 将 IntStatus 寄存器中的 RxDoneInt 位置位。尽管它不是多 片段帧中的最后一个描述符(片段),但我们仍可使用该描述符中的 Interrupt 位产生一 个中断;  如果描述符数组满时以太网硬件仍是使能,则硬件将置位 IntStatus 寄存器中的 RxFinishedInt 位;  如果 AHB 接口不以一个足够高的带宽消耗接收状态,则接收状态将溢出,此时 IntStatus 寄存器中的 RxOverrun 位将置位;  如果出现接收错误(AlignmentError、RangeError、LengthError、SymbolError、CRCError) 或者对于多片段帧设备驱动程序只提供初始片段的描述符而不提供剩余片段的描述符, 或者出现非重大的数据溢出错误时,硬件会将 IntStatus 寄存器中的 RxErrorInt 位置位。 上面的所有中断均可以通过置位或复位 IntEnable 寄存器中的对应位来使能和禁能。使能或 禁能操作不影响 IntStatus 寄存器的内容,只决定是否将中断状态传递给 CPU(通过向量中断控 制器)。 不管是单个帧引起的中断还是整个序列引起的中断,它们都是 DMA 管理器和设备驱动程序 之间进行通信的良好方式,可以触发设备驱动程序来查询已完成处理的描述符的状态字。 8. 设备驱动程序处理接收数据 当对状态中断(例如,RxDoneInt)或 RxProduceIndex 查询响应时,设备驱动程序能够读取 由硬件移交给它的描述符(RxProduceIndex-RxConsumeIndex)。设备驱动程序应查询状态数组 中的状态字来检验多片段帧的接收情况和接收错误。 设备驱动程序将接收数据和状态传递给上层软件。在处理完数据和状态之后,描述符、状态 和数据缓冲区可以重复使用,驱动软件通过将 RxConsumeIndex 加 1 把它们移交给硬件。 9. 接收示例 图 10.6通过一个接收示例来阐明接收过程,该示例中,一帧信息为 19 字节。 LPC1700 用户手册 图 10.6 接收示例的存储器和寄存器 ©2010 Guangzhou ZLGMCU Development CO., LTD. 43 43 广州周立功单片机发展有限公司 第 10 章 复位之后,DMA 寄存器的值将为 0。在初始化过程中,设备驱动软件在存储器中分配描述 符数组和状态数组。上述例子的描述符数组分配了 4 个描述符。该数组为 4×2×4 字节并且是 4 字节地址对齐。描述符的数目与状态数目相等,因此,状态数组也由 4 个元素组成;状态数组为 4×2×4 字节并且是 8 字节地址边界对齐。设备驱动软件将描述符数组的基址(0xFEED B0EC) 写入 RxDescriptor 寄存器,将状态数组的基址(0xFEED B1F8)写入 RxStatus 寄存器。设备驱动 软件还将描述符和状态数目减 1(3)写入 RxDescriptorNumber 寄存器。数组中的描述符和状态 不需要初始化。 在分配了描述符之后,下面将为每个描述符分配片段缓冲区。每个片段缓冲区的范围为:1 字节~2k 字节之间。片段缓冲区的基址存放在描述符的 Packet 区域。片段缓冲区的字节数存放 在描述符控制字的 Size 区域中。描述符控制字的 Interrupt 区域可以设置为:接收处理填充完描 述符时,立即产生一个中断。在上述例子中,片段缓冲区为 8 字节,因此,描述符控制区域的 Size 值为 7。注意:在该例中,片段缓冲区实际上是一个连续的存储器空间;即使当帧信息分布 在多个片段上时,它通常也是一个线性连续的存储器空间;而在描述符数组的结尾对其封包 (wrap)时,帧信息将不在一个连续的存储器空间中。 设备驱动软件应通过向命令寄存器的 RxEnable 位写入“1”来使能接收处理。此后,通过向 MAC1 配置寄存器的“RECEIVE ENABLE”位写入“1”来使能 MAC。现在,以太网模块将启 动以太网帧的接收操作。为减小处理器的中断负担,通过置位 IntEnable 寄存器中的相关位我们 可以将某些中断禁止。 在 RxDMA 管理器使能之后,它将发送描述符读命令。在上述例子中,描述符数目为 4。最 初 RxProduceIndex 和 RxConsumeIndex 为 0。当 RxProduceIndex = RxConsumeIndex-1 时描述符数 组看作是满,RxDMA 管理器只能读取 3 个描述符(RxConsumeIndex- RxProduceIndex-1);注 意描述符数组的封包设计。 在使能 MAC 中的接收功能之后,数据接收将从下一帧开始进行,即,当 RMII 接口正在接 收一帧信息的同时接收功能使能,则该帧信息将被丢弃,接收操作从下一帧开始。以太网模块将 帧信息中的导言和帧起始定界符删除。如果该帧信息通过了接收过滤,则 RxDMA 管理器将启动 第一个片段缓冲区的写操作。 假设该帧信息有 19 个字节。考虑到该例中指定了缓冲区的大小,因此,该帧信息将分布在 3 个片段缓冲区中。在将最初的 8 个字节写入第一个片段缓冲区之后,接着写入的是第一个片段 缓冲区的状态并且 RxDMA 将继续填充第二个片段缓冲区。由于要接收多个片段,因此第一个片 段的状态数组中,StatusInfo 字中的 LastFrag 位将为 0;RxSize 区域设置为 7(8 个,采用减 1 编 码)。在将另外 8 个字节写入第二个片段之后,RxDMA 将继续对第三个片段执行写操作。第二 个片段的状态与第一个片段的状态相同:LastFrag=0,RxSize=7。在将 3 个字节写入第三个片段 缓冲区之后,帧信息到达末尾,接着写入第三个片段的状态,其状态为:LastFrag 位设为 1 且 RxSize 等于 2(3,采用减 1 编码)。 从 RMII 接口上接收到的下一帧信息将写入第四个片段缓冲区,即第三个片段缓冲区的 5 个 字节是未使用的。 RxDMA 管理器使用存储器接口中的一个内部“标签协议”来检验接收数据和状态是否已提 交给存储器。在将片段的状态提交给存储器之后将触发 RxDoneInt 中断,该中断促使设备驱动程 序查询状态信息。在该例中,所有描述符的控制字中的 Interrupt 位都是置位的,即,所有描述符 将在数据和状态提交给存储器之后产生一个中断。 在该例中,当设备驱动软件没有将 RxConsumeIndex 加 1 时,接收功能不能读取新的描述符, 因为描述符数组处于满状态(尽管还有一个描述符没有设置)。只有在设备驱动软件将接收数据 传送给了应用软件,并且将 RxConsumeIndex 加 1 对设备驱动程序进行更新之后,以太网模块才 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 44 广州周立功单片机发展有限公司 第 10 章 能继续读取描述符并接收数据。设备驱动程序将把 3 个片段组成的完整帧传递给应用软件,因此, 它可以将 RxConsumeIndex 加 3,从而同时释放 3 个描述符。 由于接收过滤器的过滤和缓冲模块的延时(128 或 136 个周期),在 RMII 接口上传输的 4 对两位数据将看作一个字节在数据写接口上传输。以太网模块将导言、帧起始定界符和数据 CRC 删除并校验 CRC。为了防止出现缓冲区的 NoDescriptor 错误,操作时将对 3 个描述符进行缓冲。 RxProdeceIndex 的值只在状态信息已提交给了存储器(是否提交由存储器接口中的一个内部“标 签协议”来检验)之后才更新。设备驱动软件将处理接收数据,此后,设备驱动程序将更新 RxConsumeIndex。 10.17.5 发送重试 如果在以太网上出现冲突,则它通常是在一帧数据的前 64 个字节的冲突窗口内发生。如果 检测到冲突,以太网模块将重新发送数据。为达到这个目的,必须对这 64 个字节进行缓冲,使 得在重发过程中能够使用这些数据。一帧数据的前 64 个字节的发送重试对于应用程序和设备驱 动软件来说是完全透明的。 在 64 字节的冲突窗口之外出现冲突将触发 LateCollision 错误,并且发送操作中止。在出现 LateCollision 错误之后,发送帧中剩下的数据将被丢弃。以太网模块将该帧发送状态区域中的 Error 和 LateCollision 位置位。IntStatus 寄存器中的 TxError 位也将置位。如果 IntEnable 寄存器 中的对应位置位,则 IntStatus 寄存器中的 TxError 位将通过向量中断控制器传递给 CPU。设备驱 动软件应获取这个中断并采取适当的动作。 CLRT 寄存器的“RETRANSMISSION MAXIMUM”字段能用来配置发送操作中止之前重试 的最大次数。 10.17.6 状态Hash CRC计算 对于接收到的每帧信息,以太网模块能够检测目标地址和源地址,并从中计算对应的 Hash CRC。为了执行计算功能,以太网模块含有两个内部模块:一个是利用每帧的开端和结尾实现同 步的控制器,另一个是 CRC 计算器。 当检测到一个新帧时,内部信号会通知控制器。控制器开始对与目标地址字节对应的输入帧 字节进行计数。当计数到达第 6 个(并且是最后一个)字节时,控制器通知计算器将对应的 32 位 CRC 存放到第一个内部寄存器中。然后,控制器对下一个输入字节重复计数,以便与源地址 同步。当遇到源地址的最后一个字节时,控制器再次通知 CRC 计算器(CRC 计算器的值在出现 下一个新帧之前一直保持不变)。当计算器接收到第二个通知时,它将现在的 32 位 CRC 存放到 第二个内部寄存器中。然后 CRC 在它们各自的寄存器中保持不变,直到新的通知出现。 写入 StatusHashCRC 字的目标地址和源地址 Hash CRC 为 32 位 CRC 的高 9 位(CRC 计算器 计算出的值) 10.17.7 双工模式 以太网模块有全双工和半双工两种模式。半双工或全双工模式的选择由设备驱动软件在初始 化过程中配置。 如果选择全双工连接,则需将命令寄存器的 FullDuplex 位设置为“1”,MAC2 配置寄存器 的 FULL-DUPLEX 位设置为“1”;如果选择半双工连接,需将这两个位设置为“0”。 10.17.8 IEEE802.3/条款 31 流控制 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 45 45 广州周立功单片机发展有限公司 第 10 章 1. 概述 对于全双工连接,以太网模块遵循“IEEE 802.3/条款 31”中的规定,使用“暂停帧”进行 流控制。这种类型的流控制可用于全双工点对点连接。接收器通过发送“暂停帧”将发送器暂停, 例如,当接收缓冲区为(几乎)满时就可以使用。为了实现该操作,接收方发送一个“暂停帧” 到发送方。 “暂停帧”使用 512 个位时间单元,该值等同于 128 个 rx_clk/tx_clk 周期。 2. 接收流控制 在全双工模式中,以太网模块在接收到一个“暂停帧“时将发送操作挂起。Rx 流控制由发 送操作的接收方启动。通过置位 MAC1 配置寄存器中的“RX FLOW CONTROL”位来使能 Rx 流控制。如果“RX FLOW CONTROL”位为 0,则以太网模块忽略接收到的暂停控制帧。当以 太网模块的接收方接收到暂停帧时,发送方的发送操作将在当前发送帧发送完毕后被中断,中断 时间由接收到的暂停帧的时间总量决定。发送通道将在 512 个位时间内停止发送数据,暂停时间 由接收到的暂停控制帧的暂停定时器区域设置。 默认情况下,不将接收到的暂停控制帧传送到设备驱动程序。如果希望将接收流控制帧传递 给设备驱动程序,则用户需要将 MAC1 配置寄存器中的“PASS ALL RECEIVE FRAMES”位置 位。 3. 发送流控制 如果设备驱动程序需将接收数据暂停(例如,在软件缓冲区满的情况下),则以太网模块可 以发送暂停控制帧。发送流控制需由设备驱动软件启动;不存在由硬件(例如 DMA 管理器)启 动的 IEEE 802.3/31 流控制。 利用软件流控制,设备驱动程序可以根据实际情况,决定是否需要通过发送 Tx 暂停帧来中 断接收帧信息。注意,由于以太网延迟,在流控制生效并且接收流停止之前仍可以接收到一些帧。 发送流控制通过向命令寄存器的 TxFlowControl 位写入“1“来激活。当以太网模块在全双 工模式下工作时,上述置位操作将导致发送 IEEE 802.3/31 暂停帧。流控制继续生效,直到向命 令寄存器的 TxFlowControl 位写入 0。 如果 MAC 在全双工模式下工作,则将命令寄存器的 TxFlowControl 位置位可启动暂停帧的 发送操作。插入暂停帧的暂停定时器区域中的值可通过 FlowControlCounter 寄存器中的 PauseTimer[15:0]来设置。当 TxFlowControl 位失效时,将再自动发送一个暂停定时器值为 0x0000 的暂停帧来中止流控制并恢复发送操作。 如果必须延长流控制的时间,则可以发送连续的暂停帧。利用镜像计数器机制可以支持连续 暂停帧的发送操作。为了使能镜像计数,用户必须向 FlowControlCounter 寄存器的 MirrorCounter[15:0]写入一个非零的值。当 TxFlowControl 位有效时,发送一个暂停帧。在发送完 该暂停帧之后,内部镜像计数器初始化为 0。该计数器每隔 512 个位时间就执行加 1 操作。当它 的计数值等于 MirrorCounter 的值时,发送另一个暂停帧,这个暂停帧的暂停定时器的值等于 FlowControlCounter 寄存器的 PauseTimer 字段的值,此时,内部镜像计数器复位为 0 并重新开始 计数。寄存器 MirrorCounter[15:0]的值通常比寄存器 PauseTimer[15:0]的值小,这样可确保镜像计 数器更早到达计数终点,从而在另一方恢复发送操作之前能够有时间发送一个新的暂停帧。通过 在发送方完成对暂停定时器的计数之前继续发送暂停帧,暂停时间可以在 TxFlowControl 有效的 情况下一直延迟。连续暂停帧的发送操作只有在 TxFlowControl 失效时才中止。当自动发送暂停 定时器的值为 0x0000 的最后一个暂停帧时,TxFlowControl 失效,流控制中止并且发送操作恢复。 向 FlowControlCounter 寄存器的 MirrorCounter 字段写入“0”,用户可以将镜像计数器机制禁能。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 46 46 广州周立功单片机发展有限公司 第 10 章 在使用镜像计数器机制时,考虑到时间延迟、帧发送时间、排队延迟、晶体频率容限以及响应时 间延迟,通常 MirrorCounter 的值大约是 PauseTimer 值的 80%。 如果设备驱动程序将 FlowControlCounter 寄存器的 MirrorCounter 字段的值设置为 0,则以太 网模块只发送一个暂停控制帧。在发送了暂停帧之后,内部暂停计数器初始化为 0;内部暂停计 数器每隔 512 个位时间就执行加 1 操作。一旦它的值等于 PauseTimer 寄存器的值,命令寄存器 中的 TxFlowControl 位将复位。设备驱动软件可通过查询 TxFlowControl 位来检测何时暂停结束。 流控制模块中的内部计数器的值可以通过 FlowControlStatus 寄存器来读取。如果 MirrorCounter 的值为非零,则 FlowControlStatus 寄存器将返回内部镜像计数器的值;如果 MirrorCounter 的值为零,则 FlowControlStatus 寄存器将返回内部暂停计数器的值。 设备驱动程序可以动态修改 MirrorCounter 寄存器的值,并在零 MirrorCounter 和非零 MirrorCounter 模式之间切换。 通过置位 MAC1 配置寄存器中的“TX FLOW CONTROL”位,用户可以使能发送流控制。 如果“TX FLOW CONTROL”位为 0,则 MAC 不能发送暂停控制帧,软件不能启动暂停帧的发 送操作,并且命令寄存器中的 TxFlowControl 位应为“0”。 4. 发送流控制示例 图 10.7所示为发送流控制。 图 10.7 发送流控制 上述例子采用的是全双工模式,即发送一帧信息的同时也接收到一帧信息。设备驱动程序检 测是否出现缓冲区溢出并设置 FlowControlCounter 寄存器的 PauseTimer 字段和 MirrorCounter 字 段的值,此后它通过置位命令寄存器中的 TxFlowControl 位来使能发送流控制。 作为对流控制使能的响应,在当前发送帧完成发送操作之后将发送一个暂停控制帧。在发送 完暂停帧时,内部镜像计数器将启动位槽计数;一旦该计数器的值等于 MirrorCounter 字段的值, 立即发送另一个暂停帧。在计数的同时,发送通道将继续正常的发送操作。 一旦软件将发送流控制禁止,发送通道将立即发送一个零暂停控制帧(zero pause control frame)来恢复接收过程。 10.17.9 半双工模式背压 在半双工模式下工作时,通过发送连续的导言来产生背压将接收包暂停,连续的导言基本上 堵塞了以太网媒体上的其它发送操作。当以太网模块在半双工模式下工作时,命令寄存器中的 TxFlowControl 位有效将导致在以太网线路上施加连续的导言,有效地阻塞了相同网段(segment) 上的其它以太网通信。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 47 47 广州周立功单片机发展有限公司 第 10 章 如果在半双工模式下工作,TxFlowControl 位为高电平时发送连续的导言,直到 TxFlowControl 位失效。如果媒体空闲,则以太网模块开始发送导言,从而唤起载波侦听导致了 其它所有站推迟发送。如果发送导言操作引起一次冲突,则背压“通过(ride through)”冲突。 遭受冲突的站将后退,然后遵循背压。如果用户希望在背压过程中发送一帧信息,则可以将背压 中断,发送帧信息然后恢复背压。如果在 10Mbps 模式中 TxFlowControl 的有效时间长于 3.3ms 或者在 100Mbps 模式中有效时间长于 0.33ms,背压将停止发送导言并持续几个字节的时间以避 免超出 jabber 限制。 10.17.10 接收过滤 1. 接收过滤的特性 以太网 MAC 有以下几种接收包过滤功能,它们可以从软件驱动程序中配置。  完全(perfect)地址过滤:识别与站地址完全匹配的包并将它传递到软件驱动程序中;  Hash 表过滤:对站地址的包进行不完全(imperfect)过滤;  单播/多播/广播包过滤:允许传递所有的单播、多播和/或广播包;  魔法包过滤:检测魔法包,生成一个“LAN 上唤醒”中断。 以上几种过滤功能可以在逻辑上结合起来产生复杂的过滤功能。而且,以太网模块可以传递 或抵制小于 64 字节的短包(runt packet);如果选择混合模式(promiscuous mode),则允许将 所有的包都传递到软件中。 2. 概述 以太网模块通过分析接收帧中的以太网目标地址,能够实现对接收帧进行过滤的功能。该功 能极大地减小了主机系统的负担,因为如果没有接收过滤,那么必须由设备驱动软件来检测和抑 制被寻址到其它站的以太网帧。这样会消耗带宽、存储器空间和主机CPU时间。地址过滤能够使 用完全地址过滤或(不完全)Hash过滤器来实现。使用后一种方法时可产生一个 6 位Hash编码, 然后对 64 入口的可编程Hash表进行索引。图 10.8描述了接收过滤器的功能图。 在图的顶部,以太网接收帧进入过滤器。每个过滤器由控制寄存器的信号控制。每个过滤器 产生一个“就绪”输出和一个“匹配”输出。如果“就绪”为 0,则“匹配”值为“无关”;如 果过滤器完成过滤操作,则它使“就绪”输出有效。如果过滤器找到一个匹配的帧,则它将连同 “就绪”输出一起发出“匹配”输出。过滤器的结果要在逻辑功能上合并为单个的 RxAbort 输出。 如果 RxAbort 输出有效,则不需要接收帧信息。 为了减轻存储器通信,接收通道有一个 68 字节的缓冲区。以太网 MAC 只能在 68 字节延迟 之后开始将一帧信息写入存储器。如果 RxAbort 信号在帧信息的最初 68 字节内有效,则该帧信 息会被丢弃,并从缓冲区中移除不存储到存储器中,也不使用上面的接收描述符等等。如果 RxAbort 信号在帧信息的最初 68 字节之后有效(可能由于接收到魔法帧),以太网 MAC 将停止 将该帧后面的信息数据写入存储器,由于该帧信息的部分数据已写入存储器,此时帧信息的状态 字中的 FailFilter 位将置位,通知设备驱动程序可以立即丢弃该帧。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 48 48 广州周立功单片机发展有限公司 第 10 章 图 10.8 接收过滤器框图 3. 单播、广播和多播 基于帧类型(单播、多播或广播)的普通过滤可以使用 RxFilterCtrl 寄存器中的 AcceptUnicastEn、AcceptMulticastEn、或 AcceptBroadcastEn 位来设置。将 AcceptUnicast、 AcceptMulticast、或 AcceptBroadcast 置位可以分别接收单播类型、多播类型和广播类型的所有帧, 而忽略帧信息中的以太网目标地址。如果想设置为混合模式(promiscuous mode),即接收所有 帧,可以将这 3 个位都设置为 1。 4. 完全地址匹配 当接收到带有单播目标地址的一帧信息时,完全过滤器会将目标地址与自身 MAC 地址寄存 器 SA0、SA1、SA2 中设置的 6 字节站地址进行比较。如果 RxFilterCtrl 寄存器中的 AcceptPerfectEn 位设置为 1 并且地址匹配,则接受该帧信息。 5. 不完全Hash过滤 我们可以根据 Hash 机制使用不完全过滤器。该过滤器将 Hash 函数应用到目标地址上并使 用 Hash 来访问一个表格,指示是否应该接收帧信息。这种类型过滤器的优点是用一个小规模的 表格来覆盖所有可能的地址。缺点是不能完全过滤,有时也接受了一些应该丢弃的帧。  Hash 函数: - 标准以太网循环冗余校验(CRC)函数是从以太网帧的 6 字节目标地址中计算得来 的(不管怎样,这个 CRC 计算是作为整个帧的 CRC 计算的一部分),然后从这 32 位 CRC 结果中取出位[28:23]来构建作为 Hash。我们使用 6 位 Hash 来访问 Hash 表: 将这 6 位 Hash 用作已经设置好接受值的 64 位 HashFilter 寄存器中的索引。如果所 选的接受值为 1,则接受该帧信息; - 设备驱动程序通过对寄存器 HashFilterL 和 HashFilterH 执行写操作来初始化 Hash 过 滤表。HashFilterL 包含该表的位 0~31,HashFilterH 包含该表的位 32~63。因此, LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 49 49 广州周立功单片机发展有限公司 第 10 章 Hash 值 0 对应于 HashFilterL 寄存器的位 0,Hash 值 63 对应于 HashFilterH 寄存器 的位 31;  多播和单播 - 通过将 RxFilter 寄存器中的 AcceptMulticastHashEn 位设置为 1,我们可以将不完全 Hash 过滤器应用于多播地址; - 用于多播地址的同一个不完全 Hash 过滤器也可用于单播地址。在没有使能所有单播 地址的情况下,我们可以使用这种方法响应大量单播地址。通过将 RxFilter 寄存器 中的 AcceptUnicastHashEn 位设置为 1,Hash 过滤器可以应用到单播地址中。 6. 过滤功能的使能和禁能 上面定义的过滤器可通过置位命令寄存器中的 PassRxFilter 位来旁路。当 PassRxFilter 位置 位时,所有接收帧都将传递到存储器。此时,设备驱动软件必须在软件中实现所有过滤功能。置 位 PassRxFilter 位不会影响下面所定义的短帧(runt frame)过滤。 7. 短帧(runt frame) 小于 64 字节的帧(对于 VLAN 帧来说是小于 68 字节)比最小的以太网帧还要小,因此看 作是错误帧。它们会与片段发生冲突。接收通道自动过滤并丢弃这些短帧,不将它们写入存储器 也不使用接收描述符。 当短帧有一个正确的 CRC 时,这个短帧可能是有用的。设备驱动程序可通过将命令寄存器 中的 PassRuntFrame 位置为 1 来接收带有正确 CRC 的短帧。 10.17.11 功率管理 以太网模块依靠时钟切换来实现功率管理。以太网内核中的所有时钟都可以关闭。如果需要 在“LAN 上唤醒”,则用户不可以将 rx_clk 关闭。 10.17.12 LAN上唤醒 1. 概述 以太网模块支持带有“LAN 上远程唤醒”的功率管理功能。当以太网模块继续在 LAN 上“侦 听”包的同时,主机系统,甚至包括以太网模块的一部分电路在内均可以掉电。以太网模块可以 接收和识别特定类型的包并用来触发主机系统使其从掉电状态中唤醒。 系统的唤醒通过一个中断生效。当检测到唤醒事件时,IntStatus 寄存器中的 WakeupInt 位置 位。如果 IntEnable 寄存器中对应的 WakeupIntEn 位置位,则该中断状态将触发一个中断。系统 功率管理逻辑应使用这个中断来唤醒系统。 当以太网模块处于掉电状态时,LAN 上产生唤醒事件的包会丢失。 有两种方法可使以太网包触发唤醒事件:“LAN上的通用唤醒”和“魔法包”。在使用魔法 包实现WoL时,魔法包过滤需使用额外的过滤器来检测魔法包。不管采用哪种方法,只能当触发 包具有一个有效的CRC时才能触发“LAN上唤醒”。图 10.8显示了唤醒信号的产生。 软件可以读取 RxFilterWoLStatus 寄存器来查询出现唤醒事件的原因。在进入掉电状态之前, 功率管理软件应通过写 RxFilterWoLClear 寄存器来清除 RxFilterWoLStatus 寄存器。 注:在进入掉电模式时,接收帧可能不会完全存放到 Rx 缓冲区中。如果出现这种情况,在退出掉电模式 之后,由于要在上一个接收帧前面添加前一帧数据,从而使下一帧受到破坏。软件驱动程序必须在退出掉电模式 之后将接收通道复位。 下面的小节就两种不同的 LAN 上唤醒机制进行描述。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 50 50 广州周立功单片机发展有限公司 第 10 章 2. 通过过滤实现WoL 接收过滤功能可用来在 LAN 事件上产生唤醒信号。如果 RxFilterCtrl 寄存器中的 RxFilterEnWoL 位置位,则在接收到通过过滤器的一帧信息时,接收过滤器将 IntStatus 寄存器中 的 WakeupInt 位置位。中断只在该帧信息的 CRC 是正确的情况下产生。 3. 魔法包WoL 以太网模块支持使用魔法包技术来产生唤醒信号。(见“魔法包技术”,先进的微型设备)。 魔法包是单独用于唤醒功能的特殊构成的包。以太网模块可以接收、分析和识别魔法包并用它来 触发一个唤醒事件。 魔法包的结构如下:在其数据部分包含 16 个重复的、无间隔也无中断的站地址;在此之前 是 6 个值为 0xFF 的魔法包同步字节;魔法包数据部分可能还有一些魔法包模式的周围环境。整 个魔法包在以太网帧的结构上必须是齐全的。 魔法包检测单元分析以太网包,提取包地址并检查魔法包模式的有效负载。包的地址用来与 模式进行匹配(不是SA0/1/2 寄存器中的地址)。只有当魔法包通过图 10.8中所示的接收过滤器 (接收过滤器的结果与魔法包过滤器的结果相“与”产生最终的结果)时,魔法包才能置位“唤 醒中断状态”位。 通过置位 RxFilterCtrl 寄存器中的 MagicPacketEnWoL 位来使能魔法包过滤功能。注意:在 执行魔法包 WoL 功能时,RxFilterCtrl 寄存器中的 RxFilterEnWoL 位应该设置为 0。如果将 RxFilterEnWoL 位设置为 1,则在地址匹配的情况下将接收所有包,而不仅仅是魔法包,因此, 在使用魔法包实现 WoL 时限制会更多。 当检测到一个魔法包时,除了 IntStatus 寄存器中的 WakeupInt 位置位之外,RxFilterWoLStatus 寄存器中的 MagicPacketWoL 位也将置位。软件必须通过写“1”到 RxFilterWoLClear 寄存器来 将该位复位。 举例:下面是一个站地址为 0x11 0x22 0x33 0x44 0x55 0x66 的魔法包实例(MISC 表示魔法 包中的各种附加数据字节): FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 10.17.13 接收和发送的使能与禁能 1. 接收操作的使能与禁能 复位之后,以太网模块的接收功能是禁止的。设备驱动程序将命令寄存器中的 RxEnable 位 以及 MAC1 配置寄存器中的“RECEIVE ENABLE”位置位来使能接收功能(按上述顺序执行置 位)。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 51 51 广州周立功单片机发展有限公司 第 10 章 接收通道的状态可通过设备驱动程序读取状态寄存器中的RxStatus位来监控。图 10.9阐述了 用来产生RxStatus位的状态机。 图 10.9 接收有效/无效的状态机 复位之后,状态机处于 INACTIVE 状态。一旦命令寄存器中的 RxEnable 位置位,状态机就 立即转换到 ACTIVE 状态。RxEnable 位清零时,状态机立即返回 INACTIVE 状态。如果接收通 道禁能时正忙于接收一个信息包,等待接收通道将完成接收操作,在将接收包连同该包的状态一 起存放到存储器中后返回 INACTIVE 状态。此外,如果接收描述符数组满,状态机也将返回 INACTIVE 状态。 对于如图 10.9所示的状态机来说,软复位与硬复位一样有效,即一次软复位之后,接收通道 将进入INACTIVE状态直到重新使能。 2. 发送操作的使能与禁能 复位之后,以太网模块的发送操作是禁止的。设备驱动程序将命令寄存器中的 TxEnable 位 置位可使能 Tx 发送通道。 可通过设备驱动程序读取Status寄存器中的TxStatus位来监控发送通道的状态。图 10.10阐述 了用来产生TxStatus位的状态机。 图 10.10 发送有效/无效的状态机 复位之后,状态机进入 INACTIVE 状态。一旦命令寄存器中的 TxEnable 位置位并且 Produce 和 Consume 索引不相等,状态机就立即转换到 ACTIVE 状态。如果 TxEnable 位清零并且发送通 道完成了所有挂起的发送操作,那么在将发送状态提交给存储器后,状态机立即返回 INACTIVE LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 52 52 广州周立功单片机发展有限公司 第 10 章 状态。如果 Produce 和 Consume 索引再次相等,即发送完所有帧,状态机也将返回 INACTIVE 状态。 对于如图 10.10所示的状态机来说,软复位与硬复位一样有效,即一次软复位之后,发送通 道将进入INACTIVE状态直到重新使能。 10.17.14 发送填充和CRC 在一帧信息小于 60 字节(对于 LVAN 帧来说是小于 64 字节)的情况下,以太网模块可以 将该帧填充到 64 或 68 字节,包括 4 字节 CRC 帧校验序列(FCS)。填充功能受到 MAC2 配置 寄存器中的“AUTO DETECT PAD ENABLE”(ADPEN)、“VLAN PAD ENABLE”(VLPEN) 和“PAD/CRC ENABLE”(PADEN)位以及发送描述符控制字中的 Override 和 Pad 位的影响。 CRC 的产生受到 MAC2 配置寄存器中的“CRC ENABLE”(CRCE)和“DELAYED CRC”(DCRC) 位以及发送描述符控制字中的 Override 和 CRC 位的影响。 如果描述符中的 Override 位为 0,则有效的填充使能(EPADEN)与 MAC2 配置寄存器中的 “PAD/CRC ENABLE”位是等同的。如果 Override 位为 1,则 EPADEN 将从描述符的 Pad 位获 得。同样,如果 Override 位为 0,则有效的 CRC 使能(ECRCE)与 CRCE 是等同的。否则它等 同于描述符的 CRC 位。 如果要求使用填充功能,则被填充的帧信息上将始终添加 CRC。而对于没有填充的帧,只 有当“ECRCE”置位时才添加 CRC。 如果 EPADEN 为 0,则不对短帧进行填充,此时也不添加 CRC,除非 ECRCE 置位。 如果 EPADEN 为 1,则要对短帧进行填充并始终在被填充的帧信息上添加 CRC。如果 ADPEN 和 VLPEN 均为 0,则将短帧填充到 60 字节,并添加一个 CRC 得到 64 字节的帧。如果 VLPEN 为 1,则将短帧填充到 64 字节,并添加一个 CRC 得到 68 字节的帧。如果 ADPEN 为 1,而 VLPEN 为 0,则将 VLEN 帧填充到 64 字节,非 VLEN 帧填充到 60 字节,并在被填充的帧上添加 CRC, 分别产生 64 和 68 字节的填充帧。 如果“生成 CRC”使能,则为了跳过特定的帧头信息,CRC 的生成可通过置位 MAC2 寄存 器中的 DELAYED CRC 位来延迟(四字节)。 10.17.15 超长帧和帧长度检验 将 MAC2 配置寄存器中的“HUGE FRAME ENABLE”位设置为 1 可以使能任意长度帧的发 送和接收操作。通过置位发送描述符控制字中的“Override”和“Huge”位,超长帧发送可以在 一帧基础上使能。 在使能超长帧时,以太网模块不会检验帧长度也不会报告帧长度错误(RangeError 和 LengthError)。如果超长帧使能,RSV 寄存器中接收到的字节数可能是无效的,因为该帧信息 可能超出了最大长度限制,而接收状态数组中的 RxSize 区域将是有效的。 通过将帧信息的长度/类型区域与帧信息中的实际字节数相比,可以检验帧长度。通过置位 接收 StatusInfo 字中的对应位,可以报告 LengthError。 MAXF 寄存器允许设备驱动程序指定帧信息中的最大字节数。以太网模块将实际的接收帧 与 MAXF 的值进行比较,并且当帧信息的实际字节数更大时,在接收 StatusInfo 字中报告 RangeError。 10.17.16 统计计数器 通常,以太网应用程序包含多个用来跟踪以太网通信统计的计数器。有大量的标准用来详细 说明这些计数器,例如,IEEE 标准 802.3/条款 30。其它标准如 RFC 2665 和 RFC 2233。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 53 53 广州周立功单片机发展有限公司 第 10 章 本文档采取的方法是默认所有的计数器都在软件中实现。根据帧状态中的 StatusInfo 字段, 在标准中列出的许多重要的统计事件都能够由软件来统计事件。 10.17.17 MAC状态向量 MAC 检测到的发送和接收状态信息可以从寄存器 TSV0、TSV1 和 RSV 中获得,因此,软 件可以查询它们。正常情况下应限制使用这些寄存器,因为驱动软件和以太网模块之间的通信主 要是通过帧描述符发生的。统计事件可以在设备驱动程序中由软件来计数。而在进行调试时,发 送和接收状态向量可以设置为可见。只要 MAC 的内部状态有效,它们就是有效的并且通常只能 在发送和接收处理停止时才能读取。 10.17.18 复位 以太网模块有一个硬复位输入,它连接到芯片复位脚上,与几个通过置位寄存器中的对应位 而实现的软复位是一样的。以太网模块中的所有寄存器在硬复位之后都为 0,除非特别说明。 1. 硬复位 硬复位之后,所有寄存器都被设置为它们的默认值。 2. 软复位 通过置位命令寄存器和 MAC1 配置寄存器中的对应位,我们可以对一部分以太网模块进行 软复位。MAC1 寄存器有 6 处不同的复位:  SOFT RESET:该位置位将把 MAC 中除了 MAC 寄存器(地址 0x000~0x0FC)之外的 所有模块复位。软复位的值在一次硬复位有效之后为“1”,即在硬复位之后要将软复位 清零;  SIMULATION RESET:将发送功能中的随机数发生器复位。在一次硬复位有效之后, 该值为 0;  RESET MCS/Rx :该位置位将把 MAC 中的 MAC 控制子层(暂停帧逻辑)和接收功能 复位。在一次硬复位有效之后,该值为 0;  RESET Rx:该位置位将把 MAC 中的接收功能复位。在一次硬复位有效之后,该值为 0;  RESET MCS/Tx :该位置位将把 MAC 中的 MAC 控制子层(暂停帧逻辑)和发送功能 复位。在一次硬复位有效之后,该值为 0;  RESET Tx:该位置位将把 MAC 中的发送功能复位。在一次硬复位有效之后,该值为 0。 上述复位值必须通过软件来清零。 命令寄存器有 3 处不同的复位:  TxReset:向 TxReset 位写入“1”可将发送通道复位,包括发送通道中的所有(只读) 寄存器和主机寄存器模块中的 TxProduceIndex 寄存器,但 MAC 部分除外。发送通道的 软复位将中止发送通道的所有 AHB 处理。以太网模块自动把该位清零。发送通道的软 复位会把 Status 寄存器中的 TxStatus 位清零;  RxReset:向 RxReset 位写入“1”可将接收通道复位,包括接收通道中的所有(只读) 寄存器和主机寄存器模块中的 RxConsumeIndex 寄存器,但 MAC 部分除外。接收通道 的软复位将中止接收通道的所有 AHB 处理。以太网模块自动把该位清零。接收通道的 软复位会把 Status 寄存器中的 RxStatus 位清零;  RegReset:将所有通道和主机寄存器模块中的所有寄存器复位,MAC 中的寄存器除外。 寄存器软复位也将中止发送和接收通道上的所有 AHB 处理。以太网模块自动把该位清 零。 为了实现以太网模块的完全软复位,设备驱动软件必须: LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 54 54 广州周立功单片机发展有限公司 第 10 章  将 MAC1 寄存器中的“SOFT RESET”位设为 1;  将命令寄存器中的 RegReset 位设为“1”(该位自动清零);  重新初始化 MAC 寄存器(0x000~0x0FC);  将 MAC1 寄存器中的“SOFT RESET”位复位为“0”。 只复位发送通道,设备驱动软件必须:  将 MAC1 寄存器中的“RESET MCS/Tx”位设为“1”;  通过将命令寄存器中的 TxEnable 位设为“0”来禁止 TxDMA 管理器;  将命令寄存器中的 TxReset 位设为“1”(该位自动清零);  将 MAC1 寄存器中的“RESET MCS/Tx”位复位为“0”。 只复位接收数据通道,设备驱动软件必须:  通过复位 MAC1 配置寄存器中的“RECEIVE ENABLE”位和复位命令寄存器中的 RxEnable 位来禁止接收功能;  将 MAC1 寄存器中的“RESET MCS/Rx”位设为“1”;  将命令寄存器中的 RxReset 位设为“1”(该位自动清零);  将 MAC1 寄存器中的“RESET MCS/Rx”位复位为“0”。 10.17.19 以太网错误 以太网模块能够产生以下几种错误:  接收操作可能导致的错误:AlignmentError、RangeError、LengthError、SymbolError、 CRCError、NoDescriptor 或 Overrun。上述错误将在接收 StatusInfo 和中断状态(IntStatus) 寄存器中报告;  发送操作可能导致的错误:LateCollision、ExcessiveCollision、ExcessiveDefer、 NoDescriptor 或 Underrun。上述错误将在发送 StatusInfo 和中断状态(IntStatus)寄存器 中报告。 10.18 AHB带宽 以太网模块连接到 AHB 总线上,该总线需要传送所有与以太网通信相关的数据和控制信息 (必要的 CPU 访问除外),这样以太网模块才能正常运作。 10.18.1 DMA访问 1. 假设 通过作出一些假设,我们可以计算出 AHB 传输每个字节时所需的带宽,并将它们相加来获 得总的带宽要求。 以太网模块中用到的描述符非常灵活,允许定义一定大小的存储器缓冲区。为了分析总线带 宽要求,我们必须对这些缓冲区作出一些假设,使得“最坏的情况”不会出现。因为这种情况会 把指向一个字节缓冲区、大多数存储器用来保存描述符和少许数据的描述符包含进来。显然, AHB 不能处理由这种低级(并且是不合逻辑)的情况引起的超大量总线通信。 在对此进行分析时,我们假定以太网包由 64 字节的帧信息组成,并假定发送和接收通道上 的通信是连续的。 该分析不反映以太网通信在时间上的流程,这样,在发送和接收通道中将采用内部包间隔, 从而在时间间隔上采用最低的带宽要求。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 55 广州周立功单片机发展有限公司 第 10 章 2. DMA访问类型和它们的带宽要求 外部以太网 PHY 接口是通过 RMII 实现的。RMII 在 50MHz 下工作,4 个时钟周期内传输一 个字节。数据传输率是 12.5Mbps。 以太网模块在以下情况下会启动 DMA 访问:  Tx descriptor 读操作: - 发送描述符占据存储器的 2 个字(8 字节),每使用一次描述符就对其进行一次读 操作; - 每发送 64 字节(16 字)数据就对 2 个字的发送描述符执行一次读操作; - 因此,读描述符的速率为数据率的 1/8,即 1.5625 Mbps;  Rx descriptor 读操作: - 接收描述符占据存储器的 2 个字(8 字节),每使用一次描述符就对其执行一次读 操作; - 每接收 64 字节(16 字)数据,就对两个字的接收描述符执行一次读操作; - 因此,读描述符的速率为数据率的 1/8,即 1.5625Mbps;  Tx 状态写操作: - 发送状态占据存储器的 1 个字(4 字节),并且每使用一次描述符就执行一次发送 状态写操作; - 每发送 64 字节(16 字)数据就对 1 个字的发送状态执行一次写操作; - 因此,写发送状态的速率为数据率的 1/16,即 0.7813 Mbps;  Rx 状态写操作: - 接收状态占据存储器的 2 个字(8 字节),并且每使用一次描述符就执行一次接收 状态写操作; - 每接收 64 字节(16 字)数据就对两个字的接收状态执行一次写操作; - 因此,写接收状态的速率为数据率的 1/8,即 1.5625 Mbps;  Tx 数据读操作: - 发送以太网帧中的数据,大小是可变的; - 基本以太网速率为 12.5 Mbps;  Rx 数据写操作: - 接收以太网帧中的数据,大小是可变的; - 基本以太网速率为 12.5 Mbps; 综上所述,以太网 DMA 功能产生的通信总速率为 30.5 Mbps。 10.18.2 CPU访问的类型  反映(mirror)每个 DMA 访问的访问类型: - 必须读取所有或部分状态值,并在每次使用之后对所有或部分描述符执行写操作。 CPU 必须将已发送的数据存放在存储器中。并且最终,CPU 必须从存储器中重新 获得接收到的数据; - 因此,组合 DMA 功能大约可以给出相同或稍微低一些的速率,即 30.5 Mbps;  访问以太网模块中的寄存器: - CPU 必须读取 RxProduceIndex、TxConsumeIndex 和 IntStatus 寄存器,并读写 RxConsumeIndex 和 TxProduceIndex 寄存器; - 每发送和接收 64 字节(16 字)数据,就执行一次 7 字读/写操作; - 因此,访问速率为数据率的 7/16,即 5.4688 Mbps。 综上所述,以太网 DMA 功能产生的通信总速率为 36 Mbps。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 56 56 广州周立功单片机发展有限公司 第 10 章 10.18.3 总带宽 AHB 上总的通信为 DMA 访问率和 CPU 访问率的总和,大约为 66.5 MB/s。 为了实现某些用途,例如保存经常使用的地址(如站地址),我们使用了部分存储器缓冲区, 所以最高的带宽要求可能要高一些。设备驱动软件能够决定如何以有效的方式,在不过度使用 AHB 的情况下构建信息帧。 AHB 总线上的带宽由系统时钟频率决定。例如,假定系统时钟在 60MHz 频率下运行。与以 太网相关的总线访问几乎都是字传输。原始 AHB 带宽中基本上每两个系统时钟传输 4 字节,即 相当于系统时钟速率的两倍。因此,对于 60MHz 的系统时钟,带宽为 120MB/s,在同时发送和 接收时,以太网通信的 AHB 总线利用率大约为 55%。 10.19 CRC计算 CRC 计算有以下几个用途:  在以太网帧的结尾产生 FCS;  产生 Hash 表索引,用于 Hash 表过滤;  产生目标地址和源地址的 Hash CRC。 CRC 计算的伪代码如下所示,函数的入口参数为数据帧(无 FCS)和该帧的帧长度。该函 数返回一个 32 位整数的 CRC。 int crc_calc(char frame_no_fcs[], int frame_len) { int i; // 迭代子 int j; // 另一个迭代子 char byte; // 当前字节 int crc; // CRC 结果 int q0, q1, q2, q3; // 临时变量 crc = 0xFFFFFFFF; for (i = 0; i < frame_len; i++) { byte = *frame_no_fcs++; for (j = 0; j < 2; j++) { if (((crc >> 28) ^ (byte >> 3)) & 0x00000001) { q3 = 0x04C11DB7; } else { q3 = 0x00000000; } if (((crc >> 29) ^ (byte >> 2)) & 0x00000001) { q2 = 0x09823B6E; } else { q2 = 0x00000000; } if (((crc >> 30) ^ (byte >> 1)) & 0x00000001) { q1 = 0x130476DC; } else { q1 = 0x00000000; } if (((crc >> 31) ^ (byte >> 0)) & 0x00000001) { LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 57 57 广州周立功单片机发展有限公司 第 10 章 q0 = 0x2608EDB8; } else { q0 = 0x00000000; } crc = (crc << 4) ^ q3 ^ q2 ^ q1 ^ q0; byte >>= 4; } } return crc; } 在进行 FCS 计算时,将帧中的第一个字节和帧长度(无 FCS)传递给函数。 在进行 Hash 过滤时,将帧信息的目标地址部分传递给函数,仅在这 6 个地址字节上计算 CRC。Hash 过滤器使用位[28:23]来索引 64 位{HashFilterH, HashFilterL}向量。如果对应的位置位, 则传递信息包,否则 hash 过滤器将抑制该信息包。 为了获得目标地址和源地址的 Hash CRC,该函数首先计算两个 32 位 CRC,然后从每个 32 位 CRC 中提取 9 个最高有效位,将它们连在一起,并写入每个片段状态的 StatusHashCRC 字中。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 58 58 LPC1700 系列微控制器 第第 1111 章章 UUSSBB 设设备备控控制制器器 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 11 章 USB 设备控制器································································································ 1 11.1 如何阅读本章 ················································································································1 11.2 基本配置 ························································································································1 11.3 简介 ································································································································1 11.4 特性 ································································································································2 11.5 固定的端点配置·············································································································2 11.6 功能描述 ························································································································3 11.7 操作概述 ························································································································4 11.8 引脚描述 ························································································································5 11.9 时钟和功率管理·············································································································5 11.10 寄存器描述 ····················································································································6 11.11 中断处理 ······················································································································27 11.12 串行接口引擎命令描述 ·······························································································28 11.13 USB 设备控制器的初始化 ··························································································36 11.14 从模式操作 ··················································································································37 11.15 DMA 操作 ····················································································································38 11.16 双缓冲的端点操作·······································································································47 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第 11 章 第11章 USB设备控制器 11.1 如何阅读本章 本章描述了所有 LPC1700 系列 Cortex-M3 微控制器器件上的 USB 设备控制器。 11.2 基本配置 使用下列寄存器来配置 USB 控制器: a)功率:在 PCONP 寄存器中置位 PCUSB。 注:复位时,USB 模块被禁止(PCUSB=0)。 b)时钟:USB 模块与特定的 PLL(或主 PLL)一起使用来获得 USB 时钟(见“PLL1 寄存 器描述”)。 c)管脚:使用 PINSEL0~PINSEL5 和 PINMODE0~PINMODE5 来选择 USB 管脚及其模式, 见“引脚连接模块”章节的“寄存器描述”小节。 d)唤醒:USB 总线端口上的活动可将微控制器从掉电模式中唤醒,见“计时和功率控制” 章节的“从低功耗模式中唤醒”小节。 e)中断:使用相关的中断设置使能寄存器在 NVIC 中将中断使能。 f)初始化:见本章的“USB 设备控制器初始化”描述。 11.3 简介 通用串行总线(USB)为 4 线总线,支持一个主机与一个或多个外设(高达 127 个)之间的 通信。主控制器通过一个基于令牌的协议为连接的设备分配 USB 带宽。USB 总线支持设备的热 插拔与动态配置。主控制器启动所有的事务处理。 主机将事务安排在 1ms 的帧中。每帧都包含一个帧开始(SOF)标记和与设备端点进行往返 数据传输的事务。每一个设备最多可以具有 16 个逻辑端点或 32 个物理端点。针对端点定义了 4 种传输类型。控制传输可用来对设备进行配置。中断传输则用于周期数据传输。批量传输在对传 输速率没有严格要求时使用。同步传输保证了传输时间,但没有纠错功能。 通用串行总线的详细信息请参考 USB 规范制订者论坛(USB Implementers Forum)的网站。 LPC1700 系列 Cortex-M3 微控制器的 USB 设备控制器使能与 USB 主控制器之间的全速 (12Mb/s)数据交换。 表 11.1 本章用到的与 USB 相关的首字母缩写词、简写以及定义 缩写词 AHB ATLE ATX DD DDP DMA EOP EP 先进的高性能总线 自动传输长度提取 模拟收发器 DMA 描述符 DMA 描述指针 直接存储器访问 信息包结束 端点 定义 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第 11 章 缩写词 EP_RAM FS LED LS MPS NAK PLL RAM SOF SIE SRAM UDCA USB 端点 RAM 全速 发光二极管 低速 最大信息包容量 否定应答 锁相环 随机访问存储器 帧开始 串行接口引擎 同步 RAM USB 设备通信区域 通用串行总线 定义 续上表 11.4 特性  完全兼容 USB 2.0 全速规范;  支持 32 个物理(16 个逻辑)端点;  支持控制、批量、中断和同步端点;  运行时,可调整使用的端点;  运行时,可通过软件选择端点最大包长度(可达到 USB 规范规定的最大长度);  支持 SoftConnect 和 GoodLink 特性;  所有非控制端点支持 DMA 传输;  允许 CPU 控制和 DMA 模式之间的动态切换;  实现了批量端点和同步端点上的双缓冲。 11.5 固定的端点配置 表 11.2列出了所支持的端点配置。端点在运行时利用端点使用寄存器来使用端点并进行配 置,见“端点使用寄存器”的描述。 表 11.2 固定的端点配置 逻辑端点 0 0 1 1 2 2 3 3 4 4 5 物理端点 0 1 2 3 4 5 6 7 8 9 10 端点类型 控制 控制 中断 中断 批量 批量 同步 同步 中断 中断 批量 方向 Out In Out In Out In Out In Out In Out 数据包长度(字节) 8,16,32,64 8,16,32,64 1~64 1~64 8,16,32,64 8,16,32,64 1~1023 1~1023 1~64 1~64 8,16,32,64 双缓冲 无 无 无 无 有 有 有 有 无 无 有 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 逻辑端点 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 物理端点 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 端点类型 批量 同步 同步 中断 中断 批量 批量 同步 同步 中断 中断 批量 批量 同步 同步 中断 中断 批量 批量 批量 批量 11.6 功能描述 USB设备控制器的结构如图 11.1所示。 方向 In Out In Out In Out In Out In Out In Out In Out In Out In Out In Out In 数据包长度(字节) 8,16,32,64 1~1023 1~1023 1~64 1~64 8,16,32,64 8,16,32,64 1~1023 1~1023 1~64 1~64 8,16,32,64 8,16,32,64 1~1023 1~1023 1~64 1~64 8,16,32,64 8,16,32,64 8,16,32,64 8,16,32,64 第 11 章 续上表 双缓冲 有 有 有 无 无 有 有 有 有 无 无 有 有 有 有 无 无 有 有 有 有 图 11.1 USB 设备控制器方框图 11.6.1 模拟收发器 USB 设备控制器有一个内置的模拟收发器(ATX)。USB ATX 发送/接收 USB 总线的双向 D+和 D-信号。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 11 章 11.6.2 串行接口引擎(SIE) SIE 实现全速 USB 协议层。从速度角度来看,它完全是线缆硬连接的(hardwired),不需 要任何固件干涉。SIE 对 EP_RAM 中的端点缓冲区与 USB 总线之间的数据传输进行处理。该模 块的功能包括:同步模式识别,并行/串行转换,位填充/解除填充、CRC 校验/产生、PID 验证/ 生成、地址识别和握手信号的评估/生成。 11.6.3 端点RAM(EP_RAM) 每个端点缓冲区都以基于 FIFO 的 SRAM 形式实现。专用于此用途的 SRAM 称作 EP_RAM。 每个已实现的端点在 EP_RAM 中都有一个保留空间。所需的总的 EP_RAM 空间由使用的端点数、 端点的最大包长度以及端点是否支持双缓冲来决定。 11.6.4 EP_RAM访问控制 EP_RAM 访问控制逻辑对 EP_RAM 和能够访问 EP_RAM 的 3 个源之间的数据传输进行处 理。这 3 个源指的是 CPU(通过寄存器接口进行访问)、SIE 和 DMA 引擎。 11.6.5 DMA引擎和总线主机接口 当某个端点的 DMA 引擎使能时,它在 AHB 总线上的 RAM 与 EP_RAM 中的端点缓冲区之 间传输数据。所有端点共用一个 DMA 通道。在传输数据时,DMA 引擎通过总线主机接口作为 AHB 总线上的主机运行。 11.6.6 寄存器接口 寄存器接口允许 CPU 来控制 USB 设备控制器的操作。而且在将发送数据写入控制器以及从 控制器中读取接收数据时也会用到寄存器接口。 11.6.7 SoftConnect USB 连接可通过一个 1.5kΩ 上拉电阻将 D+(对于全速设备)拉为高电平来实现。在确立与 USB 连接之前,软件可以使用 SoftConnect 特性来完成其初始化序列。该特性还可以在无需拔下 电缆的情况下执行 USB 总线连接的重新初始化。 在使用 SoftConnect 特性时,CONNECT 信号应控制一个外部开关,这个开关与 D+和+3.3V 之间的 1.5kΩ 电阻相连。然后,通过使用 SIE 设置设备状态命令来对 CON 位执行写操作,从而 实现软件对 CONNECT 信号的控制。 11.6.8 GoodLink GoodLink 技术可用于指示 USB 连接是否良好。在成功地对设备进行清点和配置之后,LED 指示器将永久接通。在挂起期间,LED 是关闭的。 该特性对 USB 设备的状态提供一个用户友好的指示。它是一个非常有用的区域诊断工具, 可以将故障设备分离出来。 在使用 GoodLink 特性时,UP_LED 信号用于控制 LED。UP_LED 信号使用 SIE 配置设备命 令来控制。 11.7 操作概述 USB 总线事务在设备端点和主机之间传输数据。事务的方向由主机一方定义。OUT 事务指 的是将数据从主机传送到设备。IN 事务指的是将数据从设备传送主机。所有的事务都由主控制 器启动。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 11 章 对于 OUT 事务,USB ATX 接收 USB 总线的双向 D+和 D-信号。串行接口引擎(SIE)从 ATX 中接收串行数据并将它转换为并行数据流。并行数据会被写入 EP_RAM 的对应的端点缓冲 区中。 对于 IN 事务,SIE 从 EP_RAM 的端点缓冲区中读取并行数据,将它转换为串行数据,并使 用 USB ATX 将它传输到 USB 总线上。 一旦数据接收或发送完成,我们就可以对端点缓冲区进行读和写操作。这一点该如何实现由 端点的类型和工作模式决定。每个端点有两种工作模式:从(CPU 控制的)模式和 DMA 模式。 在从模式中,CPU 使用寄存器接口在 RAM 和端点缓冲区之间传输数据。从模式的详细描述 请参考“从模式操作”章节。 在 DMA 模式中,DMA 在 RAM 和端点缓冲区之间传输数据。DMA 模式的详细描述请参考 “DMA 操作”章节。 11.8 引脚描述 表 11.3 USB 外部接口 名称 VBUS USB_CONNECT USB_UP_LED USB_D+ USB_D- 方向 I O O I/O I/O 描述 VBUS 状态输入。在没有通过对应的 PINSEL 寄存器将功能使能 时,它在内部驱动为高电平 SoftConnect 控制信号 GoodLink LED 控制信号 正向差分数据 反向差分数据 11.9 时钟和功率管理 本小节描述了 USB 设备控制器的时钟和功率管理特性。 11.9.1 功率要求 USB 协议坚决要求对 USB 设备进行功率管理。如果 USB 设备从总线中汲取功率(总线供 电设备),则功率管理将变得非常重要。一个由总线供电的设备应满足下面的约束条件: a)一个处于未配置状态的设备从总线中汲取的最大电流应为 100mA。 b)一个已配置好的设备能够汲取的电流最高只能达到配置描述符的 Max Power 字段中规定 的值。这个最大值为 500mA。 c)处于挂起状态的设备能够汲取的最大电流为 500µA。 11.9.2 时钟 表 11.4所示为USB设备控制器的时钟。 表 11.4 USB 设备控制器时钟源 时钟源 AHB 主机时钟 AHB 从机时钟 usbclk 描述 AHB 主机总线接口和 DMA 的时钟 AHB 从机接口的时钟 来自 USB 特定 PLL 或主 PLL 的 48MHz 时钟,用于恢复来自 USB 总线的 12MHz 时钟 11.9.3 功率管理支持 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 11 章 为了节省功率,USB 设备控制器在没有使用时自动禁止 AHB 主时钟和 usbclk。 当 USB 设备控制器进入挂起状态时(总线在 3ms 内保持空闲),设备控制器的 usbclk 输入 将自动禁能,有助于节省功率。但如果软件希望访问设备控制器的寄存器,则 usbclk 必须有效。 若想在设备处于挂起状态时对设备控制器的寄存器进行访问,则必须使用 USBClkCtrl 寄存器和 USBClkSt 寄存器。 当软件希望访问设备控制器的寄存器时,首先,它应该通过置位 USBClkCtrl 寄存器中的 DEV_CLK_EN 以保证 usbclk 使能,然后查询 USBClkSt 寄存器中对应的 DEV_CLK_ON 位,直 到该位置位。一旦 DEV_CLK_ON 置位,在软件将 DEV_CLK_EN 清零之前,usbclk 会一直保持 使能。 在进行 DMA 传输时,设备控制器自动开启 AHB 主时钟。一旦 AHB 主时钟启动,它将在至 少 2ms(2 帧)内保持有效,这样有助于确保 DMA 吞吐量不受到 AHB 主时钟关闭的影响。在 上一次 DMA 访问之后 2ms,AHB 主时钟自动禁能以节省功率。如有需要,软件还可以使用 USBClkCtrl 寄存器强制该时钟保持使能。 需要注意的是只要 PCONP 的 PCUSB 位置位,AHB 从时钟将始终是使能的。如果没有使用 设备控制器,则将 PCUSB 清零即可以将该控制器的所有时钟禁能。 使用 USB_NEED_CLK 信号可使芯片进入掉电模式或从掉电模式中唤醒变得非常容易。如 果 USBClkSt 寄存器中的任何一个位有效,则 USB_NEED_CLK 有效。 当设备在 DEV_CLK_EN 和 AHB_CLK_EN 均为清零的情况下进入挂起状态之后, DEV_CLK_ON 和 AHB_CLK_ON 在对应的时钟关闭时将清零。当这两个位都为 0 时, USB_NEED_CLK 为低电平,表示可通过写 PCON 寄存器将芯片置于掉电模式。USB_NEED_CLK 的状态可以从 USBIntSt 寄存器中读取。 挂起状态下的任何总线活动都将使 USB_NEED_CLK 信号有效。当芯片处于掉电模式,USB 中断使能时,USB_NEED_CLK 有效将会使芯片从掉电模式中唤醒。 11.9.4 远程唤醒 USB 设备控制器支持软件启动的远程唤醒功能。远程唤醒会恢复 USB 总线上由设备启动的 信号。远程唤醒通过将 SIE 设置设备状态寄存器中的 SUS 位清零来实现。在写寄存器之前,必 须使用 USBClkCtrl 寄存器将设备控制器的所有时钟使能。 11.10 寄存器描述 表 11.5显示了CPU可直接访问的USB设备控制器寄存器。串行接口引擎(SIE)含有通过SIE 命令寄存器进行间接访问的其它寄存器。详细信息请参考“串行接口引擎命令描述”。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 11 章 名称 时钟控制寄存器 USBClkCtrl USBClkSt 设备中断寄存器 USBIntSt USBDevIntSt USBDevIntEn USBDevIntClr USBDevIntSet USBDevIntPri 端点中断寄存器 USBEpIntSt USBEpIntEn USBEpIntClr USBEpIntSet USBEpIntPri 端点使用寄存器 USBReEp USBEpInd USBMaxPSize USB 传输寄存器 USBRxData USBRxPLen USBTxData USBTxPLen USBCtrl SIE 命令寄存器 USBCmdCode USBCmdData DMA 寄存器 USBDMARSt USBDMARClr USBDMARSet USBUDCAH USBEpDMASt USBEpDMAEn USBEpDMADis USBDMAIntSt USBDMAIntEn USBEoTIntSt LPC1700 用户手册 表 11.5 USB 设备寄存器映射 描述 访问 复位值[1] 地址 USB 时钟控制 USB 时钟状态 R/W 0x0000 0000 0x5000 CFF4 RO 0x0000 0000 0x5000 CFF8 USB 中断状态 USB 设备中断状态 USB 设备中断使能 USB 设备中断清零 USB 设备中断设置 USB 设备中断优先级 USB 端点中断状态 USB 端点中断使能 USB 端点中断清零 USB 端点中断设置 USB 端点优先级 USB 使用端点 USB 端点索引 USB 最大包长度 USB 接收数据 USB 接收包长度 USB 发送数据 USB 发送包长度 USB 控制 USB 命令代码 USB 命令数据 USB DMA 请求状态 USB DMA 请求清零 USB DMA 请求设置 USB UDCA Head USB 端点 DMA 状态 USB 端点 DMA 使能 USB 端点 DMA 禁能 USB DMA 中断状态 USB DMA 中断使能 USB 传输结束中断状态 R/W 0x8000 0000 RO 0x0000 0010 R/W 0x0000 0000 WO 0x0000 0000 WO 0x0000 0000 WO 0x00 RO R/W WO WO WO[2] 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 R/W WO[2] R/W 0x0000 0003 0x0000 0000 0x0000 0008 RO RO WO[2] WO[2] R/W 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 WO[2] RO 0x0000 0000 0x0000 0000 RO WO[2] WO[2] R/W RO WO[2] WO[2] RO R/W RO 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x400F C1C0 0x5000 C200 0x5000 C204 0x5000 C208 0x5000 C20C 0x5000 C22C 0x5000 C230 0x5000 C234 0x5000 C238 0x5000 C23C 0x5000 C240 0x5000 C244 0x5000 C248 0x5000 C24C 0x5000 C218 0x5000 C220 0x5000 C21C 0x5000 C224 0x5000 C228 0x5000 C210 0x5000 C214 0x5000 C250 0x5000 C254 0x5000 C258 0x5000 C280 0x5000 C284 0x5000 C288 0x5000 C28C 0x5000 C290 0x5000 C294 0x5000 C2A0 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 11 章 名称 USBEoTIntClr USBEoTIntSet USBNDDRIntSt USBNDDRIntClr USBNDDRIntSet USBSysErrIntSt USBSysErrIntClr USBSysErrIntSet 描述 USB 传输结束中断清除 USB 传输结束中断设置 USB 新 DD 请求中断状态 USB 新 DD 请求中断清除 USB 新 DD 请求中断设置 USB 系统错误中断状态 USB 系统错误中断清除 USB 系统错误中断设置 访问 WO[2] WO[2] RO WO[2] WO[2] RO WO[2] WO[2] 复位值[1] 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 0x0000 0000 续上表 地址 0x5000 C2A4 0x5000 C2A8 0x5000 C2AC 0x5000 C2B0 0x5000 C2B4 0x5000 C2B8 0x5000 C2BC 0x5000 C2C0 [1] 复位值只反映使用到的位中的数据。它不包括保留位的内容。 [2] 读取 WO 寄存器将返回一个无效值。 11.10.1 时钟控制寄存器 1. USB时钟控制寄存器(USBClkCtrl - 0x5000 CFF4) 该寄存器用于控制 USB 设备控制器的时钟。任何时候只要软件想访问设备控制器的寄存器, DEV_CLK_EN 和 AHB_CLK_EN 必须置位。只有在访问 USBPortSel 寄存器时才需要将 PORTSEL_CLK_EN 位置位。 假设 USBClkCtrl 的对应位已经置位,软件不需要在每次寄存器访问时重复执行置位操作。 需要注意的是该寄存器只有在 PCONP 中的 PCUSB 位置位时才起作用;当 PCUSB 清零时,不管 该寄存器的内容如何,设备控制器的所有时钟都是禁止的。USBClkCtrl 是一个读/写寄存器。 表 11.6 USBClkCtrl 寄存器位描述 位 符号 0- 1 DEV_CLK_EN 2- 3 PORTSEL_CLK_EN 4 AHB_CLK_EN 31:5 - 描述 保留,用户软件不应该向保留位写入 1。从保留位读取的 值是未定义的 设备时钟使能。使能设备控制器的 usbclk 输入 保留,用户软件不应该向保留位写入 1。从保留位读取的 值是未定义的 端口选择寄存器的时钟使能 AHB 时钟使能 保留,用户软件不应向保留位写入 1。从保留位读出的值 未被定义 复位值 NA 0 NA NA 0 NA 2. USB时钟状态寄存器(USBClkSt - 0x5000 CFF8) 该寄存器用于保持时钟可用的状态。将该寄存器的位相或可以形成 USB_NEED_CLK 信号。 当通过 USBClkCtrl 将一个时钟使能时,软件应该查询 USBClkSt 中的对应位。如果该位是置位 的,则软件能够进一步进行寄存器访问。假如 USBClkCtrl 寄存器中的位没受到打扰,则软件不 需要在每次访问时重复查询操作。USBClkSt 为只读寄存器。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 11 章 表 11.7 USB 时钟状态寄存器位描述 位 符号 0- 1 DEV_CLK_ON 2- 3 PORTSEL_CLK_ON 4 AHB_CLK_ON 31:5 - 描述 保留,用户软件不应该向保留位写入 1。从保留位读取的 值是未定义的 设备时钟开启。设备控制器的 usbclk 输入有效 保留,用户软件不应该向保留位写入 1。从保留位读取的 值是未定义的 端口选择寄存器的时钟开启 AHB 时钟开启 保留,用户软件不应向保留位写入 1。从保留位读出的值 未被定义 复位值 NA 0 NA NA 0 NA 11.10.2 设备中断寄存器 1. USB中断状态寄存器(USBIntSt - 0xE01F C1C0) USB 设备控制器有 3 条中断线。USB 中断状态寄存器允许软件对其执行一次读操作来确定 这 3 条中断线的状态。所有 3 条中断线相“或”,连接到向量中断控制器的一个通道。该寄存器 还包含 USB_NEED_CLK 状态位和 EN_USB_INTS 控制位。USBIntSt 为读/写寄存器。 表 11.8 USB 中断状态寄存器位描述 位 符号 0 USB_INT_REQ_LP 1 USB_INT_REQ_HP 2 USB_INT_REQ_DMA 7:3 - 8 USB_NEED_CLK 30:9 31 EN_USB_INTS 描述 低优先级中断线的状态。该位为只读位 高优先级中断线的状态。该位为只读位 DMA 中断线的状态。该位为只读位 保留,用户软件不应该向保留位写入 1。从保留位读取的 值是未定义的 USB 需要时钟指示器。当检测到 USB 活动或检测到 USB 数据管脚上的状态发生改变时,该位被设置为 1,而且它 表示需要一个 48MHz 的 PLL 支持时钟。一旦该位为 1, 它 就 在 接 收 到 / 发 送 最 后 包 的 5ms 后 或 在 挂 起 改 变 (SUS_CH)中断发生的 2ms 后复位为 0。如果选择 USB 总线上的活动从掉电模式中唤醒器件,那么该位从 0 到 1 的变化可唤醒微控制器。(详细信息请参考“时钟和功率 控制”章节中的“从低功耗模式中唤醒”小节)。有关 PLL 和请求掉电模式的描述也可参考“时钟和功率控制”章节 中 的 “ PLL0 和 掉 电 模 式 ” 和 “ 外 设 功 率 控 制 寄 存 器 (PCONP-0x400F C0C4)”。该位为只读位 保留,用户软件不应向保留位写入 1。从保留位读出的值 未被定义 使能所有 USB 中断。当该位清零时,向量中断控制器将无 法检测到 USB 中断线相或后的输出 复位值 0 0 0 NA 1 NA 1 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 11 章 2. USB设备中断状态寄存器(USBDevIntSt - 0x5000 C200) USBDevIntSt 寄存器记录着各个中断的状态。‘0’表示未产生中断,‘1’表示中断已经出 现。USBDevIntSt 为只读寄存器。 表 11.9 USB 设备中断状态寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 23 15 7 TxENDPKT 30 22 14 6 RxENDPKT 29 21 13 5 CDFULL 28 20 12 4 CCEMPTY 27 19 11 3 DEV_STAT 26 18 10 2 EP_SLOW 25 17 9 ERR_INT 1 EP_FAST 24 16 8 EP_RLZED 0 FRAME 表 11.10 USB 设备中断状态寄存器位描述 位 符号 0 FRAME 1 EP_FAST 2 EP_SLOW 3 DEV_STAT 4 CCEMPTY 5 CDFULL 6 RxENDPKT 7 TxENDPKT 8 EP_RLZED 9 ERR_INT 31:10 - 描述 复位值 每隔 1ms 产生一次帧中断。该位用在同步包的传输中 0 端点的快速中断传输。如果端点中断在端点中断优先级寄存器 0 (USBEpIntPri)中相应的位被置位,则该端点中断与 EP_FAST 位相关 端点的慢速中断。如果端点中断在端点中断优先级寄存器(USBEpIntPri) 0 中相应的位未置位,则该端点中断与 EP_SLOW 位相关 该位在 USB 总线复位、USB 挂起改变或连接改变时置位。请参考“设 0 置设备状态(命令:0xFE,数据:写 1 字节)”小节 命令代码寄存器(USBCmdCode)为空(可写入新的命令) 1 命令数据寄存器(USBCmdData)已满(现在可以读取数据) 0 在端点缓冲区中的当前数据包已传送给 CPU 0 传输到端点缓冲区的数据字节数与 TxPacket 长度寄存器(USBTxPLen) 0 中编程设定的字节数相等 端点被使用。该位在使用端点寄存器(USBReEp)或 MaxPacketSize 寄 0 存器(USBMaxPSize)更新且相应的操作完成时置位 错误中断。USB 设备的任何总线错误中断。请参考“读错误状态(命令: 0 0xFB,数据:读 1 字节)” 保留,用户软件不应该向保留位写入 1。从保留位读取的值未定义 NA 3. USB设备中断使能寄存器(USBDevIntEn - 0x5000 C204) 向该寄存器中的某个位写入 1 时,如果 USBDevIntSt 中的对应位置位,则可以在其中一条中 断线上产生中断。默认是将中断发送到 USB_INT_REQ_LP 中断线。另外,通过改变 USBDevIntPri 的值,也可以将 EP_FAST 或 FRAME 中断发送到 USB_INT_REQ_HP 中断线。USBDevIntEn 为 读/写寄存器。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 广州周立功单片机发展有限公司 第 11 章 表 11.11 USB 设备中断使能寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 23 15 7 TxENDPKT 30 22 14 6 RxENDPKT 29 21 13 5 CDFULL 28 20 12 4 CCEMPTY 27 19 11 3 DEV_STAT 26 18 10 2 EP_SLOW 25 17 9 ERR_INT 1 EP_FAST 24 16 8 EP_RLZED 0 FRAME 表 11.12 USB 设备中断使能寄存器位描述 位 符号 见上表 31:0 USBDevIntEn 的位分配 值 描述 复位值 0 没有中断产生 当设备中断状态(USBDevIntSt)寄存器(表 11.9)中的对 应位置位时,中断产生。默认是将中断发送到 0 1 USB_INT_REQ_LP中断线。另外,通过改变USBDevIntPri 的 值 , 也 可 以 将 EP_FAST 或 FRAME 中 断 发 送 到 USB_INT_REQ_HP中断线 4. USB设备中断清除寄存器(USBDevIntClr - 0x5000 C208) 向该寄存器的某个位写入 1 可将 USBDevIntSt 中的对应位清零;写入 0 无效。 注:在将 EP_SLOW 或 EP_FAST 中断位清零之前,USBEPIntSt 中对应的端点中断也应该清零。 USBDevIntClr 为只写寄存器。 表 11.13 USB 设备中断清除寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 23 15 7 TxENDPKT 30 22 14 6 RxENDPKT 29 21 13 5 CDFULL 28 20 12 4 CCEMPTY 27 19 11 3 DEV_STAT 26 18 10 2 EP_SLOW 25 17 9 ERR_INT 1 EP_FAST 24 16 8 EP_RLZED 0 FRAME 表 11.14 USB 设备中断清零寄存器位描述 位 符号 见上表 31:0 USBDevIntClr 的位分配 值 描述 复位值 0 无效 USBDevIntSt 寄存器(见“USB 设备中断状态寄存 0 1 器”)中的相应位被清零 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第 11 章 5. USB设备中断设置寄存器(USBDevIntSet - 0x5000 C20C) 向该寄存器的某个位写入 1 可将 USBDevIntSt 中的对应位置位;写入 0 无效。 USBDevIntSet 为只写寄存器。 表 11.15 USB 设备中断设置寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 23 15 7 TxENDPKT 30 22 14 6 RxENDPKT 29 21 13 5 CDFULL 28 20 12 4 CCEMPTY 27 19 11 3 DEV_STAT 26 18 10 2 EP_SLOW 25 17 9 ERR_INT 1 EP_FAST 24 16 8 EP_RLZED 0 FRAME 表 11.16 USB 设备中断设置寄存器位描述 位 符号 见上表 31:0 USBDevIntSet 的位分配 值 描述 复位值 0 无效 USBDevIntSt 寄存器(见“USB 设备中断状态寄存 0 1 器”)中的相应位被置位 6. USB设备中断优先级寄存器(USBDevIntPri – 0x5000 C22C) 向该寄存器的某个位写入 1 将使对应的中断发送到 USB_INT_REQ_HP 中断线;写入 0 时将 中断发送到 USB_INT_REQ_LP 中断线。EP_FAST 或 FRAME 中断中的任何一个都可以发送到 USB_INT_REQ_HP,但不能同时进行。如果软件试图将这两个位置位,则不向 USB_INT_REQ_HP 发送任何中断。USBDevIntPri 为只写寄存器。 表 11.17 USB 设备中断优先级寄存器位描述 位 符号 0 FRAME 1 EP_FAST 7:2 - 值 描述 复位值 0 FRAME 中断将进入 USB_INT_REQ_LP 0 1 FRAME 中断将进入 USB_INT_REQ_HP 0 EP_FAST 中断将进入 USB_INT_REQ_LP 0 1 EP_FAST 中断将进入 USB_INT_REQ_HP 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定 - NA 义 11.10.3 端点中断寄存器 该组寄存器可以简化端点中断的处理。端点中断在从模式操作中使用。 1. USB端点中断状态寄存器(USBEpIntSt - 0x5000 C230) 每个物理非同步端点在 USB 端点中断状态寄存器都对应一个位,用来指示端点产生的中断。 当准确接收到一个数据包时,所有异步 OUT 端点产生一个中断。当成功发送一个数据包或 NAK 握手信号发送到总线上(如果 NAK 中断已使能)时,所有异步 IN 端点也产生一个中断(参考 “设置模式”(命令:0xF3,数据:写 1 字节)。该寄存器中的某个位为 1 时会导致 USBDevIntSt 寄存器中的 EP_FAST 或 EP_SLOW 位置位,具体是哪个位置位将由 USBEpDevIntPri 寄存器的 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 广州周立功单片机发展有限公司 第 11 章 对应位的值决定。USBEpIntSt 为只读寄存器。需要注意的是对于同步端点,在出现 FRAME 中 断时对数据包进行处理。 表 11.18 USB 端点中断状态寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 EP15TX 23 EP11TX 15 EP7TX 7 EP3TX 30 EP15RX 22 EP11RX 14 EP7RX 6 EP3RX 29 EP14TX 21 EP10TX 13 EP6TX 5 EP2TX 28 EP14RX 20 EP10RX 12 EP6RX 4 EP2RX 27 EP13TX 19 EP9TX 11 EP5TX 3 EP1TX 26 EP13RX 18 EP9RX 10 EP5RX 2 EP1RX 25 EP12TX 17 EP8TX 9 EP4TX 1 EP0TX 24 EP12RX 16 EP8RX 8 EP4RX 0 EP0RX 表 11.19 USB 端点中断状态寄存器位描述 位 符号 描述 0 EP0RX 端点 0,接收完数据中断位 1 EP0TX 端点 0,发送完数据中断位或发送一个 NAK 2 EP1RX 端点 1,接收完数据中断位 3 EP1TX 端点 1,发送完数据中断位或发送一个 NAK 4 EP2RX 端点 2,接收完数据中断位 5 EP2TX 端点 2,发送完数据中断位或发送一个 NAK 6 EP3RX 端点 3,同步端点 7 EP3TX 端点 3,同步端点 8 EP4RX 端点 4,接收完数据中断位 9 EP4TX 端点 4,发送完数据中断位或发送一个 NAK 10 EP5RX 端点 5,接收完数据中断位 11 EP5TX 端点 5,发送完数据中断位或发送一个 NAK 12 EP6RX 端点 6,同步端点 13 EP6TX 端点 6,同步端点 14 EP7RX 端点 7,接收完数据中断位 15 EP7TX 端点 7,发送完数据中断位或发送一个 NAK 16 EP8RX 端点 8,接收完数据中断位 17 EP8TX 端点 8,发送完数据中断位或发送一个 NAK 18 EP9RX 端点 9,同步端点 19 EP9TX 端点 9,同步端点 20 EP10RX 端点 10,接收完数据中断位 21 EP10TX 端点 10,发送完数据中断位或发送一个 NAK 22 EP11RX 端点 11,接收完数据中断位 23 EP11TX 端点 11,发送完数据中断位或发送一个 NAK 24 EP12RX 端点 12,同步端点 25 EP12TX 端点 12,同步端点 复位值 0 0 0 0 0 0 NA NA 0 0 0 0 NA NA 0 0 0 0 NA NA 0 0 0 0 NA NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 13 13 广州周立功单片机发展有限公司 第 11 章 续上表 位 符号 描述 26 EP13RX 端点 13,接收完数据中断位 27 EP13TX 端点 13,发送完数据中断位或发送一个 NAK 28 EP14RX 端点 14,接收完数据中断位 29 EP14TX 端点 14,发送完数据中断位或发送一个 NAK 30 EP15RX 端点 15,接收完数据中断位 31 EP15TX 端点 15,发送完数据中断位或发送一个 NAK 复位值 0 0 0 0 0 0 2. USB端点中断使能寄存器(USBEpIntEn - 0x5000 C234) 该寄存器通过置位某个位来使 USBEpIntSt 中的对应位在出现与该端点相关的中断时置位; 写入 0 将使 USBDMARSt 中的对应位在出现与该端点相关的中断时置位。USBEpIntEn 为读/写 寄存器。 表 11.20 USB 端点中断使能寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 EP15TX 23 EP11TX 15 EP7TX 7 EP3TX 30 EP15RX 22 EP11RX 14 EP7RX 6 EP3RX 29 EP14TX 21 EP10TX 13 EP6TX 5 EP2TX 28 EP14RX 20 EP10RX 12 EP6RX 4 EP2RX 27 EP13TX 19 EP9TX 11 EP5TX 3 EP1TX 26 EP13RX 18 EP9RX 10 EP5RX 2 EP1RX 25 EP12TX 17 EP8TX 9 EP4TX 1 EP0TX 24 EP12RX 16 EP8RX 8 EP4RX 0 EP0RX 表 11.21 USB 端点中断使能寄存器位描述 位 符号 见上表 31:0 USBEpIntEn 的位分配 值 描述 复位值 USBDMARSt 中的对应位在出现该端点的中断时置 0 位 0 USBEpIntSt 中的对应位在出现该端点的中断时置 1 位。暗示该端点处于从模式 3. USB端点中断清除寄存器(USBEpIntClr - 0x5000 C238) 向该寄存器的某个位写入‘1’时,将针对对应的物理端点执行SIE选择端点/清除中断命令 (表 11.65);写入 0 无效。在执行选择端点/清除中断命令之前,硬件会把USBDevIntSt寄存器 中的CDFULL位清零。在执行完命令时,CDFULL位置位,USBCmdData包含端点的状态,并且 USBEpIntSt中的对应位清零。 注意事项:  在使用 USBEpIntClr 寄存器将中断清除时,软件必须等待 CDFULL 位置位,从而确保 对应的中断在能够继续发生之前已清零;  虽然可以同时将 USBEpIntClr 寄存器中的多个位置位,但建议不要这样做;当操作结束 时,在所有清零的多个位中,只有最低有效位对应的端点状态是可用的;  另外,SIE 选择端点/清除中断命令可以使用 SIE 命令寄存器直接调用,但建议使用 USBEpIntClr 寄存器,因为它的使用更加方便。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 14 14 广州周立功单片机发展有限公司 第 11 章 在该寄存器中,每个物理端点都有自己的保留位。该寄存器的位字段定义与表 11.18中显示 的USBEpIntSt的位定义是相同的。USBEpIntClr为只写寄存器。 表 11.22 USB 端点中断清除寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 EP15TX 23 EP11TX 15 EP7TX 7 EP3TX 30 EP15RX 22 EP11RX 14 EP7RX 6 EP3RX 29 EP14TX 21 EP10TX 13 EP6TX 5 EP2TX 28 EP14RX 20 EP10RX 12 EP6RX 4 EP2RX 27 EP13TX 19 EP9TX 11 EP5TX 3 EP1TX 26 EP13RX 18 EP9RX 10 EP5RX 2 EP1RX 25 EP12TX 17 EP8TX 9 EP4TX 1 EP0TX 24 EP12RX 16 EP8RX 8 EP4RX 0 EP0RX 表 11.23 USB 端点中断清除寄存器位描述 位 符号 见上表 31:0 USBEpIntClr 的位分配 值 描述 复位值 0 无效 通过执行对应端点的 SIE 选择端点/清除中断命令, 0 1 可令 USBEpIntSt 中的对应位清零 4. USB端点中断设置寄存器(USBEpIntSet - 0x5000 C23C) 向该寄存器中的某位写入‘1’会置位 USBEpIntSt 寄存器中的对应位;写入‘0’无影响。 每个端点在该寄存器中都有相应的位。USBEpIntSet 为只写寄存器。 表 11.24 USB 端点中断设置寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 EP15TX 23 EP11TX 15 EP7TX 7 EP3TX 30 EP15RX 22 EP11RX 14 EP7RX 6 EP3RX 29 EP14TX 21 EP10TX 13 EP6TX 5 EP2TX 28 EP14RX 20 EP10RX 12 EP6RX 4 EP2RX 27 EP13TX 19 EP9TX 11 EP5TX 3 EP1TX 26 EP13RX 18 EP9RX 10 EP5RX 2 EP1RX 25 EP12TX 17 EP8TX 9 EP4TX 1 EP0TX 24 EP12RX 16 EP8RX 8 EP4RX 0 EP0RX 表 11.25 USB 端点中断设置寄存器位描述 位 符号 见上表 31:0 USBEpIntSet 的位分配 值 描述 0 无效 1 将 USBEpIntSt 中的对应位置位 复位值 0 5. USB端点中断优先级寄存器(USBEpIntPri - 0x5000 C240) 该寄存器决定一个端点中断是进入 USBDevIntSt 寄存器的 EP_FAST 还是 EP_SLOW 位。如 果将该寄存器中的某位置位,相应的端点中断进入 EP_FAST;反之,则进入 EP_SLOW。也可 以有多个端点的中断进入 EP_FAST 或 EP_SLOW。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 15 15 广州周立功单片机发展有限公司 第 11 章 需要注意的是 USBDevIntPri 寄存器确定是让 EP_FAST 中断进入 USB_INT_REQ_HP 还是 USB_INT_REQ_LP 中断线。 USBEpIntPri 为只写寄存器。 表 11.26 USB 端点中断优先级寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 EP15TX 23 EP11TX 15 EP7TX 7 EP3TX 30 EP15RX 22 EP11RX 14 EP7RX 6 EP3RX 29 EP14TX 21 EP10TX 13 EP6TX 5 EP2TX 28 EP14RX 20 EP10RX 12 EP6RX 4 EP2RX 27 EP13TX 19 EP9TX 11 EP5TX 3 EP1TX 26 EP13RX 18 EP9RX 10 EP5RX 2 EP1RX 25 EP12TX 17 EP8TX 9 EP4TX 1 EP0TX 24 EP12RX 16 EP8RX 8 EP4RX 0 EP0RX 表 11.27 USB 端点中断优先级寄存器位描述 位 符号 见上表 31:0 USBEpIntPri 的位分配 值 描述 0 对应中断进入 USBDevIntSt 寄存器的 EP_SLOW 位 1 对应中断进入 USBDevIntSt 寄存器的 EP_FAST 位 复位值 0 11.10.4 端点使用寄存器 端点使用寄存器组主要用于在运行时使用端点以及对端点进行配置。 1. EP RAM要求 USB 设备控制器使用一个基于 FIFO 的 RAM 作为端点缓冲区。专用于此用途的 RAM 称作 端点 RAM(EP_RAM)。每个端点在 EP_RAM 中都有保留空间。每个端点所需的 EP_RAM 空 间由 MaxPacketSize 的值以及是否具有双缓冲来决定。USB 设备使用 32 个字的 EP_RAM 来存放 端点缓冲区的指针。EP_RAM 为字对齐,但 MaxPacketSize 是按字节定义的,因此,必须将 RAM 深度调整到下一个字边界。并且,每个缓冲区都有一个字的头信息(header),用于显示接收到 的包的长度。 物理端点所需的 EP_RAM 空间(以字为单位)如下所示: EPRAMspace  ( (MaxPacketSize 4  3)  1)  dbstatus 这里,单缓冲端点的 dbstatus 为 1,双缓冲端点的 dbstatus 为 2。 所有已使用的端点都占据 EP_RAM 空间,因此,总的 EP_RAM 要求为: N  TotalEPRAMspace  32  EPRAMspace(n) n0 这里的 N 为已使用的端点的数目。总的 EP_RAM 空间不应该超出 4096 个字节(4kB,1k 字)。 2. USB使用端点寄存器(USBReEp - 0x5000 C244) 向该寄存器的某个位写入 1 可使用对应的端点;写入 0 时不能使用对应的端点。当总线复位 时,该寄存器回到其复位状态。USBReEp 为读/写寄存器。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 16 16 广州周立功单片机发展有限公司 第 11 章 表 11.28 USB 使用端点寄存器位分配 复位值:0x0000 0003 位 符号 位 符号 位 符号 位 符号 31 EP31 23 EP23 15 EP15 7 EP7 30 EP30 22 EP22 14 EP14 6 EP6 29 EP29 21 EP21 13 EP13 5 EP5 28 EP28 20 EP20 12 EP12 4 EP4 27 EP27 19 EP19 11 EP11 3 EP3 26 EP26 18 EP18 10 EP10 2 EP2 25 EP25 17 EP17 9 EP9 1 EP1 24 EP24 16 EP16 8 EP8 0 EP0 表 11.29 USB 使用端点寄存器位描述 位 符号 0 EP0 1 EP1 31:2 EPxx 值 0 不使用控制端点 EP0 1 使用控制端点 EP0 0 不使用控制端点 EP1 1 使用控制端点 EP1 0 不使用端点 EPxx 1 使用端点 EPxx 描述 复位值 1 1 0 复位时只使用了控制端点。其它端点如有必要可通过对 USBReEp 寄存器中的相应位进行设 置来使用。如果想计算使用端点所需的 EP_RAM 空间,请参考“EP RAM 要求”小节。 端点使用是多周期操作。其伪代码如下所示: 将 USBDevIntSt 中的 EP_RLZED 位清零; 对于即将被使用的每个端点, { /* 将使用端点寄存器中已有的值进行“或”操作 */ USBReEp |= (UInt32) ((0x1 << endpt)); /*将物理端点编号加载到端点索引寄存器中.*/ USBEpIn = (UInt32) endpointnumber; /* 加载最大包长度寄存器 */ USBEpMaxPSize = MPS; /* 检验设备中断状态寄存器中的 EP_RLZED 位是否置位 */ while (!(USBDevIntSt & EP_RLZED)) { /*等待,直到端点使用完成 */ } /* 清除 EP_RLZED 位 */ 将 USBDevIntSt 中的 EP_RLZED 位清零; } USB设备不会响应任何未使用端点的事务。SIE配置设备命令只会令使用的且使能的端点响 应事务。详细信息请参考表 11.60。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 17 17 广州周立功单片机发展有限公司 第 11 章 3. USB端点索引寄存器(USBEpIn - 0x5000 C248) 每个端点都含有一个寄存器,用来记录端点的最大包长度值。这个寄存器实际上是一个寄存 器数组。因此,在执行写操作之前,应通过 USBEpIn 寄存器来‘寻址’该寄存器。 USBEpIn 寄存器保存着物理端点的编号。写 USBMaxPSize 寄存器就是通过端点索引寄存器 来设置寄存器阵列组成元素的值。USBEpIn 为只写寄存器。 表 11.30 USB 端点索引寄存器位描述 位 符号 描述 4:0 PHY_EP 物理端点的编号(0~31) 31:5 - 保留,用户软件不应该向保留位写入 1。从保留位读取的值是未定义的 复位值 0 NA 4. USB MaxPacketSize寄存器(USBMaxPSize - 0x5000 C24C) 复位时,控制端点的最大包长度指定为 8 字节;其它端点指定为 0。若修改USBMaxPSize 的值,则需要重新计算EP_RAM中的端点缓冲区地址。这是一个多周期处理操作。在结束时, USBDevIntSt(表 11.9)中的EP_RLZED位将置位。USMaxPSize数组索引如图 11.2所示。 USBMaxPSize为读/写寄存器。 表 11.31 USB MaxPacketSize 寄存器位描述 位 9:0 31:10 符号 MPS - 描述 最大包长度值 保留,用户软件不应该向保留位写入 1。从保留位读取的值是未定义的 [1] 该值为 EP0 和 EP1 的复位值。其它所有端点的复位值为 0x0。 复位值 0x008[1] NA 端点索引通过 USBEpIn 寄存器进行设置。MPS_EP0~MPS_EP31 通过 USBMaxPSize 寄存器进行访问。 图 11.2 USB MaxPacketSize 寄存器数组索引 11.10.5 USB传输寄存器 在从模式中操作时,该组寄存器用于在端点缓冲区和 RAM 之间传输数据。详见“从模式操 作”小节。 1. USB接收数据寄存器(USBRxData - 0x5000 C218) 在 OUT 数据传输中,CPU 从该寄存器中读出端点缓冲区的数据。在读取该寄存器之前,应 该对 USBCtrl 寄存器中的 RD_EN 位和 LOG_ENDPOINT 字段进行适当的设置。该寄存器的读操 作将提取来自所选的端点缓冲区的数据。数据采用小端格式:从 USB 总线上接收到的第一个字 节将是 USBRxData 寄存器的最低有效字节。USBRxData 为只读寄存器。 表 11.32 USB 接收数据寄存器位描述 位 符号 31:0 RX_DATA 接收数据 描述 复位值 0x0000 0000 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 18 18 广州周立功单片机发展有限公司 第 11 章 2. USB接收包长度寄存器(USBRxPLen - 0x5000 C220) 该寄存器给出了正在传输的当前数据包剩余在端点缓冲区(当前通过 USBRxData 寄存器读 取的数据包所在的端点缓冲区)的字节数,并判定数据包是否有效。在读取该寄存器之前,应该 对 USBCtrl 寄存器中的 RD_EN 位和 LOG_ENDPOINT 字段进行适当的设置。每一次读取 USBRxData 寄存器时都会对该寄存器进行更新。USBRxPLen 为只读寄存器。 表 11.33 USB 接收包长度寄存器位描述 位 符号 值 描述 复位值 可以从当前所选的缓冲区中读出的剩余字节数。当该字 9:0 PKT_LNGTH - 段 的 值 减 少 到 0 时 , 在 USBDevIntSt 寄 存 器 中 的 0 RxENDPKT 位将置位 数据有效。该位对于同步端点非常有用。非同步端点在 接收到错误的数据包时不会产生中断。但是无效数据包 可能和总线复位一同产生。对于同步端点,即使接收到 10 DV 错误的数据包,数据传输仍可继续进行。这种情况下数 0 据包的 DV 位不能置位 0 数据无效 1 数据有效 11 PKT_RDY - PKT_LNGTH 字段有效,并且数据包准备就绪可以读出 0 31:12 - 保留,用户软件不应该向保留位写入 1。从保留位读取的 - NA 值是未定义的 3. USB发送数据寄存器(USBTxData - 0x5000 C21C) 在 IN 数据传输中,CPU 将端点数据写入该寄存器。在对该寄存器执行写操作之前,应该对 USBCtrl 寄存器中的 WR_EN 位和 LOG_ENDPOINT 字段进行适当的设置,并且应将数据包长度 写入 USBTxPlen 寄存器。在对该寄存器执行写操作时,数据被写入所选的端点缓冲区。数据采 用小端格式:USB 总线上发送的第一个字节为 USBTxData 的最低有效字节。USBTxData 为只写 寄存器。 表 11.34 USB 发送数据寄存器位描述 位 符号 31:0 TX_DATA 发送数据 描述 复位值 0x0000 0000 4. USB发送包长度寄存器(USBTxPLen - 0x5000 C224) 该寄存器包含从 CPU 传输到所选的端点缓冲区的数据的字节数。在将数据写入 USBTxData 之前,软件应先将数据包长度(≤MaxPacketSize)写入该寄存器。在每次对 USBTxData 进行写 操作之后,硬件将 USBTxPLen 寄存器中的值减去 4。在开始处理之前,应该将 USBCtrl 寄存器 中的 WR_EN 位和 LOG_ENDPOINT 字段设置以选择所需的端点缓冲区。 当数据缓冲区的长度大于端点的 MaxPacketSize 时,软件应提交数据包长度为 MaxPacketSize 的数据,并在最后一个包中发送剩余附加的字节。例如,如果 MaxPacketSize 为 64 字节,即将 发送的数据缓冲区长度为 130 字节,则软件将发送两个 64 位数据包并在最后一个包中发送剩余 的两个字节。因此,总共在 USB 上发送了 3 个数据包。USBTxPLen 为只写寄存器。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 19 19 广州周立功单片机发展有限公司 第 11 章 表 11.35 USB 发送包长度寄存器位描述 位 符号 值 描述 复位值 可以写入所选的端点缓冲区的剩余字节数。每次写 9:0 PKT_LNGTH - USBTxData 寄存器,该域的值由硬件减 4。当该字域减到 0 0x000 时,在 USBDevIntSt 寄存器中的 TxENDPKT 位被置位 31:10 - 保留,用户软件不应向保留位写入 1。从保留位读出的值 - NA 未被定义 5. USB控制寄存器(USBCtrl - 0x5000 C228) 该寄存器控制 USB 设备的数据传输操作。它选择在执行 USBRxData 和 USBTxData 寄存器 访问时的端点缓冲区,并使能缓冲区的读和写操作。USBCtrl 为读/写寄存器。 表 11.36 USB 控制寄存器位描述 位 符号 值 描述 复位值 读模式控制。使能使用 USBRxData 寄存器从 OUT 端点 缓冲区中读取数据,端点由本寄存器的 0 RD_EN LOG_ENDPOINT 域指定。在从 USBRxData 寄存器中读 0 取当前数据包的最后一个字时,硬件将该位清零 0 读模式禁能 1 读模式使能 写模式控制。使能使用 USBTxData 寄存器将数据写入 IN 端点缓冲区。端点由本寄存器的 LOG_ENDPOINT 1 WR_EN 指定。当 USBTxLen 中的字节数已发送完时,硬件将该 0 位清零 0 写模式禁能 1 写模式使能 5:2 LOG_ENDPOINT - 逻辑端点编号 0x0 31:6 - 保留,用户软件不应向保留位写入 1。从保留位读出的 - NA 值未被定义 11.10.6 SIE命令代码寄存器 SIE 命令代码寄存器用于与串行接口引擎进行通信。详细信息请参考“串行接口引擎命令描 述”小节。 1. USB命令代码寄存器(USBCmdCode - 0x5000 C210) 该寄存器用于将命令和写数据发送到 SIE。此处写入的命令将传输到 SIE 并在 SIE 中执行。 在执行了命令之后,该寄存器变成空,USBDevIntSt 寄存器中的 CCEMPTY 位置位。详细信息请 参考“串行接口引擎命令寄存器”小节。USBCmdCode 为只写寄存器。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 20 20 广州周立功单片机发展有限公司 第 11 章 表 11.37 USB 命令代码寄存器位描述 位 符号 值 描述 复位值 7:0 - 保留,用户软件不应向保留位写入 1。从保留位读出的 - NA 值未被定义 15:8 CMD_PHASE CMD_CODE/ 23:16 CMD_WDATA 31:24 - 0x01 0x02 0x05 - 命令阶段: 读 写 命令 这是一个多用途域。当 CMD_PHASE 为命令或读状态 时 , 该 域 包 含 着 命 令 代 码 ( CMD_CODE ) 。 当 CMD_PHASE 为写状态时,该域包含着命令写数据 (CMD_WDATA) 保留,用户软件不应向保留位写入 1。从保留位读出的 值未被定义 0x00 0x00 NA 2. USB命令数据寄存器(USBCmdData - 0x5000 C214) 该寄存器包含执行SIE命令之后获得的数据。当准备读取该数据时,USBDevIntSt寄存器中的 CD_FULL位是置位的,详细信息见表 11.9。USBCmdData为只读寄存器。 表 11.38 USB 命令数据寄存器位描述 位 符号 描述 7:0 CMD_RDATA 命令读数据 31:8 - 保留,用户软件不应该向保留位写入 1。从保留位读 取的值是未定义的 复位值 0x00 NA 11.10.7 DMA寄存器 该组寄存器用于 DMA 模式操作(详见“DMA 操作”)。 1. USB DMA请求状态寄存器(USBDMARSt - 0x5000 C250) 当出现端点中断(见 USBEpIntSt 的描述)并且 USBEpIntEn 中的对应位为 0 时,该寄存器 中与非同步端点相关的位由硬件置位。当 USBEpIntEn 中的对应位为 0 并且出现 FRAME 中断时, 与同步端点相关的位置位。如果 DMA 对于 USBEpDMASt 寄存器中的对应端点来说是使能的, 则该寄存器中为 1 的位可用作 DMA 引擎开始数据传输的标志。对于控制端点(EP0 和 EP1), 不可以使能 DMA。USBDMARSt 为只读寄存器。 表 11.39 USB DMA 请求状态寄存器位分配 复位值:0x0000 0000 位 符号 位 符号 位 符号 位 符号 31 EP31 23 EP23 15 EP15 7 EP7 30 EP30 22 EP22 14 EP14 6 EP6 29 EP29 21 EP21 13 EP13 5 EP5 28 EP28 20 EP20 12 EP12 4 EP4 27 EP27 19 EP19 11 EP11 3 EP3 26 EP26 18 EP18 10 EP10 2 EP2 25 EP25 17 EP17 9 EP9 1 EP1 24 EP24 16 EP16 8 EP8 0 EP0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 21 21 广州周立功单片机发展有限公司 第 11 章 表 11.40 USB DMA 请求状态寄存器位描述 位 符号 值 描述 0 EP0 0 控制端点 OUT(对于这个端点,DMA 不可以使能,EP0 位必须为 0) 1 EP1 0 控制端点 IN(对于这个端点,DMA 不可以使能,EP1 位必须为 0) 端点 xx(2≤ xx ≤31)的 DMA 请求 31:2 EPxx 0 端点 xx 没有请求 DMA 1 端点 xx 请求 DMA 复位值 0 0 0 [1] 对于这个端点,DMA 不可以使能,USBDMARSt 中的对应位必须为 0。 2. USB DMA请求清除寄存器(USBDMARClr - 0x5000 C254) 向该寄存器的某个位写入 1 将把 USBDMARSt 寄存器中的对应位清零;写入 0 无效。 该寄存器用于在使能端点的 DMA 操作之前进行初始化。当端点的 DMA 操作使能时,硬件 在完成一次数据包传输时将 USBDMARSt 寄存器中的对应位清零。因此,当端点的 DMA 操作 使能时,软件不应该使用该寄存器进行清零操作。 USBDMARClr 为只写寄存器。 USBDMARClr寄存器的位分配与USBDMARSt寄存器相同(表 11.39)。 表 11.41 USB DMA 请求清除寄存器位描述 位 符号 值 描述 0 EP0 0 控制端点 OUT(对于这个端点,DMA 不可以使能,EP0 位必须为 0) 1 EP1 0 控制端点 IN(对于这个端点,DMA 不可以使能,EP1 位必须为 0) 清除端点 xx(2≤ xx ≤31)的 DMA 请求 31:2 EPxx 0 无影响 1 清除 USBDMARSt 中的相应位 复位值 0 0 0 3. USB DMA请求设置寄存器(USBDMARSet - 0x5000 C258) 向该寄存器的某位写入 1 将把 USBDMARSt 寄存器中的对应位置位;写入 0 无效。 该寄存器允许软件提出 DMA 请求。这一特性在端点的操作由从模式切换到 DMA 模式时非 常有用:如果即将在 DMA 模式中处理的数据包在 USBEpIntEn 中的对应位清零之前到达,则硬 件不会提出 DMA 请求,此时软件可以使用该寄存器手动地启动 DMA 传输。 软件也可以使用该寄存器来启动 DMA 传输,以便在从主机接收到 IN 令牌包之前,预先积 极地填充 IN 端点缓冲区。 USBDMARSet为只写寄存器。USBDMARSet寄存器的位分配与USBDMARSt寄存器是相同 的(表 11.39)。 表 11.42 USB DMA 请求设置寄存器位描述 位 符号 值 描述 0 EP0 0 控制端点 OUT(对于这个端点,DMA 不可以使能,EP0 位必须为 0) 1 EP1 0 控制端点 IN(对于这个端点,DMA 不可以使能,EP1 位必须为 0) 设置端点 xx(2≤ xx ≤31)的 DMA 请求 31:2 EPxx 0 无影响 1 设置 USBDMARSt 中的相应位 复位值 0 0 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 22 广州周立功单片机发展有限公司 第 11 章 4. USB UDCA Head寄存器(USBUDCAH- 0x5000 C280) UDCA(USB 设备通信区域)Head 寄存器保留 UDCA 在 USB RAM 中的地址。UDCA 和 DMA 描述符的详细信息请参考“USB 设备通信区域”和“DMA 描述符”。USBUDCAH 为读/ 写寄存器。 表 11.43 USB UDCA Head 寄存器位描述 位 符号 描述 6:0 - 保留,用户软件不应向保留位写入 1。UDCA 以 128 字节为边界对齐 31:7 UDCA_ADDR UDCA 的起始地址 复位值 0x00 0 5. USB EP DMA状态寄存器(USBEpDMASt- 0x5000 C284) 该寄存器中的位表示对应端点的 DMA 操作是否使能。只有当该寄存器中的相应位置位时, 端点的 DMA 传输才能启动。USBEpDMASt 为只读寄存器。 表 11.44 USB EP DMA 状态寄存器位描述 位 符号 值 描述 控 制 端 点 OUT ( 对 于 这 个 端 点 , DMA 不 可 以 使 能 , 0 EP0_DMA_ENABLE 0 EP0_DMA_ENABLE 位必须为 0) 控 制 端 点 IN ( 对 于 这 个 端 点 , DMA 不 可 以 使 能 , 1 EP1_DMA_ENABLE 0 EP1_DMA_ENABLE 位必须为 0) 表示端点 xx(2≤xx≤31)的 DMA 是否使能 31:2 EPxx_DMA_ENABLE 0 禁止端点 EPxx 的 DMA 操作 1 使能端点 EPxx 的 DMA 操作 复位值 0 0 0 6. USB EP DMA使能寄存器(USBEpDMAEn- 0x5000 C288) 向该寄存器的某个位写入 1 将使能对应端点的 DMA 操作;写入 0 无效。控制端点 EP0 和 EP1 的 DMA 操作不可以使能。USBEpDMAEn 为只写寄存器。 表 11.45 USB EP DMA 使能寄存器位描述 位 符号 值 描述 复位值 控 制 端 点 OUT ( 对 于 这 个 端 点 , DMA 不 可 以 使 能 , 0 EP0_DMA_ENABLE 0 0 EP0_DMA_ENABLE 位必须为 0) 控 制 端 点 IN ( 对 于 这 个 端 点 , DMA 不 可 以 使 能 , 1 EP1_DMA_ENABLE 0 0 EP1_DMA_ENABLE 位必须为 0) 端点 xx(2≤xx≤31)的 DMA 使能控制位 31:2 EPxx_DMA_ENABLE 0 无效 0 1 使能端点 EPxx 的 DMA 操作 7. USB EP DMA禁能寄存器(USBEpDMADis- 0x5000 C28C) 向该寄存器的某个位写入 1 将把USBEpDMASt中的对应位清零;写入 0 对于USBEpDMASt 中的对应位将无效。而只要对该寄存器进行写操作,不管写入的值如何,内部DMA_PROCEED 标志都会清零。有关DMA_PROCEED标志的详细信息请参考“优化的描述符读取操作”。如果 当寄存器中的对应位清零时正在处理端点的DMA传输,那么在DMA禁能之前该传输完成。当在 DMA传输过程中检测到错误条件时,对应位由硬件清零。USBEpDMADis为只写寄存器。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 23 23 广州周立功单片机发展有限公司 第 11 章 表 11.46 USB EP DMA 禁能寄存器位描述 位 符号 值 描述 复位值 控制端点 OUT(对于这个端点,DMA 不可以使能, 0 EP0_DMA_DISABLE 0 0 EP0_DMA_DISABLE 位必须为 0) 控 制 端 点 IN ( 对 于 这 个 端 点 , DMA 不 可 以 使 能 , 1 EP1_DMA_DISABLE 0 0 EP1_DMA_DISABLE 位必须为 0) 端点 xx(2≤xx≤31)的 DMA 禁能控制位 31:2 EPxx_DMA_DISABLE 0 无效 0 1 禁能端点 EPxx 的 DMA 操作 8. USB DMA中断状态寄存器(USBDMAIntSt- 0x5000 C290) 该寄存器中的每个位反映对应的中断状态寄存器中的每个位是否置位。USBDMAIntSt 为只 读寄存器。 表 11.47 USB DMA 中断状态寄存器位描述 位 符号 值 描述 传输结束中断位 0 EOT 0 USBEoTIntSt 寄存器中的所有位都为 0 1 USBEoTIntSt 寄存器中至少有一个位为 1 新的 DD 请求中断位 1 NDDR 0 USBNDDRIntSt 寄存器中的所有位都为 0 1 USBNDDRIntSt 寄存器中至少有一个位为 1 系统错误中断位 2 ERR 0 USBSysErrIntSt 寄存器中的所有位都为 0 1 USBSysErrIntSt 寄存器中至少有一个位为 1 31:3 - 保留,用户软件不应向其写入 1。从保留位读出的值未被定义 复位值 0 0 0 NA 9. USB DMA中断使能寄存器(USBDMAIntEn- 0x5000 C294) 向该寄存器中的某个位写入 1 时,如果 USBDMAIntSt 中的对应位置位,则将在 USB_INT_REQ_DMA 中断线上产生一个中断。USBDMAIntEn 为读/写寄存器。 表 11.48 USB DMA 中断使能寄存器位描述 位 符号 0 EOT 1 NDDR 2 ERR 31:3 - 值 描述 传输结束中断使能位 0 传输结束中断禁能 1 传输结束中断使能 新的 DD 请求中断使能位 0 新的 DD 请求中断禁能 1 新的 DD 请求中断使能 系统错误中断使能位 0 系统错误中断禁能 1 系统错误中断使能 保留,用户软件不应向其写入 1。从保留位读出的值未被定义 复位值 0 0 0 NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 24 24 广州周立功单片机发展有限公司 第 11 章 10. USB传输结束中断状态寄存器(USBEoTIntSt- 0x5000 C2A0) 如果当前 DMA 描述符的 DMA 传输完成,则该寄存器中与端点对应的位将置位(可以是正 常结束也可以是因为一个错误而置位)。产生中断的原因在描述符的 DD_status 区域记录。 USBEoTIntSt 为只读寄存器。 表 11.49 USB 传输结束中断状态寄存器位描述 位 符号 31:0 EPxx 值 描述 端点 xx(2≤xx≤31)的传输结束中断请求 0 没有端点 xx 的传输结束中断请求 1 有端点 xx 的传输结束中断请求 复位值 0 11. USB传输结束中断清零寄存器(USBEoTIntClr- 0x5000 C2A4) 向该寄存器的某个位写入 1 可清除 USBEoTIntSt 寄存器中的对应位;写入 0 无效。 USBEoTIntClr 为只写寄存器。 表 11.50 USB 传输结束中断清零寄存器位描述 位 符号 31:0 EPxx 值 描述 复位值 清除端点 xx(2≤xx≤31)的传输结束中断请求 0 无效 0 1 清除 USBEoTIntSt 寄存器中 EPxx 传输结束的中断请求 12. USB传输结束中断置位寄存器(USBEoTIntSet- 0x5000 C2A8) 向该寄存器的某个位写入 1 可将 USBEoTIntSt 寄存器中的对应位置位;写入 0 无效。 USBEoTIntSet 为只写寄存器。 表 11.51 USB 传输结束中断置位寄存器位描述 位 符号 值 描述 设置端点 xx(2≤xx≤31)的传输结束中断请求 31:0 EPxx 0 无效 1 将 USBEoTIntSt 寄存器中 EPxx 传输结束的中断请求置位 复位值 0 13. USB新DD请求中断状态寄存器(USBNDDRIntSt- 0x5000 C2AC) 当从 USB 设备中请求一次传输并且对应的端点没有检测到有效的 DD 时,该寄存器中的位 置位。USBNDDRIntSt 为只读寄存器。 表 11.52 USB 新 DD 请求中断状态寄存器位描述 位 符号 值 描述 端点 xx(2≤xx≤31)的新 DD 中断请求 31:0 EPxx 0 没有端点 xx 的新 DD 中断请求 1 有端点 xx 的新 DD 中断请求 复位值 0 14. USB新DD请求中断清零寄存器(USBNDDRIntClr- 0x5000 C2B0) 向该寄存器中的某个位写入 1 可清除 USBNDDRIntSt 寄存器中的对应位;写入 0 无效。 USBNDDRIntClr 为只写寄存器。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 25 25 广州周立功单片机发展有限公司 第 11 章 表 11.53 USB 新 DD 请求中断清零寄存器位描述 位 符号 值 描述 清除端点 xx(2≤xx≤31)的新 DD 中断请求 31:0 EPxx 0 无效 1 清除 USBNDDRIntSt 寄存器中的端点 xx 的新 DD 中断请求 复位值 0 15. USB新DD请求中断置位寄存器(USBNDDRIntSet- 0x5000 C2B4) 向该寄存器中的某个位写入 1 可置位 USBNDDRIntSt 寄存器中的对应位;写入 0 无效。 USBNDDRIntSet 为只写寄存器。 表 11.54 USB 新 DD 请求中断置位寄存器位描述 位 符号 值 描述 设置端点 xx(2≤xx≤31)的新 DD 中断请求 31:0 EPxx 0 无效 1 置位 USBNDDRIntSt 寄存器中的端点 xx 的新 DD 中断请求 复位值 0 16. USB系统错误中断状态寄存器(USBSysErrIntSt- 0x5000 C2B8) 如果在传输数据或者在获取或更新 DD 时出现系统错误(AHB 总线错误),则该寄存器中 的对应位置位。USBSysErrIntSt 为只读寄存器。 表 11.55 USB 系统错误中断状态寄存器位描述 位 符号 值 描述 端点 xx(2≤xx≤31)的系统错误中断请求 31:0 EPxx 0 没有端点 xx 的系统错误中断请求 1 有端点 xx 的系统错误中断请求 复位值 0 17. USB系统错误中断清零寄存器(USBSysErrIntClr- 0x5000 C2BC) 向该寄存器中的某个位写入 1 可清除 USBSysErrIntSt 寄存器中的对应位;写入 0 无效。 USBSysErrIntClr 为只写寄存器。 表 11.56 USB 系统错误中断清零寄存器位描述 位 符号 值 描述 清除端点 xx(2≤xx≤31)的系统错误中断请求 31:0 EPxx 0 无效 1 清除 USBSysErrIntSt 寄存器中的端点 xx 的系统错误中断请求 复位值 0 18. USB系统错误中断置位寄存器(USBSysErrIntSet- 0x5000 C2C0) 向该寄存器中的某个位写入 1 可置位 USBSysErrIntSt 寄存器中的对应位;写入 0 无效。 USBSysErrIntSet 为只写寄存器。 表 11.57 USB 系统错误中断置位寄存器位描述 位 符号 值 描述 设置端点 xx(2≤xx≤31)的系统错误中断请求 31:0 EPxx 0 无效 1 将 USBSysErrIntSt 寄存器中的端点 xx 的系统错误中断请求置位 复位值 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 26 26 广州周立功单片机发展有限公司 第 11 章 11.11 中断处理 本节描述了如何将任意端点上的一个中断事件发送到嵌套的向量中断控制器(NVIC)。中 断事件处理如图 11.3所示。 所有的非同步 OUT 端点(控制、批量和中断端点)在成功地接收到一个信息包时产生中断。 所有的非同步 IN 端点在成功地发送一个信息包时,或者在发送一个 NAK 信号并且通过 SIE 设 置模式命令将 NAK 上的中断使能时产生中断,详见“设置模式”的描述。对于同步端点,每 1ms 产生一个帧中断。 从模式和 DMA 模式的中断处理是不同的。 (1)从模式 如果在端点上出现一个中断事件并且该端点中断在 USBEpIntEn 寄存器中是使能的,则 USBEpIntSt 寄存器中的对应状态位将置位。对于非同步端点,根据对应的 USBEpIntPri[n]寄存器, 我们将所有的端点中断事件划分为两种类型:快速端点中断事件和慢速端点中断事件。所有快速 端点中断事件相或并发送到 USBDevIntSt 寄存器中的 EP_FAST 位。所有慢速端点中断事件相或 并发送到 USBDevIntSt 中的 EP_SLOW 位。 对于同步端点,USBDevIntSt 寄存器中的 FRAME 位每 1ms 置位一次。 USBDevIntSt 寄存器保存所有端点中断事件的状态以及其它各种中断的状态(见“USB 设备 中断状态寄存器”)。默认情况下,将所有中断(如果已在 USBDevIntEn 寄存器中使能)发送 到 USBIntSt 寄存器中的 USB_INT_REQ_LP 位,请求低优先级中断处理。而利用 USBDevIntPri 寄存器,也可以将 FRAME 或 EP_FAST 位发送到 USBIntSt 寄存器中的 USB_INT_REQ_HP 位。 EP_FAST 和 FRAME 中断中只有一个能够发送到 USB_INT_REQ_HP 位。如果试图将这两 个位都发送到 USB_INT_REQ_HP,则这两个中断事件会都发送到 USB_INT_REQ_LP。 慢速端点中断事件始终直接发送到 USB_INT_REQ_LP 位,通过软件请求低优先级中断处理。 发送到 NVIC 的最后一个中断信号由 USBIntSt 寄存器中的 EN_USB_INTS 位控制。只有当 EN_USB_INTS 位置位时,USB 中断才会发送到 NVIC。 (2)DMA 模式 如果在非控制端点上出现中断事件并且该端点中断在 USBEpIntEn 寄存器中没有使能,则 USBDMARSt 寄存器中对应的状态位由硬件置位。如果 DMA 传输对于 USBEpDMASt 寄存器中 的对应端点是使能的,则 USBDMARSt 中置位的位可作为 DMA 引擎传输数据的标志。 每个端点在 DMA 模式中传输数据时可产生 3 种类型的中断:传输结束中断、新 DD 请求中 断和系统错误中断。这些中断事件会分别把 USBEoTIntSt、USBNDDRIntSt 和 USBSysErrIntSt 寄存器中与各个端点对应的位置位。然后,来自所有端点的传输结束中断相或并发送到 USBDMAIntSt 中的 EOT 位。同样,所有的新 DD 请求中断和系统错误中断事件分别发送到 USBDMAStInt 寄存器中的 NDDR 位和 ERR 位。 EOT、NDDR 和 ERR 位(如果已在 USBDMAIntEn 寄存器中使能)相或来将 USBIntSt 寄存 器中的 USB_INT_REQ_DMA 位置位。如果 USBIntSt 中的 EN_USB_INTS 位是置位的,则将中 断发送到 NVIC。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 27 27 广州周立功单片机发展有限公司 第 11 章 图 11.3 中断事件处理 11.12 串行接口引擎命令描述 串行接口引擎(SIE)的函数和寄存器使用命令来访问。命令由命令代码组成,后面是可选 的数据字节(可以是读操作或写操作)。在执行上述访问时将使用 USBCmdCode(见“USB 命 令代码寄存器”表)和 USBCmdData(见“USB 命令数据寄存器”表)寄存器。 一次完整的访问包含两个阶段:  命令阶段:对 USBCmdCode 寄存器执行写操作,将 CMD_PHASE 字段设置为 0x05(命 令),CMD_CODE 字段设置为所需的命令代码。在命令执行完时,USBDevIntSt 寄存器 中的 CCEMPTY 位置位;  数据阶段(可选):如果执行写操作,则将 USBCmdCode 寄存器中的 CMD_PHASE 字 段设置为 0x01(写),CMD_WDATA 字段设置为所需的写数据。写操作完成时, USBDevIntSt 寄存器中的 CCEMPTY 位置位。如果执行读操作,则将 USBCmdCode 寄 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 28 28 广州周立功单片机发展有限公司 第 11 章 存器中的 CMD_PHASE 字段设置为 0x02(读),CMD_CODE 字段利用读对应的命令代 码 来 设 置 。 读 操 作 完 成 时 , USBDevIntSt 寄 存 器 中 的 CDFULL 位 将 置 位 , 表 示 USBCmdData 寄存器中的数据在执行读操作时是可用的。在寄存器为多字节的情况下, 首先访问的是最低有效字节。 在表 11.58中列出了可用的命令。下面是读取当前帧编号的命令的例子(读 2 个字节): USBDevIntClr = 0x30; // 将 CCEMPTY 和 CDFULL 清零 USBCmdCode = 0x00F50500; // CMD_CODE=0xF5, CMD_PHASE=0x05(命令) while (!(USBDevIntSt & 0x10)); // 等待 CCEMPTY. USBDevIntClr = 0x10; // 清除 CCEMPTY 中断位. USBCmdCode = 0x00F50200; // CMD_CODE=0xF5, CMD_PHASE=0x02(读) while (!(USBDevIntSt & 0x20)); // 等待 CDFULL. USBDevIntClr = 0x20; // 清除 CDFULL. CurFrameNum = USBCmdData; // 读帧编号的 LSB 字节 USBCmdCode = 0x00F50200; // CMD_CODE=0xF5, CMD_PHASE=0x02(读) while (!(USBDevIntSt & 0x20)); // 等待 CDFULL. Temp = USBCmdData; // 读帧编号的 MSB 字节 USBDevIntClr = 0x20; // 清除 CDFULL 中断位 CurFrameNum = CurFrameNum | (Temp << 8); 下面是设置地址命令的例子(写 1 个字节): USBDevIntClr = 0x10; USBCmdCode = 0x00D00500; while (!(USBDevIntSt & 0x10)); USBDevIntClr = 0x10; USBCmdCode = 0x008A0100; while (!(USBDevIntSt & 0x10)); USBDevIntClr = 0x10; // 清除 CCEMPTY // CMD_CODE=0xD0, CMD_PHASE=0x05(命令) // 等待 CCEMPTY // 清除 CCEMPTY // CMD_WDATA=0x8A(DEV_EN=1, DEV_ADDR=0xA), // CMD_PHASE=0x01(写) // 等待 CCEMPTY // 清除 CCEMPTY 表 11.58 SIE 命令代码表 命令名称 设备命令 设置地址 配置设备 设置模式 读取当前帧号 读测试寄存器 设置设备状态 获得设备状态 获得错误代码 读错误状态 接受者 设备 设备 设备 设备 设备 设备 设备 设备 设备 代码(Hex) D0 D8 F3 F5 FD FE FE FF FB 数据阶段 写 1 个字节 写 1 个字节 写 1 个字节 读 1 或 2 个字节 读 2 个字节 写 1 个字节 读 1 个字节 读 1 个字节 读 1 个字节 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 29 29 广州周立功单片机发展有限公司 第 11 章 命令名称 端点命令 选择端点 选择端点/清除中断 设置端点状态 清空缓冲区 确认缓冲区 接受者 端点 0 端点 1 端点 xx 端点 0 端点 1 端点 xx 端点 0 端点 1 端点 xx 所选的端点 所选的端点 代码(Hex) 00 01 xx 40 41 xx+40 40 41 xx+40 F2 FA 续上表 数据阶段 读 1 个字节(可选) 读 1 个字节(可选) 读 1 个字节(可选) 读 1 个字节 读 1 个字节 读 1 个字节 写 1 个字节 写 1 个字节 写 1 个字节 读 1 个字节(可选) 无 11.12.1 设置地址(命令:0xD0,数据:写 1 个字节) 设置地址命令用于设置 USB 分配的地址并使能(内含的)函数。设备中的地址设置将在控 制处理的状态阶段之后生效。总线复位之后,DEV_ADDR 设置为 0x00,DEV_EN 设置为 1。设 备将响应函数地址 0x00,端点 0(默认端点)的信息包。 表 11.59 设备设置地址寄存器位描述 位 符号 描述 6:0 DEV_ADDR 由软件设置的设备地址。总线复位之后,该字段的值为 0x00 设备使能。总线复位之后,该位为 1 7 DEV_EN 0:设备不会响应任何包 1:设备将响应函数地址为 DEV_ADDR 的信息包 复位值 0x00 0 11.12.2 配置设备(命令:0xD8,数据:写 1 个字节) 向寄存器写入 1 表示对设备进行配置并且所有已使能的非控制端点将作出响应。在默认状态 下,即使设备没有配置,控制端点也始终是使能的并作出响应。 表 11.60 配置设备寄存器位描述 位 符号 描述 复位值 对设备进行配置。所有使能的非控制端点将作出响应。在总线复位时, 0 CONF_DEVICE 该位由硬件清零。当该位置位时,如果设备不是在挂起状态(SUS=0), 则 UP_LED 信号被驱动为低电平 7:1 - 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定义 NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 30 30 广州周立功单片机发展有限公司 第 11 章 11.12.3 设置模式(命令:0xF3,数据:写 1 个字节) 表 11.61 设置模式寄存器位描述 位 符号 值 描述 复位值 始终是 PLL 时钟 0 USB_NEED_CLK 有效;当设备进入挂起状态时,可以将 48MHz 时钟 0 AP_CLK 停止 0 USB_NEED_CLK 固定为 1;当设备进入挂起状态时,不可以将 48MHz 1 时钟停止 控制 IN 端点的 NAK 中断 1 INAK_CI 0 只有在成功处理时才产生中断 0 1 当 IN 处理成功完成以及得到 NAK 应答时都产生中断 控制 OUT 端点的 NAK 中断 2 INAK_CO 0 只有成功处理时才产生中断 0 1 当 OUT 处理成功完成以及获得 NAK 应答时都产生中断 中断 IN 端点的 NAK 中断 3 INAK_II 0 只有成功处理时才产生中断 0 1 当 IN 处理成功完成以及获得 NAK 应答时都产生中断 中断 OUT 端点的 NAK 中断 4 INAK_IO[1] 0 只有成功处理时才产生中断 0 1 当 OUT 处理成功完成以及获得 NAK 应答时都产生中断 批量 IN 端点的 NAK 中断 5 INAK_BI 0 只有成功处理时才产生中断 0 1 当 IN 处理成功完成以及获得 NAK 应答时都产生中断 批量 OUT 端点的 NAK 中断 6 INAK_BO[2] 0 只有成功处理时才产生中断 0 1 当 OUT 处理成功完成以及获得 NAK 应答时都产生中断 7 - - 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定义 NA [1] 如果 DMA 对于任何的中断 OUT 端点来说都是使能的,则该位应复位为 0。 [2] 如果 DMA 对于任何的批量 OUT 端点来说都是使能的,则该位应复位为 0。 11.12.4 读当前帧编号(命令:0xF5,数据:读 1 个或 2 个字节) 返回上一次成功接收到的 SOF 的帧编号。帧编号为 11 位宽,首先返回最低有效字节。如果 用户只需要帧编号的低 8 位,则只需要读第一个字节。  如果在一帧信息的开始处没有接收到 SOF,则返回的帧编号为上一次成功接收到 SOF 的帧编号。  如果 SOF 帧编号含有 CRC 错误,则在设备接收帧编号时,返回的帧编号是被破坏的。 11.12.5 读测试寄存器(命令:0xFD,数据:读 2 个字节) 测试寄存器为 16 位宽。如果 USB 时钟(usbclk 和 AHB 从机时钟)正在运行,则它将返回 0xA50F 的值。 11.12.6 设置设备状态(命令:0xFE,数据:写 1 个字节) LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 31 31 广州周立功单片机发展有限公司 第 11 章 设置设备状态命令将对设备状态寄存器中的位进行设置。 表 11.62 设置设备状态寄存器位描述 位 符号 值 描述 复位值 连 接 位 表 示 设 备 的 当 前 连 接 状 态 。 它 对 用 于 SoftConnect 的 CONNECT 输出管脚进行控制。读取连接位时将返回当前的连接状 0 CON 态。当 VBUS 状态输入为低电平并持续 3ms 以上时,该位由硬件清零 0 0 向该位写入 0 将使 CONNECT 管脚变为高电平 1 向该位写入 1 将使 CONNECT 管脚变为低电平 连接发生改变 0 该位在读操作时清零 1 CON_CH 0 1 当设备的上拉电阻由于 VBUS 消失而断开连接时,该位置位。当该位 为 1 时,产生 DEV_STAT 中断 挂起:挂起位表示当前的挂起状态。当设备被挂起(SUS=1)并且 CPU 向 SUS 位写入 0 时,该设备将产生一个远程唤醒。这只有在设 备被连接时(CON=1)才发生。当设备没有连接或没有挂起时,向 2 SUS 该位写入 0 是无效的。向该位写入 1 也无效 0 0 出现任何活动时,该位复位为 0 当设备在其上行端口(upstream port)上,持续 3ms 以上都没有看到 1 任何活动时,该位置位 挂起位(SUS)变化指示器。SUS 位在以下情况下会翻转:  设备进入挂起状态  设备断开连接 3 SUS_CH  设备在其上行端口上接收到恢复信号 0 该位在读操作时清零 0 SUS 位没有改变 1 SUS 位发生改变。同时产生一个 DEV_STAT 中断 总线复位位。在总线复位时,设备将自动进入默认状态。在默认状 态下:  设备没有配置  将对地址 0 作出响应  控制端点将处于暂停状态  除了控制端点 EP0 和 EP1 以外,所有端点都没有实现 4 RST  所有端点的数据切换(data toggling)均被复位 0  所有缓冲区被清零  端点中断状态没有发生改变  产生 DEV_STAT 中断 注:当设备没有被连接(CON=0)时将忽略总线复位 0 该位在读操作时清零 1 在设备接收到总线复位时,该位置位。产生 DEV_STAT 中断 7:5 - 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定义 NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 32 32 广州周立功单片机发展有限公司 第 11 章 11.12.7 获得设备状态(命令:0xFE,数据:读 1 个字节) 获得设备状态命令将返回设备状态寄存器的值。读取设备状态时将返回 1 个字节的数据。这 个设备状态寄存器的位字段定义与设置设备状态寄存器是相同的,如表 11.62所示。 注:为确保操作正确,在执行获得设备状态命令之前必须将 USBDevIntSt 寄存器中的 DEV_STAT 位清零。 11.12.8 获得错误代码(命令:0xFF,数据:读 1 个字节) SIE 中可能会出现不同的错误状态。获得错误代码命令可返回上一个已发生的错误代码。错 误代码由 4 个最低有效位构成。 表 11.63 获得错误代码寄存器位描述 位 符号 值 描述 复位值 错误代码 0000 无错误 0001 PID 编码错误 0010 未知的 PID 0011 意外的信息包-任何违反规范的包序列 0100 令牌 CRC 中的错误 0101 数据 CRC 中的错误 0110 超时错误 3:0 EC 0111 多路串扰(Babble) 0x0 1000 信息包结束时的错误 1001 发送/接收 NAK 1010 发送暂停 1011 缓冲区溢出错误 1100 发送空包(只针对 ISO 端点) 1101 位填充错误 1110 同步时的错误 1111 数据 PID 中的 Toggle 位错误,数据无效 4 EA - 一旦读该寄存器,Error Active 位将被复位 7:5 - 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定义 NA 11.12.9 读错误状态(命令:0xFB,数据:读 1 个字节) 该命令从 USB 设备中读取 8 位错误寄存器。该寄存器记录了最近在 SIE 中发生的错误事件。 如果该寄存器中的任何一位置位,则 USBDevIntSt 寄存器中的 ERR_INT 位置位。在对该寄存器 执行读操作之后,错误位清零。 表 11.64 读错误状态寄存器位描述 位 符号 描述 0 PID_ERR PID 编码错误、未知的 PID 或未知的令牌 CRC 1 UEPKT 意外的信息包-任何违反规范的信息包序列 2 DCRC 数据 CRC 错误 3 TIMEOUT 超时错误 复位值 0 0 0 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 33 广州周立功单片机发展有限公司 第 11 章 位 符号 描述 4 EOP 信息包结束错误 5 B_OVRN 缓冲区溢出 6 BTSTF 位填充错误 7 TGL_ERR 数据 PID 中的错误翻转位(toggle bit),数据无效 续上表 复位值 0 0 0 0 11.12.10 选择端点(命令 0x00- 0x1F,数据:读 1 个字节(可选)) 选择端点命令将一个内部指针初始化为指向 EP_RAM 中的所选缓冲区的起始字节。该命令 后面可跟着一个读数据操作,从而在端点缓冲区的信息包上返回一些附加信息。选择端点命令的 命令代码与物理端点编号是相同的。在单缓冲端点的情况下 B_2_FULL 位无效。 表 11.65 选择端点寄存器位描述 位 符号 0 FE 1 ST 2 STP 3 PO 4 EPN 5 B_1_FULL 6 B_2_FULL 7 - 值 描述 复位值 满/空。该位表示端点缓冲区的满/空状态。对于 IN 端点,FE 位是 B_1_FULL 和 B_2_FULL 位相与的结果。对于 OUT 端点,FE 位是 B_1_FULL 和 B_2_FULL 位相或的结果。对于单缓冲端点,该位只简单地反映 B_1_FULL 0 的状态 0 对于 IN 端点,至少有一个端点写缓冲区是空的 1 对于 OUT 端点,至少有一个端点读缓冲区是满的 暂停的端点指示器 0 所选的端点没有暂停 0 1 所选的端点被暂停 SETUP 位:该位的值在每次成功地接收到信息包(即在所选物理端点上 获得 ACK 应答的封包)之后更新 0 0 在所选端点上执行选择端点/清除中断命令时,STP 位清零 1 所选端点上一次接收到的包为 SETUP 包 包覆盖(over-written)位 0 PO 位由“选择端点/清除中断”命令来清零 0 1 之前接收到的包被 SETUP 包覆盖 EP NAKed 位表示发送一个 NAK。如果主机向已满的 OUT 缓冲区发送一 个 OUT 包,则设备返回 NAK。如果主机向空的 IN 缓冲区发送一个 IN 令 牌包,则设备返回 NAK 0 0 当设备在接收到 OUT 包之后发送一个 ACK,或者当设备在发送 IN 包之 后看到一个 ACK 时,EPN 位复位 1 当设备发送一个 NAK 并且 NAK 特性的中断使能时,EPN 位置位 缓冲区 1 的状态 0 缓冲区 1 为空 0 1 缓冲区 1 为满 缓冲区 2 的状态 0 缓冲区 2 为空 0 1 缓冲区 2 为满 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定义 NA LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 34 34 广州周立功单片机发展有限公司 第 11 章 11.12.11 选择端点/清除中断(命令:0x40-0x5F,数据:读 1 个字节) 命令 0x40-0x5F 对于各个选择端点来说是相同的,不同的地方在于:  该命令将 USBEpIntSt 寄存器中与端点对应的位清零。  如果是控制 OUT 端点,则该命令把对应的选择端点寄存器中的 STP 和 PO 位清零。  必须读取一个字节。 注:可通过使用 USBCmdCode 和 USBCmdData 寄存器,或者将 USBEpIntClr 中对应的位置位来调用该命 令。为方便起见,建议使用 USBEpIntClr 寄存器。 11.12.12 设置端点状态(命令:0x40-0x55,数据:写 1 个字节(可选)) 设置端点状态命令用于对端点的状态位 7:5 和位 0 进行设置。设置端点状态的命令代码等于 0x40 与十六进制物理端点编号的和。对于各种类型的端点来说,并不是所有的位都是可设置的。 表 11.66 设置端点状态寄存器位描述 位 符号 值 描述 复位值 0 ST 4:1 - 5 DA 6 RF_MO 7 CND_ST 暂停的端点位。当一个暂停的端点接收到 SETUP 令牌时,不管接收到的 SETUP 包的内容如何,该端点都会自动退出暂停状态。如果端点应该停 留在其暂停状态,则 CPU 可以通过将该位置位使得该端点再次暂停。当 一个暂停的端点由于设置端点状态命令或接收到一个 SETUP 令牌而退出 暂停状态时,该端点也会被重新初始化。这样可以将缓冲区清空:如果是 OUT 缓冲区,则它将等待 DATA 0 PID;如果是 IN 缓冲区,则它会写 DATA 0 0 PID。端点的中断状态不会发生改变。若端点已经退出暂停状态,则向 该位写入 0 将对端点进行初始化。若通过置位端点状态命令将端点暂停, 则该端点也会被重新初始化 端点没有暂停 0 1 端点被暂停 - 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定义 NA 禁能端点位 0 端点使能 0 1 端点禁能 速率反馈(rate feedback)模式 0 中断端点位于翻转模式(Toggle mode)中 0 中断端点位于速率反馈模式中。这意味着无需数据翻转位(data toggle bit) 1 就可以进行传输 条件暂停位 0 两个控制端点都没有暂停 0 1 将两个控制端点暂停,除非选择端点寄存器中的 STP 位是置位的。该位 只是针对控制 OUT 端点而定义的 11.12.13 清空缓冲区(命令:0xF2,数据:读 1 个字节(可选)) 在成功接收到主机发出的 OUT 包时,内部硬件 FIFO 状态 Buffer_Full 标志置位。通过返回 一个 NAK 应答,设备将拒绝后面的所有信息包。当设备软件读取数据时,它应该通过发出清空 缓冲区命令来将缓冲区清空。这样可将内部 Buffer_Full 标志清零。当缓冲区为空时,设备可以 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 35 35 广州周立功单片机发展有限公司 第 11 章 接收新的信息包。 当可选数据字节的位 0 为 1 时,前面接收到的信息包被 SETUP 包覆盖(over-written)。Packet over-written 位只在控制传输中使用。根据 USB 规范,不管缓冲区的状态如何,都应该接受 SETUP 包。在读取 SETUP 数据之后,软件应该一直检查 PO 位的状态。如果该位是置位的,则软件应 该丢弃之前读取的数据,通过发出选择端点/清除中断命令将 PO 位清零,读取新的 SETUP 数据 并再次检查 PO 位的状态。 该命令使用情况的详细描述请参考“从模式操作”。 表 11.67 清空缓冲区寄存器位描述 位 符号 0 PO 7:1 - 值 描述 Packet over-written 位。该位只适用于控制端点 EP0 0 之前接收到的信息包保持完好 1 之前接收到的信息包被后面的 SETUP 包覆盖 - 保留,用户软件不应向保留位写入 1。从保留位读出的值未被定义 复位值 0 NA 11.12.14 确认缓冲区(命令:0xFA,数据:无) 当 CPU 已将数据写入 IN 缓冲区时,软件应发出一个确认缓冲区命令。该命令告知硬件,缓 冲区准备在 USB 总线上进行发送操作。当接收到下一个 IN 令牌包时,硬件将会发送缓冲区中的 内容。 在内部有一个称作 Buffer_Full 的硬件 FIFO 状态标志。该标志由确认缓冲区命令置位并当数 据已在 USB 总线上发送完成时清零,缓冲区为空。 当控制 IN 端点对应的 OUT 缓冲区的 Packet Over-written(PO)位置位,或者包含一个挂起 的 SETUP 包时,不能确认控制 IN 缓冲区有效。对于控制端点,已确认的缓冲区将在接收到 SETUP 包时无效。 该命令使用情况的详细描述请参考“从模式操作”。 11.13 USB设备控制器的初始化 LPC1700 系列 Cortex-M3 微控制器 USB 设备控制器的初始化步骤如下所示: a)通过置位 PCONP 的 PCUSB 位来使能设备控制器; b)配置和使能 PLL 和时钟分频器以提供 48MHz 的 usbclk 和所需的 cclk 频率。为了使设备 控制器中的同步逻辑能够正确操作,最小的 cclk 频率为 18MHz。确定 PLL 设置和配置的步骤请 参考“确定 PLL0 设置的过程”; c)通过置位 USBClkCtrl 寄存器中 DEV_CLK_EN 和 AHB_CLK_EN 位来使能设备控制器时 钟。查询 USBClkSt 寄存器中对应的时钟位直到它们被置位; d)通过向对应的 PINSEL 寄存器执行写操作来使能 USB 管脚功能; e)使用对应的 PINMODE 寄存器将 VBUS 管脚上的上拉电阻禁能; f)针对 EP0 和 EP1 设置 USBEpIn 和 USBMaxPSize 寄存器,并等待直到 USBDevIntSt 寄存 器中的 EP_RLZED 位置位,表示端点 EP0 和 EP1 已实现; g)使能端点中断(从模式): - 使用 USBEpIntClr 将所有端点中断清零; - 使用 USBDevIntClr 将所有设备中断清零; - 通过置位 USBEpIntEn 中的对应位,使能所需端点的从模式操作; LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 36 36 广州周立功单片机发展有限公司 第 11 章 - 使用 USBEpIntPri 设置每个已使能的中断的优先级; - 使用 SIE 设置模式命令对所需的中断模式进行配置; - 使用 USBDevIntEn(通常是 DEV_STAT,EP_SLOW,也可能是 EP_FAST)使能设 备中断。 h)配置 DMA(DMA 模式): - 使用 USBEpDMADis 禁止所有端点的 DMA 操作; - 使用 USBDMARClr 清除所有挂起的 DMA 请求; - 使用 USBEoTIntClr、USBNDDRIntClr 和 USBSysErrIntClr 清除所有的 DMA 中断; - 在系统存储器中准备 UDCA; - 将所需的 UDCA 地址(例如,0x7FD0 0000)写入 USBUDCAH; - 使用 USBEpDMAEn 将所需端点的 DMA 操作使能; - 置位 USBDMAIntEn 中的 EOT、DDR 和 ERR 位。 i)通过将对应的地址写入相关的向量表单元并使能 NVIC 中的 USB 中断,来安装 NVIC 中 的 USB 中断处理器; j)使用 SIE 设置地址命令将默认的 USB 地址设置为 0x0,DEV_EN 设为 1。总线复位也可 以实现上述设置; k)使用 SIE 设置设备状态命令将 CON 位设为 1,以便将 CONNECT 激活。 端点的配置根据软件应用程序进行更改。默认情况下,除了控制端点 EP0 和 EP1 外,所有 的端点都是禁能的。其它端点在从主机中接收到 SET_CONFIGURATION 或 SET_INTERFACE 设备请求之后使用软件使能和配置。 11.14 从模式操作 在从模式中,CPU 使用寄存器接口在 RAM 和端点缓冲区之间传输数据。 11.14.1 中断的产生 在从模式中,RAM 和端点缓冲区之间的数据包传输可以在出现端点中断时启动来响应中断。 端点中断使用 USBEpIntEn 寄存器来使能,并从 USBEpIntSt 寄存器中进行查询。 所有非同步的 OUT 端点在成功地接收到一个信息包时产生端点中断。所有非同步的 IN 端 点在成功地发送一个信息包时,或者在总线上发送了一个 NAK 握手信号并且 NAK 特性的中断 使能时产生中断。 对于同步端点,在出现 FRAME 中断(在 USBDevIntSt 中)时进行数据传输。 11.14.2 OUT端点的数据传输 当软件想从端点缓冲区中读取数据时,它应该将USBCtrl寄存器中的RD_EN位置位并将 LOG_ENDPOINT字段设置为所需的端点编号。控制逻辑将获取信息包长度输入到USBRxPLen寄 存器,并将PKT_RDY位置位(见表 11.33)。 现在,软件可以从USBRxData寄存器(表 11.32)中读取数据。当到达信息包的结尾时,RD_EN 位清零,并且USBDevSt寄存器中的RxENDPKT位置位。此时,软件可发出清空缓冲区命令(表 11.67),端点准备接受下一个信息包。对于OUT同步端点来说,不管缓冲区是否已清空,它都会 接收下一个包。因此,在帧结束之前没有从缓冲区中读出的数据将丢失。详细信息请参考“双缓 冲的端点操作”。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 37 37 广州周立功单片机发展有限公司 第 11 章 如果软件在读取整个包之前将 RD_EN 清零,则读操作中止,数据保留在端点缓冲区中。当 该端点的 RD_EN 位再次置位时,数据将从起始处读起。 11.14.3 IN端点的数据传输 当向端点缓冲区写入数据时,WR_EN 位(“USB 控制寄存器(USBCtrl-0x5000 C228)”置 位,并且软件将信息包中即将被发送的字节数写入 USBTxPLen 寄存器(见“USB 发送包长度寄 存器”的描述)。然后,它可以向 USBTxData 寄存器连续地写入数据。 如果向 USBTxData 写入的数据量已达到 USBTxPLen 寄存器中设置的字节数,则 WR_EN 位 清零,并且 USBDevIntSt 寄存器中的 TxENDPKT 位置位。软件发出一个确认缓冲区(“确认缓 冲区(命令:0xFA,数据:无)”)命令。现在,端点准备发送信息包。对于 IN 同步端点来说, 只有在下一个 FRAME 中断出现之前对缓冲区进行了确认,缓冲区中的数据才会被发送;否则, 下一帧将发送一个空包。如果软件在写入整个包之前将 WR_EN 清零,则在下一次该端点的 WR_EN 位置位时,写操作将再次从缓冲区的起始处执行。 对于同一个逻辑端点,RD_EN 和 WR_EN 可以同时为高电平,因此,可以间隔(interleaved) 执行读和写操作。 11.15 DMA操作 在 DMA 模式中,DMA 在 RAM 和端点缓冲区之间传输数据。 下面将对 DMA 模式的操作进行描述。DMA 操作的背景信息在“USB 设备通信区域”和“触 发 DMA 引擎”中描述。DMA 描述符的字段在“DMA 描述符”中描述。最后 3 个小节描述了 DMA 操作:“非同步端点的操作”、“同步端点操作”和“自动长度传输提取(ATLE)模式操作”。 11.15.1 传输术语 本小节提到了 3 种传输类型: a)USB 传输:在 USB 总线上进行的数据传输。USB2.0 规范将 USB 传输简单地称作传输。 在本小节中,我们把它称作 USB 传输以便与 DMA 传输相区分。USB 传输由多个事务 处理组成,每个事务处理又由信息包组成。 b)DMA 传输:端点缓冲区和系统存储器(RAM)之间的数据传输。 c)信息包传输:在本小节中,信息包传输指的是端点缓冲区和系统存储器(RAM)之间的 信息包传输。DMA 传输由一个或多个信息包传输组成。 11.15.2 USB设备通信区域 CPU 和 DMA 控制器通过一个公共的存储器区域进行通信,这个公共区域称作 USB 设备通 信区域,即 UDCA。UDCA 为 32 字的 DMA 描述符指针(DDP)数组,每个 DDP 对应一个物理 端点。如果针对端点定义了一个这样的数组,数组中的每个 DDP 均指向 DMA 描述符的起始地 址。未实现的端点和 DMA 操作禁能的端点的 DDP 将被忽略并且可以设置为 NULL(0x0)。 UDCA 的起始地址存放在 USBUDCAH 寄存器中。UDCA 可以位于 RAM 的任意 128 字节边 界,由 CPU 和 DMA 控制器访问。 图 11.4显示了UDCA以及UDCA Head(USBUDCAH)寄存器和DMA描述符之间的关系。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 38 38 广州周立功单片机发展有限公司 第 11 章 UDCA 0 1 2 DDP-EP2 NULL NULL Next_DD_pointer DD-EP2-a Next_DD_pointer DD-EP2-b Next_DD_pointer DD-EP2-c NULL UDCA HEAD 寄存器 NULL 16 DDP-EP16 Next_DD_pointer DD-EP16-a Next_DD_pointer DD-EP16-b NULL 31 DDP-EP31 图 11.4 UDCA Head 寄存器和 DMA 描述符 11.15.3 触发DMA引擎 当通过将 USBEpIntEn 寄存器中的某个位设置为 0(见“USB 端点中断使能寄存器”)来禁 止从模式操作时,对应的端点发出一个 DMA 请求,然后端点中断产生(见“USB DMA 请求状 态寄存器(USBDMARSt- 0xFFE0 C250)”的描述)。 当在 USBEpDMASt 寄存器中使能端点的 DMA 操作时,该端点的 DMA 传输开始, USBDMARSt 中的对应位置位,并且找到了该端点的一个有效的 DD。 所有端点共用一个 DMA 通道以降低硬件开销。如果在 USBDMARSt 中有多个 DMA 请求是 有效的,则最先处理物理端点编号最小的端点。 在 DMA 模式中,应该使用 SIE 设置模式命令(见“设置模式”的描述)将与批量 OUT 和 中断 OUT 端点的 NAK 中断对应的位(INAK_BO 和 INAK_IO)设置为 0。 11.15.4 DMA描述符 DMA 传输通过一个称作 DMA 描述符(DD)的数据结构来描述。 DMA 描述符(DD)存放在 USB RAM 中。这些描述符可以位于 USB RAM 的任何字对齐的 地址中。USB RAM 作为 USB 用途的系统存储器的一部分。它从地址 0x7FD0 0000 开始,大小 为 8KB。 用于非同步端点的 DMA 描述符为 4 个字长,用于同步端点的 DMA 描述符为 5 个字长。 与 DMA 传输相关的参数如下所示:  DMA 缓冲区的起始地址;  DMA 缓冲区的长度;  下一个 DMA 描述符的起始地址;  控制信息;  计数信息(已传输的字节数);  状态信息。 表 11.68列出了DMA描述符的各个字段。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 39 39 广州周立功单片机发展有限公司 第 11 章 表 11.68 DMA 描述符 字的位置 0 访问(H/W) 访问(S/W) R R/W R R/W R R/W - - R R/W 1 R R/W R/W[1] R/W 2 R/W R/W R/W R/I W R/I 3 W R/I W R/I W R/I R W - - R/W R/I 4 R/W R/W 位的位置 31:0 1:0 2 3 4 15:5 31:16 31:0 0 4:1 5 6 7 13:8 15:14 31:16 31:0 描述 Next_DD_pointer(USB RAM 地址) DMA_mode(00 为正常模式;01 为 ATLE 模式) Next_DD_valid(1 为有效;0 为无效) 保留 Isochronous_endpoint(1 为同步端点;0 为非同步端 点) Max_packet_size DMA_buffer_length 对于非同步端点,该值表示的是字节数;对于同步 端点,该值表示的是包的个数 DMA_buffer_start_addr DD_retired(初始化为 0) DD_status(初始化为 0000): 0000:NotServiced 0001:BeingServiced 0010:NormalCompletion 0011:DataUnderrun(短包) 1000:DataOverrun 1001:SystemError Packet_valid(初始化为 0) LS_byte_extracted(ATLE 模式)(初始化为 0) MS_byte_extracted(ATLE 模式)(初始化为 0) Message_length_position(ATLE 模式) 保留 Present_DMA_count(初始化为 0) Isochronous_packetsize_memory_address [1] 在 ATLE 模式中,该字段的访问属性为只写。 表注:R-读;W-写;I-初始化。 1. Next_DD_pointer 该字段是一个指针,存放的是可以提取下一个 DMA 描述符的存储单元。 2. DMA_mode 该字段指定 DMA 操作的模式。DMA 操作定义了两种模式:正常模式和自动传输长度提取 (ATLE)模式。在正常模式中,软件对 OUT 端点的 DMA_buffer_length 进行初始化。在 ATLE 模式中,DMA_buffer_length 从输入的数据中提取。详细信息请参考“自动长度传输提取(ATLE) 模式操作”的描述。 3. Next_DD_Valid 该位表示软件是否已准备下一个 DMA 描述符。如果该位置位,则 DMA 引擎会在用完当前 描述符时提取下一个描述符。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 40 40 广州周立功单片机发展有限公司 第 11 章 4. Isochronous_endpoint 该位置位表示描述符属于同步端点,因此,在提取描述符时必须读取 5 个字。 5. Max_packet_size 该字段表示端点的最大信息包容量。在针对 IN 端点从存储器中传输数据时使用该参数。OUT 端点使用 它 来检测短 包 。该参数 只 适用于非 同 步端点。Max_packet_size 的值应该 与使用 USBMaxPSize 寄存器分配给端点的 MPS 值相同。 6. DMA_buffer_length 该字段表示传输数据时分配的 DMA 缓冲区的深度。在达到缓冲区长度限制时,DMA 引擎 将停止使用这个描述符并寻找下一个描述符。 在正常模式中操作时,软件针对 IN 端点和 OUT 端点设置该值。在 ATLE 模式中,软件只对 IN 端点设置该值。对于 OUT 端点,硬件使用从数据流中提取的长度来设置该值。 对于同步端点,DMA_buffer_length 指的是包的个数;对于非同步端点,该字段的值用字节 数表示。 7. DMA_buffer_start_addr 该字段为执行数据读取操作或写入操作的地址。DMA 引擎每完成一次信息包传输就会对该 字段进行一次更新。 8. DD_retired 当 DMA 引擎用完当前描述符时,该位由硬件置位。在到达缓冲区末端、传输一个短包(非 同步端点)或检测到一个错误条件时该位置位。 9. DD_status DMA 传输的状态在该字段中编码。其编码定义如下:  NotServiced:没有传输信息包。  BeingServiced:至少传输一个信息包。  NormalCompletion:DMA 描述符是在达到缓冲区末端并且没有出现错误的情况下退出 的。DD_retired 位也置位。  DataUnderrun:在到达 DMA 缓冲区末端之前,USB 传输由于接收到一个短包而结束。 DD_retired 位也置位。  DataOverrun:当信息包正在传输时,DMA 缓冲区到达末尾。这是一个错误情况。 DD_retired 位也是置位的。当前的 DMA 计数字段的值等于 DMA_buffer_length 的值。 这个信息包必须在下一次 DMA 传输时从端点缓冲区重新发送。USBEpDMASt 中对应 的 EPxx_DMA_ENABLE 位清零。  SystemError:正在处理的 DMA 传输由于 AHB 总线上的错误而中止。此时,DD_retired 位不置位。USBEpDMASt 中对应的 EPxx_DMA_ENABLE 位清零。由于更新 DD 的同 时会发生系统错误,因此,RAM 中的 DD 字段可能是不可靠的。 10. Packet_valid 该位用于同步端点。它表示上一次传输到存储器中的包是否是在无错误的情况下接收到的。 如果信息包有效,则该位置位,即它是在无错误的情况下接收的。同步端点的操作详见“同步端 点操作”。 该位对于非同步端点是不需要的,因为只有当信息包没有错误时才产生 DMA 请求,因此, 在产生 DMA 请求时,Packet_valid 将始终置位。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 41 41 广州周立功单片机发展有限公司 第 11 章 11. LS_byte_extracted 在 ATLE 模式中使用。该位置位表示提取了传输长度的最低有效字节(LSB)。提取的长度 在 DMA_buffer_length 字段的位 23:16 中指示。 12. MS_byte_extracted 在 ATLE 模式中使用。该位置位表示提取了传输长度的最高有效字节(MSB)。提取的长度 在 DMA_buffer_length 字段的位 31:24 中指示。当 LS_byte_extracted 和 MS_byte_extracted 位置位 时,提取操作停止。 13. Present_DMA_count 该字段表示 DMA 引擎传输的字节数。DMA 引擎在每完成一个信息包传输之后对该字段进 行更新。 对 于 同 步 端 点 , Present_DMA_count 为 传 输 的 信 息 包 的 个 数 ; 对 于 非 同 步 端 点 , Present_DMA_count 为字节数。 14. Message_length_position 在 ATLE 模式中使用。该字段给出了嵌入到输入数据包中的消息长度位置的偏移量。该字段 只适用于 OUT 端点。偏移量 0 表示消息长度从第一个包的第一个字节开始。 15. Isochronous_packetsize_memory_address 该字段为即将进行传输或被提取的信息包容量信息以及帧编号所在的存储器缓冲区的地址, 见图 11.5。该字段只适用于同步端点。 11.15.5 非同步端点操作 1. 设置DMA传输 软件为那些即将使能DMA传输的物理端点准备DMA描述符(DD)。这些DD都在USB RAM 中。我们将第一个DD的起始地址写入UDCA中对应端点的DMA描述指针(DDP)单元。然后, 软 件 将 USBEpDMAEn 寄 存 器 ( 见 “ USB EP DMA 使 能 寄 存 器 ” 的 描 述 ) 中 对 应 端 点 的 EPxx_DMA_ENABLE位置位。描述符中的DMA_mode字段设置为“00”,采用正常模式。描述符 的其它所有字段按表 11.68的规定进行初始化。 物理端点 0 和 1(默认的控制端点)不支持 DMA 操作。 2. 查找DMA描述符 当某个端点的 DMA 传输被触发时,DMA 引擎将首先确定是否必须提取一个新的描述符。 如果上一次传输的包与这次传输是针对相同的端点并且 DD 没有处于退出状态,则不需要提取一 个新的描述符。上述条件可使用一个内部标志 DMA_PROCEED 来识别(见“优化的描述符读取 操作”)。 如果必须读取一个新的描述符,则 DMA 引擎将计算该端点的 DDP 的位置并从该位置取出 DD 的起始地址。DD 起始地址如果在位置 0,则该地址看作是无效的。此时将出现 NDDR 中断。 所有其它字对齐的地址都看作是有效的。 在提取 DD 时,首先读取 DD 状态字(字 3)并且检查 DD_retired 位的状态。如果该位没有 置位,则 DDP 指向一个有效的 DD。如果 DD_retired 置位,则 DMA 引擎将读取 DD 的控制字(字 1)。 如果 Next_DD_valid 位置位,则 DMA 引擎将取出 DD 的 Next_DD_pointer 字段(字 0)并 将它加载到 DDP 中,这个新的 DDP 就被写入 UDCA 区域。 然后,从 DDP 中的地址处提取整个 DD(4 个字)。这个 DD 将给出即将进行的 DMA 传输 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 42 42 广州周立功单片机发展有限公司 第 11 章 的详细情况。DMA 引擎把从该 DD 中提取的信息(起始地址、DMA 计数等)加载到它的硬件 资源中。 如果 Next_DD_valid 没有置位,而 DD_retired 位置位,则 DMA 引擎唤起该端点的 NDDR 中断并将对应的 EPxx_DMA_ENABLE 位清零。 3. 传输数据 对于 OUT 端点,DMA 引擎从 EP_RAM 中读取当前包并传输到从 DMA_buffer_start_addr 开 始的 USB RAM 存储单元中。对于 IN 端点,数据从 DMA_buffer_start_addr 开始的 USB RAM 中 提取并写入 EP_RAM 中。DMA_buffer_start_addr 和 Present_DMA_count 字段在每传输一个包之 后进行更新。 4. 优化的描述符读取操作 DMA 传输通常都是多包传输。硬件将不会再从存储器中读取新的 DD,除非端点发生改变。 硬件将内部标志 DMA_PROCEED 置位来指示多包传输正在进行中。 当 DMA_buffer_length 字段中规定的字节数已经传输完成之后,DMA_PROCEED 标志被清 零 。 当 软 件 对 USBEpDMADis 寄 存 器 执 行 写 操 作 时 , 该 标 志 也 会 被 清 零 。 可 以 清 除 DMA_PROCEED 标 志 的 功 能 允 许 软 件 强 制 再 次 读 取 DD 以 进 行 下 个 信 息 包 的 传 输 。 向 USBEpDMADis 寄 存 器 写 入 全 0 可 以 在 无 需 禁 止 任 何 端 点 的 DMA 操 作 的 情 况 下 将 DMA_PROCEED 标志清零。 5. 结束信息包传输 在执行信息包传输时,DMA 引擎把带有更新后的状态信息的 DD 写回到读操作时的相同存 储单元。DD 中的 DMA_buffer_start_addr、Present_DMA_count 以及 DD_status 字段被更新。 DMA 描述符在退出时可以有以下几种类型: 正常结束:如果当前包完全传输并且 Present_DMA_count 字段等于 DMA_buffer_length,则 DD 正常结束。DD 将被写回到存储器中,此时的 DD_retired 位置位,DD_status 设置为 NormalCompletion。该端点的 EOT 中断产生。 USB 传输结束:如果当前包已完全传输,包的容量小于 Max_packet_size 字段,并且仍然没 有到达 DMA 缓冲区的末尾,则 USB 传输结束。DD 将被写回到存储器中,此时的 DD_retired 位置位,DD_Status 设置为 DataUnderrun。该端点的 EOT 中断产生。 错误结束:如果当前包没有完全传输,即在信息包传输过程中达到 DMA 缓冲区的末尾,则 错误情况出现。DD 被写回到存储器中,此时的 DD_retired 位置位,DD_status 设置为 DataOverrun 状态代码。该端点的 EOT 中断产生,并且 USBEpDMASt 寄存器中的对应位清零。当使用 USBEpDMAEn 寄存器再次将对应的 EPxx_DMA_ENABLE 位置位时,没有完全传输的信息包将 会从端点缓冲区重新发送。 6. No_Packet DD 对于 IN 传输,如果系统暂时没有任何数据要发送,则通过设置 No_Packet DD,系统可以响 应 NDDR 中断。这可以通过将 DD 中的 Max_packet_size 和 DMA_buffer_length 字段设置为 0 来 实现。在处理 No_Packet DD 时,DMA 引擎在没有传输信息包的情况下将 USBDMARSt 中对应 端点的 DMA 请求清零。DD 退出,此时的状态代码为 NormalCompletion。No_Packet DD 可以根 据需要进行多次设置。设备将在 USB 总线上以 NAK 响应 IN 令牌包,直到带有一个数据包的 DD 被设置并且 DMA 将数据包传输到端点缓冲区中。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 43 43 广州周立功单片机发展有限公司 第 11 章 11.15.6 同步端点操作 对于同步端点,每个包的长度都可以不同。每传输一帧信息,每个同步端点均有一个信息包。 1. 设置DMA传输 软件将 DD 中的同步端点位设置为 1,并设置 Isochronous_packetsize_memory_address 字段 的初始值。所有其它字段的初始化与非同步端点相同。 对于同步端点,DMA_buffer_length 和 Present_DMA_count 字段的值用帧数目而不是字节数 来表示。 2. 查找DMA描述符 查找描述符的方法与查找非同步端点的方法相同。 DMA 使能的同步端点可以在每个 FRAME 中断时产生 DMA 请求。在处理 DMA 请求时, DMA 引擎将读取描述符,并且如果 Isochronous_endpoint 位置位,则 DMA 引擎将从 DD 的第 5 个字中读取 Isochronous_packetsize_memory_address。 3. 传输数据 数 据 在 存 储 单 元 DMA_buffer_start_addr 中 进 行 传 输 。 在 传 输 完 信 息 包 的 末 尾 后 , Present_DMA_count 的值加 1。 同步包的容量存放在存储器中。信息包容量存储器中的每个字均被划分为下面几个字段: Frame_number(位 31~17),Packet_valid(位 16)以及 Packet_length(位 15~0)。对于一个给 定的 DD,分配给信息包容量的存储器的空间应该是 DMA_buffer_length 个字,一个字可供一个 包进行传输。 (1)OUT 端点 在传输完每帧信息之后,软件将信息包容量写入 Isochronous_packet_size_memory_address 指 示的地址单元中,并且 Isochronous_packet_size_memory_address 的值加 4。 (2)IN 端点 在同步信息包容量中,我们只需要使用 Packet_length 字段。在传输每帧信息时,USB 设备 将传输一个端点数据包到主机,该数据包的容量在 Packet_length 字段中指定,并在数据包传输 结束时将 Isochronous_packetsize_memory_address 的值加 4。如果 Packet_length 为 0,则 USB 设 备将发送一个空包。 4. DMA描述符结束 用于同步端点的 DD 只能以 NormalCompletion 的状态代码结束。因为同步端点上没有短包, 并且 USB 传输在没有出现系统错误时将继续进行,所以不会出现同步端点的 DataOverrun 检测。 5. 同步OUT端点操作举例 假设将同步端点设置为传输 10 帧,当帧编号为 21 时,传输开始。在传输了 4 个信息包长度 分别为 10、15、8 和 20 字节的帧信息之后,描述符和存储器映射如图 11.5所示。 The_total_number_of_bytes_transferred=0x0A+0x0F+0x08+0x14=0x35。 信息包长度存储器中的所有字的 Packet_valid 位(位 16)被设置为 1。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 44 广州周立功单片机发展有限公司 第 11 章 图 11.5 同步 OUT 端点的操作举例 11.15.7 自动长度传输提取(ATLE)模式操作 有些主机驱动程序例如 NDIS(网络驱动程序接口规范)主机驱动程序可以将多个小容量的 USB 传输(delta 传输)连接起来形成一个大容量的 USB 传输。对于 OUT USB 传输,设备硬件 必须将这个已连接的传输分解开,返回到原来的多个小容量传输,并将它们传输到独立的 DMA 缓冲区中。通过将 DMA 描述符中的 DMA 模式设置为自动传输长度提取(ATLE)模式来实现 上述操作。只有批量端点支持 ATLE 模式。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 45 45 广州周立功单片机发展有限公司 1. ATLE模式中的OUT传输 主机驱动程序 即将发送的数据 160 bytes USB上看到 的数据包 64 bytes 64 bytes 第 11 章 即将被DMA引擎存储到 USB RAM中的数据 160 bytes DMA_buffer_start_addr of DD1 100 bytes 32 bytes 32 bytes 64 bytes 4 bytes 100 bytes DMA_buffer_start_addr of DD2 图 11.6 ATLE 模式中的数据传输 图 11.6显示了ATLE模式中的一个典型的OUT USB传输。在图中,主机分别将 160 字节和 100 字节的两个USB传输连接起来。假定MaxPacketSize为 64,则设备硬件将这个USB传输解释 为 4 个 64 字节的数据包和一个 4 字节的短包。第 3 和第 4 个数据包被连接起来。注:在正常模 式中,该USB传输将被解释为 64、64、32、64 和 36 字节。 现在,DMA 引擎需要将这两个 USB 传输分解开并将它们放在 DMA 描述符 1(DD1)和 DMA 描述符 2(DD2)的 DMA_buffer_start_addr 字段指示的存储单元中。 硬件在 Message_length_position 指定的偏移量(从 USB 传输的起始字节开始)处读取两字 节 宽 的 DMA_buffer_length , 并 将 它 写 入 DD 的 DMA_buffer_length 字 段 中 。 如 果 DMA_buffer_length 的两个字节分在两个包中,而为了确保在此情况下提取这两个字节,那么硬 件会在提取了各个字节后将 LS_byte_extracted 和 MS_byte_extracted 标志置位。在提取了 MS 字 节之后,DMA 传输继续进行,与在正常模式中相同。 在准备一个新的 DD 时,LS_byte_extracted 和 MS_byte_extracted 标志由软件清零。因此, 一旦 DD 退出,硬件就必须为下一个 DD 再次提取传输长度。 如果在传输一个连接包(例如图 11.6中的第 3 个包)的过程中DD1 退出,并且没有设置DD2 (DD1 中的Next_DD_valid字段为 0),则在DD1 退出时,DD_status被设置为DataOverrun状态代 码。这将被看作为一种错误情况,并且USBEpDMASt中对应的EPxx_DMA_ENABLE位由硬件清 零。 在 ATLE 模式中,即将传输的最后一个缓冲区长度始终以一个短包或空包结束,表示 USB 传输结束。如果相连的传输长度以 MaxPacketSize 包边界结束,则(NDIS)主机将发送一个空包 来标记 USB 传输结束。 2. ATLE模式中的IN传输 对于从设备到主机的 IN USB 传输,DMA_buffer_length 由设备软件设置,与正常模式相同。 在 ATLE 模式中,设备将来自多个 DD 的数据连接起来形成一个 USB 传输。如果在信息包 (包容量小于 MaxPacketSize)传输过程中 DD 退出,则提取由 Next_DD_pointer 指示的下一个 DD,并且由剩余的字节所构成的 MaxPacketSize 信息包将从下一个 DD 的缓冲区中传输。 如果没有设置下一个 DD(即 DD 中的 Next_DD_valid 为 0),并且当前 DD 的 DMA 缓冲区 长度在到达 MaxPacketSize 包边界之前没有结束,则当前 DD 中的可用字节作为短包在 USB 上 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 46 46 广州周立功单片机发展有限公司 第 11 章 发送,这标志着主机的 USB 传输结束。 如果最后一个缓冲区长度以 MaxPacketSize 包边界结束,则设备软件必须将下一个 DD 的 DMA_buffer_length 字段设置为 0,这样,设备就发送一个空包来标志主机的 USB 传输结束。 3. 设置DMA传输 对于 OUT 端点,主机硬件需对 DD 中的 Message_length_position 字段进行设置。它表示消 息长度在输入数据包中的起始位置。而且,设备软件必须将 DMA_buffer_length 字段设置为 0, 因为该字段是在提取了缓冲区长度之后由设备硬件进行更新的。 对于 IN 端点,描述符的设置与正常模式相同。 由于一个包可以分在两个 DD 中,因此,软件应始终准备好两个 DD,以短包或空包结束的 最后一次 DMA 传输除外。 4. 查找DMA描述符 DMA 描述符的查找操作与正常模式相同。 5. 传输数据 (1)OUT 端点 如果状态字段中的 LS_byte_extracted 和 MS_byte_extracted 位没有置位,则硬件将从数据流 中提取传输 长度并对 DMA_buffer_length 进行设置。一旦完 成提取,LS_byte_extracted 和 MS_byte_extracted 将置位。 (2)IN 端点 IN 端点的 DMA 传输处理与在正常模式下的处理相同,该操作持续进行直到已传输的字节 数等于 DMA_buffer_length 字段的值。 6. 结束包传输 DMA 引擎持续与 USB RAM 进行传输,直到传输的字节数已达到 DMA_buffer_length 中指 定的值。然后,EOT 中断产生。如果在信息包中间出现这种情况,则加载相连的 DD 并且该包 中的剩余字节将针对新 DD 指向的地址进行传输。 (1)OUT 端点 如果链接的 DD 无效,并且包中已有一部分信息传输到了存储器中,则 DD 将以设置 DataOverrun 状 态 代 码 结 束 , 并 且 该 端 点 的 DMA 将 被 禁 止 。 否 则 DD_status 将 更 新 为 NormalCompletion 状态代码。 (2)IN 端点 如果链接的 DD 无效,并且包中已有一部分信息传输到了 USB,则 DD 将以 DD_status 字段 的 NormalCompletion 的状态代码结束。这种情况与 USB 传输结束一致,信息包将作为一个短包 发送。当链接的 DD 有效并且缓冲区长度为 0 时,将发送一个空包表示 USB 传输结束。 11.16 双缓冲的端点操作 USB 设备控制器的批量端点和同步端点采用双缓冲功能来增加数据吞吐量。 当某个具有双缓冲属性的端点实现时,设备将在 EP_RAM 中自动分配两个端点缓冲区的空 间。见“EP RAM 要求”。 在下面的讨论中,当前可由 CPU 或 DMA 引擎进行读和写访问的端点缓冲区被看作是有效 缓冲区。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 47 47 广州周立功单片机发展有限公司 第 11 章 11.16.1 批量端点 对于批量端点,有效的端点缓冲区通过 SIE 清空缓冲区命令或确认缓冲区命令来切换。下面 的例子阐述了在从模式中,批量 OUT 端点的双缓冲是如何工作的。 假定缓冲区 1(B_1)和缓冲区 2(B_2)为空,并且有效缓冲区为 B_1。 a)主机发送一个数据包到端点。设备硬件将该数据包放入 B_1,并产生一个端点中断。 b)软件清除端点中断并开始从 B_1 中读取包中的数据。当正在读 B_1 时,主机发送第 2 个 数据包,设备硬件将它放入 B_2,并产生一个端点中断。 c)当主机试图发送第 3 个包时软件仍在读 B_1。由于 B_1 和 B_2 都是满的,所以设备硬件 以 NAK 响应。 d)软件完成第 1 个包的读取操作,并发送 SIE 清空缓冲区命令将 B_1 释放以接收其它的包。 B_2 变为有效缓冲区。 e)软件发送 SIE 选择端点命令来读取选择端点寄存器并测试 FE 位。软件发现有效缓冲区 (B_2)中已经有数据(FE=1)。软件清除端点中断并开始读取 B_2 的内容。 f)主机重新发送第 3 个包,设备硬件将它放入 B_1 中。端点中断产生。 g)软件完成第 2 个包的读取操作,并发送 SIE 清空缓冲区命令来释放 B_2 以接收其它的包。 B_1 变为有效缓冲区。软件等待下一个端点中断出现(它已经在步骤 6 中产生)。 h)软件将端点中断清零作为对它的响应并开始从 B_1 中读取第 3 个包。 i)软件完成第 3 个包的读取操作,并发送 SIE 清空缓冲区命令来释放 B_1 以接收其它包。 B_2 变为有效缓冲区。 j)软件测试 FE 位,并发现有效缓冲区(B_2)为空(FE=0)。 k)B_1 和 B_2 都为空。软件等待下一个端点中断的发生。现在有效缓冲区为 B_2。主机发 送的下一个数据包将放在 B_2 中。 下面的例子阐述了在从模式中,批量 IN 端点的双缓冲是如何工作的。 假定缓冲区 1(B_1)和缓冲区 2(B_2)都为空,并且有效缓冲区为 B_1。NAK 特性的中 断被使能。 a)主机通过发送 IN 令牌包来请求一个数据包。设备以 NAK 作为应答并产生一个端点中断。 b)软件清除端点中断。设备有 3 个包要发送。软件将第 1 个包填入 B_1 并发送 SIE 确认缓 冲区命令。有效缓冲区切换为 B_2。 c)软件发送 SIE 选择端点命令来读取选择端点寄存器并测试 FE 位。软件发现 B_2 为空 (FE=0),它用第 2 个数据包来填充 B_2。软件发送 SIE 确认缓冲区命令,有效缓冲区 切换为 B_1。 d)软件等待端点中断的产生。 e)设备成功地发送 B_1 中的包并清空缓冲区。端点中断产生。 f)软件清除端点中断。软件将第 3 个包填充到 B_1 中并使用 SIE 确认缓冲区命令来激活它。 有效缓冲区切换为 B_2。 g)设备成功地发送了 B_2 中的第 2 包并产生一个端点中断。 h)软件没有其它包要发送,因此只简单地将中断清除。 i)设备成功地发送了 B_1 中的第 3 个包并产生一个端点中断。 j)软件没有其它包要发送,因此只简单地将中断清除。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 48 48 广州周立功单片机发展有限公司 第 11 章 k)B_1 和 B_2 均为空,有效缓冲区为 B_2。下一个由软件写入的包将进入 B_2。 在 DMA 模式中,有效缓冲区的切换自动在硬件中处理。对于批量 IN 端点,通过使用 USBDMARSet 寄存器手动地开始一个包的传输,可以提前对一个端点缓冲区进行填充,从而充 分利用双缓冲的功能。 11.16.2 同步端点 对于同步端点,有效数据缓冲区在出现 FRAME 中断时由硬件切换。SIE 清空缓冲区命令和 确认缓冲区命令不会引起有效缓冲区的切换。 当正在总线上发送或接收另一个缓冲区中的数据包时,双缓冲允许软件充分利用帧间隔将一 个包写入有效缓冲区或从有效缓冲区中读取一个包。 对于 OUT 同步端点,任何没有在帧结束之前从有效缓冲区中读出的数据都将在有效缓冲区 切换时丢失。 对于 IN 同步端点,如果没有在帧结束之前对有效缓冲区进行确认,则当有效缓冲区切换时 将在总线上发送一个空包,并且当该缓冲区再次变为有效时,它的内容将被覆盖。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 49 49 LPC1700 系列微控制器 第第 1122 章章 UUSSBB 主主机机控控制制器器 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com I 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 II 广州周立功单片机发展有限公司 目录 第 12 章 USB 设备控制器 ······························································································· 1 12.1 如何阅读本章 ················································································································1 12.2 基本配置 ························································································································1 12.3 简介 ································································································································1 12.3.1 特性 ························································································································1 12.3.2 结构 ························································································································2 12.4 接口 ································································································································2 12.4.1 管脚描述 ················································································································2 12.4.2 软件接口 ················································································································3 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. III III 广州周立功单片机发展有限公司 第 12 章 第12章 USB设备控制器 12.1 如何阅读本章 本章描述了 LPC1768、LPC1766、LPC1765、LPC1758、LPC1756 和 LPC1754 可以使用的 USB 主机控制器。 12.2 基本配置 使用下列寄存器来配置 USB 控制器: a)功率:在 PCONP 寄存器中置位 PCUSB。 注:复位时,USB 模块被禁止(PCUSB=0)。 b)时钟:USB 模块可与特定的 PLL(或主 PLL)一起使用,来获得 USB 时钟(见“PLL1 寄存器描述”)。 c)管脚:使用 PINSEL0~PINSEL5 和 PINMODE0~PINMODE5 来选择 USB 管脚及其模式 (见“引脚连接模块”章节的“寄存器描述”小节)。 d)唤醒:USB 总线端口上的活动可将微控制器从掉电模式中唤醒,见“计时和功率控制” 章节的“从低功耗模式中唤醒”小节。 e)中断:使用相关的中断设置使能寄存器在 NVIC 中将中断使能。 f)初始化:见“USB OTG 控制器初始化”的内容。 12.3 简介 本章描述了 USB 2.0 OTG 双角色(dual role)内核的主机部分,该内核集成了主机控制器(遵 循 OHCI 规范)、设备控制器和 I2C 接口。I2C 接口控制外部 OTG ATX。 通用串行总线(USB)为 4 线总线,它支持一个主机与多个外设(多达 127 个外设)之间的 通信。主机控制器通过一个基于令牌的协议为连接的设备分配 USB 带宽。USB 总线支持设备的 热插拔与动态配置。主机控制器启动所有事务处理(transaction)。 主机控制器允许与连接到总线的不同的 USB 设备进行数据交换。它包括寄存器接口、串行 接口引擎和 DMA 控制器。寄存器接口遵循 OHCI 规范。 表 12.1 本章用到的与 USB(OHCI)相关的首字母缩写词/简写 首字母缩写词/简写 AHB ATX DMA FS LS OHCI USB 先进的高性能总线 模拟收发器 直接存储器访问 全速 低速 开放式主机控制器接口 通用串行总线 描述 12.3.1 特性  遵循 OHCI 规范;  OpenHCI 指定了 USB 主机控制器的操作和接口以及 SW 驱动程序: LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 -USBOperational:处理列表和产生 SOF 令牌; -USBReset:强制总线上的复位信号,SOF 禁能; -USBSuspend:监控 USB 的唤醒活动; -USBResume:强制总线上的恢复信号。  主机控制器具有 4 个 SW 驱动程序可见的 USB 状态;  HCCA 寄存器指向中断和同步描述符列表;  ControlHeadED 和 BulkHeadED 寄存器指向控制和批量描述符列表。 12.3.2 结构 USB主机控制器的结构如图 12.1所示。 第 12 章 图 12.1 USB 主机控制器方框图 12.4 接口 USB 接口由 OTG 控制器进行控制,它具有一个 USB 端口。 12.4.1 管脚描述 表 12.2 USB 主机端口管脚 管脚名称 方向 描述 类型 USB_D+ USB_DUSB_UP_LED USB _ PPWR USB_PWRD USB _ OVRCR I/O 正向差分数据 I/O 负向差分数据 O GoodLink LED 控制信号 O 端口电源使能 I 端口电源状态 I 过流状态 USB 连接器 USB 连接器 控制 主机电源切换 主机电源切换 主机电源切换 1. USB主机使用注意事项 USB 模块可配置为 USB 主机。关于如何连接 USB 端口的详细内容,请参考“USB OTG 控 制器”一章。 USB 设备/主机/OTG 在复位后被禁能,并且必须通过写 1 到 PCONP 寄存器的 PCUSB 位使 能。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 12 章 12.4.2 软件接口 USB 主机模块的软件接口由寄存器视图和端点描述符的格式定义组成。关于这两方面的细 节请见 OHCI 规范。寄存器映射的内容在下面的小节中描述。 1. 寄存器映射 下面的寄存器位于 AHB 时钟 ‘cclk’ 域中。可通过处理器直接访问这些寄存器。所有的寄存 器为 32 位宽并且以字地址边界排列。 表 12.3 USB 主机寄存器地址定义 名称 HcRevision HcControl HcCommandStatus HcInterruptStatus HcInterruptEnable HcInterruptDisable HcHCCA HcPeriodCurrentED HcControlHeadED HcControlCurrentED HcBulkHeadED HcBulkCurrentED HcDoneHead HcFmInterval HcFmRemaining HcFmNumber HcPeriodicStart 地址 0x5000 C000 0x5000 C004 0x5000 C008 0x5000 C00C 0x5000 C010 0x5000 C014 0x5000 C018 0x5000 C01C 0x5000 C020 0x5000 C024 0x5000 C028 0x5000 C02C 0x5000 C030 0x5000 C034 0x5000 C038 0x5000 C03C 0x5000 C040 R/W[1] R R/W R/W R/W R/W R/W R/W R R/W R/W R/W R/W R R/W R R R/W 功能 通过主机控制器实现的 HCI 规范版本的 BCD 表示法 定义 HC 的工作模式 该寄存器用于接收主机控制器驱动器 (HCD)的命令。它也可以表示 HC 的 状态 表示不同事件的状态,这些事件通过设 置相应的位来产生硬件中断 控制 HcInterruptStatus 寄存器的位并指 示哪个事件将产生硬件中断 该位用来禁能 HcInterruptStatus 寄存器 中对应的位并反过来禁能产生硬件中断 的事件 包含主机控制器通信区域的物理地址 包含当前同步或中断端点描述符的物理 地址 包含控制列表的第一个端点描述符的物 理位置 包含控制列表的当前端点描述符的物理 位置 包含批量列表的第一个端点描述符的物 理位置 包含批量列表的当前端点描述符的物理 位置 包含添加到 ‘Done’ 队列的最后一个传 输描述符的物理位置 定义在一帧中的位时间间隔,以及不会 产生过载的全速最大包容量 14 位的计数器,表示在当前帧中剩余的 位时间 包含 16 位的计数器,并在 HC 和 HCD 出现的事件中提供计时参考 包含可编程的 14-位值,该值确定 HC 开 始处理周期列表的最早时间 复位值 0x10 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x2EDF 0x0 0x0 0x0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 12 章 名称 HcLSThreshold 地址 0x5000 C044 R/W[1] R/W 功能 包含 11-位值,HC 通过该值来确定在 EOF 之前是否执行最大的 8 字节 LS 包 的传输 HcRhDescriptorA HcRhDescriptorB 0x5000 C048 0x5000 C04C HcRhStatus 0x5000 C050 HcRhPortStatus[1] HcRhPortStatus 0x5000 C054 0x5000 C058 Module_ID/Ver_Rev_ID 0x5000 C0FC R/W 描述根集线器特性的第一个寄存器 R/W 描述根集线器特性的第二个寄存器 该寄存器划分为两部分。低 D 字表示集 R/W 线器状态字段,高字表示集线器状态的 变化字段 R/W 控制并报导每个端口上的端口事件 R/W 控制并报导每个端口上的端口事件 IP 编号,yy(0x00)是唯一的版本号, R zz(0x00)是唯一的版本号 [1] 表 12.3中的R/W栏列出了寄存器的可访问性:  访问标记‘R’的寄存器将在读取时返回它们的当前值;  标记‘R/W’的寄存器允许进行读写操作。 2. USB主机寄存器定义 关于寄存器定义的内容请参考 Compaq 网站上的 OHCI 规范文档。 续上表 复位值 0x628h 0xFF000902 0x60000h 0x0 0x0 0x0 0x3505yyzz LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 LPC1700 系列微控制器 第第 1133 章章 UUSSBB OOTTGG 控控制制器器 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 广州周立功单片机发展有限公司 目录 第 13 章 USB OTG 控制器 ······························································································ 1 13.1 如何阅读本章 ················································································································1 13.2 基本配置 ························································································································1 13.3 简介 ································································································································1 13.4 特性 ································································································································1 13.5 结构 ································································································································1 13.6 操作模式 ························································································································2 13.7 引脚配置 ························································································································2 13.7.1 连接 USB 端口到外部 OTG 收发器······································································3 13.7.2 将 USB 作为主机的连接 ·······················································································3 13.7.3 将 USB 作为设备的连接 ·······················································································4 13.8 寄存器描述 ····················································································································4 13.8.1 USB 中断状态寄存器(USBIntSt-0xE01F C1C0)··············································5 13.8.2 OTG 中断状态寄存器(OTGIntSt-0xE01F C100)··············································5 13.8.3 OTG 中断使能寄存器(OTGIntEn-0x5000 C104) ·············································5 13.8.4 OTG 中断置位寄存器(OTGIntSet-0x5000 C20C)············································6 13.8.5 OTG 中断清除寄存器(OTGIntClr-0x5000 C10C)············································6 13.8.6 OTG 状态和控制寄存器(OTGStCtrl-0x5000 C110)·········································6 13.8.7 OTG 定时器寄存器(OTGTmr-0x5000 C114) ···················································7 13.8.8 OTG 时钟控制寄存器(OTGClkCtrl-0x5000 CFF4)··········································7 13.8.9 OTG 时钟状态寄存器(OTGClkSt-0x5000 CFF8)·············································7 13.8.10 I2C 接收寄存器(I2C_RX-0x5000 C300) ···························································8 13.8.11 I2C 发送寄存器(I2C_TX-0x5000 C300) ···························································8 13.8.12 I2C 状态寄存器(I2C_STS-0x5000 C304)··························································9 13.8.13 I2C 控制寄存器(I2C_CTL-0x5000 C308)·······················································10 13.8.14 I2C 时钟高电平寄存器(I2C_CLHHI-0x5000 C30C) ······································12 13.8.15 I2C 时钟低电平寄存器(I2C_CLHLO-0x5000 C310)······································12 13.8.16 中断处理 ··············································································································12 13.9 支持 HNP ·····················································································································13 13.9.1 B 设备从外设切换至主机····················································································14 13.9.2 A-设备:主机切换到外设 ···················································································16 13.10 时钟和功率管理···········································································································20 13.10.1 设备时钟请求信号 ·······························································································20 13.10.2 掉电模式支持·······································································································21 13.11 USB OTG 控制器初始化 ·····························································································21 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. II 广州周立功单片机发展有限公司 第 13 章 第13章 USB OTG控制器 13.1 如何阅读本章 本章描述了 LPC1768、LPC1766、LPC1765、LPC1758、LPC1756 和 LPC1754 可以使用的 USB OTG 控制器。 13.2 基本配置 利用下列寄存器来配置 USB 控制器: a)功率:在寄存器 PCONP 中置位 PCUSB。 注:复位后,USB 模块被禁止(PCUSB=0)。 b)时钟:USB 模块可与专门的 PLL 或主 PLL 一起使用来获得 USB 时钟(请参见“PLL1 寄存器描述”小节)。 c)引脚:分别在寄存器 PINSEL0-5 和寄存器 PINMODE0-5 中选择 USB 引脚和引脚的模式 (请参见“引脚连接模块”章节的“寄存器描述”小节)。 d)唤醒:USB 总线端口上的活动可将微控制器从掉电模式中唤醒(请参考“掉电模式支持” 小节和“从低功耗模式中唤醒”小节)。 e)中断:利用相应的中断置位使能寄存器使能 NVIC 中的中断。 f)初始化:请参见“USB 控制器的初始化”小节。 13.3 简介 本章描述了 OTG 和 USB 2.0 OTG 双角色设备控制器的 I2C 部分,该 OTG 控制器集成了 (OHCI)主机控制器、设备控制器和 I2C。I2C 接口(仅为主机)控制外部 OTG 收发器。 USB OTG 是 USB2.0 规范的补充,它通过增加连接到 USB 外设的主机功能来扩充现有移动 设备和 USB 外设的能力。USB2.0 规范和 USB OTG 的信息可在 USB 执行论坛上找到。 13.4 特性  完全遵循 USB2.0 的补充规范:USB OTG V1.0a;  硬件支持主机交换协议(HNP);  包括 HNP 和 SRP(对话请求协议)所需的可编程的定时器;  支持任何遵循 OTG 收发器规范(CEA-2011)V1.0 的 OTG 收发器。 13.5 结构 USB OTG 控制器的方框图如下图所示。 主机、设备、OTG 和 I2C 控制器可通过寄存器接口进行编程。OTG 控制器可通过 HNP 协议 使能主机和设备之间的动态切换。可将一个端口连接到外部的 OTG 收发器来支持 OTG 连接。 寄存器接口和外部 OTG 收发器之间的通信可通过 I2C 接口和外部 OTG 收发器来处理。 对于仅使用设备或主机控制器(不是 OTG)的 USB 连接,端口使用一个内置的 USB 模拟 收发器(ATX)。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第 13 章 图 13.1 USB OTG 控制器方框图 13.6 操作模式 OTG 控制器可以在下面的模式中操作:  主机模式(见图 13.2);  设备模式(见图 13.3);  OTG模式(见图 13.4)。 13.7 引脚配置 OTG 控制器只有 1 个 USB 端口。 表 13.1 USB OTG 端口的引脚 引脚名称 USB_D+ USB_DUSB_UP_LED USB_SCL USB_SDA 方向 I/O I/O O I/O I/O 描述 正向差分数据 负向差分数据 Good Link LED 控制信号 I2C 串行时钟 I2C 串行数据 引脚类别 USB 连接器 USB 连接器 控制 外部 OTG 收发器 外部 OTG 收发器 以下各图给出了实现连接到 USB 设备的不同方法。这里描述的例子使用 ISP1301(NXP) 用于外部 OTG 收发器和 USB 主机电源开关 LM3526-L(国家半导体)。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 13 章 13.7.1 连接USB端口到外部OTG收发器 对于OTG功能,必须将OTG收发器连接到LPC1700 系列Cortex-M3 微控制器设备:使用USB 信号的内部USB收发器,并仅使用OTG功能的外部OTG收发器(见图 13.2)。该选项在VP/VM 模式下使用内部收发器。 图 13.2 USB OTG 的端口配置 13.7.2 将USB作为主机的连接 利用一个嵌入的 USB 收发器可将 USB 端口作为主机进行连接。该端口不具有 OTG 功能。 图 13.3 USB 主机端口的配置 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 13.7.3 将USB作为设备的连接 USB 端口可作为设备进行连接。该端口不具有 OTG 功能。 第 13 章 图 13.4 USB 设备端口的配置 13.8 寄存器描述 下表对 OTG 和 I2C 寄存器进行了总结。 设备和主机寄存器分别在“USB 设备控制器”章节的和“USB 主机控制器”章节中描述。 所有的寄存器为 32 位宽并以字地址边界排列。 表 13.2 USB OTG 和 I2C 寄存器地址的定义 名称 地址 中断寄存器 USBIntSt 0x400F C1C0 OTG 寄存器 OTGIntSt 0x5000 C100 OTGIntEn 0x5000 C104 OTGIntSet 0x5000 C108 OTGIntClr 0x5000 C10C OTGIntCtrl 0x5000 C1110 OTGTmr 0x5000 C1114 I2C 寄存器 I2C_RX 0x5000 C300 I2C_TX 0x5000 C300 I2C_STS 0x5000 C304 I2C_CTL 0x5000 C308 I2C_CLKHI 0x5000 C30C I2C_CLKLO 0x5000 C310 时钟控制寄存器 OTGClkCtrl 0x5000 CFF4 OTGClkSt 0x5000 CFF8 访问 R/W USB 中断状态 RO OTG 中断状态 R/W OTG 中断使能 WO OTG 中断设置 WO OTG 中断清除 R/W OTG 状态和控制 R/W OTG 定时器 RO I2C 接收 WO I2C 发送 WO I2C 状态 R/W I2C 控制 R/W I2C 时钟高电平 WO I2C 时钟低电平 R/W OTG 时钟控制器 RO OTG 时钟状态 功能 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 13 章 13.8.1 USB中断状态寄存器(USBIntSt-0xE01F C1C0) USB OTG 控制器有 7 条中断线。该寄存器允许软件对其执行一次读操作来确定这 7 条中断 线的状态。 将 7 条中断线相“或”,连接到向量中断控制器的一个通道中。 表 13.3 USB 中断状态寄存器位描述 位 0 1 2 3 4 5 6 7 8 30:9 31 符号 USB_INT_REQ_LP USB_INT_REQ_HP USB_HOST_REQ_DMA USB_HOST_INT USB_ATX_INT USB_OTG_INT USB_I2C_INT - USB_NEED_CLK - EN_USB_INTS 描述 低优先级中断线的状态。该位只读 高优先级中断线的状态。该位只读 DMA 中断线的状态。该位只读 USB 主机中断线的状态。该位只读 外部 ATX 中断线的状态。该位只读 OTG 中断线的状态。该位只读 I2C 模块中断线的状态。该位只读 保留,用户软件不应向保留位写入 1,从保留位读取的值未定 义 USB 所需时钟指示器。该位只读 保留,用户软件不应向保留位写入 1,从保留位读取的值未定 义 使能所有 USB 中断。当该位清零时,向量中断控制器看不到 USB 中断线的“或”输出 复位值 0 0 0 0 0 0 0 NA 1 NA 1 13.8.2 OTG中断状态寄存器(OTGIntSt-0xE01F C100) 当中断事件在 HNP 主机交换序列过程中出现时,该寄存器中的位由硬件置位。有关这些位 何时置位的更多信息请参考“支持 HNP”小节。 表 13.4 OTG 中断状态寄存器位描述 位 0 1 2 3 31:4 符号 TMR REMOVE_PU HNP_FAILURE HNP_SUCCESS - 描述 定时器超时 移除上拉电阻 HNP 失败 该位由硬件置位来表示 HNP 转换失败 HNP 成功 该位由硬件置位来表示 HNP 转换成功 保留,用户软件不应向保留位写入 1,从保留位读取的值未定义 复位值 0 0 0 0 NA 13.8.3 OTG中断使能寄存器(OTGIntEn-0x5000 C104) 向该寄存器中的位写入 1 使 OTGIntSt 中的相应位在其中一条中断线上产生中断。该中断与 USBIntSt 寄存器中的 USB_OTG_INT 中断线相连。OTGIntSt 寄存器的位分配以及复位值与 OTGIntSt 寄存器相同。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 13 章 13.8.4 OTG中断置位寄存器(OTGIntSet-0x5000 C20C) 向该寄存器的位写入 1 将置位 OTGIntSt 寄存器中的相应位。写入 0 无效。OTGIntSet 寄存 器的位分配与 OTGIntSt 寄存器相同。 13.8.5 OTG中断清除寄存器(OTGIntClr-0x5000 C10C) 向该寄存器的位写入 1 将清零 OTGIntSt 寄存器中的相应位。写入 0 无效。OTGIntClr 寄存 器的位分配与 OTGIntSt 寄存器相同。 13.8.6 OTG状态和控制寄存器(OTGStCtrl-0x5000 C110) OTG 状态和控制寄存器允许在 HNP 移交序列过程中使能硬件跟踪、控制 OTG 定时器、监 控定时器计数并控制映射到端口 U1 到 U2 的函数。 对时间要求严格的事件在切换序列中通过 OTG 定时器来控制。定时器可在下面两种模式下 操作 :  单次触发模式:中断在 TIMEOUT_CNT 的结束产生(见“OTG 定时器寄存器”小节), OTGIntSt 中的 TMR 置位,并且定时器将被禁能;  自由运行模式:中断在 TIMEOUT_CNT 的结束产生(见“OTG 定时器寄存器”小节), TMR 置位,并且定时器值被重新载入计数器中。定时器在该模式中不被禁能。 表 13.5 OTG 状态控制寄存器位描述 位 符号 描述 复位值 控制端口的函数。当 B_HNP_TRACK 或 A_HNP_TRACK 置位且 HNP 1:0 PORT_FUNC 成功移交时,Bit0 通过硬件置位或清零。请见“支持 HNP”小节。 - Bit1 保留 定时器调节选择。该字段确定了每个定时器的持续时间 00:10μs(100KHz) 3:2 TMR_SCALE 01:100μs(10KHz) 0x0 10:1000μs(1KHz) 11:保留 定时器模式选择 4 TMR_MODE 0:单次触发模式 0 1:自由运行模式 定时器使能。该位置位时,TMR_CNT 加 1。该位清零时,TMR_CNT 5 TMR_EN 0 复位为 0 定时器复位。向该位写入 1 会将 TMR_CNT 复位为 0。这可以使软件 6 TMR_RST 0 对某个位进行单独控制以在定时器使能时重启定时器 7 - 保留,用户软件不应向保留位写入 1,从保留位读取的值未定义 NA 使能 B-设备(外设)的 HNP 跟踪,请参见“支持 HNP”小节 8 B_HNP_TRACK 0 当 HNP_SUCCESS 或 HNP_FAILYRE 置位时,硬件会清零该位 使能 A-设备(主机)的 HNP 跟踪,请参见“支持 HNP”小节 9 A_HNP_TRACK 0 当 HNP_SUCCESS 或 HNP_FAILYRE 置位时,硬件会清零该位 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 13 章 位 10 15:11 31:16 符号 PU_REMOVED TMR_CNT 描述 当 B-器件从外设变为主机时,软件在其移除 D+上拉时将该位 置 位 , 请 参 见 “ 支 持 HNP ” 小 节 。 当 HNP_SUCCESS 或 HNP_FAILYRE 置位时,硬件会清零该位 保留,用户软件不向保留位写入 1,从保留位读取的值未被定义 当前定时器的计数值 13.8.7 OTG定时器寄存器(OTGTmr-0x5000 C114) 续上表 复位值 0 NA 0x0 表 13.6 OTG 定时器寄存器位描述 位 符号 描述 15:0 TIMEOUT_CNT TMR 中断在计数值达到该值时置位 31:16 - 保留,用户软件不应向保留位写入 1,从保留位读取的值未定义 复位值 0xFFFF NA 13.8.8 OTG时钟控制寄存器(OTGClkCtrl-0x5000 CFF4) 该寄存器控制 OTG 控制器的时钟。只要软件想访问寄存器,就必须置位相应的时钟控制位。 如果相对应的 OTGClkCtrl 位已经置位,则软件无需在每次访问寄存器时都重复该操作。 表 13.7 OTG 时钟控制寄存器位描述 位 符号 值 描述 复位值 主机时钟使能 0 HOST_CLK_EN 0 禁能主机时钟 0 1 激活主机时钟 设备时钟使能 1 DEV_CLK_EN 0 禁能设备时钟 0 1 激活设备时钟 I2C 时钟使能 2 I2C_CLK_EN 0 禁能 I2C 时钟 0 1 激活 I2C 时钟 OTG 时钟使能 3 OTG_CLK_EN 0 禁能 OTG 时钟 0 1 激活 OTG 时钟 AHB 主机时钟使能 4 AHB_CLK_EN 0 禁能 AHB 主机时钟 0 1 激活 AHB 主机时钟 保留,用户软件不应向保留位写入 1,从保留位读取的 31:5 - NA NA 值未定义 13.8.9 OTG时钟状态寄存器(OTGClkSt-0x5000 CFF8) 该寄存器保存时钟的有效状态。当通过 OTG 时钟控制寄使能时钟时,软件应该查询该寄存 器中相应的位。如果该位置位,则软件可通过寄存器访问继续操作。如果 OTGClkCtrl 位没有改 变,则软件无需在每次访问寄存器时都重复该操作。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 13 章 表 13.8 OTG 时钟状态寄存器位描述 位 符号 0 HOST_CLK_ON 1 DEV_CLK_ON 2 I2C_CLK_ON 3 OTG_CLK_ON 4 AHB_CLK_ON 31:5 - 值 描述 主机时钟的状态 0 主机时钟不可用 1 主机时钟可用 设备时钟的状态 0 设备时钟不可用 1 设备时钟可用 I2C 时钟的状态 0 I2C 时钟不可用 1 I2C 时钟可用 OTG 时钟的状态 0 OTG 时钟不可用 1 OTG 时钟可用 AHB 主机时钟的状态 0 AHB 时钟不可用 1 AHB 时钟可用 保留,用户软件不应向保留位写入 1,从保留位读取的 值未定义 复位值 0 0 0 0 0 NA 13.8.10 I2C接收寄存器(I2C_RX-0x5000 C300) 该寄存器是接收 FIFO 的顶部字节。接收 FIFO 的深度为 4 字节。RxFIFO 通过硬复位或软复 位(I2C_CTLbit7)来刷新。读取空 FIFO 会得到不可预知的数据结果。 表 13.9 I2C 接收寄存器位描述 位 符号 7:0 RX_DATA 接收数据 描述 复位值 - 13.8.11 I2C发送寄存器(I2C_TX-0x5000 C300) 该寄存器是发送 FIFO 的顶部字节。发送 FIFO 的深度为 4 字节。 Tx FIFO 通过硬复位或软复位(I2C_CTLbit7)或在仲裁失败出现(I2C_STS bit3)时被刷新。 写入满 FIFO 的数据被忽略。 必须写 I2C_TX 进行读写操作来传输每个字节。主机接收操作时 Bit7[7:0]被忽略。主机接收 器必须为它期望在 RX FIFO 中接收到的每个字节写一个伪字节到 Tx FIFO。当停止位置位或起 始位置位以使在写入 TX FIFO 的字节上产生重启条件时,从从机读取的字节不会被应答。也就 是主机接到的最后一个字节不会被应答。 表 13.10 I2C 发送寄存器位描述 位 7:0 8 9 31:10 符号 TX DATA STRAT STOP - 描述 发送数据 为 1 时,在发送该字节前发送一个起始条件 为 1 时,在发送完该字节后发送一个停止条件 保留,用户软件不应向保留位写入 1,从保留位读取的值未定义 复位值 - LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 13 章 13.8.12 I2C状态寄存器(I2C_STS-0x5000 C304) I2C_STS 寄存器提供了 TX 和 RX 模块的状态信息以及外部总线的当前状态。各个位通过 I2C_CTL 寄存器使能为中断并连接到 USBIntSt 的位 I2C_USB_Int。 表 13.11 I2C 状态寄存器位描述 位 符号 值 描述 复位值 处理结束中断。处理成功完成时该位置位。向状态寄存器的位 0 写入 1 可 清除中断。从机操作对其没有影响 0 TD 0 0 处理还没有完成 1 处理已完成 仲裁失败中断。发送时,若 SDAOUT 为高时 SDA 为低,I2C 会失去对另 一个总线设备的仲裁,这时仲裁失败位置位。向状态寄存器的位 1 写入 1 1 AFI 可清除中断 0 0 在最后一次发送时没有仲裁失败 1 在最后一次发送时出现仲裁失败 无应答中断。每发送完一个字节后,发送器都希望从接收器那接收一个应 答。若没有收到应答,该位置位。当主机 TX FIFO 有字节写入时中断被 2 NAI 清除 0 0 发送完最后一个字节后接收到了应答 1 发送玩最后一个字节后没有收到应答 主机请求数据中断。一旦传输开始,只要它后面没有跟随停止条件,发送 器就必须有足够的数据来发送,或者在有数据可发送之前一直将 SCL 线 保持为低电平。当主机发送器的数据发送完毕时主机数据请求位就会置 3 DRMI 位。若主机 TX FIFO 没有数据(即为空)且发送完最后一个字节后没有 0 停止条件标志,那么 SCL 就必须一直保持低电平直至 CPU 写入新的发送 字节。当有字节写入主机 TX FIFO 时该位会清零 0 主机发送器不需要数据 1 主机发送器需要数据 从机请求数据中断。一旦传输开始,只要它后面没有跟随停止条件,发送 器就必须有足够的数据来发送,或者在有数据可发送之前一直将 SCL 线 保持为低电平。当从机发送器的数据发送完毕时从机数据请求位就会置 4 DRSI 位。若从机 TX FIFO 没有数据(即为空)且发送完最后一个字节后没有 0 停止条件标志,那么 SCL 就必须一直保持低电平直至 CPU 写入新的发送 字节。当有字节写入从机 TX FIFO 时该位会清零 0 从机发送器不需要数据 1 从机发送器需要数据 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 13 章 续上表 位 符号 值 描述 复位值 5 Active 表示总线是否忙碌。该位在起始条件出现时置位,在停止条件出现时 0 清零 6 SCL 7 SDA 8 RFF SCL 信号的当前值 - SDA 信号的当前值 - 接收 FIFO 满(RFF)。当 RX FIFO 满且不能再接收任何数据时该位 置位。当 RX FIFO 不满时该位清零。若在接收 FIFO 满时还有数据达 到,则 SCL 保持低电平直至 CPU 读取 RX FIFO 并为该数据腾出空间 为止 0 0 RX FIFO 不满 1 RX FIFO 满 接收 FIFO 空。该位在 RX FIFO 空时置位,在 RX FIFO 有有效数据时 清零 9 RFE 1 0 RX FIFO 有数据 1 RX FIFO 空 发送 FIFO 满。该位在 TX FIFO 满时置位,在 TX FIFO 不满时清零 10 TFF 0 TX FIFO 不满 0 1 TX FIFO 满 发送 FIFO 空。该位在 TX FIFO 空时置位,在 TX FIFO 有有效数据时 清零 11 TFE 0 0 TX FIFO 有数据 1 TX FIFO 空 31:12 - 保留,用户软件不应向保留位写入 1。从保留位读出的值未定义 NA 13.8.13 I2C控制寄存器(I2C_CTL-0x5000 C308) I2C_CTL 可用来使能中断和复位 I2C 状态机。置位时使能的中断会使 USB_I2C_INT 中断输 出线被拉高。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 广州周立功单片机发展有限公司 第 13 章 表 13.12 I2C 控制寄存器位描述 位 符号 值 描述 复位值 发送完成中断使能。该位可使能 TDI 中断发信号示意 I2C 发出一个停止条件 0 TDIE 0 禁止 TDI 中断 0 1 使能 TDI 中断 发送器仲裁失败中断使能。当试图把 SDA 设置为高电平时,该位使能在发送 过程中被拉高的 AFI 中断,但总线通过另一个器件被驱动为低电平 1 AFIE 0 0 禁止 AFI 1 使能 AFI 发送器无应答中断使能。该位可使能 NAI 中断发信号示意发已送的字节未被 应答 2 NAIE 0 0 禁止 NAI 1 使能 NAI 主机发送器数据请求中断使能。该位可使能 DRMI 中断通知主机发送器已用 完数据、尚未发起停止条件,并保持 SCL 线为低电平 3 DRMIE 0 0 禁止 DRMI 中断 1 使能 DRMI 中断 从机发送器数据请求中断使能。该位可使能 DRSI 中断通知主机发送器已用 完数据、尚未发起停止条件,并保持 SCL 线为低电平 4 DRSIE 0 0 禁止 DRMI 中断 1 使能 DRMI 中断 接收 FIFO 满中断使能。该位可使能接收 FIFO 满中断以示意接收 FIFO 不能 再接收数据 5 REFIE 0 0 禁止 RFFI 1 使能 RFFI 有可用的接收数据中断使能。该位可使能 DAI 中断来表示接收 FIFO 中有可 用数据(即不空) 6 RFDAIE 0 0 禁止 DAI 1 使能 DAI 发送 FIFO 不满中断使能。该位可使能发送 FIFO 不满中断以示意可以向发送 7 TFFIE FIFO 写入数据。 注:该 FIFO 不满。这有助于 CPU 向 I2C 模块写数据(FIFO 有空间时),而 0 且不需要轮询状态寄存器 0 禁止 TFFI 1 使能 TFFI LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第 13 章 续上表 位 符号 值 描述 复位值 软复位。只有在少许情况下才需要软复位。如:器件发起了起始条 件确没发送停止条件。若总线保持忙状态的时间长于超时周期,系 统定时器就会复位 I2C 总线。在软复位时,TX 和 RX FIFO 被刷新, 8 SRST I2C_STS 寄存器清空,所有内部状态机被复位以出现空闲。软复位 0 不能修改 I2C_CLKHI、I2C_CLKLO 和 I2C_CTL(除软复位位以外) 0 请见文本 1 将 I2C 总线复位(闲置)。自清零 31:9 - NA 保留,用户软件不应向保留位写入 1。从保留位读出的值未定义 NA 13.8.14 I2C时钟高电平寄存器(I2C_CLHHI-0x5000 C30C) CLK 寄存器包含计数 48MHz 时钟周期的最终计数,来创建低速 I2C 串行时钟 SCL 的高电平 周期。 表 13.13 I2C_CLKHI 寄存器 位 名称 功能 复位值 时钟分频器高电平。该值是 48MHz 时钟的数目,串行时钟(SCL) 7:0 CDHI 0xB9 将为高电平周期 13.8.15 I2C时钟低电平寄存器(I2C_CLHLO-0x5000 C310) CLK 寄存器包含计数 48MHz 时钟周期的最终计数,来创建低速 I2C 串行时钟 SCL 的低电平 周期。 表 13.14 I2C_CLKLO 寄存器位描述 位 名称 功能 复位值 时钟分频器低电平。该值是 48MHz 时钟的数目,串行时钟(SCL) 7:0 CDLO 0xB9 将为低电平周期 13.8.16 中断处理 OTGIntSt 寄存器中设置的中断在 HNP 切换过程中置位和清零。所有与 OTG 相关的中断。 如果使能,都被连接到 USBIntSt 寄存器中的 USB_OTG_INT 位。 I2C 相关的中断在 I2C_STS 寄存器中置位,如果使能,则通过 I2C_CTL 连接到位 USB_I2C_INT。 有关设备控制器产生的中断的详细内容请见 USB 设备一章。有关主机控制器产生的中断, 请见 OHCI 规范。 USBIntSt寄存器中的EN_USB_INTS位使能连接任何USB相关的中断到NVCI控制器(见图 13.5)。 注:HNP 在主机和设备之间切换过程中(OTG 栈有效),一个操作可将中断的级别提高。建议让 OTG 栈启 动基于中断的操作,忽略设备和主机级别的中断。这就意味着,在 HNP 切换过程中,OTG 堆栈为主机和设备控 制器提供通信。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 广州周立功单片机发展有限公司 第 13 章 图 13.5 USB OTG 中断处理 13.9 支持HNP 本小节主要介绍 OTG 控制器硬件支持的 HNP 主机交换协议。 当两个双角色设备相互连接时,Mini-AB 插座中的插入的插头类型可确定各设备自身的角 色。如果设备的插座插入的是 Mini-A 插头则该设备默认为主机(A-设备),插入的是 Mini-B 插 头的设备默认为外设(B-设备)。 一旦连接上,默认主机和默认外设就可以通过主机交换协议自由地切换主从机角色。 OTG控制器的操作流程如图 13.6所示。每个控制器(主机、设备或OTG)都是通过一系列 状态和控制寄存器以及中断来和它们的软件栈通信的。OTG软件栈可通过I2C接口和外部收发器 中断信号来和外部OTG收发器进行通信。 OTG 软件栈负责执行 HNP 状态机(按照 USB 2.0 规范的 OTG 补充)。 OTG 控制器提供对某些 HNP 状态机的支持(如下面的小节所述)。 接下来我们将详细介绍 USB 状态机、HNP 切换和 USB 控制器之间通信的内容。  USB OHCI 规范;  USB OTG 补充,版本 1.2;  USB2 0 规范;  ISP1301 的数据手册和用户手册。 LPC1700 用户手册 图 13.6 有软件栈的 USB OTG 控制器 ©2010 Guangzhou ZLGMCU Development CO., LTD. 13 13 广州周立功单片机发展有限公司 第 13 章 13.9.1 B设备从外设切换至主机 在这种情况下,OTG 控制器属 B 设备,默认角色是外设,现在要将其从外设切换为主机。 OTG 补充信息利用一个状态框图定义了双角色 B-设备在 HNP 切换过程中的行为。OTG 软 件堆栈负责实现图中所有的状态。 OTG控制器硬件支持双角色B设备状态框图中状态b_peripheral、b_wait_acon和b_host之间的 状态转换。置位OTGStCtrl寄存器中的B_HNP_TRACK使硬件支持B设备从外设切换为主机。置 位该位后的硬件操作如图 13.7所示。 图 13.7 B-设备从外设切换成主机 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 14 14 广州周立功单片机发展有限公司 第 13 章 图 13.8展示了OTG软件堆栈为了响应硬件操作而必须要执行的操作,硬件操作有:置位 REMOVE_PU、HNP_SUCCESS和HNP_FAILURE。此外还标明了软件堆栈的操作与双角色B设 备状态之间的关系。B设备的状态已用黑体标出,并用椭圆圈住。 图 13.8 软件的状态转变(外设-主机) 需要注意的是上图只展示了一部分硬件支持的 B 设备的 HNP 状态和状态转变。软件栈是负 责执行所有的 HNP 状态的。 从图 13.8来看,似乎应该要轮询中断位REMOVE_PU,但是如果相应的中断已使能就不需要 轮询了。 下面给出了完成图 13.8所需操作的代码示例。在该示例中,我们假设外部OTG收发器使用的 是ISP1301。 移除 D+的上拉电阻 /*通过 ISP1301 移除 D+的上拉电阻*/ OTG_I2C_TX = 0x15A; // 发送 ISP1301 的地址, R/W=0 OTG_I2C_TX = 0x007; // 发送 OTG 控制(清除)寄存器的地址 OTG_I2C_TX = 0x201; // 清零位 DP_PULLUP, 发起停止条件 /*等待 TDI 置位*/ LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 15 15 广州周立功单片机发展有限公司 第 13 章 while (!(OTG_I2C_STS & TDI)); /*清零 TDI */ OTG_I2C_STS = TDI; 增加 D+的上来电阻 /*通过 ISP1301 增加 D+的上拉电阻 */ OTG_I2C_TX = 0x15A; //发送 ISP1301 的地址,R/W=0 OTG_I2C_TX = 0x006; //发送 OTG 控制(置位)寄存器的地址 s OTG_I2C_TX = 0x201; // 置位位 DP_PULLUP, 发起停止条件 /*等待 TDI 置位*/ while (!(OTG_I2C_STS & TDI)); /*清零 TDI */ OTG_I2C_STS = TDI; 13.9.2 A-设备:主机切换到外设 在这种情况下,OTG 控制器的角色是 A 设备,默认为主机,现在要将其从主机切换为外设。 OTG 补充信息利用一个状态框图定义了双角色 A-设备在 HNP 切换过程中的行为。OTG 软 件堆栈负责实现图中所有的状态。 OTG控制器硬件支持装角色A设备状态框图中状态a_host、a_suspend、a_wait_vfall和 a_peripheral之间的转换。置位OTGStCtrl寄存器中的位A_HNP_TRACK使硬件就允许A设备从主 机状态切换成设备状态。该位置位后的硬件操作如图 13.9所示。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 16 16 广州周立功单片机发展有限公司 第 13 章 图 13.9 A-设备从主机状态切换到外设状态 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 17 17 广州周立功单片机发展有限公司 第 13 章 图 13.10展示了OTG软件堆栈为了响应硬件操作而应该执行的操作,硬件操作有:置位TMR、 HNP_SUCCESS和HNP_FAILURE。此外还标明了软件堆栈的操作与双角色A设备状态之间的关 系。A设备的状态已用黑体标出,并用椭圆圈住。 图 13.10 软件的状态转变(主机-外设) 需要注意的是上图只展示了一部分硬件支持的 A 设备的 HNP 状态和状态转变。软件栈是负 责执行所有的 HNP 状态的。 从上图来看,似乎应该要轮询中断位 TMR,但是如果相应的中断已使能就不需要轮询了。 下面给出了完成图 13.10操作所需的代码示例。在该示例中,我们假设外部OTG收发器使用 的是ISP1301。 置位外部 OTG 收发器中的位 BDIS_ACON_EN /*置位 ISP1301 中的位 BDIS_ACON_EN */ OTG_I2C_TX = 0x15A; //发送 ISP1301 的地址, R/W=0 OTG_I2C_TX = 0x004; //发送模式控制(设置)寄存器的地址 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 18 18 广州周立功单片机发展有限公司 第 13 章 OTG_I2C_TX = 0x210; //置位 BDIS_ACON_EN, 发起停止条件 /*等待 TDI 置位*/ while (!(OTG_I2C_STS & TDI)); /*清零 TDI */ OTG_I2C_STS = TDI; 将外部 OTG 收发器中的位 BDIS_ACON_EN 清零 /*置位 ISP1301 中的位 BDIS_ACON_EN*/ OTG_I2C_TX = 0x15A; //发送 ISP1301 的地址, R/W=0 OTG_I2C_TX = 0x005; //发送模式控制(清零)寄存器的地址 OTG_I2C_TX = 0x210; //清零 BDIS_ACON_EN bit,发起停止条件 /*等待 TDI 置位*/ while (!(OTG_I2C_STS & TDI)); /*清零 TDI */ OTG_I2C_STS = TDI; VBUS 放电 /*将 ISP1301 中的位 VBUS_DRV 清零*/ OTG_I2C_TX = 0x15A; //发送 ISP1301 的地址, R/W=0 OTG_I2C_TX = 0x007; //发送 OTG 控制(清零)寄存器的地址 OTG_I2C_TX = 0x220; //清零 VBUS_DRV,发起停止条件 /*等待 TDI 置位*/ while (!(OTG_I2C_STS & TDI)); /*清零 TDI */ OTG_I2C_STS = TDI; /* 将 ISP130 中的位 VBUS_DISCHRG 置位*/ OTG_I2C_TX = 0x15A; //发送 ISP1301 的地址, R/W=0 OTG_I2C_TX = 0x006; //发送 OTG 控制(设置)寄存器的地址 OTG_I2C_TX = 0x240; //置位 VBUS_DISCHRG,发起停止条件 /*等待 TDI 置位*/ while (!(OTG_I2C_STS & TDI)); /*清零 TDI */ OTG_I2C_STS = TDI; 装载 OTG 定时器并使能 /*假定之前已设置好了 OTG 定时器,定时器的时间刻度为 1ms(TMR_SCALE=“10”,使用的是单触*/ 发模式(TMR_MODE=0)。*/ /*装入溢出值来执行 a_aidl_bdis_tmr 定时器*/ /*最小溢出值为 200ms */ /*使能定时器*/ OTG_STAT_CTRL |= TMR_EN; 停止 OTG 定时器 /*禁能定时器,使得 TMR_CNT 复位为 0*/ OTG_STAT_CTRL &= ~TMR_EN; /*清除 TMR 中断 */ OTG_INT_CLR = TMR; LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 19 19 广州周立功单片机发展有限公司 第 13 章 端口 1 上的主机被挂起 /*写位 PortSuspendStatus 来将端口 1 的主机挂起*/ /*该示例证明软件需要执行低级别的操作*/ /* The host stack code where this is done will be somewhat more involved. */ HC_RH_PORT_STAT1 = PSS; 13.10 时钟和功率管理 OTG控制器的时钟分布如图 13.11所示。 除 ahb_slave_clk 以外,控制器的时钟都由时钟开关控制。当时钟开关使能有效时,其时钟 输出就会开启,CLK_ON 输出有效。CLK_ON 信号可在 OTGClkSt 寄存器中观察到。 为了降低功耗,可以将不使用的主机、设备、OTG 和 I2C 的时钟关闭,方法就是将 OTGClkCtrl 寄存器中对应的时钟使能位清零。当 USB 模块停止运行时,清零寄存器 PCONP 中的位 PCUSB 就可以关闭所有时钟。 如果软件想访问其中一个控制器的寄存器,必须先保证已使能了该控制器的 48MHz 时钟(通 过置位 OTGClkCtrl 寄存器中的 CLK_EN),然后再询问 OTGClkSt 中的 CLK_ON 直至它置位为 止。一旦 CLK_ON 置位,控制器的时钟就一直保持有效直至软件将 CLK_EN 位清零。在未使能 时钟的情况下访问控制器的寄存器会引起数据异常中断。 13.10.1 设备时钟请求信号 LPC1700 用户手册 图 13.11 时钟和功率的控制 ©2010 Guangzhou ZLGMCU Development CO., LTD. 20 20 广州周立功单片机发展有限公司 第 13 章 设备控制器有两个时钟请求信号:dev_need_clk 和 dev_dma_need_clk。当信号有效时,它们 会分别开启设备时钟(48MHz)和 ahb_master_clk。 dev_need_clk 信号在设备未挂起或设备挂起但 USB 总线上仍有数据传输时有效。若发现设 备断开连接(清零了 SIE 获取设备状态寄存器中的 CON 位-“SIE 命令代码寄存器”小节), dev_need_clk 无效。当软件不需要访问设备控制器的寄存器时,该信号允许 DEV_CLK_EN 在正 常操作中清零。设备会继续照常工作并在设备挂起或断开连接时自动关断时钟。 信号 dev_need_clk 在设备控制器进行 DMA 访问(对存储器)时置为有效。一旦该信号使能, 它会保持 2ms(2 帧)的有效状态以保证 DMA 吞吐量不会受到任何延迟(与关闭 ahb_master_clk 有关的)的影响。DMA 访问结束后 2ms,dev_dam_clk 变无效,这有助于降低功耗。该信号允 许 AHB_CLK_EN 在正常操作中清零。 主机控制器有两个时钟请求信号:host_need_clk 和 host_dma_need_clk。当信号有效时,它 们会分别开启主机时钟(48MHz)和 ahb_master_clk。 host_need_clk 信号在主机控制器不在挂起状态、或在 USBSuspend 并重新发送信号、或 USB 总线上有设备断开时有效。当软件不需要访问设备控制器的寄存器时,该信号允许 DEV_CLK_EN 在正常操作中清零。设备会继续照常工作并在设备挂起或断开连接时自动关断时钟。 信号 dev_need_clk 在设备控制器进行 DMA 访问(对存储器)时置为有效。一旦该信号使能, 它会保持 2ms(2 帧)的有效状态以保证 DMA 吞吐量不会受到任何延迟(与关闭 ahb_master_clk 有关的)的影响。DMA 访问结束后 2ms,dev_dam_clk 变无效,这有助于降低功耗。该信号允 许 AHB_CLK_EN 在正常操作中清零。 13.10.2 掉电模式支持 LPC1700 系列 Cortex-M3 微控制器可配置成在 USB 总线活动时从掉电模式中唤醒。当芯片 掉电且 USB 中断被使能时,USB_NEED_CLK 的有效可使芯片从掉电模式中唤醒。 当 USBWAKE 置位,在可以进入掉电模式之前 USB_NEED_CLK 必须有效。这可以通过清 除 OTGClkCtrl 寄存器中的 CLK_EN 位和将主机控制器置于挂起状态来实现。如果要等 dma_need_clk 和 dev_need_clk 其中一个信号变无效,可在 USBIntSt 寄存器中查询 USB_NEDD_CLK 的状态,以确定它们何时都为无效。 13.11 USB OTG控制器初始化 LPC1700 系列 Cortex-M3 微控制器中的 OTG 设备控制器的初始化包含以下几个步骤: a)通过置位寄存器 PCONP 中的 PCUSB 位来使能设备控制器。 b)配置并使能 USB PLL 或主 PLL 以获得设备时钟 48MHz(USBCLK)和期望的 cclk 频率。 为了使设备控制器同步逻辑能正确操作,cclk 的最小频率应为 18MHz。有关 PLL 的设置和配置 详情请参见“确定 PLL0 设置程序”小节。 c)通过置位 USBClkCtrl 寄存器的 CLK_EN 位来使能期望的控制器时钟。轮询 USBClkCtrl 寄存器的 CLK_EN 位直至它置位。 d)通过写对应的 PINSEL 寄存器来使能指定的 USB 引脚功能。 e)按照“USB 设备控制器初始化”小节中的步骤对设备控制器进行初始化。 f)按照 OpenHCI 规范中给出的步骤对主机控制器进行初始化。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 21 21 LPC1700 系列微控制器 第第 1144 章章 通通用用异异步步收收发发器器 UUAARRTT11 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 广州周立功单片机发展有限公司 目录 第 14 章 通用异步收发器 UART1··················································································· 1 14.1 基本配置 ························································································································1 14.2 特性 ································································································································1 14.3 管脚描述 ························································································································1 14.4 寄存器描述 ····················································································································2 14.4.1 UART1 接收器缓冲寄存器(U1RBR - 0X4001 0000,DLAB=0,只读)·········3 14.4.2 UART1 发送保持寄存器(U1THR – 0x4001 0000,DLAB=0,只写)·············4 14.4.3 UART1 除数锁存器 LSB 和 MSB 寄存器(U1DLL – 0x4001 0000 和 U1DLM – 0x4001 0004,DLAB=1)·····································································································4 14.4.4 UART1 中断使能寄存器(U1IER – 0x4001 0004,DLAB=0)··························4 14.4.5 UART1 中断标识寄存器(U1IIR – 0x4001 0008,只读)··································5 14.4.6 UART1 FIFO 控制寄存器(U1FCR – 0x4001 0008,只写) ······························8 14.4.7 UART1 线控制寄存器(U1LCR – 0x4001 000C) ··············································9 14.4.8 UART1 Modem 控制寄存器(U1MCR – 0x4001 0010)·····································9 14.4.9 Auto-flow 控制 ·····································································································10 14.4.10 UART1 线状态寄存器(U1LSR – 0x4001 0014,只读)··································12 14.4.11 UART1 Modem 状态寄存器(U1MSR – 0x4001 0018,只读)························13 14.4.12 UART1 高速缓存寄存器(U1SCR – 0x4001 001C)·········································14 14.4.13 UART1 Auto-baud 控制寄存器(U1ACR – 0x4001 0020) ·······························14 14.4.14 自动波特率(Auto-baud) ··················································································15 14.4.15 Auto-baud 模式·····································································································15 14.4.16 UART1 小数分频器寄存器(U1FDR - 0x4001 0028) ······································16 14.4.17 UART1 发送使能寄存器(U1TER - 0x4001 0030) ··········································19 14.4.18 UART1 RS485 控制寄存器(U1RS485CTRL – 0x4001 004C) ························20 14.4.19 UART1 RS-485 地址匹配寄存器(U1RS4858ADRMATCH – 0x4001 0050) ·20 14.4.20 UART1 RS-485 延时值寄存器(U1RS485DLY – 0x4001 0054)······················21 14.4.21 RS-485/EIA-485 模式的操作 ···············································································21 14.4.22 UART1 FIFO 水平寄存器(U1FIFOLVL - 0x4001 0058,只读)·····················22 14.5 结构 ······························································································································22 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. II 广州周立功单片机发展有限公司 第 14 章 第14章 通用异步收发器UART1 14.1 基本配置 UART1 外设的配置需要使用下列寄存器: a)功率:位于 PCONP 寄存器中,设置 PCUART1 位。 注:复位时,UART1 会被使能(PCUART1=1)。 b)外设时钟:位于 PCLK_SEL0 寄存器中,选择 PCLK_UART1。 c)波特率:位于U1LCR寄存器中(表 14.11),将位DLAB置 1,从而能够对寄存器DLL (表 14.5)和DLM(表 14.6)进行访问,设置波特率。同时,若有需要的话,设置小数分频寄 存器(表 14.18)中的小数波特率 d)UART FIFO:使用U1FCR寄存器(表 14.10)中的FIFO使能位(位 0)启动FIFO。 e)管脚:通过 PINSEL 寄存器选择 UART 管脚,并通过 PINMODE 寄存器选择管脚模式。 f)中断:将U1LCR寄存器(表 14.11)中的DLAB位置 0,使能UART中断。从而能够对U1IER 寄存器(表 14.7)进行访问。中断的使能是通过在NIVC中使用相应的中断设置使能寄存器 (Interrupt Set Enable register)来实现的。 g)DMA:UART1 的发送和接收可通过 GPDMA 控制器进行操作。 14.2 特性  UART1 与 UART0/2/3 基本相同,只是增加了一个 Modem 接口和 RS-486/EIA-486 模 式,不支持 IrDA;  16 字节收发 FIFO。接收器 FIFO 触发点可为 1、4、8 和 14 字节;  寄存器的存储单元符合’550 工业标准;  内置波特率发生器;包含标准 Modem 接口信号(CTS、DCD、DTS、DTR、RI、RTS);  支持 RS-458/EIA-485 的 9 位模式和输出使能;  支持 DMA 送和接收。 14.3 管脚描述 表 14.1 UART1 管脚描述 管脚 RXD1 TXD1 CTS1 类型 输入 输出 输入 描述 串行输入管脚。串行接收数据 串行输出管脚。串行发送数据 清除发送。低电平有效,指示外部 Modem 是否已准备就绪,UART1 数据可通 过 TXD1 发送。在 Modem 接口的正常操作模式(U1MCR[4]=0)下,该信号的 补码会被存放在 U1MSR[4]中。而状态改变信息会被存放到 U1MSR[0]中,如果 第 4 优先级中断使能(U1IER[3]=1),状态改变信息将作为中断源。只有 CTS1 管脚会被同时用于 auto-cts 模式,控制 UART1 发送器清除发送。CTS1 是一个异 步、低电平有效的 Modem 状态信号。该信号的状态可通过对 Modem 状态寄存 器的位 4(CTS)进行查询来获知。Modem 状态寄存器(MSR)的位 0(DCTS) 指示 CTS1 的状态在上次读 MSR 后是否发生了变化。如果使能了 Modem 状态 中断,当 CTS1 改变电平状态且 auto-cts 模式又未启动时,中断就会产生。CTS1 在 auto-cts 模式下还会被用于控制发送器(IP_3106) LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 广州周立功单片机发展有限公司 第 14 章 续上表 管脚 DCD1 DSR1 DTR1 RI1 RTS1 类型 输入 输入 输出 输出 输出 描述 数据载波检测。低电平有效信号,指示外部 Modem 是否与 UART1 建立了通信 连接,可以进行数据交换。在 Modem 接口的正常操作模式下(U1MCR[4]=0), 该 信 号 的 补 码 值 会 被 存 放 在 U1MSR[7] 中 。 而 状 态 改 变 信 息 会 被 存 放 到 U1MSR[3]中,如果第 4 优先级中断使能(U1IER[3]=1),状态改变信息将作为 中断源 数据设置就绪。低电平有效信号,指示外部 Modem 是否准备与 UART1 建立通 信连接。在 Modem 接口的正常操作模式下(U1MCR[4]=0),该信号的补码值会 被存放在 U1MSR[5]中。而状态改变信息会被存放到 U1MSR[1]中,如果第 4 优 先级中断使能(U1IER[3]=1),状态改变信息将作为中断源 数据终端就绪。低电平有效信号,指示 UART1 是否已准备就绪与外部 Modem 建立连接。该信号的补码值会被存放到 U1MCR[0]中。DTR 管脚还可作为 RS-485/EIA-485 输出使能信号管脚使用 铃响指示。低电平有效信号,指示 Modem 检测到电话铃响信号。在 Modem 接 口的正常操作模式下(U1MCR[4]=0),该信号的补码值会被存放到 U1MCR[6] 中。而状态改变信息会被存放到 U1MSR[2]中,如果第 4 优先级中断使能 (U1IER[3]=1),状态改变信息将作为中断源 请求发送。低电平有效信号,指示 UART1 打算发送数据给外部 Modem。该信 号的补码值会被存放在 U1MSR[1]中。只有在 auto-cts 模式下才能使用 RTS1 控 制发送 FIFO 阈值逻辑请求发送。RTS1 是一个低电平有效信号,可作为指示信 号:告知 Modem 或数据集,UART 是否为数据接收准备就绪。将 RTS Modem 控制寄存器中相应的位置位,RTS1 输出有效(低)电平;在系统复位后或在回 写模式操作过程中,或者将 MCR 的位 1(RTS)清零,RTS0 输出无效(高)电 平。在 auto-rts 模式下,RTS1 受发送 FIFO 阈值逻辑控制(IP_3106) RTS 管脚还可作为 RS-485/EIA-485 输出使能信号管脚使用 14.4 寄存器描述 UART1 所包含的寄存器,其结构如表 14.2所述。除数锁存器访问位(DLAB)包含在U1CLR[7] 中,能够使能除数锁存器的访问。 表 14.2 UART1 寄存器映射 名称 描述 U1RBR 接收缓冲寄存器。内含下一个要读取的 (当 DLAB=0 时) 已接收字符 U1THR 发送保持寄存器。在此写入下一个要发 (当 DLAB=0 时) 送的字符 U1DLL 除数锁存器 LSB。波特率除数值的最低 (当 DLAB=1 时) 有效字节。 U1DLM (当 DLAB=1 时) 除数锁存器 LSM。波特率除数值的最高 有效字节。小数分频器是使用整个除数 来产生波特率的 U1IER 中断使能寄存器。包含 7 个独立的中断 (当 DLAB=0 时) 使能位对应 7 个潜在的 UART1 中断 访问 RO WO R/W R/W R/W 复位值[1] 地址 0x4001 0000 NA (当 DLAB=0) 0x4001 0000 NA (当 DLAB=0) 0x01 0x4001 0000 (当 DLAB=1) 0x00 0x4001 0004 (当 DLAB=1) 0x00 0x4001 0004 (当 DLAB=0) LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 22 广州周立功单片机发展有限公司 第 14 章 续上表 名称 U1IIR U1FCR U1LCR U1MCR U1LSR U1MSR U1SCR U1ACR U1FDR U1TER U1RS485CTRL U1ADRMATCH U1RS485DLY U1FIFOLVL 描述 中断 ID 寄存器。识别等待处理的中断 FIFO 控制寄存器。控制 UART1 FIFO 的 使用和模式 线控制寄存器。包含帧格式控制和间隔 产生控制 调制解调器控制寄存器。包含流控制握 手控制和回写模式控制 线状态寄存器。包含发送和接收的状态 标志(包括线错误) 调制解调器状态寄存器。包含握手信号 状态标志 高速缓存寄存器。8 位的临时存储空间, 供软件使用 自动波特率(auto-baud)控制寄存器。 包含了 auto-baud 的特性控制 小数分频寄存器。为波特率分频器产生 时钟输入 发送使能寄存器。关闭 UART 发送器, 使用软件流控制 RS-485/EIA-485 控 制 。 包 含 了 RS-485/EIA-485 模式多方面的配置控制 RS-485/EIA-485 地 址 匹 配 。 包 含 了 RS-485/EIA-485 模式所使用的地址匹配 值 RS-485-EIA-485 方向控制延迟。 FIFO 状态寄存器。提供了当前发送 FIFO 和接收 FIFO 的是否为空。 访问 RO WO R/W R/W RO RO R/W R/W R/W R/W R/W R/W R/W RO 复位值[1] 0x01 0x00 0x00 0x00 0x60 0x00 0x00 0x00 0x10 0x80 0x00 0x00 0x00 0x00 地址 0x4001 0008 0x4001 0008 0x4001 000C 0x4001 0010 0x4001 0014 0x4001 0018 0x4001 001C 0x4001 0020 0x4001 0028 0x4001 0030 0x4001 004C 0x4001 0050 0x4001 0054 0x4001 0058 [1] 复位值仅指使用位中保存的数据,并不包括保留位的内容。 14.4.1 UART1 接收器缓冲寄存器(U1RBR - 0X4001 0000,DLAB=0,只读) U1RBR 是 UART1 RX FIFO 的最高字节。它包含了最早接收到的字符,并且可通过总线接 口进行读取。LSB(位 0)表示最“早”接收的数据位。如果接收到的字符少于 8 位,未使用 的 MSB 则用 0 填充。 如果要访问 U1RBR,U1LCR 中的除数锁存器访问位(DLAB)必须为 0。U1RBR 为只读 寄存器。 由于 PE、FE 和 BI 位与接收 FIFO 顶部的字节(即下次读 RBR 时获取的字节)相关,因此, 要正确地成对读出有效的接收字节及其状态位,应先读取 U1LSR 的内容,然后再读取 U1RBR 中的字节。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 33 广州周立功单片机发展有限公司 第 14 章 表 14.3 UART1 接收器缓冲寄存器的位描述 位 符号 描述 复位值 UART1 接收器缓冲寄存器包含了 UART1 RX FIFO 当中最早接 7:0 RBR 未定义 收到的字节 14.4.2 UART1 发送保持寄存器(U1THR – 0x4001 0000,DLAB=0,只写) U1THR 是 UART1 TX FIFO 的最高字节。它是 TX FIFO 中的最新字符,可通过总线接口进 行写入。LSB 代表第一个要发送出去的位。 如果要访问 U1THR,U1LCR 中的除数锁存器访问位(DLAB)必须为 0。U1THR 为只写 寄存器。 表 14.4 UART1 发送保持寄存器的位描述 位 符号 描述 复位值 写 UART1 发送保持寄存器会使数据保存到 UART1 发送 FIFO 7:0 THR 中。当字节达到 FIFO 的出口并且发送器就绪时,字节就会被发 NA 送 14.4.3 UART1 除数锁存器LSB和MSB寄存器(U1DLL – 0x4001 0000 和U1DLM – 0x4001 0004,DLAB=1) UART1 除数锁存器是UART1 波特率发生器的一部分,它与小数分频器一同使用,保持产 生波特率时钟的APB时钟(PCLK)分频值,波特率时钟必须是波特率的 16 倍。U1DLL和U1DLM 寄存器一起构成了一个 16 位除数,其中U1DLL包含了除数的低 8 位而U1DLM包含了除数的高 8 位。分频值 0x0000 会被作为 0x0001 处理,因为除数不能为 0。如果要访问UART1 除数锁存 寄存器,U1LCR中的除数锁存器访问位(DLAB)必须为 1。关于如何为U1DLL和U1DLM选择 正确的分频值的详细内容,请参见本章后续部分的14.4.16小节。 表 14.5 UART1 除数锁存 LSB 寄存器的位描述 位 符号 描述 复位值 UART1 除数锁存 LSB 寄存器与 U1DLM 寄存器一起决定 UART1 7:0 DLLSB 0x01 的波特率 表 14.6 UART1 除数锁存 MSB 寄存器的位描述 位 符号 描述 复位值 UART1 除数锁存 MSB 寄存器与 U1DLL 寄存器一起决定 UART1 7:0 DLMSB 0x00 的波特率 14.4.4 UART1 中断使能寄存器(U1IER – 0x4001 0004,DLAB=0) U1IER 用于使能 4 个 UART1 中断源。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 44 广州周立功单片机发展有限公司 第 14 章 表 14.7 UART1 中断使能寄存器的位描述 位 0 1 2 3 6:4 7 8 9 31:10 符号 值 描述 复位值 使能 UART1 的接收数据可用中断。它还控制着字符接 RBR 收超时中断。 Interrupt 0 0 禁止 RDA 中断 Enable 1 使能 RDA 中断 使 能 UART1 的 THRE 中 断 。 该 中 断 的 状 态 可 从 THRE U1LSR[5]中读出。 Interrupt 0 0 禁止 THRE 中断 Enable 1 使能 THRE 中断 使能 UART1 的 RX 线状态中断。该中断的状态可从 RX Line U1LSR[4:1]中读出。 Interrupt 0 0 禁止 RX 线中断 Enable 1 使能 RX 线中断 Modem 使能调制解调器中断。该中断的状态可从 U1LSR[3:0] Status 中读出。 0 Interrupt 0 禁止调制解调器中断 Enable 1 使能调制解调器中断 保留。用户软件不应对其写入 1。从保留位读出的值未 - NA 定义。 如果使能了 auto-cts 模式,当 CTS1 信号发生跳变时, 该位会使能/禁止 modem 状态中断的产生。如果 auto-cts 模式被禁止,在 Modem 状态中断使能(U1IER[3])被 置位的情况下,CTS1 信号跳变将会触发中断。在正常 CTS 操作模式下,CTS1 信号跳变将会触发 modem 状态中 Interrupt 断,除非中断已被禁止(U1IER 寄存器中的 U1IER[3] 0 Enable 被清零)。在 auto-cts 模式下,只有当 U1IER[3]位和 U1IER[7]位同时被置位时,CTS1 位上的跳变才会触发 中断。 0 禁止 CTS 中断 1 使能 CTS 中断 使能 auto-baud 结束中断。 ABEOIntEn 0 禁止 auto-baud 结束中断 0 1 使能 auto-baud 结束中断 使能 auto-baud 超时中断。 ABTOIntEn 0 禁止 auto-baud 超时中断 0 1 使能 auto-baud 超时中断 保留。用户软件不应对其写入 1。从保留位读出的值未 - NA 定义。 14.4.5 UART1 中断标识寄存器(U1IIR – 0x4001 0008,只读) U1IIR 提供状态代码用于指示一个挂起处理中断的优先级别和中断源。在访问 U1IIR 过程 中,中断被冻结。如果在访问 U1IIR 过程中产生了中断,该中断会被记录,下次访问 U1IIR 时 可读出该中断。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 55 广州周立功单片机发展有限公司 第 14 章 表 14.8 UART1 中断标识寄存器的位描述 位 符号 值 描述 复位值 中断状态。 注 : U1IIR[0] 为 低 电 平 有 效 。 挂 起 的 中 断 可 通 过 0 IntStatus U1IIR[3:1]确定 0 0 至少有一个中断被挂起 1 没有挂起的中断 中断标识。U1IER[3:1]指示对应 UART1 RX FIFO 的中 断。上面未列出的 U1IER[3:1]的其它组合都为保留值 (100、101、111) 011 1 – 接收线状态(RLS) 3:1 Intld 0 010 2a – 接收数据可用(RDA) 110 2b – 字符超时指示器(CTI) 001 3 – THRE 中断 000 4 – Modem 中断 5:4 - 保留。用户软件不应对其写入 1。从保留位读出的值未 NA 定义 FIFO 7:6 Enable 8 ABEOInt 9 ABTOInt 这些位等效于 U1FCR[0] 0 Auto-baud 结束中断。若 auto-baud 已成功结束且中断 0 被使能,则为真 Auto-baud 超时中断。若 auto-baud 已超时且中断被使 0 能,则为真 31:10 - 保留。用户软件不应对其写入 1。从保留位读出的值未 NA 定义 位 U1IIR[9:8]由 auto-baud 功能设置,用于发布超时信号或 auto-baud 结束条件信号。而 Auto-baud 中断条件的清除则是通过设置 Auto-baud 控制寄存器中的相应 Clear(清除)位来实 现。 如果IntStatus位为 1,表示没有中断被挂起,此时Intld位为 0。如果IntStatus位为 0,表示有 一个非auto-baud中断被挂起,此时Intld位会指出中断的类型,中断的处理见表 14.9。给定了 U1IIR[3:0]的状态,中断处理程序就能确定中断源以及如何清除激活的中断。在退出中断服务程 序之前,必须读取U1IIR来清除中断。 UART1 RLS 中断(U1IIR[3:1]=011)是最高优先级中断,只要 UART1 Rx 输入产生 4 个错 误条件(溢出错误 OE、奇偶错误 PE、帧错误 FE 以及间隔中断 BI)中的任意一个,该位就会 被置位。产生中断的 UART1 Rx 错误条件可通过查看 U1LSR[4:1]来得到。当读取 U1LSR 时, 中断就会被清除。 UART1 RDA 中断(U1IIR[3:1]=010)与 CTI 中断(U1IIR[3:1]=110)共用第二优先级。当 UART1 Rx FIFO 深度到达 U1FCR[7:6]所定义的触发点时,RDA 就会被激活;当 UART1 Rx FIFO 深度低于触发点时,RDA 复位。当 RDA 中断激活时,CPU 可读出由触发点所定义的数据块。 CTI 中断(U1IIR[3:1]=110)是一个第二优先级中断,当 UART1 Rx FIFO 内含有至少一个 字符并且在接收到 3.5 到 4.5 字符的时间内没有发生 UART1 Rx FIFO 动作时,该中断激活。任 何 UART1 Rx FIFO 动作(UART1 RSR 的读取或写入)将会清除该中断。当接收到的信息不是 触发点值的倍数时,CTI 中断将会清空 UART1 RBR。例如:如果外围设备想要发送一个长度 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 66 广州周立功单片机发展有限公司 第 14 章 为 105 个字符的信息,而触发值为 10 个字符,那么前 100 个字符将使 CPU 接收 10 个 RDA 中 断,而剩下的 5 个字符使 CPU 收到 1 到 5 个 CTI 中断(取决于服务程序)。 表 14.9 UART1 中断处理 U1IIR[3:0]值[1] 0001 0110 0100 1100 0010 0000 优先级 - 最高 第二 第二 第三 第四 中断类型 无 RX 线状态/错误 RX 数据可用 字符超时指示 THRE Modem 状态 中断源 无 OE[2]、PE[2]、FE[2]或 BI[2] Rx 数据可用或达到 FIFO 的触发点 (U1FCR0=1) RX FIFO 中至少有一个字符,并且 在一段时间内没有字符输入或移 出,该时间的长短取决于 FIFO 中的 字符数以及在 3.5 到 4.5 字符的时间 内的触发值 实际时间为:[(字长度)×7-2]×8+[(触 发值-字符数)×8+1]RCLK THRE[2] CTS、DSR、RI 或 DCD 中断复位 - U1LSR[2] 读操作 U1LSR[3] 读操作或 UART1 FIFO 低于 触发值 U1RBR[3] 读操作 U1IIR[4]读 操作(如果 U1IIR 是中 断源)或 THR 写操 作 读 MSR [1] “0000”、“0011”、“0101”、“0111”、“1000”、“1010”、“1011”、“1101”、“1110”、“1111”均为保留值。 [2] 详细信息,请参见14.4.10“UART1 线状态寄存器(U1LSR – 0x4001 0014,只读)”小节。 [3] 详细信息,请参见14.4.1“UART1 接收器缓冲寄存器(U1RBR - 0X4001 0000,DLAB=0,只读)“小 节。 [4] 详细信息,请参见14.4.“5 UART1 中断标识寄存器(U1IIR – 0x4001 0008,只读)”小节以及14.4.“2 UART1 发送保持寄存器(U1THR – 0x4001 0000,DLAB=0,只写)”小节。 UART1 THRE 中断(U1IIR[3:1]=001)是第三优先级中断。当 UART1 THR FIFO 为空且满 足特定的初始化条件时,该中断激活。这些初始化条件是为了让 UART1THR FIFO 有机会填入 数据,以免在系统启动时产生许多 THRE 中断而规定的。当 THRE=1 时,且在上次 LSR 寄存 器的 THRE=1 事件后,THR 中没有出现至少两个字符时,这些初始化条件就会实现一个字符减 去停止位的延时。当没有解码和服务 THRE 中断时,该延时为 CPU 提供了写数据到 THR 的时 间。当 UART1 THR FIFO 中曾经同时出现两个或更多字符,而当前的 THR 为空时,THRE 中 断就会立即被设置。当发生 U1THR 写操作或 U1IIR 读操作,并且 THRE 为最高优先级中断 (U1IIR[3:1]=001)时,THRE 中断复位。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 77 广州周立功单片机发展有限公司 第 14 章 Modem 状态中断是优先级别最低的中断,只要 modem 的输入管脚、DCD、DSR 或 CTS 发生任何状态变化,该中断就会激活。此外,当 modem 输入 IR 上低电平到高电平的跳变时, 也会触发 modem 中断。中断源可通过查询 U1MSR[3:0]来确定。读 U1MSR 会清除 modem 中断。 14.4.6 UART1 FIFO控制寄存器(U1FCR – 0x4001 0008,只写) U1FCR 控制 UART1 RX 和 TX FIFO 的操作。 表 14.10 U1FCR 控制寄存器的位描述 位 符号 值 描述 复位值 0 UART1 FIFO 被禁止。禁止在应用中使用 1 高电平有效,使能对 UART1 RX FIFO 和 TX FIFO 以 FIFO 0 及 U1FCR[7:1]的访问。该位必须置位以实现正确的 0 Enable UART1 操作。该位的任何变化都将使 UART1 FIFO 清空 0 对两个 UART1 FIFO 均无影响 RX FIFO 1 1 写 1 到 U1FCR[1]将会清零 UART1 Rx FIFO 中的所有 0 Reset 字节,并复位指针逻辑,清除接收 DMA 请求 0 对两个 UART1 FIFO 均无影响 TX FIFO 写 1 到 U1FCR[2]将会清零 UART1 Tx FIFO 中的所有 2 0 Reset 1 字节,并复位指针逻辑,清除发送 DMA 请求。该位 会自动清零 DMA Mode 3 Select 当 FIFO 使能位(该寄存器的位 0)被置位时,该位 0 选择 DMA 模式 5:4 - 保留。用户软件不应对其写入 1。从保留位读出的值 NA 未定义 这两个位决定了接收 UART1 FIFO 在激活中断前必 须写入的字符数量 RX Trigger 00 触发点 0(默认 1 字节或 0x01) 7:6 0 Level 01 触发点 1(默认 4 字节或 0x04) 10 触发点 2(默认 8 字节或 0x08) 11 触发点 3(默认 14 字节或 0x0E) DMA 操作: 通过使用 DMA,用户可选择操作 UART 的发送和/或接收。DMA 模式由 FCR 寄存器中的 DMA 模式选择位决定。只有在 FCR 寄存器中的 FIFO 使能位将 FIFO 使能时,该位才会有用。 (1)UART 接收 DMA 在 DMA 模式中,当接收 FIFO 水平大于或等于触发点时,或者在发生字符超时的情况下, 接收 DMA 请求就会生效。请参考上文对 RX 触发点的描述。接收 DMA 请求由 DMA 控制器清 除。 (2)UART 发送 DMA 在 DMA 模式中,当发送 FIFO 变为未满时,发送 DMA 请求就会生效。发送 DMA 请求由 DMA 控制器清除。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 88 广州周立功单片机发展有限公司 第 14 章 14.4.7 UART1 线控制寄存器(U1LCR – 0x4001 000C) U1LCR 确定了发送或接收数据字符的格式。 表 14.11 UART1 线控制寄存器的位描述 位 符号 值 描述 00 5 位字符长度 Word 01 6 位字符长度 1:0 Length 10 7 位字符长度 Select 11 8 位字符长度 Stop Bit 0 1 个停止位 2 Select 1 2 个停止位(如果 U1LCR[1:0]=00 时,为 1.5 个) Parity 0 禁止奇偶产生和校验 3 Enable 1 使能奇偶产生和校验 00 奇校验。发送字符和添加的校验位所包含的“1”的 数量是一个奇数 Parity 01 偶校验。发送字符和添加的校验位所包含的“1”的 5:4 Select 数量是一个偶数 10 强制为“1”stick 校验 11 强制为“0”stick 校验 0 禁止间隔发送 Break 6 1 使能间隔发送。当 U1LCR[6]为高电平(有效)时, Control 输出管脚 UART1 TXD 强制为逻辑 0 Divisor Latch 0 禁止访问除数锁存器 7 Access Bit 1 使能访问除数锁存器 (DLAB) 14.4.8 UART1 Modem控制寄存器(U1MCR – 0x4001 0010) U1MCR 使能 Modem 的回写模式并控制 Modem 的输出信号。 复位值 0 0 0 0 0 0 表 14.12 UART1 Modem 控制寄存器的位描述 位 符号 值 描述 复位值 DRT 0 Control 选择 Modem 输出管脚 DTR。当 modem 回写模式激 0 活时,该位读出为 0 RTS 1 Control 选择 Modem 输出管脚 RTS。当 modem 回写模式激活 0 时,该位读出为 0 保留。用户软件不应对其写入 1。从保留位读出的值 3:2 - NA 0 未定义 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 99 广州周立功单片机发展有限公司 第 14 章 续上表 位 符号 值 描述 复位值 Modem 回写模式提供了执行回写测试的诊断机制。 发送器输出的串行数据在内部连接到接收器的串行 输入端。输入管脚 RXD1 对回写操作无影响,而输出 管脚 TXD1 保持为标记状态(marking state)。4 个 Loopback 4 Mode modem 输入端(CTS、DSR、RI 和 DCD)与外部断 开。从外部看来,modem 输入端(RTS、DTS)无效。 而从内部看来,4 个 modem 输出都连接到 4 个 modem 0 Select 输入上。这样连接的结果将导致 U1MSR 的高 4 位由 U1MCR 的低 4 位驱动,而不是在正常模式下由 4 个 modem 输入驱动。这样在回写模式下,写 U1MCR 的 低 4 位可产生 modem 状态中断 0 禁能 Modem 回写模式 1 使能 Modem 回写模式 保留。用户软件不应对其写入 1。从保留位读出的值 5 - NA 0 未定义 0 禁止 auto-rts 流控制 6 RTSen 0 1 使能 auto-rts 流控制 0 禁止 auto-cts 流控制 7 CTSen 0 1 使能 auto-cts 流控制 14.4.9 Auto-flow控制 如果启动了 auto-RTS 模式,UART1 的接收 FIFO 硬件将控制 UART1 的 RTS1 输出。如果 启动的是 auto-CTS 模式,UART1 的 U1TSR 硬件只会在 CTS1 输入信号有效时启动发送。 1. Auto-RTS Auto-RTS 功能是通过设置 RTSen 位来启动的。Auto-RTS 数据流控制在 U1RBR 模块中产 生,链接到设定的接收 FIFO 触发点。如果启动了 auto-RTS,数据流的控制如下: 当接收 FIFO 水平达到设定的触发点时,RTS1 会被拉高(变为高电平)。在达到触发点后, 发送 UART 可能还会发送额外的字节,因为 UART 在开始发送额外字节之前可能不知道 RTS1 信号已撤销。一旦接收 FIFO 达到前面的触发点,RTS1 就会自动重新生效(变为低电平)。RTS1 重新生效指示发送 UART 继续发送数据。 如果关闭了 auto-RTS 模式,UART1 的 RTS1 输出由 RTSen 位控制。如果启动了 auto-RTS 模式,RTS1 输出将由硬件控制。并且 RTS1 的实际值将会复制到 UART1 的 RTS Control 位中。 只要启动了 auto-RTS 模式,软件就只能够对 RTS Control 位的值进行读取。 示例:假设 UART1 工作在 550 工业标准下,将 U1FCR 中的触发值设置为 0x2,此时如果 启动了 Auto-RTS 模式,当接收 FIFO 内出现了 8 个字节时,UART1 将会把 RTS1 输出拉高。 当接收 FIFO 达到先前的触发值(4 个字节)时,RTS1 输出将会再次被拉低。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 10 10 广州周立功单片机发展有限公司 第 14 章 图 14.1 Auto-RTS 功能时序 2. Auto-CTS Auto-CTS 功能是通过设置 CTSen 位来启动的。如果启动了 Auto-CTS 功能,在发送下一个 数据字节之前,U1TSR 模块中的发送电路会先对 CTS1 输入进行检查。当 CTS1 有效(低电平) 时,发送器就会将下一个字节发送出去。如果要发送器停止发送后续的字节,必须在末尾的停 止位发送出一半之前释放 CTS1。在 Auto-CTS 模式下,即使 U1MSR 中的 Delta CTS 位被置位, CTS1 信号的变化也不会触发 modem 状态中断,除非 CTS Interrupt Enable 位被置位。 表 14.13 Modem 状态中断产生 使能 Modem 状态中断 (U1IER[3]) 0 1 1 1 1 1 1 1 1 1 1 1 CTSen (U1MCR[7]) x 0 0 0 1 1 1 1 1 0 0 0 CTS 中断使 Delta CTS 能(U1IER[7]) (U1MSR[0]) x x x 0 x 1 x x 0 x 0 x 1 0 1 1 1 x x 0 x 1 x x Delta DCD 或后沿 RI 或 Delta DSR (U1MSR[3]或 U1MSR[2]或 U1MSR[1]) x 0 x 1 0 1 0 x 1 0 x 1 Modem 状态中断 否 否 是 是 否 是 否 是 是 否 是 是 Auto-CTS功能可减少对主机系统的中断。当流控制被使能时,CTS1 状态的改变不会触发 主机中断,因为器件会自动控制其发送器。不使用Auto-CTS时,发送器会将任何存放在发送FIFO 内的数据都发出去,从而导致接收器发生溢出错误。图 14.2给出了Auto-CTS的功能时序。 LPC1700 用户手册 图 14.2 Auto-CTS 功能时序 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第 14 章 开始发送第一个字符时,CTS1 信号会被拉低。一旦处理中的数据传输结束了,发送就会 停止。CTS1 被拉高时,UART 会不断地发送“1”。一旦 CTS1 获知挂起的数据传输恢复了, 起始位就会被发送,然后是下一个字符的数据位。 14.4.10 UART1 线状态寄存器(U1LSR – 0x4001 0014,只读) U1LSR 是一个只读寄存器,提供 UART1 TX 和 RX 模块的状态信息。 表 14.14 UART1 线状态寄存器的位描述 位 符号 值 描述 复位值 当 U1RBR 包含未读字符时,U1LSR[0]就会被置位;当 Receiver UART1 RBR FIFO 为空时,U1LSR[0]就会被清零。 0 Data Ready 0 0 U1RBR 为空 (RDR) 1 U1RBR 包含有效数据 Overrun 1 Error(OE) 溢出错误条件在错误发生后立即设置。读 U1LSR 会清 零 U1LSR[1]。当 UART1 RBR 已有新的字符就绪,而 UART1 RBR FIFO 已满时,U1LSR[1]机会被置位。此 时,UART1 RBR FIFO 将不会被覆盖,UART1 RSR 内 0 的字符将会丢失。 0 溢出错误状态未激活 1 溢出错误状态激活 当接收字符的校验位处于错误状态时,校验错误就会产 生。读 U1LSR 会清零 U1LSR[2]。校验错误检测时间 Parity Error 2 (PE) 取决于 U1FCR[0]。 0 注:校验错误与 UART1 RBR FIRO 中读出的字符相关 0 校验错误状态未激活 1 校验错误状态激活 当接收字符的停止位为逻辑 0 时,就会发生帧错误。读 U1LSR 会清零 U1LSR[3]。帧错误检测时间取决于 U1FCR0。当检测到有帧错误时,RX 会尝试与数据重 Framing 3 Error(FE) 新同步,并假设错误的停止位实际是一个超前的起始 位。但即使没有出现帧错误,它也无法假设下一个接收 0 到的字符是正确的。 注:帧错误与 UART1 RBR FIRO 中读出的字符相关 0 帧错误状态未激活 1 帧错误状态激活 在发送整个字符(起始位、数据、校验位以及停止位) 过程中,RXD1 如果保持在空闲状态(全“0”),则 Break 4 Interrupt (BI) 产生间隔中断。一旦检测到间隔条件,接收器立即进入 空闲状态,直到 RXD1 进入标记状态(全“1”)。读 0 U1LSR 会清零 U1FCR[0]。 注:间隔中断与 UART1 RBR FIRO 中读出的字符相关 0 间隔中断状态未激活 1 间隔中断状态激活 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 广州周立功单片机发展有限公司 第 14 章 续上表 位 符号 值 描述 复位值 Transmitter 当检测到 UART1 THR 已空时,THRE 就会立即被设置。 Holding 写 U1THR 会清零 THRE。 5 Register 1 0 U1THR 包含有效字符 Empty 1 U1THR 为空 (THRE) 当 U1THR 和 U1TSR 同时为空时,TEMT 就会被设置; Transmitter 而当 U1TSR 或 U1THR 任意一个包含有效数据时, 6 Empty TEMT 就会被清零。 1 (TEMT) 0 U1THR 和/或 U1TSR 包含有效数据 1 U1THR 和 U1TSR 为空 当一个带有 RX 错误(如:帧错误、校验错误或间隔中 断)的字符载入到 U1RBR 中时,U1LSR[7]就会被设置。 Error in RX 当 U1LSR 寄存器被读取并且 UART1 FIFO 中不再有错 7 FIFO 0 误时,该位就会清零。 (RXFE) 0 U1RBR 中没有 UART1 RX 错误或 U1FCR[0]=0 1 UART1 RBR 包含至少一个 UART1 RX 错误 14.4.11 UART1 Modem状态寄存器(U1MSR – 0x4001 0018,只读) U1MSR 是一个只读寄存器,提供 modem 输入信号的状态信息。读 U1MSR 会清零 U1MSR[3:0]。需要注意的是:modem 信号不会对 UART1 操作有直接影响,modem 信号的操作 时通过软件来实现的。 表 14.15 UART1 Modem 状态寄存器的位描述 位 符号 值 描述 复位值 当输入端 CTS 的状态改变时,该位置位。读 U1MSR 会清零该位。 0 Delta CTS 0 0 没有检测到 Modem 输入端 CTS 上的状态变化 1 检测到 Modem 输入端 CTS 上的状态变化 当输入端 DSR 的状态改变时,该位置位。读 U1MSR 会清零该位。 1 Delta DSR 0 0 没有检测到 Modem 输入端 DSR 上的状态变化 1 检测到 Modem 输入端 DSR 上的状态变化 当输入端 RI 上低电平到高电平的跳变时,该位置位。 Trailing 读 U1MSR 会清零该位。 2 0 Edge RI 0 没有检测到 Modem 输入端 RI 上的状态变化 1 检测到 RI 上的低电平往高电平跳变的变化 当输入端 DCD 的状态改变时,该位置位。读 U1MSR 会清零该位。 3 Delta DCD 0 0 没有检测到 modem 输入端 DCD 上的变化 1 检测到 modem 输入端 DCD 上的变化 4 CTS 清除发送状态。输入信号 CTS 的补码。在 modem 回 0 写模式下,该位连接到的 U1MCR[1] LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 13 13 广州周立功单片机发展有限公司 第 14 章 续上表 位 符号 值 描述 复位值 5 DSR 数据设置就绪状态。输入 DSR 的补码。在 modem 回 0 写模式下,该位连接到的 U1MCR[0]。 6 RI 响铃指示状态。输入 RI 的补码。在 modem 回写模式 0 下,该位连接到的 U1MCR[2]。 7 DCD 数据载波检测状态。输入 DCD 额补码。在 modem 回 0 写模式下,该位连接到的 U1MCR[3]。 14.4.12 UART1 高速缓存寄存器(U1SCR – 0x4001 001C) U1SCR 不会对 UART1 操作有影响。用户可自由对该寄存器进行读写。不提供中断接口向 主机指示 U1SCR 所发生的读或写操作。 表 14.16 UART1 高速缓存寄存器位描述 位 符号 描述 7:0 Pad 一个可读、可写的字节 复位值 0x00 14.4.13 UART1 Auto-baud控制寄存器(U1ACR – 0x4001 0020) 在用户测量波特率的输入时钟/数据速率期间,整个测量过程就是由 UART1 Auto-baud 控 制寄存器(U1ACR)进行控制的。用户可自由地读写该寄存器。 表 14.17 Auto-baud 控制寄存器位描述 位 0 1 2 7:3 8 9 31:10 符号 值 描述 在 auto-baud 功能结束后,该位会自动清零 0 Auto-baud 功能停止(auto-baud 功能不运行) Start 1 Auto-baud 功 能 启 动 ( auto-baud 功 能 正 在 运 行 ) Auto-baud 运行位。该位会在 auto-baud 功能结束后自 动清零 Mode Auto-baud 模式选择位 0 模式 0 1 模式 1 0 不重新启动 AutoRestart 1 如果超时则重新启动(计数器会在下一个 UART1 RX 下降沿重新启动) 保留。用户软件不应对其写入 1。从保留位读出的值 - NA 未定义 Auto-baud 结束中断清零位(仅可写访问) ABEOIntClr 0 写 0 无影响 1 写 1 将 U1IIR 中相应的中断清除 Auto-baud 超时中断清零位(仅可写访问) ABTOIntClr 0 写 0 无影响 1 写 1 将 U1IIR 中相应的中断清除 保留。用户软件不应对其写入 1。从保留位读出的值 - NA 未定义 复位值 0 0 0 0 0 0 0 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 14 14 广州周立功单片机发展有限公司 第 14 章 14.4.14 自动波特率(Auto-baud) UART1 auto-baud 功能可用于测量基于“AT”协议(Hayes 命令)的输入波特率。如果 auto-baud 功能被使能,那么 auto-baud 功能部件将测量接收数据流中的 1 位所消耗的时间,并 根据这个结果来设置除数锁存寄存器 U1DLM 和 U1DLL。 Auto-baud 功能是通过置位 U1ACR 起始位来启动的,并通过清零 U1ACR 起始位来停止。 Auto-baud 一旦结束,起始位就将自动清零,并且对该起始位进行读取将会返回 auto-baud 的状 态(挂起/完成)。 可通过设置 U1ACR 模式位来使用两种 auto-baud 测量模式。在模式 0 下,波特率是通过对 UART RX 管脚上两个连续的下降沿进行测量(起始位的下降沿和第一位的下降沿)来得到的。 而在模式 1 下,波特率则是通过测量 UART RX 管脚上的下降沿和后续的上升沿之间的时间(起 始位的长度)来得到的。 如果出现超时(速率测量计数器溢出),U1ACR AutoRestart 位可用于自动重启波特率测 量。如果该位被置位,速率测量将会在 UART1 RX 管脚的下一个下降沿重新启动。 Auto-baud 功能会产生两种中断:  U1IIR ABTOInt 中断(U1IER ABTOIntEn 置位且自动波特率测量寄存器溢出);  U1IIR ABEOInt 中断(U1IER ABEOIntEn 置位且 auto-baud 已经成功完成)。 Auto-baud 中断必须通过置位相应的 U1ACR ABTOIntClr 位和 ABEOIntEn 位来清零。 在 auto-baud 期间,小数波特率发生器通常被禁用(即 DIVADDVAL = 0)。但是,如果波 特率发生器被启动(即 DIVADDVAL > 0),那么它将影响 UART1 Rx 管脚波特率的测量,但 U1FDR 寄存器的值在速率测量后不会被修改。此外,当使用 auto-baud 时,任何对 U1DLM 和 U1DLL 寄存器的写操作都必须在写 U1ACR 寄存器之前完成。UART1 支持的最小和最大波特 率受 PCLK、数据的位数、停止位以及校验位的影响。 波特率最小值  2 PCLK 16  215  UART1波特率  16 2  PCLK 数据位  校验验  停止位  最大波特率 14.4.15 Auto-baud模式 当软件执行“AT”命令时,它采用期望的字符格式对 UART1 进行配置,并置位 U1ACR 起始位。用户不必关心除数锁存器 U1DLM 和 U1DLM 内的初始值。由于字母“A”或“a”的 ASCII 编码(“A”= 0x41,“a”= 0x61)的关系,UART1 Rx 管脚所发送的起始位以及期望 字符的 LSB 是由两个下降沿来限定的。当 U1ACR 起始位被置位时,auto-baud 协议将执行以下 阶段: a)U1ACR 起始位一置位,波特率测量计数器立即复位,同时 UART1 U1RSR 复位。U1RSR 波特率切换为最高速率。 b)UART1 Rx 管脚上的下降沿触发起始位的开始。波特率测量计数器将开始对 PCLK(可 选择被小数波特率发生器预分频)进行计数。 c) 在接收起始位的过程中,RSR 波特率输入端会产生 16 个脉冲,脉冲频率和(小数波 特率发生器预分频)UART1 输入时钟相同,这样,保证了起始位存放在 U1RSR 中。 d)在接收起始位的过程中(以及模式 0 下的字符 LSB),速率计数器将随着被预分频的 UART1 输入时钟(PCLK)递增。 e)如果是模式 0,那么速率计数器将会在 UART1 RX 管脚的下一个下降沿停止。如果是 模式 1,那么速率计数器将会在 UART1 RX 管脚的下一个上升沿停止。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 15 15 广州周立功单片机发展有限公司 第 14 章 f)速率计数器的值被载入到 U1DLM/U1DLL 中,并且波特率将会切换到正常操作模式。 在设置完 U1DLM/U1DLL 后,如果 auto-baud 结束中断被使能,U1IIR ABEOInt 将会被置位。 接着 U1RSR 继续接受“A/a”字符剩下的其它位。 图 14.3 自动波特率 a)模式 0 和 b)模式 0 的波形图 14.4.16 UART1 小数分频器寄存器(U1FDR - 0x4001 0028) UART1 小数分频寄存器(U1FDR)控制产生波特率的时钟预分频器,并且用户可自由对 该寄存器进行读写操作。预分频器使用 APB 时钟并根据指定的小数要求产生输出时钟。 注:如果激活了小数分频器(DIVADDVAL > 0)且 DLM = 0,DLL 寄存器的值必须大于或等于 2。 表 14.18 UART1 小数分频寄存器位描述 位 符号 值 描述 复位值 产生波特率的预分频除数值。如果该字段为 0,小 3:0 DIVADDVAL 0 0 数波特率产生器将不会影响 UART1 的波特率 波特率预分频乘数值。不管是否使用小数波特率发 7:4 MULVAL 1 送器,为了让 UART1 正常运作,该字段必须大于 1 或等于 1 保留。用户软件不应对其写入 1。从保留位读出的 31:8 - NA 0 值未定义 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 16 16 广州周立功单片机发展有限公司 第 14 章 该寄存器控制产生波特率的时钟预分频器。寄存器的复位值会让 UART1 的小数功能保持 在禁用状态,从而确保 UART1 完全软件和硬件兼容没有配备该特性的 UART。 UART1 波特率的计算(n = 1): UART1波特率  PCLK 16 256 U1DLM  U1DLL 1 DivAddVal   MulVal  其中 PCLK 为外设时钟,U1DLM 和 U1DLL 为标准 UART1 波特率分频器寄存器,而 DIVADDVAL 和 MULVAL 为 UART1 小数波特率发生器的制定参数。 ULVAL 和 DIVADDVAL 的值应符合以下条件: a)0 < MULVAL ≤ 15; b)0 ≤ DIVADDVAL < 15; c)DIVADDVAL 0),那么它将影响 UARTn Rx 管脚波特率的测量,但 UnFDR 寄存器的值在速率测量后不会被修改。此外,当使用 auto-baud 时,任何对 UnDLM 和 UnDLL 寄存器的写操作都必须在写 UnACR 寄存器之前完成。UARTn 支持的最小和最大波特 率受 PCLK、数据的位数、停止位以及校验位的影响。 波特率最小值  2  PCLK 16  215  UARTn 波特率  16 2 PCLK  数据位  校验验  停止位  最大波特率 2. Auto-baud模式 当软件执行“AT”命令时,它采用期望的字符格式对 UARTn 进行配置,并置位 UnACR 起始位。用户不必关心除数锁存器 UnDLM 和 UnDLM 内的初始值。由于字母“A”或“a”的 ASCII 编码(“A”= 0x41,“a”= 0x61)的关系,UART1 Rx 管脚所发送的起始位以及期望 字符的 LSB 是由两个下降沿来限定的。当 UnACR 起始位被置位时,auto-baud 协议将执行以下 阶段: a) UnACR 起始位一置位,波特率测量计数器立即复位,同时 UARTn UnRSR 复位。UnRSR 波特率切换为最高速率。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 11 11 广州周立功单片机发展有限公司 第 15 章 b) UARTn Rx 管脚上的下降沿触发起始位的开始。波特率测量计数器将开始对 PCLK(可 选择被小数波特率发生器预分频)进行计数。 c) 在接收起始位的过程中,RSR 波特率输入端会产生 16 个脉冲,脉冲频率和(小数波特 率发生器预分频)UARTn 输入时钟相同,这样,保证了起始位存放在 UnRSR 中。 d) 在接收起始位的过程中(以及模式 0 下的字符 LSB),速率计数器将随着被预分频的 UART1 输入时钟(PCLK)递增。 e) 如果是模式 0,那么速率计数器将会在 UARTn RX 管脚的下一个下降沿停止。如果是模 式 1,那么速率计数器将会在 UARTn RX 管脚的下一个上升沿停止。 f) 速率计数器的值被载入到 UnDLM/UnDLL 中,并且波特率将会切换到正常操作模式。 在设置完 UnDLM/UnDLL 后,如果 auto-baud 结束中断被使能,UnIIR ABEOInt 将会被置位。 接着 UnRSR 继续接受“A/a”字符剩下的其它位。 图 15.1 自动波特率 a)模式 0 和 b)模式 0 的波形图 15.4.11 IrDA控制寄存器(U3ICR – 0x4009 C024,仅存在于UART3) IrDA 控制寄存器用于将 UART3 配置成 IrDA 模式。在发送或接收数据时,不应改变 U3ICR 的值,否则会造成数据丢失或损坏。 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 12 12 广州周立功单片机发展有限公司 第 15 章 表 15.15 IrDA 控制寄存器 位 符号 值 描述 复位值 0 禁能 UART3 的 IrDA 模式,UART3 作为标准的 UART 0 IrDAEn 使用 0 1 使能 UART3 的 IrDA 模式 1 IrDAInv 为 1 时,串行输入反相。为 0 时,串行输入不会反相 0 2 FixPulseEn 为 1 时,使能 IrDA 固定脉冲宽度模式 0 5:3 PulseDiv 当 FixPulseEn=1 时,对脉冲进行配置。详细信息参考 0 下文 保留。用户软件不应向保留位写 1。从保留位读出的 31:6 - NA 0 值为未定义 在 IrDA 模式下,若启用了固定脉冲宽度模式(IrDAEn=1 和 FixPluseEn=1),U3ICR 的 PulseDiv 位用于选择脉冲宽度。用户必须对这些位的值进行设置,使得结果脉冲宽度至少为 1.63s。给出了可能会使用到的脉冲宽度。 表 15.16 IrDA 脉冲宽度 FixPulseEn 0 1 1 1 1 1 1 1 1 PulseDiv X 0 1 2 3 4 5 6 7 IrDA 发送脉冲宽度(s) 3/(16×波特率) 2×TPLCK 4×TPLCK 8×TPLCK 16×TPLCK 32×TPLCK 64×TPLCK 128×TPLCK 256×TPLCK 15.4.12 UARTn小数分频器寄存器(U0FDR - 0x4000 C028,U2FDR – 0x4009 8028,U3FDR – 0x4009 C028) UART0/2/3 小数分频寄存器(U0/2/3FDR)控制产生波特率的时钟预分频器,并且用户可 自由对该寄存器进行读写操作。预分频器使用 APB 时钟并根据指定的小数要求产生输出时钟。 注:如果激活了小数分频器(DIVADDVAL > 0)且 DLM = 0,DLL 寄存器的值必须大于或等于 2。 表 15.17 UARTn 小数分频寄存器位描述 位 符号 值 描述 复位值 产生波特率的预分频除数值。如果该字段为 0,小 3:0 DIVADDVAL 0 0 数波特率产生器将不会影响 UARTn 的波特率 波特率预分频乘数值。不管是否使用小数波特率发 7:4 MULVAL 1 送器,为了让 UARTn 正常运作,该字段必须大于 1 或等于 1 保留。用户软件不应对其写入 1。从保留位读出的 31:8 - NA 0 值未定义 LPC1700 用户手册 ©2010 Guangzhou ZLGMCU Development CO., LTD. 13 13 广州周立功单片机发展有限公司 第 15 章 该寄存器控制产生波特率的时钟预分频器。寄存器的复位值会让 UART0/2/3 的小数功能保 持在禁用状态,从而确保 UART1 完全软件和硬件兼容没有配备该特性的 UART。 UART0/2/3 波特率的计算(n =0/2/3): UARTn 波特率  16  256  UnDLM  PCLK UnDLL 1 DivAddVal   MulVal  其中 PCLK 为外设时钟,U1DLM 和 U1DLL 为标准 UART1 波特率分频器寄存器,而 DIVADDVAL 和 MULVAL 为 UART1 小数波特率发生器的制定参数。 ULVAL 和 DIVADDVAL 的值应符合以下条件: a) 0 < MULVAL ≤ 15; b) 0 ≤ DIVADDVAL < 15; c) DIVADDVAL0)进入复位状态,则总线关闭保持有效,TXERR 被冻结。 16.7.4 CAN中断和捕获寄存器 该寄存器中的位指出了CAN总线事件的相关信息。这是一个只读寄存器。 表 16.10中未 列出的位读出为“0”,因此也应写入“0”。 中断和捕获寄存器的中断标志允许识别一个中断源。当一个或多个位置位时,向 CPU 指示 一个 CAN 中断。在 CPU 将该寄存器读出之后,除接收中断位之外的所有中断位都被置位。中 断寄存器作为一个只读寄存器出现在 CPU 面前。 位 1~10 在被读出时清零。 当出现一个总线错误时,位 16~23 被捕获。同时,如果 CANIER 寄存器中的 BEIE 位为 1, 该寄存器中的 BEI 位就会被置位,并且产生一个 CAN 中断。 当 CAN 总裁丢失时,位 24~31 会被捕获。同时,如果 CANIER 寄存器中的 ALIE 位为 1, 该寄存器中的 ALI 位就会被置位,并且产生一个 CAN 中断。一旦这些字节中的任何一个被捕 获,其值就保持不变,直到被读出,读出时它被释放以便捕获一个新的值。 不管读取的是寄存器的部分或整个寄存器,清零位 1~10 以及释放位 16~23 和位 24~31 都在读取 CANxICR 时出现。也就是说,软件应当将 CANxICR 作为一个字来读取,根据应用 的需要来适当地处理寄存器的所有位。 表 16.10 CAN 中断和捕获寄存器的位描述(CAN1ICR – 0x4004 400C,CAN2ICR – 0x4004 800C) 位 符号 值 功能 复位值 RM 置位 接 收 中 断 。 该 位 在 CANSR 的 RBS 位 和 0(复位) 0 RI[1] CANxIER 的 RIE 位都为 1 时置位,表明已经接 0 0 1(置位) 收到一个新的报文并存放在接收缓冲器中 发送中断 1 当 CANSR 的 TBS1 位从 0 变为 1 时 0(复位) (当来自 TXB1 的一个报文被成功发送或被终 1 TII 0 0 1(置位) 止时)该位被置位,表明发送缓冲器 1 现在可 用,CANxIER 的 TIE1 位为 1 错误报警中断。该位在 CANSR 的错误状态位或 0(复位) 总线状态位每次改变(置位或清零)时置位, 2 EI 0 0 1(置位) 在这两位改变时中断使能寄存器的 EIE 位被置 位 0(复位) 数据超载中断。该位在 CANSR 的 DOS 位从 0 3 DOI 0 0 1(置位) 变为 1 和 CANxIER 的 DOIE 位为 1 时置位 唤醒中断。当 CAN 控制器正处于睡眠状态时检 4 WUI[2] 0(复位) 测到总线活动,并且 CANxIER 的 WUIE 位为 1 0 0 1(置位) 时,该位置位 14 广州周立功单片机发展有限公司 第 16 章 位 符号 5 EPI 6 ALI 7 BEI 8 IDI 9 TI2 10 TI3 15:11 - 20:16 ERRBIT 4:0[3] 值 0(复位) 1(置位) 0(复位) 1(置位) 0(复位) 1(置位) 0(复位) 1(置位) 0(复位) 1(置位) 0(复位) 1(置位) - 00011 00010 00110 00100 00101 00111 01111 01110 续上表 功能 复位值 错误被动中断。如果 CANxIER 的 EPIE 位为 1, 并且在任何方向上 CAN 控制器都在错误被动和 错误主动模式之间切换,则该位置位 这种情况是:CAN 控制器已经到达错误被动状 0 态(至少有一个错误计数器的值超过了 CAN 协 议定义的 127),或者,CAN 控制器处于错误 被动状态,并再次进入错误主动状态 仲裁丢失中断。如果 CANxIER 寄存器中的 ALIE 位被置 1,并且 CAN 控制器在尝试发送时丢失 0 仲裁时,该位就会被置位。在这种情况下,CAN 节点变成了一个接收器 总线错误中断。如果 CANxIER 的 BEIE 位为 1, 并且 CAN 控制器在总线上检测到一个错误时, 0 该位就会被置位 ID 就绪中断。如果 CANxIER 的 IDIE 位为 1, 并且已经接收到一个 CAN 标识符(报文已经成 功接收或终止),该位就会被置位。只要报文 0 被成功发送或终止,并且 IER 寄存器中的 IDIE 位被置位,该位就会被置位 发送中断 2。当 CANSR 的 TBS 位从 0 变为 1 时(当来自 TXB2 的报文被成功发送或终止时) 0 该位就会置位,表明发送缓冲器 2 现在可用, CANxIER 的 TIE2 位为 1 发送中断 3。当 CANSR 的 TBS 位从 0 变为 1 时(当来自 TXB3 的报文被成功发送或终止时) 0 该位就会置位,表明发送缓冲器 3 现在可用,CANxIER 的 TIE3 位为 1 保留。用户软件不应向保留位写入 1 0 错误代码捕获。当 CAN 控制器检测到一个总线 错误时,帧内错误的位置就会被捕获到该字段 中。该位的值反映了内部的状态变量,因此并 不完全死线性的 帧起始 RM 置位 0 0 0 0 0 0 0 ID28…ID21 ID20…ID18 起始位 IDE 位 ID17…ID13 ID12…ID5 ID4…ID0 0 0 15 广州周立功单片机发展有限公司 第 16 章 位 符号 20:16 ERRBIT 4:0[3] 21 ERRBIT 23:22 ERRC1:0 31:24 ALCBIT[4] 值 01100 01101 01001 01011 01010 01000 11000 11001 11011 11010 10010 10001 10110 10011 10111 11100 0 1 00 01 10 11 00 … 11 12 13 … 30 31 功能 RTR 位 保留位 1 保留位 0 数据长度代码 数据字段 CRC 序列 CRC 分隔符号 应答 slot 应答分隔符号 帧结束 暂停 启动错误标志 认可错误标志 允许的显性位 错误分隔符号 超载标志 当 CAN 控制器检测到一个总线错误时,当前 位的方向被捕获到该位中 发送过程中出错 接收过程中出错 当 CAN 控制器检测到一个总线错误时,错误 的类型被捕获到该位中 位错误 格式错误 填充错误 其它错误 如果在 CAN 上尝试发送时仲裁被丢失,帧内 的位编号就会被捕获到该字段中。在 ALCBIT 的内容被读出后,ALI 位清零,可以出现新的 仲裁丢失中断 仲裁在标识符的第一位(MS)丢失 对应位丢失 仲裁在 SRTS 位丢失(标准帧报文的 RTR 位) 仲裁在 IDE 位丢失 仲裁在标识符的第 12 位丢失(只适用于扩展 帧) 对应位丢失 仲裁在标识符的最后一位丢失(只适用于扩 展帧) 仲裁在 RTR 位丢失(只适用与扩展帧) 复位值 0 0 0 0 续上表 RM 置位 0 0 0 0 16 广州周立功单片机发展有限公司 第 16 章 [1] 接收中断位在读出中断寄存器时不会被清零。发出“释放接收缓冲器”命令将暂时清零 RI。如果在释 放命令后接收缓冲器中有其它可用的报文,则 RI 再次置位,否则 RI 保持清零。 [2] 如果当 CAN 控制器正在处理总线活动或一个 CAN 中断正在挂起时 CPU 想置位睡眠位,也可以产生 唤醒中断。WUI 标志也可以在相应的使能位 WUIE 未置位时变为有效。在这种情况下唤醒中断不会提交。 [3] 只要总线错误出现,就会强制产生相应的总线错误中断(如果中断使能)。同时,位流处理器当前的 位的位置会被捕获到错误码捕获寄存器中。这个寄存器的内容会一直固定不变,直到用户软件已经将它的内容 读出一次。从这以后,捕获机制就会被再次启动,即,读 CANxICR 来使能其它总线错误中断。 [4]当仲裁丢失时,相应的仲裁丢失中断会被强制产生(如果中断使能)。在那时,位流处理器当前的位的 位置会被捕获到仲裁丢失捕获寄存器中。这个寄存器的内容会一直固定不变,直到用户软件已经将它的内容读 出一次。从这以后,捕获机制就会被再次启动。 16.7.5 CAN中断使能寄存器 这个读/写寄存器控制着 CAN 控制器的各种事件是否会导致产生中断。这个寄存器的位[1:0] 和 CANxICR 寄存器的位[10;0]一一对应。如果 CANxIER 寄存器的某个位为 0,则它对应的中 断被禁能;如果 CANxIER 寄存器的某个位为 1,则它对应的中断源被使能触发一个中断。 表 16.11 CAN 中断使能寄存器的位描述(CAN1IER – 0x4004 4010,CAN2IER – 0x4004 8010) 位 0 1 2 3 4 5 6 7 8 9 10 31:11 符号 RIE TIE1 EIE DOIE WUIE EPIE ALIE BEIE IDIE TIE2 TIE3 - 功能 接收中断使能。当接收缓冲器状态为“满”时,CAN 控制器请 求相应的中断 缓冲器 1 发送中断。当 TXB1 的报文已经成功发送或发送缓冲器 1 再次可访问时(例如,在终止发送命令之后),CAN 控制器 请求相应的中断 错误报警中断使能。如果错误或总线状态改变(参见状态寄存 器),CAN 控制器就请求相应的中断 数据超载中断使能。如果数据超载状态位置位(参见状态寄存 器)。CAN 控制器就请求相应的中断 唤醒中断使能。如果睡眠的 CAN 控制器唤醒,相应的中断就会 被请求 错误被动中断使能。如果 CAN 控制器的错误状态从错误主动变 成错误被动(反之亦然),就请求相应的中断 仲裁丢失中断使能。如果 CAN 控制器已经丢失了仲裁,就请求 相应的中断 总线错误中断使能。如果已经检测到一个总线错误,CAN 控制 器就请求相应的中断 ID 就绪中断使能。当已经接收到一个 CAN 标识符时,CAN 控 制器就请求相应的中断 缓冲器 2 发送中断使能。当 TXB2 的报文已经成功发送或发送缓 冲器 2 再次可访问时(例如,在终止发送命令之后),CAN 控 制器请求相应的中断 缓冲器 3 发送中断使能。当 TXB3 的报文已经成功发送或发送缓 冲器 3 再次可访问时(例如,在终止发送命令之后),CAN 控 制器请求相应的中断 保留,用户不应向保留位写入“1”。从保留位读出的值未定义 复位值 0 0 0 0 0 0 0 0 0 0 0 NA RM 置位 X X X X X X X X X X X 17 广州周立功单片机发展有限公司 第 16 章 16.7.6 CAN总线时序寄存器 这个寄存器控制如何从 APB 时钟获得各种 CAN 时序。它定义了波特预分频(BRP)和同 步跳转宽度(SJW)的值。而且,它定义了位时间的长度、采样点的位置和每个采样点的采样 次数。这个寄存器可以随时读出,但只能在 CANMOD 的 RM 位为 1 才能被写入。 表 16.12 CAN 总线时序寄存器的位描述(CAN1BTR – 0x4004 4014,CAN2BTR – 0x4004 8014) 位 符号 9:0 BRP 13:10 - 15:14 SJW 19:16 TESG1 22:20 TESG2 23 SAM 31:24 - 值 功能 复位值 RM 置位 波特率预分频。分频 APB 时钟来产生 CAN 时钟,分频 0 X 值为(该字段的值+1) 保留,用户软件不应向保留位写入“1”。从保留位读 NA 出的值未定义 同步跳转宽度是(该字段的值+1)个 CAN 时钟 0 X 从指定同步到采用点的延时是(该字段的值+1)个 CAN 1100 X 时钟 从采样点到下个指定同步点的延时是(该字段的值+1) 个 CAN 时钟。规定的 CAN 位时间是(该字段的值 001 X +TSEG1 的值+3)个 CAN 时钟 采样 0 总线被采样 1 次(建议用于高速总线的情况) 0 X 总线被采样 3 次(建议用于低到中速总线过滤总线线路 1 干扰的情况) 保留,用户软件不应向保留位写入“1”。从保留位读 NA 出的值未定义 1. 波特率预分频 CAN 系统时钟 tSCL 的时间可编程,它决定了独立的位时序。CAN 系统时间 tSCL 用下面的 等式计算出来:   tSCL  t CANsuppliedCLK  BRP  1 ① 2. 同步跳转宽度 为了补偿不同总线控制器的时钟振荡器之间的相移,所有的总线控制器都必须与当前传输 的相关信号边沿再同步。同步跳变宽度 tSJW 定义了可以通过一次再同步来缩短或延长的某个位 时间的最大时钟周期: tSJW  tSCL  SJW 1 ② 3. 时间段 1 和时间段 2 时间段 TSEG1 和时间段 TSEG2 决定了每个位时间的时钟周期数和采样点的位置: tSYNCSEG tSCL ③ t TSEG1  tSCL  TSEG1 1 ④ t TEG2  tSCL  TSEG2 1 ⑤ 16.7.7 CAN错误报警界限寄存器 18 广州周立功单片机发展有限公司 第 16 章 这个寄存器设置了一个 Tx 或 Rx 错误的界限,到达这个界限可以产生中断。该寄存器可以 随时读出,但是只能在 CANMOD 的 RM 位为 1 时才能被写入。寄存器硬件复位后的默认值是 96。 表 16.13 CAN 错误报警界限寄存器的位描述(CAN1EWL – 0x4004 4018,CAN2EWL – 0x4004 8018) 位 符号 功能 复位值 RM 置位 在 CAN 操作过程中,这个值与 Tx 和 Rx 错误计数器相比较。 7:0 EWL 如果其中一个计数器的值与这个值匹配,则 CANSR 的错误 9610=0x60 X 状态(ES)位被置位 注:只有在之前已经进入了复位状态,才能改变错误报警界限寄存器的内容。新的寄存器内容强制的错误 状态改变(状态寄存器)和错误报警中断不会出现,直到复位状态再次被取消。 16.7.8 CAN状态寄存器 该寄存器包含 3 个状态字节,这些字节中和传输无关的位与全局状态寄存器中对应的位完 全相同,字节中和传输有关的位反映了每个 Tx 缓冲器的状态(共 3 个 Tx 缓冲器)。 表 16.14 CAN 状态寄存器的位描述(CAN1SR – 0x4004 401C,CAN2SR – 0x4004 81C) 位 符号 功能 复位值 RM 置位 0 RBS 接收缓冲器状态。这一位与 CANxGSR 的 RBS 位相同 0 0 1 DOS 数据超载状态。这一位与 CANxGSR 的 DOS 位相同 0 0 发送缓冲器状态 1 软件不能访问 Tx 缓冲器 1,也不能写对应的 CANxTFI 、 CANxTID 、 CANxTDA 和 0(锁定) 2 TBS[1] CANxTDB 寄存器,因为报文正在等待发送或 1 1 正处于发送过程中 软件可以将一个报文写入发送缓冲器 1 和它的 1(释放) CANxTFI 、 CANxTID 、 CANxTDA 和 CANxTDB 寄存器 发送结束状态 3 TCS1[2] 0(未完成) 前面请求的 Tx 缓冲器 1 传输没有成功完成 1 X 1(已完成) 前面请求的 Tx 缓冲器 1 传输已成功完成 4 RS 接收状态。这一位和 CANxGSR 的 RS 位相同 1 0 19 广州周立功单片机发展有限公司 第 16 章 续上表 位 符号 功能 复位值 RM 置位 发送状态 1 5 TS1 0(空闲) 没有来自 Tx 缓冲器 1 的传输 1 0 1(发送) CAN 控制器正在发送 Tx 缓冲器的一个报文 6 ES 错误状态。这一位和 CANxGSR 的 ES 位相同 0 0 7 BS 总线状态。这一位和 CANxGSR 的 BS 位相同 0 0 8 RBS 接收缓冲器状态。这一位和 CANxGSR 的 RBS 位相同 0 0 9 DOS 数据超载状态。这一位和 CANxGSR 的 DOS 位相同 0 0 发送缓冲器状态 2 软件不能访问 Tx 缓冲器 2,也不能写对应的 CANxTFI、CANxTID、CANxTDA 和 0(锁定) 10 TBS2[1] CANxTDB 寄存器,因为报文正在等待发送或 1 1 正在处于发送过程中 软件可以将一个报文写入发送缓冲区 2 和它的 1(释放) CANxTFI、CANxTID、CANxTDA 和 CANxTDA 寄存器 发送结束状态 11 TCS[2] 0(未完成) 前面请求的 Tx 缓冲器 2 传输没有成功完成 1 X 1(已完成) 前面请求的 Tx 缓冲器 2 传输已成功完成 12 RS 接收状态。这一位和 CANxGSR 的 RS 位相同 1 0 发送状态 2 13 TS2 0(空闲) 没有来自 Tx 缓冲器 2 个传输 1 0 1(发送) CAN 控制器正在发送 Tx 缓冲器 2 的一个报文 14 ES 错误状态。这一位和 CANxGSR 的 ES 位相同 0 0 15 BS 总线状态。这一位和 CANxGSR 的 BS 位相同 0 0 16 RBS 接收缓冲器状态。这一位和 CANxGSR 的 RBS 位相同 0 0 17 DOS 数据超载状态。这一位和 CANxGSR 的 DOS 位相同 0 0 发送缓冲器状态 3 软件不能访问 Tx 缓冲器 3,也不能写对应的 CANxTFI、CANxTID、CANxTDA 和 0(锁定) 18 TBS[3] CANxTDB 寄存器,因为报文正在等待发送或 1 1 正在处于发送过程中 软件可以将一个报文写入发送缓冲区 3 和它的 1(释放) CANxTFI、CANxTID、CANxTDA 和 CANxTDB 寄存器 发送结束状态 19 TCS3[1] 0(未完成) 前面请求的 Tx 缓冲器 3 传输没有成功完成 1 X 1(已完成) 前面请求的 Tx 缓冲器 3 传输已成功完成 20 RS 接收状态。这一位和 CANxGSR 的 ES 位相同 1 0 发送状态 3 21 TS3 0(空闲) 没有来自 Tx 缓冲器 3 的传输 1 0 1(发送) CAN 控制器正在发送 Tx 缓冲器 3 的一个报文 20 广州周立功单片机发展有限公司 第 16 章 位 22 23 31:24 符号 ES BS - 功能 复位值 错误状态。这一位和 CANxGSR 的 ES 位相同 总线状态。这一位和 CANxGSR 的 BS 位相同 保留,用户软件不应向保留位写入“1”。从保留位读出的值 为未定义 RM 置位 0 0 NA 续上表 位 0 0 [1] 如果 CPU 试图在发送缓冲器状态位位“0”(锁定)时写入这个发送缓冲器,则写入的自己诶不被接 受,并被丢失(不作任何通知)。 [2] 只要发送请求位或自接收请求位因为这个 Tx 缓冲器而置位,发送结束状态位被设为“0”(未完成)。 发送结束状态保持“0”,直到一个报文被成功发送。 16.7.9 CAN接收帧状态寄存器 这个寄存器定义了当前接收到的报文的特性。在正常模式下,它是一个只读寄存器,但如 果 CANMOD 的 RM 位为 1,这个寄存器可以被写入用来测试。 表 16.15 CAN 接收帧状态寄存器的位描述(CAN1RFS – 0x4004 4020,CAN2RFS – 0x4004 8020) 位 符号 功能 如果 BP 位(见下行)为 0,该字段的值是从零开始的查找表 RAM 9:0 ID.Indpx 行的编号,验收滤波器利用该值来匹配接收标识符。标准表格中的 禁能行业设定有编号,但不参与匹配 如果该位为 1,则在 AF 旁路(Bypass)模式中接收当前的报文,ID 10 BP 索引字段元(见上行)无意义 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未 15:11 - 定义 19:16 DLC 该字段包含了当前接收到的报文的数据长度代码(DLC)。当 RTR=0 时,该字段的值与 CANxRDA 和 CANxRDB 寄存器中可用的数据字 节数有关: 0000-0111= 0~7 个字节 100-111= 8 个字节 RTR=1 时,该字段的值指明了请求发回的数据字节数,使用相同的 编码方式 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未 29:20 - 定义 该位包含了当前接收到的报文的远程传输请求位。0 表明接收到一 个 数 据 帧 , 如 果 DLC 是 一 个 非 零 值 , 数 据 帧 中 的 数 据 可 从 30 RTR CANxRDA 读出,也可能从 CANxRDB 寄存器读出。1 表明接收到 一个远程帧,这时 DLC 的值用来识别请求发送的数据字节数(使 用相同的标识符) 该位为 0 时,表明当前接收到的报文包含 11 位的标识符;该位为 1 31 FF 时,表明当前接收到的报文包含一个 29 位的标识符。这一位的值 会影响下面将要描述的 CANxID 寄存器的内容 ID 索引字段元: 复位值 0 0 NA 0 NA 0 0 RM 置位 0 0 X X X 21 广州周立功单片机发展有限公司 第 16 章 ID 索引是包含 ID 查找表位置的 Info 寄存器的一个 10 位的字段。软件可以使用这个索引 来简化从接收缓冲器到共享报文内存的报文传输。只要 CANxRFS 寄存器中的 ID 索引的位元 10(BP)为 1,当前的 CAN 报文就能在验收滤波器旁路模式中被接收。 16.7.10 CAN接收标识符寄存器 这个寄存器包含当前接收到的报文的标识符字段。正常工作模式下这是一个只读寄存器, 但是,如果CANMOD的RM位为 1,这个寄存器就能被写入用来测试。根据CANxRFS中FF位的 值,标识符有 2 种不同的格式。有关特定的CAN信道寄存器地址的详情见表 16.3。 表 16.16 CAN 接收标识符寄存器的位描述(CAN1RID – 0x4004 4024,CAN2RID – 0x4004 8024) 位 10:0 31:11 符号 ID - 功能 当前接收到的报文的 11 位标识符字段。在 CAN2.0A 中,这些位表 示为 ID10-0,而在 CAN2.0B 中,它们表示为 ID29-18 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未 定义 复位值 0 NA RM 置位 X 表 16.17 FF=1 时的 RX 标识符寄存器 位 10:0 31:11 符号 ID - 功能 当前接收到的报文的 29 位标识符字段。在 CAN2.0A 中,这 些位表示为 ID10-0,而在 CAN2.0B 中,它们表示为 ID29-18 保留,用户软件不应向保留位写入“1”。从保留位读出的值 为未定义 复位值 0 NA RM 置位 X 16.7.11 CAN接收数据寄存器A 该寄存器包含了当前接收到的报文的前 1~4 个数据字节。在正常模式下,这是一个只读寄 存器,但是,如果CANMOD寄存器中的RM位为 1,这个寄存器就能被写入用来测试。有关特 定的CAN信道寄存器地址的详情见表 16.3。 表 16.18 CAN 接收数据寄存器 A 的位描述(CAN1RDA – 0x4004 4028,CAN2RDA – 0x4004 8028) 位 7:0 15:8 23:16 31:24 符号 数据 1 数据 2 数据 3 数据 4 功能 如果 CANRFS 中的 DLC 字段的值≥0001,这个字段就包含当前接 收到的报文的第 1 个数据字节 如果 CANRFS 中的 DLC 字段的值≥0010,这个字段就包含当前接 收到的报文的第 2 个数据字节 如果 CANRFS 中的 DLC 字段的值≥0011,这个字段就包含当前接 收到的报文的第 3 个数据字节 如果 CANRFS 中的 DLC 字段的值≥0100,这个字段就包含当前接 收到的报文的第 4 个数据字节 复位值 0 0 0 0 RM 置位 X X X X 16.7.12 CAN接收数据寄存器B 该寄存器包含了当前接收到的报文的第 5~8 个数据字节。在正常模式下,这是一个只读寄 存器,但是,如果CANMOD寄存器中的RM位为 1,这个寄存器就能被写入用来测试。有关特 定的CAN信道寄存器地址的详情见表 16.3。 22 广州周立功单片机发展有限公司 第 16 章 表 16.19 CAN 接收数据寄存器 B 的位描述(CAN1RDB – 0x4004 402C,CAN2RDB – 0x4004 802C) 位 7:0 15:8 23:16 31:24 符号 数据 5 数据 6 数据 7 数据 8 功能 如果 CANRFS 中的 DLC 字段的值≥0101,这个字段就包含当前接 收到的报文的第 5 个数据字节 如果 CANRFS 中的 DLC 字段的值≥0110,这个字段就包含当前接 收到的报文的第 6 个数据字节 如果 CANRFS 中的 DLC 字段的值≥0111,这个字段就包含当前接 收到的报文的第 7 个数据字节 如果 CANRFS 中的 DLC 字段的值≥1000,这个字段就包含当前接 收到的报文的第 8 个数据字节 复位值 0 0 0 0 RM 置位 X X X X 16.7.13 CAN发送帧信息寄存器 当 CANSR 寄存器中相应的 TBS 位为 1 时,软件可以通过对其中一个发送帧信息寄存器进 行写操作来定义对应 Tx 缓冲器中发送报文的格式。表中未列出的位读出为 0,也应写入 0。 当使用自接收功能(自测试)时,为了方便比较,发送缓冲器中 CANxTFI 寄存器的保留 位的值应该设置成接收缓冲器中希望的值,否则,保留位的值就未定义。 CAN控制器由 3 个发送缓冲器组成。每个发送缓冲器的长度为 4 个字,可以存放一个完整 的CAN报文,如图 16.2。 缓冲器的布局分成描述符区域和数据区域,描述符区域的第一个字包括描述帧格式的 Tx 帧信息、数据长度以及 Tx 帧是远程帧还是数据帧。另外,Tx 优先级寄存器允许为每个发送报 文定义一个优先级。根据选择的帧格式,紧跟其后的是标准帧格式(SFF)的 11 位标识符或扩 展帧格式(EFF)的 29 位标识符。注意:TID 区域未使用的位必须定义成 0。TDA 和 TDB 的 数据区域包含多达 8 个数据字节。 表 16.20 发送帧信息寄存器位描述(CAN1tfi[1/2/3] – 0x4004 40[30/40/50],CAN2TFI[1/2/3] – 0x4004 80[30/40/50]) 位 7:0 15:8 19:16 29:20 符号 PRIO DLC - 功能 复位值 如果 CANxMOD 寄存器中的 TPM(发送优先级模式)位元被置“1”, 已使能 Tx 缓冲器根据这个字段的值来竞争发送发送报文的权限。 0 具有最低 TX 优先级值的缓冲器获得优先权,它们的内容也最先被 发送 保留. 0 数据长度代码。这个值在下个发送报文的 DLC 区域中被发送。另 外,如果 RTR=0,这个值就控制着下个发送报文中发送的数据字节 0 数(CANxTDA 和 CANxTDB 寄存器中的数据字节数): 000-0111= 0~7 个字节 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未 0 定义 RM 置位 X X 23 广州周立功单片机发展有限公司 第 16 章 续上表 位 符号 功能 复位值 RM 置位 这个值在下个发送报文的 RTR 位中被发送。如果该位为 0,则 DLC 字段提交的数据字节数从 CANxTDA 和 CANxTDB 寄存器中发送出 30 RTR 0 X 来。如果该位为 1,则一个远程帧被发送(包含对应字节数的发送 请求) 如果该位为 0,带有 11 位标识符(标准帧格式)的下个发送报文被 31 FF 发送;如果该位为 1,发送的是带有 29 位标识符(扩展帧格式)的 0 X 报文 1. 自动发送优先级检测 为了不中断发送报文流,CAN 控制器为所有发送缓冲器提供了自动发送优先级检测。选择 好发送优先级模式后,内部优先级别由 CAN 标识符或一个用户定义的“本地优先级”决定。 如果多个报文被使能发送(TR=1),就要组织内部发送报文队列,例如带有最小 CAN 标识符 (TID)或最低“本地优先级”(Tx 优先级)的发送缓冲器赢得优先权,内容被最先发送。新 的 CAN 报文在总线上发送之前要将内部调度过程的结果考虑进来。这个内部调度过程在发送 错误出现之后和重新发送之前也存在。 2. Tx DLC 报文的数据区域中的字节数用数据长度代码(DLC)来编码。在开始远程帧发送时,由于 RTR 位为“1”(远程),所以不考虑 DLC。这就将要发送/接收的数据字节数强制位 0。但是, 如果 2 个 CAN 控制器同时启动具有相同标识符的远程帧发送,那么,为了避免总线错误,DLC 必须正确设置。由于兼容性的原因,不能使用 DLC>8 个字节(数据长度代码在 DLC 中被指定)。 数据字节计数的范围是 0~8 个字节,其设置如下: DataByteCount  DLC 16.7.14 CAN发送标识符寄存器 当 CANxSR 中相应的 TBS 位为 1 时,软件可以写其中一个寄存器来定义发送报文的标识 符区域。根据 CANTFI 中的 FF 位的值,寄存器采用 2 种不同的格式。 在标准帧格式的报文中,CAN 标识符由 11 个位(ID28~ID18)组成,而在扩展帧格式的 报文中,CAN 标识符由 29 个位(ID28~ID0)组成。ID28 为最高有效位,在仲裁过程中它最先 在总线上被发送。标识符就像是报文的名称,接收器使用它来进行验收过滤,标识符也决定了 总裁过程中总线访问的优先级。 表 16.21 发送标识符寄存器的位描述(CAN1TID[1/2/3] – 0x4004 40[34/44/54],CAN2TID[1/2/3] – 0x4004 80[34/44/54]) 位 10:0 31:11 符号 ID - 功能 下一个发送报文中被发送的 11 位标识符 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未 定义 复位值 0 NA RM 置位 X 24 广州周立功单片机发展有限公司 第 16 章 表 16.22 FF=1 时的发送标识符寄存器的位描述 位 10:0 31:11 符号 ID - 功能 下一个发送报文中被发送的 29 位标识符 保留,用户软件不应向保留位写入“1”。从保留位读出的值 为未定义 复位值 0 NA RM 置位 X 16.7.15 CAN发送数据寄存器A 当 CANSR 寄存器中相应的 TBS 位为 1 时,软件可以写其中一个寄存器来定义发送报文的 前 1~4 个数据字节。数据长度代码定义了发送的数据字节数。Tx 数据字节 1 的最高有效位最 先被发送。 表 16.23 CAN 发送数据寄存器 B 的位描述(CAN1TDA[1/2/3] – 0x4004 40[38/48/58],CAN2TDA[1/2/3] – 0x4004 80[38/48/58]) 位 7:0 15:8 23:16 31:24 符号 数据 1 数据 2 数据 3 数据 4 功能 如果对应 CANTFI 中的 RTR=0,DLC≥0001,这个字段就作为下个 发送报文的第 1 个数据字节被发送 如果对应 CANTFI 中的 RTR=0,DLC≥0010,这个字段就作为下个 发送报文的第 2 个数据字节被发送 如果对应 CANTFI 中的 RTR=0,DLC≥0011,这个字段就作为下个 发送报文的第 3 个数据字节被发送 如果对应 CANTFI 中的 RTR=0,DLC≥0100,这个字段就作为下个 发送报文的第 4 个数据字节被发送 复位值 0 0 0 0 RM 置位 X X X X 16.7.16 CAN发送数据寄存器B 当 CANSR 寄存器中相应的 TBS 位为 1 时,软件可以写其中一个寄存器来定义发送报文的 第 5~8 个数据字节。数据长度代码定义了发送的数据字节数。Tx 数据字节 1 的最高有效位最 先被发送。 表 16.24 CAN 发送数据寄存器 B 的位描述(CAN1TDB[1/2/3] – 0x4004 40[3C/4C/5C],CAN2TDB[1/2/3] – 0x4004 80[3C/4C/5C]) 位 7:0 15:8 23:16 31:24 符号 数据 5 数据 6 数据 7 数据 8 功能 如果对应 CANTFI 中的 RTR=0,DLC≥0101,这个字段就作为下个 发送报文的第 5 个数据字节被发送 如果对应 CANTFI 中的 RTR=0,DLC≥0110,这个字段就作为下个 发送报文的第 6 个数据字节被发送 如果对应 CANTFI 中的 RTR=0,DLC≥0111,这个字段就作为下个 发送报文的第 7 个数据字节被发送 如果对应 CANTFI 中的 RTR=0,DLC≥1000,这个字段就作为下个 发送报文的第 8 个数据字节被发送 复位值 0 0 0 0 RM 置位 X X X X 16.7.17 CAN睡眠清零寄存器 这个寄存器给出了两个 CAN 通道当前的睡眠状态,并提供了唤醒后恢复通道时钟的方法。 更多关于 CAN 睡眠特性的信息。 25 广州周立功单片机发展有限公司 第 16 章 表 16.25 CAN 睡眠清零寄存器的位描述(CANSLEEPCLR – 0x400F C110) 位 符号 功能 复位值 RM 置位 保留,用户软件不应向保留位写入“1”。从保留位读出 0 - NA 的值为未定义 CAN 通道 1 的睡眠状态和控制 1 CAN1SLEEP 读:当该位为 1 时,表明 CAN 通道 1 正处于睡眠模式 0 X 写:写入 1 时,恢复 CAN 通道 1 的时钟 CAN 通道 2 的睡眠状态和控制 2 CAN2SLEEP 读:当该位为 1 时,表明 CAN 通道 2 正处于睡眠模式 0 X 写:写入 1 时,恢复 CAN 通道 2 的时钟 保留,用户软件不应向保留位写入“1”。从保留位读出 31:3 - NA 的值为未定义 16.7.18 CAN唤醒标志寄存器 这个寄存器给出了两个 CAN 通道当前的唤醒状态,并允许清零唤醒事件。更多关于 CAN 睡眠特性的信息。 表 16.26 CAN 唤醒标志寄存器的位描述(CANWAKEFLAGS – 0x400F C114) 位 符号 功能 复位值 RM 置位 保留,用户软件不应向保留位写入“1”。从保留位读出 0 - NA 的值为未定义 CAN 通道 1 的唤醒状态 读:当该位为 1 时,表明 CAN 信道 1 的接收数据在线出 1 CAN1SLEEP 0 X 现了下降沿 写:写入 1 清零该位 CAN 通道 2 的唤醒状态 读:当该位为 1 时,表明 CAN 信道 2 的接收数据在线出 2 CAN2SLEEP 0 X 现了下降沿 写:写入 1 清零该位 保留,用户软件不应向保留位写入“1”。从保留位读出 31:3 - NA 的值为未定义 16.8 CAN控制器操作 16.8.1 错误处理 CAN 控制器根据 CAN 规范 2.0B 的规定计数和处理发送和接收错误。发送和接收错误计数 器每当检测到错误时就会递增,而当操作无误时会递减。如果发送错误计数器的值为 255 时又 有一个错误出现,那么 CAN 控制器就被强制进入一个称为总线关闭(Bus-off)的状态。在这 个状态中,下列寄存器位被置位:CANxSR 的 BS 位、CANxIR 的 BEI 和 EI 位(如果它们使能), 以及 CANxMOD 的 RM 位。RM 复位能禁能 CAN 控制器。而且在这个时候,发送错误计数器 被设置为 127,接收错误计数器被清零。再次启动节点时必须软件清零 RM 位。然后,发送错 误计数器递减计数 128 次证明是否在总线空闲条件下(11 个连续的隐形位)。软件可通过读取 Tx 错误计数器来监控这个递减计数。当递减计数结束时,CAN 控制器清零 CANxSR 的 BS 和 ES 位,置位 CANxICR 的 EI 位(如果 IER 的 EIE 位为 1)。 26 广州周立功单片机发展有限公司 第 16 章 如果 CANxMOD 中的 RM 位为 1,就可以写 Tx 和 Rx 错误计数器。向 Tx 错误计数器写入 255 将强制 CAN 控制器进入总线关闭状态。如果总线关闭(CANxSR 的 BS 位)为 1,想 Tx 错误计数器写入 0~254 之间的任何值都将清除总线关闭状态。当软件清除 CANxMOD 的 RM 位后,恢复操作之前只需要一个总线空闲条件(11 个连续的隐性位)。 16.8.2 睡眠模式 如果 CAN 模式寄存器的 SM 位元为 1、没有 CAN 中断正在挂起并且没有 CAN 总线活动, CAN 控制器将进入睡眠模式。软件只能在 CAN 模式寄存器的 RM 位元为 0 时才能置位 SM。 软件还可以置位 CAN 中断使能寄存器的 WUIE 位来使能任何唤醒条件引起的中断。 CAN 控制器唤醒(如果 CAN 中断使能寄存器的 WUIE 位为 1,则置位 CAN 中断寄存器中 的 WUI 位)来使下面 2 种情况下发生响应:a)CAN 总线上的显性位;b)软件清零 CAN 模式 寄存器的 SM 位元。后者是为了响应总线活动而唤醒的睡眠 CAN 控制器,却要使它检测到总 线空闲(11 个连续的隐性位)以后才能接收报文。如果软件置位 SM 时中断正在挂起或者 CAN 总线有效,则立刻唤醒。 当发生唤醒事件时,软件必须执行以下操作:  向 CAN_SLEEP_CLR 寄存器的相应位写入 1;  向 CAN1MOD 和/或 CAN2MOD 寄存器的 SM 位写入 0;  向 CAN_WAKE_FLAGS 寄存器的相应位写入 1。如果该步骤执行失败,之后就会无 法进入掉电模式。 16.8.3 中断 每个 CAN 控制器产生 3 个中断请求:接收、发送和“其它状态”。发送中断是 3 个 Tx 缓 冲器发送中断相或的结果。每个控制器的每个接收和发送中断请求都在嵌套向量中断控制器 (NVIC)中被分配有自己的通道,可以有它们自己的中断服务程序。来自所有 CAN 控制器的 “其它状态”中断和验收滤波器 LUTerr 条件相或后进入一个 NVIC 通道。 16.8.4 发送优先级 如果 CANxMOD 寄存器的 TPM 位为 0,多个使能的 Tx 缓冲器就根据它们的 CAN 标识符 (TID)的值来竞争报文发送权。如果 TPM 为“1”,Tx 缓冲器就根据它们的 CANxTFS 寄存 器的位[7:0]的 PRIO 字段来竞争发送权。在这两种情况下,二进制值最小的字段对应的缓冲器 拥有优先权。如果 2 个(或 3 个)发送使能的缓冲器拥有相同的最小值,则编号最小的缓冲器 最先发送。 在发送每个报文之间,CAN 控制器会在多个使能的 Tx 缓冲器中进行动态选择。 16.9 集中CAN寄存器 为了简单而又快速地访问,每个 CAN 控制器的所有 CAN 控制器状态寄存器被集中到一起 形成下面这些寄存器。下列的寄存器 LS 位中每个已定义的字节包含每个 CAN 控制器的一个特 定状态位。所有的状态寄存器都是“只读”寄存器,允许对它们进行字节、半字节和字访问。 27 广州周立功单片机发展有限公司 第 16 章 16.9.1 集中发送状态寄存器 表 16.27 集中发送状态寄存器的位描述(CANTxSR – 0x4004 0000) 位 0 1 7:2 8 9 15:10 16 17 31:18 符号 TS1 TS2 - TBS1 TBS2 - TCS1 TCS2 - 功能 该位为 1 时,表明 CAN 控制器 1 正在发送一个报文(与 CAN1GSR 的 TS 相同) 该位为 1 时,表明 CAN 控制器 2 正在发送一个报文(与 CAN2GSR 的 TS 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 该位为 1 时,CAN1 控制器的所有 3 个 Tx 缓冲器都可供 CPU 使用(与 CAN1GSR 的 TBS 相同) 该位为 1 时,CAN2 控制器的所有 3 个 Tx 缓冲器都可供 CPU 使用(与 CAN2GSR 的 TBS 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 该位为 1 时,CAN1 控制器已经成功完成了所有请求的发送(与 CAN1GSR 的 TCS 相同) 该位为 1 时,CAN2 控制器已经成功完成了所有请求的发送(与 CAN2GSR 的 TCS 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 复位值 0 0 NA 0 0 NA 0 0 NA 16.9.2 集中接收状态寄存器 表 16.28 集中接收状态寄存器的位描述(CANRxSR – 0x4004 0004) 位 0 1 7:2 8 9 15:10 16 17 31:18 符号 RS1 RS2 - TBS1 TBS2 - DOS1 DOS2 - 功能 该位为 1 时,表明 CAN 控制器 1 正在接收一个报文(与 CAN1GSR 的 TS 相同) 该位为 1 时,表明 CAN 控制器 2 正在接收一个报文(与 CAN2GSR 的 TS 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 该位为 1 时,CAN1 控制器中一个接收到的报文可用(与 CAN1GSR 的 RBS 相同) 该位为 1 时,CAN2 控制器中一个接收到的报文可用(与 CAN2GSR 的 RBS 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 该位为 1 时,一个报文因为以前传输到 CAN1 控制器的报文没有被迅 速读出而丢失(与 CAN1GSR 的 DOS 相同) 该位为 1 时,一个报文因为以前传输到 CAN2 控制器的报文没有被迅 速读出而丢失(与 CAN2GSR 的 DOS 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 复位值 0 0 NA 0 0 NA 0 0 NA 28 广州周立功单片机发展有限公司 第 16 章 16.9.3 集中其它状态寄存器 表 16.29 集中其它状态寄存器的位描述 位 0 1 7:2 8 9 31:10 符号 E1 E2 BS1 BS2 - 功能 该位为 1 时,CAN1 Tx 和 Rx 错误计数器中的一个或两个已经到 达 CAN1EWL 寄存器设置的界限(与 CAN1GSR 的 ES 相同) 该位为 1 时,CAN2 Tx 和 Rx 错误计数器中的一个或两个已经到 达 CAN2EWL 寄存器设置的界限(与 CAN2GSR 的 ES 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为 未定义 该位为 1 时,CAN1 控制器当前正在处理总线活动(与 CAN1GSR 的 BS 相同) 该位为 1 时,CAN2 控制器当前正在处理总线活动(与 CAN2GSR 的 BS 相同) 保留,用户软件不应向保留位写入“1”。从保留位读出的值为 未定义 复位值 0 0 NA 0 0 NA 16.10 全局验收滤波器 这个模块为所有的 CAN 控制器提供了接收标识符的查找(CAN 术语称之为验收过滤)。 验收过滤器包含一个 512×32(2KB)RAM,软件可以在其中存放 1~5 个标识符表。这个 RAM 可以容纳多达 1024 个标准标识符或 512 个扩展标识符,或者两种类型混合的标识符。 16.11 验收滤波器模式 通过设置验收滤波器模式寄存器的 AccOff、AccBP 和 eFCAN 位,验收滤波器可以进入不 同的模式。在每种模式下,寄存器和 ID 查找表的访问操作都是不同的。 表 16.30 验收滤波器模式和访问控制 验收滤波器 模式 关闭模式 旁路模式 工作模式和 FullCAN 模 式 AccBP 验收滤波器 AccOff 位 位 状态 ID 查找表 RAM[1] 验收滤波器配 置寄存器 由 CPU 对其 由 CPU 对其进 1 0 复位&停止 进行读/写 行读/写 由 CPU 对其 由 CPU 对其进 X 1 复位&停止 进行读/写 行读/写 只能由 CPU 只能由验收滤 0 0 运行 读取[1] 波器来访问 CAN 控制器 报文接收中 断 不接收报文 接收所有的 报文 硬件验收过 滤 [1] 整个 ID 查找表 RAM 只能以字的形式来访问。 [2] 在验收滤波器的工作模式中,只能访问查找表来禁能或使能报文。 只有在验收滤波器关闭模式和旁路模式中才能对所有区配置寄存器进行写访问。允许在所 有的验收滤波器模式下对寄存器进行读访问。 29 广州周立功单片机发展有限公司 第 16 章 16.11.1 验收滤波器关闭模式 通常,验收滤波器关闭模式被用在初始化过程中。在这个模式下,可以对所有的寄存器和 查找表 RAM 进行无条件访问。在验收滤波器关闭模式下,不接收 CAN 报文,因此报文不会存 放到有效 CAN 控制器的接收器缓冲器中。 16.11.2 验收滤波器旁路模式 验收滤波器旁路模式可以用来改变一个正在运行的系统中的验收滤波器配置,即改变 ID 查找表存储器的标识符。在这个重新配置的过程中,必须使用软件验收过滤。 建议使用 ID 就绪中断(ID 索引)和接收中断(RI)。在这种模式中,接收所有的 CAN 报 文,将其保存在有效 CAN 控制器的接收缓冲器中。 16.11.3 验收滤波器操作模式 当配置寄存器的 AccOff 和 AccBP 位都置位且 eFCAN=0 时,验收滤波器处于工作模式。 16.11.4 FullCAN模式 当配置寄存器的 AccOff 和 AccBP 位都置位且 eFCAN=0 时,验收滤波器处于 FullCAN 工 作模式。 16.12 ID查找表RAM的各个区 4 个 12 位的区配置寄存器(SFF_sa,SFF_GRP_sa,EFF_sa,EFF_GRP_sa)用来定义 ID 查找表存储器中不同的标识符区的边界。第 5 个 12 位的区配置寄存器是表格结束地址寄存器 (ENDofTable),用来定义所有标识符区的结束。表结束地址也用来分配 FullCAN 报文对象区 的起始地址(如果 FullCAN 报文对象被使能存放在区中)。 表 16.31 区配置寄存器设置 ID 查找表区 FullCAN(标准帧格式)标识符区 明确的标准帧格式标识符区 标准帧组格式标识符区 明确的扩展帧格式标识符区 扩展帧组格式标识符区 寄存器 SFF_sa SFF_GRP_sa EFF_sa EFF_GRP_sa ENDofTable 值 =0x000 >0x000 =SFF_sa > SFF_sa =SFF_GRP_sa > SFF_GRP_sa =SFF_sa > SFF_sa =SFF_GRP_sa > SFF_GRP_sa 区状态 禁能 使能 禁能 使能 禁能 使能 禁能 使能 禁能 使能 16.13 ID查找表RAM 这个 ID 查找表 RAM 只能进行字访问,并且只能在验收滤波器关闭或旁路模式下进行写访 问。但读访问可以在所有的验收滤波器模式下进行。 如果应用中使用的是标准标识符(11 位),则 3 个表格中至少有一个必定不为空。如果 “FullCAN 模式”选项使能,第 1 个表格存放标准标识符,用于 FullCAN 模式中接收的处理。 第 2 个表格存放单个标准标识符,第 3 个表格存放标准标识符的范围,使报文通过 CAN 控制 器接收。FullCAN 的单个标准标识符表格必须按升序排列,每半个字为 1 个标识符,每个字包 30 广州周立功单片机发展有限公司 第 16 章 含 2 个标识符。由于每个 CAN 总线都有自身的地址映射,因此表格的每行都必须包含使用的 CAN 控制器的编号(001~010)。 图 16.6 一行 FullCAN 下的单个标准标识符表 标准标识符范围表格包含标识符的一对上下边界(边界值包含在内),一对范围占用一个 字,按升序排列。 图 16.7 一行标准标识符范围表格 标准行的禁能位提供了一种动态开/关特定 CAN 标识符或标识符范围响应的方法。当验收 滤波器功能被使能时,验收滤波器 RAM 中只有禁能位可通过软件来改变。通过向 RAM 中相 应的字内写入 32 位 0 来使能对标准地址范围的响应,通过写入 32 位 1(0xFFFF FFFF)来关闭 该响应。在整个过程中只有禁能位被改变。禁止行必须保存按升序排列的标识符。 如果在应用中使用的是扩展标识符(29 位),验收滤波器 RAM 其它 2 个表格中至少有 1 个必定不为空,两个表格一个用来存放单个扩展标识符,一个用来存放扩展标识符的范围。单 个扩展必须按升序排列。 图 16.8 一行扩展标识符表格 扩展标识符范围表格必须含有偶数个行,其格式与单个扩展标识符表格相同。和单个扩展 标识符的表格一样,扩展范围必须按升序排列。表中的第 1 行和第 2 行(第 3 和第 4 行……) 形成一对,作为包括边界在内的扩展地址范围。这样,包含在地址范围内(含边界)的地址就 一定能接收到。要求编写的软件必须保证表格由一对一对的字组成。 使用 FullCAN 方法来接收扩展标识符信息实现起来并不容易。 有 5 个地址寄存器指向验收滤波器 RAM 中表格之间的边界:FullCAN 标准地址、标准单 个地址、标准地址范围、扩展单个地址和扩展地址范围。这些表格在存储器中必须是连续的。 后 4 个表格的起始地址分别是各自相邻的前一个表格的终止地址。扩展地址范围表格的结束地 址在表格结束寄存器中给出。如果一个表格的起始地址等于下一个表格的起始地址或表格结束 寄存器的值,则该表格为空。 当 CAN 控制器的接收方已接收到一个完整的标识符时,它将通知验收滤波器。验收滤波 器响应这个信号,并读出控制器编号、标识符尺寸,以及来自控制器本身的标识符。然后,验 收滤波器继续搜索 RAM,以决定接收或忽略这个报文。 31 广州周立功单片机发展有限公司 第 16 章 如果 FullCAN 模式使能且 CAN 控制器告知当前报文包含一个标准标识符,则验收滤波器 首先查询标识符表格,以便接收可在 FullCAN 模式下处理。另外,如果 AF 未在 FullCAN 表格 中发现合适的匹配,它将接着查询单个标识符表格,以获取 CAN 控制器给出的标识符长度。 只要发现相等的匹配,AF 就通知 CAN 控制器保存报文,并提供一个 ID 索引值使之保存到接 收帧状态寄存器中。 如果验收滤波器未在单个标识符表格中找到相等的匹配,它便接着查询标识符范围表格, 以获取 CAN 控制器给出的标识符长度。如果 AF 在表格的范围中发现了合适的匹配,它就通知 CAN 控制器保存报文,并提供一个 ID 索引值使之保存在接收帧状态寄存器中。如果在单个标 识符表格或范围表格中,AF 都未找到与接收到的标识符长度相匹配的值,AF 便通知 CAN 控 制器丢弃/忽略接收到报文。 16.14 验收滤波器寄存器 16.14.1 验收滤波器模式寄存器 验收滤波器寄存器的 AccBP 位和 AccOff 位用来使验收滤波器进入旁路和关闭模式。模式 寄存器的 eFCAN 位可用来为接收到的 11 位 CAN ID 报文激活一个增强型的 FullCAN 模式。 表 16.32 验收滤波器模式寄存器的位描述(AFMR – 0x4003 C000) 位 符号 值 功能 复位值 0 AccOff[2] 1 如果 AccBP 为 0,验收滤波器不工作。忽略 CAN 总线上所有的 Rx 1 报文 所有 Rx 报文都被使能的 CAN 控制器接收。在修改下面描述的所有 1 AccBP[1] 1 寄存器的内容以及在以任何方式修改查找表 RAM 的内容之前,软 0 件都必须设置该位。当该位和 AccOff 都为 0 时,验收滤波器屏蔽接 收到的 CAN 标识符 软件必须从接收 CAN 控制器读取所有被使能的 CAN 总线上所有使 0 能 ID 的报文 2 Efcan[3] 0 验收滤波器本身会为所选 CAN 总线上选择的标准 ID 值处理接收和 1 保存的报文 31:3 - 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定 NA 义 [1] 验收滤波器旁路模式(AccBP):通过设置验收滤波器模式寄存器中的 AccBP 位使验收滤波器进入验 收滤波器旁路模式。在旁路模式下,验收滤波器的内部状态机会复位并停止。所有接收到的 CAN 报文被接受, 验收滤波器可以由软件来处理。 [2] 验收滤波器关闭模式(AccOff):在上电硬件复位后,验收滤波器将进入关闭模式,验收滤波器模式 寄存器 0 的 AccOff 位被置位。验收滤波器的内部状态机被复位和停止。如果在非关闭模式中通过硬件或软件 置位 AccOff 位,验收滤波器将被强制进入关闭模式。 [3] FullCAN 模式的增强特性:接收到的 CAN 报文的 FullCAN 模式可以通过置位验收滤波器模式寄存器 的 cFCAN 位来使能。 32 广州周立功单片机发展有限公司 第 16 章 16.14.2 区配置寄存器 ID 查找表 RAM 使用 10 位的区配置寄存器来分别为 11 位 CAN 标识符和 29 位 CAN 标识 符的明确 CAN 标识符和 CAN 标识符组指示不同的区边界。10 位宽度区配置寄存器允许使用 512×32(2kB)的查找表 RAM。整个 ID 查找表 RAM 使能字访问。所有 5 个区配置寄存器都 包含了的验收滤波器 RAM 的 APB 地址,但不包含 APB 基址。只有在验收滤波器的关闭模式 旁路模式下,才能对所有区配置寄存器进行写访问。允许在所有的验收滤波器模式中对区寄存 器进行读访问。 16.14.3 标准帧单个起始地址寄存器 表 16.33 标准帧单个起始地址寄存器的位描述(SFF_sa – 0x4003 C004) 位 1:0 10:2 31:11 符号 - SFF_sa[1] - 功能 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 AF 查找 RAM 中的单个标准标识符表格的起始地址。如果表格为空, 则向这个寄存器,则向这个寄存器和下面描述的 SFF_GRP_sa 寄存器 写入相同的值。为了兼容未来的器件,这个寄存器的位 31:11 和 1:0 被 写入 0。如果 AFMR 的 eFCAN 位为 1,这个值也指示了验收滤波器将 查找的标准 ID 的表格大小,而且,如果找到了匹配的标准 ID,接收 到的报文就会被自动保存草验收滤波器 RAM 中 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 复位值 NA 0 NA [1] 只能在验收滤波器旁路模式或验收滤波器关闭模式才能写查找表的区配置寄存器。 16.14.4 标准帧组起始地址寄存器 表 16.34 标准帧组起始地址寄存器的位描述(SFF_GRP_sa – 0x4003 C008) 位 1:0 11: 2 31:12 符号 - SFF_GRP_sa[1] - 功能 保留,用户软件不应向保留位写入“1”。从保留位读出的值 为未定义 AF 查找 RAM 中的单个标准标识符组表格的起始地址。如果 表格为空,则向这个寄存器,则向这个寄存器和下面描述的 EFF_sa 寄存器写入相同的值。只有当标准单个标识符表格被 使用并且 AF 查找表 RAM 的最后一个字(地址:0x7FC)被 使用时,允许写入这个寄存器的最大值是 0x800。为了兼容 未来的器件,这个寄存器的位 31:11 和 1:0 被写入 0 保留,用户软件不应向保留位写入“1”。从保留位读出的值 为未定义 复位值 NA 0 NA [1] 只能在验收滤波器旁路模式或验收滤波器关闭模式才能写查找表的区配置寄存器。 33 广州周立功单片机发展有限公司 第 16 章 16.14.5 扩展帧起始地址寄存器 表 16.35 扩展帧起始地址寄存器的位描述(EFF_sa – 0x4003 C00C) 位 1:0 10: 2 31:11 符号 - EFF_sa[1] - 功能 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未 定义 AF 查找 RAM 中的单个扩展标识符表格的起始地址。如果表格为 空,则向这个寄存器,则向这个寄存器和下面描述的 EFF_GRP_sa 寄存器写入相同的值。只有当扩展单个标识符表格为空并且 AF 查找表 RAM 的最后一个字(地址:0x7FC)被使用时,允许写入 这个寄存器的最大值是 0x800。为了兼容未来的器件,这个寄存 器的位 31:12 和 1:0 被写入 0 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未 定义 复位值 NA 0 NA [1] 只能在验收滤波器旁路模式或验收滤波器关闭模式才能写查找表的区配置寄存器。 16.14.6 扩展帧组起始地址寄存器 表 16.36 扩展帧起始地址寄存器的位描述(EFF_GRP_sa – 0x4003 C010) 位 1:0 11: 2 31:12 符号 - EFF_GRP_sa[1] - 功能 保留,用户软件不应向保留位写入“1”。从保留位读出的值 为未定义 AF 查找 RAM 中扩展标识符组表格的起始地址。如果表格为 空,则向这个寄存器,则向这个寄存器和下面描述的 EFF_GRP_sa 寄存器写入相同的值。只有当该表格为空并且 AF 查找表 RAM 的最后一个字(地址:0x7FC)被使用时,允 许写入这个寄存器的最大值是 0x800。为了兼容未来的器件, 这个寄存器的位 31:11 和 1:0 被写入 0 保留,用户软件不应向保留位写入“1”。从保留位读出的值 为未定义 复位值 NA 0 NA [1] 只能在验收滤波器旁路模式或验收滤波器关闭模式才能写查找表的区配置寄存器。 34 广州周立功单片机发展有限公司 第 16 章 16.14.7 AF表结束寄存器 表 16.37 AF 表结束寄存器的位描述(ENDofTable – 0x4003 C014) 位 1:0 11: 2 31:12 符号 - EndofTable[1] - 功能 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 最后一个有效 AF 表格中最后一个有效地址的上个地址。为了兼容未 来的器件,请向这个寄存器的位 31:12 和位 1:0 写入 0 如果 AFMR 的 eFCAN 位为 0,写入这个寄存器的最大值是 0x800,这 就允许 AF 查找表 RAM 中的最后一个字(地址 0x7FC)被使用 AFMR 中的 eFCAN 位为 1,这个字段的值就标识着验收滤波器 RAM 区域的起始处,验收滤波器将自动接收所选 CAN 总线上选择的 ID 的 报文,存放到 RAM 区域中。在这两种情况下,写入这个寄存器的最 大值是 0x800~6×(SFF_sa 的值)。这就允许在这个字段的地址和验 收滤波器 RAM 之前保存 12 个字节的报文,使得每个标准 ID 被指定 在验收滤波器 RAM 的起始地址和下个有效 AF 表之间 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 复位值 NA 0 NA [1] 只能在验收滤波器旁路模式或验收滤波器关闭模式才能写查找表的区配置寄存器。 16.14.8 状态寄存器 查找表错误状态寄存器、错误地址和标志寄存器提供了这样的信息:在 ID 筛选过程中查 找表 RAM 中是否碰到编程错误。查找表错误地址和标志寄存器只能读取。如果检测到错误, LUTerr 标志就会被置位,LUTerrAd 寄存器提供了一个地址,在这个地址下,查找表在 ID 筛选 过程中遇到了一个错误。LUTerrorAddr 滤波器模块的任何读操作都可用于查找表中断。 16.14.9 LUT错误地址寄存器 表 16.38 LUT 错误地址寄存器的位描述(LUTerrAd – 0x4003 C018) 位 1:0 10: 2 31:11 符号 - LUTerrAd - 功能 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 LUT错误位(见表 16.39)为 1,这个只读字段就包含了AF查找表RAM 的一个地址,在这个地址处,验收滤波器遇到了一个表格内容错误 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 复位值 NA 0 NA 16.14.10 LUT错误寄存器 表 16.39 LUT 错误地址寄存器的位描述(LUTerr – 0x4003 C01C) 位 符号 功能 复位值 如果验收滤波器在 AF RAM 中遇到一个表格内容错误,这个只读位就 会被置位。当软件读取 LUTerrAd 寄存器时,该位被清零。这个条件 0 LUTerr 0 和 CAN 控制器的“其它 CAN”中断相或来产生一个 VIC 中断通道的 请求 31:1 - 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 NA 16.14.11 全局FullCANInterrupt使能寄存器 只有在验收滤波器处于关闭模式时才能写全局 FullCAN 中断使能寄存器。 35 广州周立功单片机发展有限公司 第 16 章 表 16.40 LUT 错误地址寄存器的位描述(FCANIE – 0x4003 C020) 位 符号 功能 复位值 0 FCANIE 全局 FullCAN 中断使能。该位为 1 时中断被使能 0 31:1 - 保留,用户软件不应向保留位写入“1”。从保留位读出的值为未定义 NA 16.14.12 FullCAN中断和捕获寄存器 表 16.41 FullCAN 中断和捕获寄存器 0 的位描述(FCANIC0 – 0x4003 C024) 位 符号 功能 0 IntPnd0 FullCAN 中断挂起位 0 … IntPndx(0ws_halfperiod=31 0x1F 3 广州周立功单片机发展有限公司 第 20 章 位 符号 值 描述 15 31:16 mute - 当该位为 1 时,发送通道仅发送 0 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 20.5.2 数字音频输入寄存器 I2SDAI寄存器控制了I2S接收通道的操作。位功能的描述见表 20.4。 表 20.4 数字音频输入寄存器位描述(I2SDAI-0x400A 8004) 续上表 复位值 1 NA 位 符号 值 描述 1:0 wordwidth 2 mono 3 stop 4 reset 5 ws_sel 14:6 ws_halfperiod 31:15 - 选择接收数据字的宽度: 00 8 位数据 01 16 位数据 10 保留,不使用该设置 11 32 位数据 1:单声道模式;0:立体声模式 1:禁止访问 FIFO,发送通道被静音 异步复位接收通道和接收 FIFO 输出通道的模式选择:0:主模式,1:从模式。“I2S 操作模式” 小节总结了一些 I2SRXMODE 与该位的组合 其值为采样周期的一半再减 1 即,WS 64clk period->ws_halfperiod=31 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 20.5.3 发送FIFO寄存器 通过I2STXFIFO寄存器访问发送FIFO,I2STXFIFO的位功能描述见表 20.5。 表 20.5 发送 FIFO 寄存器位描述(I2STXFIFO-0x400A 8008) 复位值 01 0 0 0 1 0x1F NA 位 符号 描述 31:0 I2STXFIFO 8×32 位发送 FIFO 20.5.4 接收FIFO寄存器 I2SRXFIFO寄存器可以访问接收FIFO,I2SRXFIFO的位功能描述见表 20.6。 表 20.6 接收 FIFO 寄存器位描述(I2SRXFIFO-0x400A 800C) 复位值 Level=0 位 符号 描述 复位值 31:0 I2SRXFIFO 8×32 位接收 FIFO Level=0 20.5.5 状态反馈寄存器 I2SSTATE寄存器提供有关I2S接口的状态信息。I2SSTATE寄存器的位描述见表 20.7。 4 广州周立功单片机发展有限公司 第 20 章 表 20.7 状态反馈寄存器位描述(I2SSTATE-0x400A 8010) 位 0 1 2 7:3 12:8 15:13 20:16 31:21 符号 irq dmareq1 dmareq2 Unused rx_level tx_level - 描述 该位反映了出现接收中断或发送中断 该位反映了出现接收或发送 DMA 请求 1 该位反映了出现接收或发送 DMA 请求 2 不使用 反映了接收 FIFO 的当前深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 反映了发送 FIFO 的当前深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 0 0 0 NA 0 NA 20.5.6 DMA配置寄存器 1 I2SDMA1 寄存器控制了DMA请求 1 的操作。I2SDMA1 寄存器位的功能见表 20.8。有关DMA 操作的详细内容请参考“通用DMA控制器”。 表 20.8 DMA 配置寄存器 1 位描述(I2SDMA1-0x400A 8014) 位 0 1 7:2 12:8 15:13 20:16 31:21 符号 rx_dma1_enable tx_dma1_enable rx__depth_dma1 tx__depth_dma1 - 描述 该位为 1 时,使能 DMA1 用于 I2S 接收 该位为 1 时,使能 DMA1 用于 I2S 发送 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 设置触发接收 DMA 请求的 FIFO 深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 设置触发发送 DMA 请求的 FIFO 深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 0 0 NA 0 NA 20.5.7 DMA配置寄存器 2 I2SDMA2 寄存器控制了DMA请求 2 的操作。I2SDMA2 寄存器位的功能见表 20.9。 表 20.9 DMA 配置寄存器 2 位描述(I2SDMA2-0x400A 8018) 位 0 1 7:2 12:8 15:13 20:16 31:21 符号 rx_dma2_enable tx_dma2_enable Unused rx__depth_dma2 tx__depth_dma2 - 描述 该位为 1 时,使能 DMA1 用于 I2S 接收 该位为 1 时,使能 DMA1 用于 I2S 发送 不使用 设置触发接收 DMA2 请求的 FIFO 深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 设置触发发送 DMA2 请求的 FIFO 深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 0 0 NA 0 NA 20.5.8 中断请求控制寄存器 I2SIRQ寄存器控制了I2S中断请求的操作。I2SIRQ寄存器位的功能见表 20.10。 5 广州周立功单片机发展有限公司 第 20 章 表 20.10 中断请求控制寄存器位描述(I2SIRQ-0x400A 801C) 位 0 1 7:2 12:8 15:13 20:16 31:24 符号 rx_Irq_enable tx_Irq_enable Unused rx__depth_Irq tx__depth_Irq - 描述 该位为 1 时,使能 I2S 接收中断 该位为 1 时,使能 I2S 发送中断 不使用 设置产生中断请求的接收 FIFO 深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 设置产生中断请求的发送 FIFO 深度 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 0 0 NA 0 NA 20.5.9 发送时钟速率寄存器 I2S 发送器的速率由 I2STXRATE 寄存器的值决定。所需的 I2STXRATE 的设置取决于所需 的音频采样率,以及使用的数据格式(立体/单声道)和数据大小。 I2STXMCLK=PCLK×(X/Y)/2 注:如果 X=0,则没有时钟产生。 表 20.11 发送时钟速率寄存器位描述(I2STXRATE-0x400A 8020) 位 7:0 15:8 31:16 符号 Y_divider X_divider - 描述 I2S 发送时钟速率的分母。PCLK 除以该值来获取发送 MCLK。8 位分频支 持较大的速率范围。该值为 0 时时钟停止 I2S 发送时钟速率的分子。PCLK 乘以该值来获取 MCLK。8 位分频支持较 大的速率范围。该值为 0 时时钟停止。 注:计算速率时 X/Y 必须除以 2 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 NA 20.5.10 接收时钟速率寄存器 I2S 接收器的速率由 I2SRXRATE 寄存器的值来决定。所需的 I2SRXRATE 设置取决于外围 时钟的速率(PCLK)和所需的 MCLK 的速率(如 256fs)。 I2SRXMCLK=PCLK×(X/Y)/2 注:如果 X=0,则没有时钟产生。 表 20.12 接收时钟速率寄存器位描述(I2SRXRATE-0x400A 8024) 位 7:0 15:8 31:16 符号 Y_divider X_divider Unused 描述 I2S 接收时钟速率的分母。PCLK 除以该值来获取接收 MCLK。8 位分频支 持较大的速率范围。该值为 0 时时钟停止 I2S 接收时钟速率的分子。PCLK 乘以该值来获取接收 MCLK。8 位分频支 持较大的速率范围。该值为 0 时时钟停止 注:计算速率时 X/Y 必须除以 2 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 NA 20.5.11 发送时钟速率寄存器 I2S 发送器的位速率由 I2STXRATE 寄存器的值来决定。该值取决于所需的音频采样率,以 及使用的数据格式(立体/单声道)和数据大小。例如:48KHz 采样率的 16 位数据立体声道需 要的位速率为:48KHz×16×2=1.536MHz。 6 广州周立功单片机发展有限公司 第 20 章 表 20.13 发送时钟速率寄存器位描述(I2STXBITRATE-0x400A 8028) 位 符号 描述 5:0 tx_bitrate I2S 发送位速率。该值加 1 用于分频 TX_MCLK 来产生发送位时钟 31:6 - 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 NA 20.5.12 接收时钟速率寄存器 I2S 接收器的位速率由 I2SRXRATE 寄存器的值来决定。该值取决于所需的音频采样率,以 及使用的数据大小和格式。位速率的计算方法与发送时钟位速率相同。 表 20.14 接收时钟速率寄存器位描述(I2SRXBITRATE-0x400A 802C) 位 符号 描述 5:0 rx_bitrate I2S 接收位速率。该值加 1 用于分频 RX_MCLK 来产生接收位时钟 31:6 - 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 NA 20.5.13 发送模式控制寄存器 发送模式控制寄存器可控制发送时钟源、4 引脚模的使能以及 MCLK 的使用。“I2S 操作 模式”小节对有用的模式组合进行了汇总。 表 20.15 发送模式控制寄存器位描述(I2STXMODE-0x400A 8030) 位 符号 值 描述 选择发送位时钟分频器的时钟源 00 选择 TX 小数速率分频器时钟输出作为时钟源 1:0 TXCLKSEL 01 保留 10 选择 RX_MCLK 信号作为 TX_MCLK 的时钟源 11 保留 2 TX4PIN 选择 4 引脚发送模式。该位为 1 时,使能 4 引脚发送模式 3 TXMCENA TX_MCLK 输出的使能位。0:使能 TX_MCLK 输出; 1:禁止 TX_MCLK 输出 31:4 - 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 0 NA 20.5.14 接收模式控制寄存器 接收模式控制寄存器可控制接收时钟源、4 引脚模的使能以及 MCLK 的使用。“I2S 操作 模式”小节对有用的模式组合进行了汇总。 表 20.16 接收模式控制寄存器位描述(I2SRXMODE-0x400A 8034) 位 符号 值 描述 选择接收位时钟分频器的时钟源 00 选择 RX 小数速率分频器时钟输出作为时钟源 1:0 RXCLKSEL 01 保留 10 选择 TX_MCLK 作为 RX_MCLK 的时钟源 11 保留 2 RX4PIN 选择 4 引脚接收模式。该位为 1 时,使能 4 引脚接收模式 3 RXMCDIR RX_MCLK 输出的使能位。0:使能 RX_MCLK 输出; 1:禁止 RX_MCLK 输出 31:4 - 保留,用户软件不应向保留位写入 1,从保留位读出的值未定义 复位值 0 0 0 NA 7 广州周立功单片机发展有限公司 第 20 章 20.6 I2S的发送和接收接口 I2S 接口可发送和接收 8、16 或 32 位立体声道或单声道音频信息。I2S 接口传输数据时的细 节如下:  当 FIFO 为空时,发送通道将重复发送相同的数据直至有新数据写入 FIFO;  静音时,发送 0;  当禁能单声道时,连续的 2 个数据字分别是左声道和右声道的数据;  数据字长度由配置寄存器中字宽度的值决定。接收通道和发送通道有单独的字宽度值; -0:认为字含有 4 个 8 位的数据字; -1:认为字含有 2 个 16 位的数据字; -3:认为字含有 1 个 32 位的数据字。  当发送 FIFO 数据不足时,发送通道将重复发送最后一个数据直至有新数据可用。这 种情况会在微处理器或 DMA 不能尽快提供新数据时出现。由于在新数据中存在这种 延时,因此需要填充间隙(延时),可通过连续发送最后的采样来实现填充。数据不能 屏蔽,因为这将会在声音上产生明显而不合乎需要的效果;  发送通道和接收通道只处理 32 位对齐的字,较长的数据块必须要进行截取/较短的数 据必须扩展为 32 位长才能发送和接收。 在切换数据宽度或模式时,I2S 必须通过控制寄存器中的复位位进行复位来确保正确的同步 操作。建议同时置位停止位直至有足够的数据被写入发送 FIFO。注意停止时数据输出被屏蔽。 所有访问FIFO的数据为 32 位。图 20.14所示为可能的数据序列。 一个 FIFO 数据采样包含:  1 个 8 或 16 位立体声道模式的 32 位数据,;  1 个 32 位数据,单声道模式;  2 个 32 位数据,第一个为左声道数据、第二个为右声道数据,32 位立体声道模式。 数据在 WS 下降沿后从发送 FIFO 中读出,在 WS 上升沿后被传输到发送时钟域。在 WS 的下一个下降沿,左声道数据将被载入移位寄存器并发送,在 WS 的下一个上升沿,右声道数 据被载入并发送。 接收通道将在 WS 改变后开始接收数据。字选择(WS)变低时,期望接收数据为左声道数 据,WS 为高时,期望接收数据为右声道数据。当位计数器已到达字宽度设置的极限时停止接 收数据。在 WS 的下一次改变时,接收的数据将保存到相应的保存寄存器中。当接受完所有数 据时,它将被写入接收 FIFO 中。 20.7 I2S操作模式 I2S 接口的时钟源和 WS 是可配置的。除了主机和从机模式(可独立配置用于发送器和接收 器)以外,还以选择不同的时钟源,包括在发送器和接收器之间共用时钟和/或 WS。 时钟源和 WS 有多种配置,但是不是每种都有用。接下来会给出一些表和图,它们将对最 有用的配置进行详细描述。 8 广州周立功单片机发展有限公司 第 20 章 I2SDAO[5] 0 0 0 0 1 1 1 I2STXMODE[3:0] 0000 0010 0100 1000 0000 0010 0100 表 20.17 I2S 发送模式 描述 典型的发送主机模式。见图 20.2 I2S 发送功能用作主机 发送时钟源为小数速率分频器 使用的 WS 为内部产生的 TX_WS TX_MCLK 输出使能 发送主机模式享用接收器的参考时钟,见图 20.3 I2S 发送功能用作主机 发送时钟源为 RX_REF 使用的 WS 为内部产生的 TX_WS TX_MCLK 输出使能 4 线发送主机模式共享接收器的位时钟和WS,见图 20.4 I2S 发送功能用作主机 发送时钟源为 RX 的位时钟 使用的 WS 是内部产生的 RX_WS TX_MCLK 输出使能 发送主机模式,TX_MCLK输出,见图 20.2 I2S 发送功能用作主机 发送时钟源为小数速率分频器 使用的 WS 是内部产生的 TX_WS TX_MCLK 输出使能 典型的发送从机模式,见图 20.5 I2S 发送功能作为从机 发送时钟源来自 TX_CLK 引脚 使用的 WS 为 TX_WS 发送从机模式享用接收器的参考时钟,见图 20.6 I2S 发送功能用作从机 发送时钟源为 RX_REF 使用的 WS 为内部产生的 TX_WS 4 线发送从机模式共享接收器的位时钟和WS,见图 20.7 I2S 发送功能用作从机 发送时钟源为 RX 的位时钟 使用的 WS 是内部产生的 RX_WS 图 20.2 典型的发送主机模式(有或没有 MCLK 输出) 9 广州周立功单片机发展有限公司 第 20 章 图 20.3 发送主机模式共用接收器的参考时钟 图 20.4 4 线发送主机模式共用接收器的位时钟和 WS 图 20.5 典型的发送从机模式 图 20.6 发送从机模式共用接收器的参考时钟 图 20.7 4 线发送从机模式共用接收器的位时钟和 WS 10 广州周立功单片机发展有限公司 第 20 章 I2SDAO[5] 0 0 0 0 1 1 1 I2STXMODE[3:0] 0000 0010 0100 1000 0000 0010 0100 表 20.18 I2S 接收模式 描述 典型的接收主机模式。见图 20.8 I2S 接收功能用作主机 接收时钟源为小数速率分频器 使用的 WS 为内部产生的 RX_WS RX_MCLK 输出使能 接收主机模式享用接收器的参考时钟,见图 20.9 I2S 接收功能用作主机 接收时钟源为 TX_REF 使用的 WS 为内部产生的 RX_WS RX_MCLK 输出使能 4 线接收主机模式共享发送器的位时钟和WS,见图 20.10 I2S 接收功能用作主机 接收时钟源为 TX 的位时钟 使用的 WS 是内部产生的 TX_WS RX_MCLK 输出使能 接收主机模式,RX_MCLK输出,见图 20.8 I2S 接收功能用作主机 接收时钟源为小数速率分频器 使用的 WS 是内部产生的 RX_WS RX_MCLK 输出使能 典型的接收从机模式,见图 20.11 I2S 接收功能用作从机 接收时钟源来自 RX_CLK 引脚 使用的 WS 为 RX_WS 接收从机模式享用发送器的参考时钟,见图 20.12 I2S 接收功能用作从机 接收时钟源为 TX_REF 使用的 WS 为内部产生的 RX_WS 4 线接收从机模式共享接收器的位时钟和WS,见图 20.13 I2S 接收功能用作从机 接收时钟源为 TX 的位时钟 使用的 WS 是内部产生的 TX_WS 图 20.8 典型的接收主机模式(有或没有 MCLK 输出) 11 广州周立功单片机发展有限公司 第 20 章 图 20.9 接收主机模式共用接收器的参考时钟 图 20.10 4 线接收主机模式共用接收器的位时钟和 WS 图 20.11 典型的接收从机模式 图 20.12 接收从机模式共用接收器的参考时钟 图 20.13 4 线接收从机模式共用接收器的位时钟和 WS 20.8 FIFO控制器 发送和接收数据的处理都是通过 FIFO 控制器来执行的,FIFO 控制器可产生 2 个 DMA 请 求和 1 个中断请求。控制器包括一组比较器,这些比较器可将 FIFO 的实际深度与设置的深度 相比较。深度比较器的当前状态可在 APB 状态寄存器中看到。 12 广州周立功单片机发展有限公司 第 20 章 表 20.19 FIFO 深度比较的条件 触发深度比较 条件 dmareq_tx_1 tx_depth_dma1>= tx_level dmareq_rx_1 rx_depth_dma1<= rx_level dmareq_tx_2 tx_depth_dma2>= tx_level dmareq_rx_2 rx_depth_dma2<= rx_level irq_tx tx_depth_irq>=tx_level irq_rx rx_depth_irq<=rx_level 当深度检测为真且使能时,系统会发出信号示意。 表 20.20 DMA 和中断请求产生 系统发出信号 irq dmareq[0] dmareq[1] 条件 (irq_rx & rx_irq_enable)|(irq_tx & tx_irq_enable) (dmareq_tx_1 & tx_dma1_enable )|(dmareq_rx_1 & rx_dma1_enable) (dmareq_tx_2 & tx_dma2_enable )|(dmareq_rx_2 & rx_dma2_enable) 表 20.21 I2SSTATE 寄存器中的状态反馈 状态反馈 状态 irq dmareq1 dmareq2 单声道8位数据模式 irq_rx | irq_tx (dmareq_tx_1 | dmareq_rx_1) (dmareq_rx_2 | dmareq_tx_2) 7 N+3 07 N+2 07 N+1 07 N 0 立体声道8位数据模式 7 左+1 07 右+1 07 左 07 右 0 单声道16位数据模式 15 N+1 0 15 N 0 立体声道16位数据模式 15 左 0 15 右 0 单声道32位数据模式 31 N 0 立体声道32位数据模式 31 31 左 右 图 20.14 不同 I2S 模式的 FIFO 0N 0 N+1 13 LPC1700 系列微控制器 第第 2211 章章 定定时时器器 00~~33 用用户户手手册册 RReevv0000..0044 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 网址:http://www.zlgmcu.com 广州周立功单片机发展有限公司 销售与服务网络 广州周立功单片机发展有限公司 地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730972 38730976 38730916 38730917 38730977 传真:(020)38730925 网址:http://www.zlgmcu.com 广州专卖店 地址:广州市天河区新赛格电子城 203-204 室 电话:(020)87578634 87569917 传真:(020)87578842 南京周立功 地址:南京市珠江路 280 号珠江大厦 2006 室 电话:(025)83613221 83613271 83603500 传真:(025)83613271 北京周立功 重庆周立功 地址:北京市海淀区知春路 113 号银网中心 A 座 地址:重庆市石桥铺科园一路二号大西洋国际大厦 1207-1208 室(中发电子市场斜对面) (赛格电子市场)1611 室 电话:(010)62536178 62536179 82628073 电话:(023)68796438 68796439 传真:(010)82614433 传真:(023)68796439 杭州周立功 地址:杭州市天目山路 217 号江南电子大厦 502 室 电话:(0571)89719480 89719481 89719482 89719483 89719448 89719485 传真:(0571) 89719494 成都周立功 地址:成都市一环路南二段 1 号数码同人港 401 室(磨 子桥立交西北角) 电话:(028) 85439836 85437446 传真:(028) 85437896 深圳周立功 武汉周立功 地址:深圳市深南中路 2070 号电子科技大厦 C 座 4 地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室(华 楼D室 中电脑数码市场) 电话:(0755)83781788(5 线) 电话:(027)87168497 87168297 87168397 传真:(0755)83793285 传真:(027)87163755 上海周立功 地址:上海市北京东路 668 号科技京城东座 7E 室 电话:(021)53083452 53083453 53083496 传真:(021)53083491 西安办事处 地址:西安市长安北路 54 号太平洋大厦 1201 室 电话:(029)87881296 83063000 87881295 传真:(029)87880865 广州周立功单片机发展有限公司 第 21 章 目录 第 21 章 定时器 0/1/2/3···································································································· 1 21.1 基本配置 ························································································································1 21.2 特性 ································································································································1 21.3 应用 ································································································································1 21.4 概述 ································································································································1 21.5 引脚描述 ························································································································2 21.6 寄存器描述 ····················································································································2 21.6.1 中断寄存器·············································································································4 21.6.2 定时器控制寄存器 ·································································································4 21.6.3 计数器控制寄存器 ·································································································4 21.6.4 定时器计数器寄存器 ·····························································································5 21.6.5 预分频寄存器·········································································································5 21.6.6 预分频计数器寄存器 ·····························································································5 21.6.7 匹配寄存器(MR0-MR3)····················································································5 21.6.8 匹配控制寄存器·····································································································6 21.6.9 捕获寄存器(CR0-CR1) ·····················································································6 21.6.10 捕获控制寄存器·····································································································6 21.6.11 外部匹配寄存器·····································································································7 21.6.12 DMA操作 ···············································································································8 21.7 定时器操作举例·············································································································8 21.8 结构 ································································································································9 I 广州周立功单片机发展有限公司 第 21 章 第21章 定时器 0/1/2/3 21.1 基本配置 使用下列寄存器来配置定时器 0/1/2/3: 1)功率:在寄存器 PCONP 中置位 PCTIM0/1/2/3。 注:复位后,定时器 0/1 使能(PCTIM0/1=1),定时器 2/3 禁能(PCTIM2/3=0)。 2)外设时钟:在寄存器 PCLK_SEL0 中选择 PCLK_TIMER0/1;在寄存器 PCLK_SEL1 中 选择 PCLK_TIMER2/3。 3)引脚:通过寄存器 PINSEL 来选择定时器引脚。通过寄存器 PINMODE0 来选择定时器 引脚的模式(请参考“引脚连接模块”章节的“寄存器描述”小节)。 4)中断:有关匹配和捕获事件的内容请参考寄存器T0/1/2/3MCR(表 21.6)和T0/1/2/3/CCR (表 21.7)。利用相应的中断置位使能寄存器使能NVIC中的中断。 5)DMA:在最多 2 种匹配情况下可产生定时的 DMA 请求。 21.2 特性 注:4 个定时器/计数器,除了外设基址之外完全相同。4 个定时器最少有 2 个捕获输入和 2 个匹配输出, 并且有多个引脚可以选择。定时器 2 引出了全部 4 个匹配输出。  32 位的定时器/计数器,带有一个可编程的 32 位预分频器;  计数器或定时器操作;  每个定时器包含 2 个 32 位的捕获通道,当输入信号变化时捕捉定时器的瞬时值。也可 以选择产生中断;  4 个 32 位匹配寄存器,允许执行以下操作: -匹配时连续工作,在匹配时可选择产生中断; -在匹配时停止定时器运行,可选择产生中断; -在匹配时复位定时器,可选择产生中断;  有 4 个与匹配寄存器相对应的外部输出,这些输出具有以下功能: -匹配时设为低电平; -匹配时设为高电平; -匹配时翻转电平; -匹配时不执行任何操作。 21.3 应用  时间间隔定时器,用来计数内部事件;  脉宽解调器(经由捕获输入);  自由运行的定时器。 21.4 概述 定时器用来对外设时钟(PCLK)进行计数,而计数器对外部脉冲信号进行计数,可以选 择在规定的时间处产生中断或执行其它操作,这都由 4 个匹配寄存器的值决定。它也包含 4 个 捕获输入,用来在输入信号变化时捕捉定时器的瞬时值,也可以选择产生中断。 1 广州周立功单片机发展有限公司 第 21 章 21.5 引脚描述 表 21.1对每个定时器/计数器的相关引脚进行了简要小结。 表 21.1 定时器/计数器引脚描述 引脚 类型 描述 CAP0[1:0] CAP1[1:0] CAP2[1:0] CAP3[1:0] 输入 捕获信号-当捕获引脚出现特定的捕获事件时,可以将当前的计数值装入捕获寄存 器中,也可以选择产生一个中断。定时器/计数器的捕获引脚有多个。当有多个引脚 被同时选择用作同一个通道的捕获输入时,端口编号最小的引脚被使用 定时器/计数器模块可以选择一个捕获信号作为时钟源(而不是用 PCLK 的衍生时 钟)。详情请参考“计数控制寄存器”小节 MAT0[1:0] MAT1[1:0] MAT2[3:0] MAT3[1:0] 输出 外部匹配输出-当匹配寄存器(MR3:0)的值与计数值(TC)相等时,相应的输出 可以翻转、变低、变高或不执行任何操作。外部匹配寄存器(EMR)控制着输出的 功能。并行的多个引脚可以被选择用作匹配输出功能 多个 CAP 和 MAT 引脚 软件可以在引脚选择寄存器中选择多个引脚用作 CAP 或 MAT 功能,详情请参见“引脚连 接模块”章节的“寄存器描述”小节。当有多个引脚用作匹配输出时,引脚都统一操作。当有 多个引脚用作捕获输入时,使用序号最低的引脚。需要注意的是在不使用器件引脚的情况下匹 配功能也可以在内部使用。 21.6 寄存器描述 每个定时器/计数器包含的寄存器如表 21.2所示(“复位值”只是指使用位的数据;不包括 保留位的内容)。更多详情将在后面给出。 表 21.2 定时器/计数器 0-3 的寄存器映射 通用寄存器 名称 描述 访问 中断寄存器。可向 IR 写入相应的值来清除中 IR 断。也可读 IR 来确定 8 个中断源中哪个中断 R/W 源被挂起 复位值[1] 0 定时器控制寄存器。TCR 用来控制定时器计 TCR 数器功能。定时器计数器可以通过 TCR 来禁 R/W 0 能或复位 预分频寄存器。当预分频计数器的值与这个 PR 寄存器的值相等时,下个时钟 TC 加 1,PC R/W 0 清零 保存定时器计数器的计数值。32 位的 TC 每 TC 隔(PR+1)个 PCLK 周期递增一次。TC 通 R/W 0 过 TCR 来控制 TIMERn 寄存器的 名称&地址 T0IR-0x4000 4000 T1IR-0x4000 8000 T2IR-0x4009 0000 T3IR-0x4009 4000 T0TCR-0x4000 4004 T1TCR-0x4000 8004 T2TCR-0x4009 0004 T3TCR-0x4009 4004 T0PR-0x4000 400C T1PR-0x4000 800C T2PR-0x4009 000C T3PR-0x4009 400C T0TC-0x4000 4008 T1TC-0x4000 8008 T2TC-0x4009 0008 T3TC-0x4009 4008 2 广州周立功单片机发展有限公司 第 21 章 通用寄存器 名称 PC 描述 预分频计数器。32 位的 PC 是一个计数器,它 会增加到与 PR 中存放的值相等。当达到了 PR 的值时,TC 加 1,PC 清零。可以通过总线接 口来观察和控制 PC 访问 R/W MCR 匹配控制寄存器。MCR 用来控制在匹配出现时 R/W 是否产生中断和是否复位 TC MR0 匹配寄存器 0。MR0 可通过 MCR 设定为在匹 R/W 配时复位 TC,停止 TC 和 PC 和/或产生中断 MR1 匹配寄存器 1。请参考 MR0 的描述 R/W MR2 匹配寄存器 2。请参考 MR0 的描述 R/W MR3 匹配寄存器 3。请参考 MR0 的描述 R/W CCR 捕获控制寄存器。CCR 控制捕获时捕获输入边 R/W 沿方式,以及在发生捕获时是否产生中断 捕获寄存器 0。当在 CAP0.0 或 CAP1.0 输入上 CR0 RO 产生捕获事件时,CR0 装载 TC 的值 CR1 捕获寄存器 1。请参考 CR0 的描述 RO 复位值[1] 0 0 0 0 0 0 0 0 0 续上表 TIMERn 寄存器的 名称&地址 T0PC-0x4000 4010 T1PC-0x4000 8010 T2PC-0x4009 0010 T3PC-0x4009 4010 T0MCR-0x4000 4014 T1MCR-0x4000 8014 T2MCR-0x4009 0014 T3MCR-0x4009 4014 T0MR0-0x4000 4018 T1MR0-0x4000 8018 T2MR0-0x4009 0018 T3MR0-0x4009 4018 T0MR1-0x4000 401C T1MR1-0x4000 801C T2MR1-0x4009 001C T3MR1-0x4009 401C T0MR2-0x4000 4020 T1MR2-0x4000 8020 T2MR2-0x4009 0020 T3MR2-0x4009 4020 T0MR3-0x4000 4024 T1MR3-0x4000 8024 T2MR3-0x4009 0024 T3MR3-0x4009 4024 T0CCR-0x4000 4028 T1CCR-0x4000 8028 T2CCR-0x4009 0028 T3CCR-0x4009 4028 T0CR0-0x4000 402C T1CR0-0x4000 802C T2CR0-0x4009 002C T3CR0-0x4009 402C T0CR1-0x4000 4030 T1CR1-0x4000 8030 T2CR1-0x4009 0030 T3CR1-0x4009 4030 3 广州周立功单片机发展有限公司 第 21 章 通用寄存 器名称 描述 访问 复位值[1] 外部匹配寄存器。EMR 控制外部匹配引脚 EMR R/W 0 MATn.0-3(MAT0.0-3 和 MAT1.0-3) 计数控制寄存器。CTCR 选择在定时器模式还 CTCR 是计数器模式工作,在计数器模式中选择计数 R/W 0 的信号和边沿 [1] 复位值只反映使用位的值,不包括保留位的内容。 续上表 TIMERn 寄存器的 名称&地址 T0EMR-0x4000 403C T1EMR-0x4000 803C T2EMR-0x4009 003C T3EMR-0x4009 403C T0CTCR-0x4000 4070 T1CTCR-0x4000 8070 T2CTCR-0x4009 0070 T3CTCR-0x4009 4070 21.6.1 中断寄存器 中断寄存器包含 4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对 应位会置位,否则为 0。向对应的 IR 位写入 1 会复位中断。写入 0 无效。清除定时器匹配中断 也会清除对应的 DMA 请求。 表 21.3 中断寄存器位描述(T[0/1/2/3]IR-0x4000 4000,0x4000 8000,0x4009 0000,0x4009 4000) 位 符号 0 MR0 中断 1 MR1 中断 2 MR2 中断 3 MR3 中断 4 CR0 中断 5 CR1 中断 7:6 - 描述 匹配通道 0 的中断标志 匹配通道 1 的中断标志 匹配通道 2 的中断标志 匹配通道 3 的中断标志 捕获通道 0 的中断标志 捕获通道 1 的中断标志 保留 复位值 0 0 0 0 0 0 - 21.6.2 定时器控制寄存器 定时器控制寄存器(TCR)用来控制定时器/计数器的操作。 表 21.4 定时器控制寄存器位描述(T[0/1/2/3]CR-0x4000 4004,0x4000 8004,0x4009 0004,0x4009 4004) 位 符号 描述 复位值 为 1 时,定时器计数器和预分频计数器使能计数。为 0 时,计数器被禁 0 计数器使能 0 止 为 1 时,定时器计数器和预分频计数器在 PCLK 的下一个上升沿同步复 1 计数器复位 0 位。计数器在 TCR[1]恢复为 0 之前保持复位状态 7:2 - 保留,用户软件不应该向保留位写 1。从保留位读出的值未定义 NA 21.6.3 计数器控制寄存器 计数控制寄存器(CTCR)用来在定时器模式和计数器模式之间进行选择,在计数器模式 中选择计数的引脚和边沿。 当选择计数器模式作为工作模式时,在每个 PCLK 时钟的上升沿对 CAP 输入(由 CTCR 的位 3:2 来选择)进行采样。在对这个 CAP 输入的连续两次采样值进行比较之后,可以识别出 4 广州周立功单片机发展有限公司 第 21 章 下面其中一种事件:上升沿、下降沿、上升/下降沿或所选 CAP 输入的电平不变。如果识别出 的事件与 CTCR 寄存器[1:0]选择的一个事件相对应,定时器计数器寄存器的值将增加 1。 当计数器计数外部脉冲时,处理的效率会收到一些限制。由于识别 CAP 所选输入的一个边 沿需要使用 PCLK 时钟 2 个连续的上升沿,因此 CAP 输入的频率不能大于 PCLK 频率的二分 之一。所以,在这种情况下同一个 CAP 引脚的高/低电平持续时间不能小于 1/(2PCLK)。 表 21.5 计数控制寄存器位描述(T[0/1/2/3]CTCR-0x4000 4070,0x4000 8070,0x4009 0070,0x4009 4070) 位 符号 值 描述 复位值 这个字段选择在哪个 PCLK 上升沿定时器的预分频计数值(PC)加 1、PC 清零以及定时器计数值(TC)加 1 计数器/ 00 定时器模式:当预分频计数器与预分频寄存器的值匹配时 TC 增加 1:0 定时器 预分频计数器在每个 PCLK 的上升沿增加 00 模式 01 计数器模式:TC 在位 3:2 选择的 CAP 输入的上升沿出现时增加 10 计数器模式:TC 在位 3:2 选择的 CAP 输入的下降沿出现时增加 11