ARM Cortex嵌入式系统开发教程 第3章.ppt

上传人:牧羊曲112 文档编号:5415623 上传时间:2023-07-05 格式:PPT 页数:241 大小:1.14MB
返回 下载 相关 举报
ARM Cortex嵌入式系统开发教程 第3章.ppt_第1页
第1页 / 共241页
ARM Cortex嵌入式系统开发教程 第3章.ppt_第2页
第2页 / 共241页
ARM Cortex嵌入式系统开发教程 第3章.ppt_第3页
第3页 / 共241页
ARM Cortex嵌入式系统开发教程 第3章.ppt_第4页
第4页 / 共241页
ARM Cortex嵌入式系统开发教程 第3章.ppt_第5页
第5页 / 共241页
点击查看更多>>
资源描述

《ARM Cortex嵌入式系统开发教程 第3章.ppt》由会员分享,可在线阅读,更多相关《ARM Cortex嵌入式系统开发教程 第3章.ppt(241页珍藏版)》请在三一办公上搜索。

1、在线教务辅导网:http:/,教材其余课件及动画素材请查阅在线教务辅导网,QQ:349134187 或者直接输入下面地址:,第3章 LPC1700系列处理器,3.1 LPC1700系列处理器简介3.2 处理器引脚配置3.3 存储器管理3.4 时钟和功率控制3.5 系统控制模块3.6 LPC1700系统例程,LPC1700系列Cortex-M3微控制器用于处理要求高度集成和低功耗的嵌入式应用,常用的芯片型号有LPC1764、LPC1766、LPC1768和LPC1769等。LPC1700系列Cortex-M3微控制器的操作频率可达100 MHz,其外设组件包含高达512 KB的Flash存储器、

2、64 KB的数据存储器、以太网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引脚。,3.1.1 LPC1700系列处理器特性LPC1700系列处理器包括LPC1751LPC1769等多款芯片,拥有丰富的片上资源和外设接口,这一系列芯片的共同特性有:(1)ARM Cortex-M3微控制器,可在高至100 MHz的

3、频率下运行,并包含一个支持8个区的存储器保护单元(MPU)。(2)ARM Cortex-M3内置了嵌套的向量中断控制器(NVIC)。,3.1 LPC1700系列处理器简介,(3)具有在系统编程(ISP)和在应用编程(IAP)功能的512 KB片上Flash程序存储器。把增强型的Flash存储加速器和Flash存储器在CPU本地代码/数据总线上的位置进行整合,则Flash可提供高性能的代码。(4)64 KB片内SRAM,包括32 KB SRAM可供高性能CPU通过本地代码或数据总线访问及2个16 KB SRAM模块,带独立访问路径,可进行更高吞量的操作。这些SRAM模块可用于以太网、USB、DM

4、A存储器以及通用指令和数据存储。,(5)多层AHB矩阵上具有8通道的通用DMA控制器,它可结合SSP、I2S、UART、模数和数模转换器外设、定时器匹配信号和GPIO使用,并可用于存储器到存储器的传输。(6)多层AHB矩阵内部连接,为每个AHB主机提供独立的总线。AHB主机包括CPU、通用DMA控制器、以太网MAC和USB接口。这个内部连接特性提供无仲裁延迟的通信,除非2个主机尝试同时访问同一个从机。,(7)分离的APB总线允许在CPU和DMA之间提供更多的带宽和更少的延迟。CPU无需等待APB写操作完成。(8)串行接口方面的共同特征包括:以太网MAC带RMII接口和相关的DMA控制器。USB

5、 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控制器一起使用。3个增强型的I2C总线接口,其中1个具有开漏输出功能,支持整个I2C规范和数据速率为1 Mb

6、/s的快速模式,另外2个具有标准的端口引脚。增强型特性包括多个地址识别功能和监控模式。,I2S(Inter-IC Sound)接口,用于数字音频输入或输出,具有小数速率控制功能。I2S接口可与GPDMA一起使用。I2S接口支持3-线的数据发送和接收或4-线的组合发送和接收连接,以及主机时钟输入/输出。(9)其它外设方面的共同特点包括:70个(100个引脚封装)通用I/O(GPIO)引脚,带可配置的上拉/下拉电阻。AHB总线上的所有GPIO可进行快速访问,支持新的、可配置的开漏操作模式;GPIO位于存储器中,它支持Cortex-M3位带宽并且由通用DMA控制器使用。,12位模数转换器(ADC),

7、可在8个引脚间实现多路输入,转换速率高达1 MHz,并具有多个结果寄存器。12位ADC可与GPDMA控制器一起使用。10位数模转换器(DAC),具有专用的转换定时器,并支持DMA操作。4个通用定时/计数器,共有8个捕获输入和10个比较输出。每个定时器模块都具有一个外部计数输入。可选择特定的定时器事件来产生DMA请求。1个电机控制PWM,支持三相的电机控制。正交编码器接口,可监控一个外部正交编码器。,1个标准的PWM/定时器模块,带外部计数输入。实时时钟(RTC)带有独立的电源域。RTC通过专用的RTC振荡器来驱动。RTC模块包括20字节电池供电的备用寄存器,当芯片的其它部分掉电时允许系统状态存

8、储在该寄存器中。电池电源可由标准的3 V锂电池供电。当电池电压掉至2.1 V的低电压时,RTC仍将继续工作。RTC中断可将CPU从任何低功率模式中唤醒。看门狗定时器(WDT),该定时器的时钟源可在内部RC振荡器、RTC振荡器或APB时钟三者间进行选择。,支持ARM Cortex-M3系统节拍定时器,包括外部时钟输入选项。重复性的中断定时器提供可编程和重复定时的中断。(10)标准JTAG测试/调试接口以及串行线调试和串行线跟踪端口选项。(11)仿真跟踪模块支持实时跟踪。(12)4个低功率模式:睡眠、深度睡眠、掉电、深度掉电,可实现不同级别的低功耗和节电模式。(13)4个外部中断输入,可配置为边沿

9、/电平触发。PORT0和PORT2上的所有引脚都可用作边沿触发的中断源。,(14)不可屏蔽中断(NMI)输入。(15)时钟输出功能,可反映主振荡器时钟、IRC时钟、RTC时钟、CPU时钟或USB时钟的输出状态。(16)当处于掉电模式时,可通过中断(包括外部中断、RTC中断、USB活动中断、以太网唤醒中断、CAN总线活动中断、PORT0/2引脚中断和NMI)将处理器从掉电模式中唤醒。(17)每个外设都自带时钟分频器,以进一步节省功耗。(18)带掉电检测功能,可对掉电中断和强制复位分别设置阈值。,(19)片内有上电复位电路,降低了成本,节省了系统空间。(20)片内晶振工作频率为1 MHz24 MH

10、z。(21)4 MHz内部RC振荡器可在1%的精度内调整,可选择用作系统时钟。(22)通过片内PLL,没有高频晶振,CPU也可以最高频率运转。用户可从主振荡器、内部RC振荡器或RTC振荡器三者中选择一个作为PLL时钟源。(23)第二个专用的PLL可用于USB接口,以允许增加主PLL设置的灵活性。,(24)可采用100脚和80脚LQFP封装(14 mm 14 mm 1.4 mm)。,表3.1 LPC1700系列芯片的主要特性,在LPC1700系列芯片中,大多数特性是完全相同的。所以在后面的章节中,本书一律采用LPC1768芯片为例进行讲解,请读者在实际工作中注意具体芯片的差别。,3.1.2 LP

11、C1700系列处理器结构ARM Cortex-M3包含三条AHB-Lite总线,即一条系统总线以及I-code和D-code总线,后二者的速率较快,且与TCM接口的用法类似:一条总线专用于指令取指(I-code),另一条总线用于数据访问(D-code)。这两条内核总线的用法允许同时执行操作,即使同时要对不同的设备目标进行操作。LPC1700系列Cortex-M3微控制器使用多层AHB矩阵来连接上Cortex-M3总线,并以灵活的方式将其它总线主机连接到外设,允许矩阵的不同从机端口上的外设可以同时被不同的总线主机访问,从而能获取到最优化的性能。,APB外设使用多层AHB矩阵的独立从机端口通过两条

12、APB总线连接到CPU。这减少了CPU和DMA控制器之间的争用,可实现更好的性能。APB总线桥配置为缓冲区写操作,使得CPU或DMA控制器无需等待APB写操作结束。AHB总线和APB总线都是ARM公司推出的AMBA片上总线规范的一部分。AHB(Advanced High performance Bus)系统总线主要用于高性能模块(如CPU、DMA和DSP等)之间的连接,一般用于片内高性能、高速度的外设,如外部存储器、USB接口、DMA控制器、以太网控制器、LCD液晶屏控制器以及高速GPIO控制器等。,LPC1700的外设功能模块都连接到APB(Advanced Peripheral Bus)总

13、线。APB外围总线主要用于低带宽的周边外设之间的连接,如UART、I2C、SPI、I2S、A/D、D/A、CAN等。APB总线与AHB总线之间通过AHB到APB的桥相连。片内外设与器件引脚的连接由引脚连接模块控制。软件可以通过控制该模块让引脚与特定的片内外设相连接。LPC1700的结构框图如图3.1所示。,图3.1 LPC1700的结构框图,3.2.1 引脚配置LPC176x系列处理器共有100个引脚,一般提供LQFP引脚封装形式。LPC176xFBD 100处理器引脚封装图如图3.2所示。,3.2 处理器引脚配置,图3.2 LPC176xFBD100处理器引脚封装图,LQFP指封装本体厚度为

14、1.4 mm的薄型QFP(四侧引脚扁平封装Quad Flat Package),它是一种表面贴装型封装,引脚从四个侧面引出并呈L型,每个侧面有25个引脚,引脚号分别为125、2650、5175、76100。从功能上讲,LPC176x将引脚分为几组32位的I/O口来进行管理,它们分别是P0口、P1口、P2口、P3口、P4口,以及电源、复位、晶振和其它引脚几部分。采用I/O引脚分组的方式主要是为了与以前的LPC系列芯片保持兼容。表示某一具体的引脚,例如P/0口的第0号脚就可以采用P00或P0.0的方式来表示。,需要注意的是,5个I/O口分组,每个分组32个引脚,共160个引脚,大大超过了LPC17

15、6x的100个引脚数。因此在实际使用中,每个分组都有一些引脚是不能使用的,这点需要引起重视。下面对这几个部分分别进行介绍。(1)P0口。P0口是一个32位的双向多功能I/O口,每位的方向可单独控制,且每位的功能取决于引脚连接模块的引脚功能选择。P0口的引脚12、13、14和31不可用。LPC176x的P0口引脚如表3.2所示。,表3.2 LPC176x的P0口引脚,续表一,续表二,续表三,(2)P1口。P1口也是一个32位的双向多功能I/O口,每位的方向可单独控制,且每位的功能取决于引脚连接模块的引脚功能选择。P1口引脚的P1.2、P1.3、P1.5、P1.6、P1.7、P1.11、P1.12

16、和P1.13不可用。LPC176x的P1口引脚如表3.3所示。,表3.3 LPC176x的P1口引脚描述,续表一,续表二,(3)P2口。P2口也是一个32位的双向多功能I/O口,每位的方向可单独控制,且每位的功能取决于引脚连接模块的引脚功能选择。P2口的引脚P2.14P2.31不可用。LPC176x的P2口引脚如表3.4所示。,表3.4 LPC176x的P2口引脚描述,续表,(4)P3口。P3口也是一个32位的双向多功能I/O口,每位的方向可单独控制,且每位的功能取决于引脚连接模块的引脚功能选择。P3口的引脚P3.0P3.24、P3.27P3.31不可用。LPC176x的P3口引脚如表3.5所

17、示。,表3.5 LPC176x的P3口引脚描述,(5)P4口。P4口也是一个32位的双向多功能I/O口,每位的方向可单独控制,且每位的功能取决于引脚连接模块的引脚功能选择。P4口的引脚P4.0P4.27、P4.30和P4.31不可用。LPC176x的P4口引脚如表3.6所示。,表3.6 LPC176x的P4口引脚描述,(6)电源、复位、晶振及其它引脚的描述如表3.7所示。,表3.7 LPC1700的其它引脚描述,续表,3.2.2 引脚连接模块从表3.1表3.6可以看到,LPC1700系列芯片的绝大部分引脚是复用的,每根引脚都有可能用于不同的外设功能。引脚具体用于什么外设功能是由引脚连接模块进行

18、配置来实现的。当引脚选择了一个功能时,则其它功能无效。在使用外设时,应当在激活外设以及使能任何相关的中断之前,将外设连接到相应的引脚上。否则,即使使用引脚连接模块激活外设,此激活也是无效的。引脚连接模块共有21个寄存器,包括11个引脚功能选择寄存器和10个引脚模式寄存器。,1引脚功能选择寄存器(PINSEL0PINSEL10)引脚功能选择寄存器用于控制每个引脚的功能,每个寄存器32位,每两个位用于控制1个引脚功能选择。以PINSEL0寄存器为例,寄存器的1:0位用于控制P00引脚,3:2位用于控制P01引脚,31:30位用于控制P015引脚。而PINSEL1寄存器的1:0位用于控制P016引脚

19、,3:2位用于控制P017引脚,31:30位用于控制P031引脚。其余依次类推。PINSEL0PINSEL9寄存器,每两个寄存器用于一个端口组:,PINSEL0寄存器用于P0口的15:0引脚,PINSEL1寄存器用于P0口的31:30引脚;PINSEL2寄存器用于P1口的15:0 引脚,PINSEL3寄存器用于P1口的31:30引脚;PINSEL4寄存器用于P2口的15:0引脚,PINSEL5寄存器用于P2口的31:30引脚;PINSEL6寄存器用于P3口的15:0引脚,PINSEL7寄存器用于P3口的31:30引脚;PINSEL8寄存器用于P4口的15:0引脚,PINSEL9寄存器用于P4口

20、的31:30引脚。每一对比特设置引脚功能的定义如表3.8所示。,表3.8 引脚功能选择寄存器位,每个引脚默认为GPIO口,通过设置PINSEL的值来定义其引脚功能。以P00脚为例,当PINSEL0寄存器的1:0位为00时,引脚功能为GPIO口;为01时,引脚功能为CAN1接收器输入;为10时,引脚功能为UART3发送输出端;为11时,引脚功能为I2C1数据输入/输出。,表格中的引脚功能按PINSEL值排列。某些引脚只有两种功能,此时只使用PINSEL值00和01,值10和11保留。PINSEL10寄存器为TPIU接口引脚控制寄存器。该寄存器只使用了一个位3,用于控制P2.2P2.6的跟踪功能。

21、该位为0时TPIU接口被禁能,为1时TPIU接口被使能。TPIU信号在对它们进行控制的引脚上可用,不管PINSEL4的内容如何。引脚功能被选择为GPIO时,引脚的方向由GPIO方向寄存器IODIR控制。对于其它功能,引脚的方向是由引脚功能控制的。,需要注意的是:由于LPC1700系列的分组引脚中有多个引脚块并未使用,所以寄存器PINSEL5、PINSEL6、PINSEL8并未启用,所有位均为保留位。其余的未启用引脚对应的PINSEL控制位也均保留。,2引脚模式寄存器(PINMODE0PINMODE9)引脚模式寄存器PINMODE为所有的GPIO端口控制片内上拉/下拉电阻特性。当使用片内上拉或下

22、接电阻时,若引脚信号不确定,使用上拉时为高电平;而使用下拉时为低电平。除了用于I2C0接口的I2C引脚和USB引脚,不管该引脚选择用于何种功能,都可以为每一个端口引脚选择片内上拉/下拉电阻。使用三个位来控制端口引脚的模式,其中两个位于PINMODE寄存器中,另一个位于PINMODE_OD寄存器中。在PINSEL寄存器中未使用的引脚看做保留位。与PINSEL寄存器一样,PINMODE寄存器每两个位控制1个引脚。每两个寄存器控制一个端口组。,表3.9 引脚模式寄存器位,当引脚处于逻辑高电平时,中继模式使能上拉电阻;当引脚处于逻辑低电平时,使能下拉电阻。当引脚配置为输入且不是通过外部驱动时,引脚将保

23、持上一个已知状态。PINMODE_OD寄存器控制端口的开漏模式。当引脚被配置为输出且值为0时,开漏模式会正常地将引脚电平拉低。但是,如果输出引脚值为1,则引脚的输出驱动关闭,等同于改变了引脚的方向。这样的组合就模拟了一个开漏输出。开漏引脚模式选择寄存器取值如表3.10所示。,表3.10 开漏引脚模式选择寄存器位,注意:引脚选择模式不能用于引脚P0.27P0.30。引脚P0.27和P0.28为专用的I2C开漏引脚,没有上拉/下拉。引脚P0.29、P0.30为USB特定的引脚,不能配置为上拉或下拉电阻控制。引脚P0.29、P0.30还必须具有相同的方向,因为它们是作为USB功能的单元进行操作的。,

24、表3.11 引脚控制模块的寄存器总表,3.2.3 引脚连接模块的使用举例LPC1700系列芯片的外设功能在使用前必须先设置其引脚功能。引脚功能是通过对引脚连接模块编程来实现的。例3.1 使用串口UART0完成本例。串口UART0只使用TXD0和RXD0两根引脚来进行数据的串行发送和接收,使用时需将对应的两根引脚P02和P03设置成TXD0和RXD0功能。查表3.1可知,两根引脚的对应PINSEL值均为01,因此写入PINSEL0寄存器的值为0 x00000050。相应程序行为PINSEL0=0 x00000050;或,PINSEL0=0 x054;注意,由于PINSEL是可读写的寄存器,上述写

25、法会使其它引脚的功能回到初始化默认配置。为了不影响其它引脚的功能配置,实用中更好的办法是:先读取寄存器值,然后进行逻辑与和逻辑或操作,再回写到寄存器。PINSEL0=(PINSEL0 其余的引脚外设功能均可以采用类似方法进行操作。例3.2 启动代码中的相关部分。启动代码负责对芯片复位后的硬件功能进行初始化。芯片复位时,各PINSEL寄存器会自动设置为默认值,所以复位后芯片引脚的功能是确定的。,如果启动以后,硬件系统各外设功能使用情况比较固定,可以将对应的引脚功能设置写入启动代码以加快启动速度。否则,可以在启动时将所有引脚都配置成GPIO端口,具体使用某部分外设时再对相关引脚进行初始化。相应的程

26、序行为PINSEL0=0 x00000000;PINSEL1=0 x00000000;PINSEL2=0 x00000000;PINSEL3=0 x00000000;PINSEL4=0 x00000000;,PINSEL5=0 x00000000;PINSEL6=0 x00000000;PINSEL7=0 x00000000;PINSEL8=0 x00000000;PINSEL9=0 x00000000;PINSEL10=0 x00000000;,LPC1700系列芯片集成了512 KB的片内Flash存储器和64 KB的静态SRAM,其中Flash存储器可以用作代码和数据的固态存储。对Fla

27、sh存储器的编程可以通过以下方法来实现:通过串口UART0进行的在系统编程(ISP),通过调用嵌入片内的固化代码进行的在应用编程(IAP)以及通过内置的JTAG接口编程。,3.3 存储器管理,SRAM支持8位、16位和32位访问。需要注意的是,SRAM控制器包含一个回写缓冲区,它用于防止CPU在连续的写操作时停止运行。回写缓冲区总是保存着软件发送到SRAM的最后1字节。数据只有在软件执行另外一次写操作时被写入SRAM。如果发生芯片复位,实际的SRAM内容将不会反映最近一次的写请求。任何在复位后检查SRAM内容的程序都必须注意这一点。LPC1700 系列Cortex-M3微控制器含有一个4 GB

28、的地址空间,表3.12所示为LPC1700系列Cortex-M3微控制器的存储器分布。,表3.12 LPC1700系列芯片的存储器空间分布,图3.3 LPC1700系统存储器映射,在LPC1700系列芯片的外设空间中,AHB外设区域为2 MB,可分配多达128个外设。APB外设区域为1 MB,可分配多达64个外设。每个外设空间大小都为16 KB,这样可简化每个外设的地址译码。此外,所有外设寄存器不管规格大小,都按照字地址进行分配(32位边界)。这样就不再需要使用字节定位映射的硬件来进行小边界的字节(8位)或半字(16位)访问。字和半字寄存器都是一次性访问的。例如,不能对一个字寄存器的最高字节执

29、行单独的读或写操作。,片内外设中,AHB总线属于高速外设,主要使用的有以太网、DMA和USB设备。其余普通外设使用APB总线,LPC1700将APB设备分为了APB0和APB1两组,两个组的外设空间分配见表3.13和表3.14。,表3.13 APB0外设存储器映射,在对LPC1700系列芯片编程时,注意不要对一个保留地址或未使用区域的地址进行寻址,否则LPC1700将产生一个数据中止异常。另外,对AHB或APB外设地址执行任何指令取指都会产生预取指中止异常。,表3.14 APB1外设存储器映射,3.4.1 晶体振荡器LPC1700含有3个独立的晶体振荡器:内部RC晶振、主晶振和RTC晶振。每个

30、晶振针对不同应用需求有多种使用方法。,3.4 时钟和功率控制,复位后,LPC1700系列处理器使用内部RC晶振提供时钟进行操作,直到使用软件进行切换为止。这使得系统可以不依赖于外部时钟进行操作,而且使引导加载程序可以在一个确定的频率下进行操作。当Boot ROM转向用户程序之前,可以激活主晶振从而进入用户代码。,1内部晶体振荡器(IRC,Internal RC Oscillator)IRC可以用作看门狗定时器的时钟源,也可以作为时钟,驱动PLL锁相环提供给CPU。IRC的精度达不到USB接口的时间基准精度要求(USB接口需要一个更精确的时间基准以遵循USB规范)。如果CAN波特率高于100 k

31、b/s,则IRC不能应用于CAN1/2模块。通常的IRC频率是4 MHz。在开机或芯片复位时,LPC1700使用IRC作为时钟源,之后可以使用软件转为使用其它时钟源。,2主晶振(Main Oscillator)主晶振可用于为CPU提供时钟,其频率范围为1 MHz24 MHz。这个频率可以通过主PLL锁相环(PLL0)倍频为更高的频率成为CPU的主频,最高可以达到CPU操作频率的最大值。通常把主晶振输出的时钟称为OSCCLK,PLL0输入引脚上的时钟称为PLLCLKIN,ARM Cortex-M3处理器内核时钟频率称为CCLK。当使用主晶振提供时钟而不激活PLL时,这三个值是相等的。,图3.4

32、振荡器模式,由于芯片复位时使用IRC晶振,主晶振由软件启动(使用SCS寄存器中的OSCEN位),并且在某些应用中始终不会用到。通过SCS寄存器中的OSCSTAT状态位可以使软件判断主晶振是否运行和稳定,也可以通过SCS寄存器中的OSCRANGE位设置其频率范围。LPC1700的振荡器可工作在从属模式和振荡模式下。在从属模式下,输入时钟信号XTAL1与一个100 pF相连,其幅值不少于200 mV,XTAL2引脚不连接。在振荡模式下,由于片内集成了反馈电阻,只需在外部连接一个晶体和电容Cx1、Cx2就可形成基本模式的振荡。,3RTC晶振(RTC Oscillator)RTC晶振的频率为32.76

33、8 kHz,一般用于给RTC实时时钟提供时钟源。RTC晶振也可以用于看门狗定时器,通过驱动PLL0也可以用于提供CPU主频。,4时钟源选择几个时钟源都可以用来驱动PLL0,通过PLL0给CPU和片内外设提供时钟。当PLL0未连接时,系统可以通过CLKSRCSEL寄存器安全地改变时钟源。注意:IRC振荡器不应用作(通过PLL0)USB子系统的时钟源;如果CAN波特率高于100 kb/s,则IRC振荡器不应用作(通过PLL0)CAN控制器的时钟源。时钟源选择寄存器(CLKSRCSEL 0 x400F C10C)如表3.15所示。,表3.15 时钟源选择寄存器,3.4.2 PLL0锁相环PLL0接受

34、输入的时钟频率范围为32 kHz50 MHz。时钟源在CLKSRCSEL寄存器中选择。PLL将输入时钟升频,然后再分频以提供给CPU、外设或USB子系统使用的实际时钟。需要注意的是,USB子系统有其自身特定的PLL1。PLL0可产生的时钟频率高达100 MHz,是CPU所允许的最大值。PLL的输入频率首先通过一个预分频器分频成为PLL内部频率,预分频器的值用变量“N”表示,“N”值的范围可以为1256。这样,输入分频在相同的输入频率下,就可以提供更多种可能的输出频率范围。,PLL倍频器的操作在PLL输入分频器之后进行。通过一个电流控制振荡器(CCO)倍增到范围275 MHz550 MHz,倍频

35、器的值用变量“M”表示,“M”值的范围可以为6512。注意:产生的频率必须在275 MHz550 MHz频率范围内,所以要仔细地选择M的取值。倍频器操作是先使用M值分频CCO输出,然后使用相位-频率检测器将分频后的CCO输出与倍频器输入相比较,根据误差输出不同的电流值来控制CCO的振荡频率。,CCO频率再通过CPU频率设置寄存器分频,使其频率下降到CPU、外设和USB子系统所需要的值,成为提供给CPU的CCLK、APB外设的PCLK时钟。PLL0的方框图见图3.5。,图3.5 PLL0方框图,PLL0的激活由PLL0CON控制寄存器进行控制,PLL倍频器和分频器的值由PLL0CFG配置寄存器进

36、行配置。为了防止PLL参数发生改变或失效,对这两个寄存器进行了保护。当PLL提供芯片时钟时,由于芯片的所有操作,包括看门狗定时器在内都可能依赖于PLL0,因此PLL0设置的意外改变将导致CPU执行不期望的动作。保护是通过一个特定的代码序列来实现的,该代码序列由PLL0FEED寄存器实现。PLL0在系统进入掉电模式时会自动关闭并断开。PLL0必须通过软件配置、使能和连接到系统。对PLL0的所有操作要按照PLL0设置序列中的设置步骤来进行,否则PLL可能不操作。,当在用户Flash中没有有效代码(由校验和字段决定)或在启动时拉低ISP使能引脚(P2.10)时,芯片将进入ISP模式并且引导代码将用I

37、RC设置PLL。因此,当用户启动JTAG来调试应用代码时,不能假设PLL被禁能。用户启动代码必须断开与PLL的连接。,1PLL0控制寄存器PLL0 Control Register(PLL0CON0 x400FC080)PLL0CON控制寄存器可用于使能和连接PLL0,它是最新的PLL0控制位的保持寄存器,写入该寄存器的值在有效的PLL0馈送序列执行之前不起作用。使能PLL0可使PLL0锁定到当前倍频器和分频器值的设定频率上。连接PLL0可使处理器和所有片内功能都根据PLL0输出时钟来运行。对PLL0CON的更改只有在对PLL0FEED寄存器执行了正确的PLL馈送序列后才生效。PLL控制寄存器

38、如表3.16所示。,表3.16 PLL控制寄存器,PLL0在作为时钟源之前必须进行设置、使能并锁定。当PLL时钟源从振荡器时钟切换到PLL0输出或反过来操作时,内部电路对操作进行同步以确保不会产生干扰。在PLL0锁定后,需要软件来进行连接,硬件是不会主动完成PLL0连接的。此外,PLL0脱离锁定状态时,硬件是不会主动断开PLL0连接的;这时振荡器很可能已变得不稳定,此时断开PLL0也没用了。,2PLL0配置寄存器PLL0 Configuration Register(PLL0CFG0 x400FC084)PLL0配置寄存器是最新的PLL0配置值的保持寄存器,包含PLL0倍频器和分频器值。在执行

39、正确的PLL0馈送序列之前改变PLL0CFG寄存器的值不会生效。PLL0配置寄存器如表3.17所示。,表3.17 PLL0配置寄存器,3PLL0状态寄存器PLL0 Status Register(PLL0STAT0 x400FC088)PLLSTAT0为只读寄存器,它是PLL0控制和配置信息的读回寄存器,反映了正在使用的真实PLL0参数和状态。PLL0STAT可能与PLL0CON和PLL0CFG中的值不同,这是因为没有执行正确的PLL0馈送序列,这两个寄存器中的值并未生效。PLL状态寄存器如表3.18所示。PLL0STAT寄存器的PLOCK0位反映PLL0的锁定状态。,当使能PLL0或改变参数

40、时,PLL0在新的条件下需要一些时间来完成锁定,可通过监控PLOCK0位来确定连接PLL0的时间。当PLL参考频率小于100 kHz或大于20 MHz时,PLOCK0的值可能不稳定,这时可假设PLL启动后经过一段时间即稳定下来。,表3.18 PLL状态寄存器,PLOCK0位连接到中断控制器。这样可使用软件使能PLL0,而无需等待PLL0锁定。当发生中断时,可以连接PLL0并禁止中断。PLL0有3种可能的工作模式,由PLLE0和PLLC0组合得到。PLL0的工作模式如表3.19所示。,表3.19 PLL0的工作模式,4PLL0馈送寄存器PLL0 Feed Register(PLL0FEED0 x

41、400FC08C)必须将正确的馈送序列写入PLL0FEED寄存器才能使PLL0CON和PLL0CFG寄存器的更改生效。馈送序列如下:(1)将值0 xAA写入PLL0FEED。(2)将值0 x55写入PLL0FEED。这两个写操作的顺序必须正确,并且必须是连续的APB总线周期,这意味着在执行PLL0馈送操作时必须禁止中断。不管是写入的值不正确还是没有满足前两个条件,对PLL0CON或PLL0CFG寄存器的更改都不会生效。PLL0馈送寄存器如表3.20所示。,表3.20 PLL0馈送寄存器,5PLL0和掉电模式掉电模式会自动关闭并断开PLL0。从掉电模式唤醒不会自动恢复PLL0的设定,PLL0的恢

42、复必须由软件来完成。通常,一个将PLL0激活并等待锁定然后将PLL0连接的子程序可以在唤醒中断的中断服务程序开头部分调用,从而重新启动PLL0。有一点非常重要,PLL0的重启过程要完整,不要试图在掉电唤醒之后简单地执行馈送序列来重新启动PLL0,否则会出现在PLL0锁定建立之前同时使能并连接PLL0的危险。,6PLL0频率计算举例当一个LPC1700 Cortex-M3系统需要使用PLL0时,应当按照以下原则进行:(1)确定是否需使用USB以及是否由PLL0驱动。USB要求一个占空比为50%的48 MHz时钟源,也就是说,FCCO必须是48 MHz的偶数整数倍(即96 MHz的整数倍),误差范

43、围极小。(2)确定处理器的时钟频率CCLK。这可以根据系统对处理器的整体要求来决定,取决于处理器的吞吐量要求、所支持的特定的UART波特率等。外围器件的时钟频率可以低于处理器频率。,(3)找出与所需FCCLK的倍数接近的一个FCCO值,再与步骤(1)中USB所要求的FCCO值相比较。FCCO的值应当在275 MHz550 MHz之间,而且应当是CCLK的整数倍。尽量选择较低的FCCO值,这样处理器功耗会更低。(4)确定晶体振荡器频率FIN。FIN的值应当在32 kHz50 MHz之间。这可从主振荡器、RTC振荡器或片内RC振荡器中选择。使用USB功能时,需选择主振荡器。如果使用PLL1而不是P

44、LL0来驱动USB子系统,会影响选择主振荡器的频率。,PLL的输出频率公式为FCCO=选择两个整数M和N便可得到合适的FCCO值。M的取值范围为6512,N的取值范围为132。总的来说,建议使用一个较小的N值,这样可以降低FCCO的倍频数。由于在某些情况下很难找到最好的值,因此可以使用电子数据表或类似的方法来立即获得多种可能的值,再从中选择出一个最好的值。有关这方面的电子数据表可从NXP公司获取。,例3.3 假设:在应用中使用USB接口并且由PLL0驱动。在PLL操作范围(275 MHz550 MHz)内,96 MHz的最小整数倍频值为288 MHz,预期的CPU速率为60 MHz,使用外部4

45、 MHz晶振作为系统时钟源。计算:M=如果N=1,这时将产生PLL0所需的最小倍频值,则M=288106/(24106)=36。因为结果是整数,所以没有必要进一步找出一系列更好的PLL0配置值。,写入PLL0CFG的值为0 x23(N-1=0;M-1=35=0 x23)。所需的FCCLK可以通过分频FCCO(288106/60106=4.8)来确定。能产生最接近所需值FCCLK的分频整数值为5,从而获得实际的FCCLK为57.6 MHz。如果一定要获得准确的60 MHz频率,那么FCCLK必须能够被分频为48 MHz和60 MHz。此时,只有令FCCO=480MHz,才能满足要求。通过10分频

46、,得到USB子系统所需的占空比为50%的48 MHz频率;通过8分频,得到60 MHz的CPU时钟。令FCCO为480 MHz的PLL0设置参数是N=1和M=60。,例3.4 假设:在应用中将不使用USB接口,预期的CPU速率为72 MHz,使用32.768 kHz RTC作为系统时钟源。计算:要产生所需的FCCLK为72MHz,而在PLL0的可操作范围内,能使用的最小FCCO为288 MHz(472 MHz)。假设N=1,产生PLL所需的最小倍频值。,因此,M=288106/(232768)=4394.53125。由于这不是一个整数,所以我们并不能得到一个非常精确的288 MHz频率。我们需

47、要定制一个表格,将不同的结果表示出来,详情参见表3.21。,表3.21 PLL可能的取值,若N=6,则M的值会超出范围,因此N只能取15。在表3.21中,计算出的M值被舍入为最接近的整数,以使CPU实际频率在最大操作频率(72 MHz)的0.5%范围内。总的来说,当PLL输入为低频时钟信号时,参考频率值FREF=FIN/N越大,PLL越稳定。考虑PLL的稳定性,表格的第一项是最佳选择;考虑时钟精度,表格的第二项是最佳选择。如果PLL0计算建议使用不支持的倍频值,则必须忽略这些值并检查其它值以找出最适合的值。从计数值中计数所得的倍频值也可能是好的选择。对于表的第二项,写入PLL0CFG的值将会是

48、0 x12254(N-1=1=0 x1;M-1=8788=0 x2254)。,7PLL0设置步骤要对PLL0进行正确初始化,须按照下列步骤操作:(1)如果PLL0已被连接,则用一个馈送序列断开与PLL0的连接。(2)用一个馈送序列禁止PLL0。(3)如果需要,可在没有PLL0的情况下改变CPU时钟分频器的设置以加速操作。(4)操作时钟源选择控制寄存器CLKSRCSEL以改变时钟源。(5)写PLL0CFG并用一个馈送序列使其有效。PLL0CFG只能在PLL0被禁止时更新。,(6)用一个馈送序列使能PLL0。(7)改变CPU时钟分频器设置,使之与PLL0一起操作。在连接PLL0之前完成这个操作是很

49、重要的。(8)通过监控PLL0STAT寄存器的PLOCK0位,或使用PLOCK0中断来等待PLL0实现锁定。此外,当使用低频时钟作为PLL0的输入时(也就是32 kHz),需要等待一个固定的时间。当PLL参考频率FREF小于100 kHz或大于20 MHz时,PLOCK0的值可能不稳定。在这些情况下,启动PLL后等待一段时间即可。当FREF大于400 kHz时,这个时间为500 s;当FREF少于400 kHz时,这个时间为200/FREF秒。,(9)用一个馈送序列连接PLL0。需要注意的是不要合并上面的任何一个步骤。例如,不能用相同的馈送序列同时更新PLL0CFG和使能PLL0。,8PLL1

50、(锁相环1)PLL1仅接受主振荡器的时钟输入,并且为USB子系统提供一个固定的48 MHz时钟。除了从PLL0产生USB时钟外,这是产生USB时钟的另一种选择。PLL1在复位时禁止和掉电。如果PLL1保持禁止,那么可以由PLL0提供USB时钟;如果PLL1通过PLL1CON寄存器使能和连接,那么自动选择PLL1来驱动USB子系统。PLL1CON寄存器控制PLL1有效。PLL1CFG寄存器配置PLL1倍频器和分频器的值。,为了避免程序对PLL1正在使用的相关参数被修改或失效,芯片厂商对这两个寄存器进行了保护。该保护由PLL1FEED寄存器的馈送序列来实现。PLL1仅支持10 MHz25 MHz范

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号