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

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

《ARM Cortex嵌入式系统开发教程 第3章.ppt》由会员分享,可在线阅读,更多相关《ARM Cortex嵌入式系统开发教程 第3章.ppt(241页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 1在线教务辅导网:在线教务辅导网:http:/教材其余课件及动画素材请查阅在线教务辅导网教材其余课件及动画素材请查阅在线教务辅导网QQ:349134187 或者直接输入下面地址:或者直接输入下面地址:2 2第3章 LPC1700系列处理器u3.1 LPC1700系列处理器简介系列处理器简介u3.2 处理器引脚配置处理器引脚配置u3.3 存储器管理存储器管理u3.4 时钟和功率控制时钟和功率控制u3.5 系统控制模块系统控制模块u3.6 LPC1700系统例程系统例程3 3LPC1700系列Cortex-M3微控制器用于处理要求高度集成和低功耗的嵌入式应用,常用的芯片型号有LPC1764、L

2、PC1766、LPC1768和LPC1769等。LPC1700系列Cortex-M3微控制器的操作频率可达100 MHz,其外设组件包含高达512 KB的Flash存储器、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引脚。4 43.1.1 LPC1700系列处理器特性系列处理器特性

3、LPC1700系列处理器包括LPC1751LPC1769等多款芯片,拥有丰富的片上资源和外设接口,这一系列芯片的共同特性有:(1)ARM Cortex-M3微控制器,可在高至100 MHz的频率下运行,并包含一个支持8个区的存储器保护单元(MPU)。(2)ARM Cortex-M3内置了嵌套的向量中断控制器(NVIC)。3.1 LPC1700系列处理器简介系列处理器简介5 5(3)具有在系统编程(ISP)和在应用编程(IAP)功能的512 KB片上Flash程序存储器。把增强型的Flash存储加速器和Flash存储器在CPU本地代码/数据总线上的位置进行整合,则Flash可提供高性能的代码。(

4、4)64 KB片内SRAM,包括32 KB SRAM可供高性能CPU通过本地代码或数据总线访问及2个16 KB SRAM模块,带独立访问路径,可进行更高吞量的操作。这些SRAM模块可用于以太网、USB、DMA存储器以及通用指令和数据存储。6 6(5)多层AHB矩阵上具有8通道的通用DMA控制器,它可结合SSP、I2S、UART、模数和数模转换器外设、定时器匹配信号和GPIO使用,并可用于存储器到存储器的传输。(6)多层AHB矩阵内部连接,为每个AHB主机提供独立的总线。AHB主机包括CPU、通用DMA控制器、以太网MAC和USB接口。这个内部连接特性提供无仲裁延迟的通信,除非2个主机尝试同时访

5、问同一个从机。7 7(7)分离的APB总线允许在CPU和DMA之间提供更多的带宽和更少的延迟。CPU无需等待APB写操作完成。(8)串行接口方面的共同特征包括:以太网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。8 8 CAN控制器,带2个通道。SPI控制器,具有同步、串行、全双工通信和可编程的数据长度。2个SSP控制器

6、,带有FIFO,可按多种协议进行通信。其中一个可选择用于SPI,并且和SPI共用中断。SSP接口可以与GPDMA控制器一起使用。3个增强型的I2C总线接口,其中1个具有开漏输出功能,支持整个I2C规范和数据速率为1 Mb/s的快速模式,另外2个具有标准的端口引脚。增强型特性包括多个地址识别功能和监控模式。9 9 I2S(Inter-IC Sound)接口,用于数字音频输入或输出,具有小数速率控制功能。I2S接口可与GPDMA一起使用。I2S接口支持3-线的数据发送和接收或4-线的组合发送和接收连接,以及主机时钟输入/输出。(9)其它外设方面的共同特点包括:70个(100个引脚封装)通用I/O(

7、GPIO)引脚,带可配置的上拉/下拉电阻。AHB总线上的所有GPIO可进行快速访问,支持新的、可配置的开漏操作模式;GPIO位于存储器中,它支持Cortex-M3位带宽并且由通用DMA控制器使用。10 10 12位模数转换器(ADC),可在8个引脚间实现多路输入,转换速率高达1 MHz,并具有多个结果寄存器。12位ADC可与GPDMA控制器一起使用。10位数模转换器(DAC),具有专用的转换定时器,并支持DMA操作。4个通用定时/计数器,共有8个捕获输入和10个比较输出。每个定时器模块都具有一个外部计数输入。可选择特定的定时器事件来产生DMA请求。1个电机控制PWM,支持三相的电机控制。正交编

8、码器接口,可监控一个外部正交编码器。11 11 1个标准的PWM/定时器模块,带外部计数输入。实时时钟(RTC)带有独立的电源域。RTC通过专用的RTC振荡器来驱动。RTC模块包括20字节电池供电的备用寄存器,当芯片的其它部分掉电时允许系统状态存储在该寄存器中。电池电源可由标准的3 V锂电池供电。当电池电压掉至2.1 V的低电压时,RTC仍将继续工作。RTC中断可将CPU从任何低功率模式中唤醒。看门狗定时器(WDT),该定时器的时钟源可在内部RC振荡器、RTC振荡器或APB时钟三者间进行选择。12 12 支持ARM Cortex-M3系统节拍定时器,包括外部时钟输入选项。重复性的中断定时器提供

9、可编程和重复定时的中断。(10)标准JTAG测试/调试接口以及串行线调试和串行线跟踪端口选项。(11)仿真跟踪模块支持实时跟踪。(12)4个低功率模式:睡眠、深度睡眠、掉电、深度掉电,可实现不同级别的低功耗和节电模式。(13)4个外部中断输入,可配置为边沿/电平触发。PORT0和PORT2上的所有引脚都可用作边沿触发的中断源。13 13(14)不可屏蔽中断(NMI)输入。(15)时钟输出功能,可反映主振荡器时钟、IRC时钟、RTC时钟、CPU时钟或USB时钟的输出状态。(16)当处于掉电模式时,可通过中断(包括外部中断、RTC中断、USB活动中断、以太网唤醒中断、CAN总线活动中断、PORT0

10、/2引脚中断和NMI)将处理器从掉电模式中唤醒。(17)每个外设都自带时钟分频器,以进一步节省功耗。(18)带掉电检测功能,可对掉电中断和强制复位分别设置阈值。14 14(19)片内有上电复位电路,降低了成本,节省了系统空间。(20)片内晶振工作频率为1 MHz24 MHz。(21)4 MHz内部RC振荡器可在1%的精度内调整,可选择用作系统时钟。(22)通过片内PLL,没有高频晶振,CPU也可以最高频率运转。用户可从主振荡器、内部RC振荡器或RTC振荡器三者中选择一个作为PLL时钟源。(23)第二个专用的PLL可用于USB接口,以允许增加主PLL设置的灵活性。15 15(24)可采用100脚

11、和80脚LQFP封装(14 mm 14 mm 1.4 mm)。16 16表3.1 LPC1700系列芯片的主要特性17 17 在LPC1700系列芯片中,大多数特性是完全相同的。所以在后面的章节中,本书一律采用LPC1768芯片为例进行讲解,请读者在实际工作中注意具体芯片的差别。18 183.1.2 LPC1700系列处理器结构系列处理器结构ARM Cortex-M3包含三条AHB-Lite总线,即一条系统总线以及I-code和D-code总线,后二者的速率较快,且与TCM接口的用法类似:一条总线专用于指令取指(I-code),另一条总线用于数据访问(D-code)。这两条内核总线的用法允许同

12、时执行操作,即使同时要对不同的设备目标进行操作。LPC1700系列Cortex-M3微控制器使用多层AHB矩阵来连接上Cortex-M3总线,并以灵活的方式将其它总线主机连接到外设,允许矩阵的不同从机端口上的外设可以同时被不同的总线主机访问,从而能获取到最优化的性能。19 19APB外设使用多层AHB矩阵的独立从机端口通过两条APB总线连接到CPU。这减少了CPU和DMA控制器之间的争用,可实现更好的性能。APB总线桥配置为缓冲区写操作,使得CPU或DMA控制器无需等待APB写操作结束。AHB总线和APB总线都是ARM公司推出的AMBA片上总线规范的一部分。AHB(Advanced High

13、performance Bus)系统总线主要用于高性能模块(如CPU、DMA和DSP等)之间的连接,一般用于片内高性能、高速度的外设,如外部存储器、USB接口、DMA控制器、以太网控制器、LCD液晶屏控制器以及高速GPIO控制器等。2020LPC1700的外设功能模块都连接到APB(Advanced Peripheral Bus)总线。APB外围总线主要用于低带宽的周边外设之间的连接,如UART、I2C、SPI、I2S、A/D、D/A、CAN等。APB总线与AHB总线之间通过AHB到APB的桥相连。片内外设与器件引脚的连接由引脚连接模块控制。软件可以通过控制该模块让引脚与特定的片内外设相连接。

14、LPC1700的结构框图如图3.1所示。21 21图3.1 LPC1700的结构框图22223.2.1 引脚配置引脚配置LPC176x系列处理器共有100个引脚,一般提供LQFP引脚封装形式。LPC176xFBD 100处理器引脚封装图如图3.2所示。3.2 处理器引脚配置处理器引脚配置2323图3.2 LPC176xFBD100处理器引脚封装图2424LQFP指封装本体厚度为1.4 mm的薄型QFP(四侧引脚扁平封装Quad Flat Package),它是一种表面贴装型封装,引脚从四个侧面引出并呈L型,每个侧面有25个引脚,引脚号分别为125、2650、5175、76100。从功能上讲,L

15、PC176x将引脚分为几组32位的I/O口来进行管理,它们分别是P0口、P1口、P2口、P3口、P4口,以及电源、复位、晶振和其它引脚几部分。采用I/O引脚分组的方式主要是为了与以前的LPC系列芯片保持兼容。表示某一具体的引脚,例如P/0口的第0号脚就可以采用P00或P0.0的方式来表示。2525需要注意的是,5个I/O口分组,每个分组32个引脚,共160个引脚,大大超过了LPC176x的100个引脚数。因此在实际使用中,每个分组都有一些引脚是不能使用的,这点需要引起重视。下面对这几个部分分别进行介绍。(1)P0口。P0口是一个32位的双向多功能I/O口,每位的方向可单独控制,且每位的功能取决

16、于引脚连接模块的引脚功能选择。P0口的引脚12、13、14和31不可用。LPC176x的P0口引脚如表3.2所示。2626表3.2 LPC176x的P0口引脚2727续表一 2828续表二 2929续表三 3030 (2)P1口。P1口也是一个32位的双向多功能I/O口,每位的方向可单独控制,且每位的功能取决于引脚连接模块的引脚功能选择。P1口引脚的P1.2、P1.3、P1.5、P1.6、P1.7、P1.11、P1.12和P1.13不可用。LPC176x的P1口引脚如表3.3所示。31 31表3.3 LPC176x的P1口引脚描述3232续表一 3333续表二 3434 (3)P2口。P2口也

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

18、方向可单独控制,且每位的功能取决于引脚连接模块的引脚功能选择。P4口的引脚P4.0P4.27、P4.30和P4.31不可用。LPC176x的P4口引脚如表3.6所示。4040表3.6 LPC176x的P4口引脚描述(6)电源、复位、晶振及其它引脚的描述如表3.7所示。41 41表3.7 LPC1700的其它引脚描述4242续表 43433.2.2 引脚连接模块引脚连接模块从表3.1表3.6可以看到,LPC1700系列芯片的绝大部分引脚是复用的,每根引脚都有可能用于不同的外设功能。引脚具体用于什么外设功能是由引脚连接模块进行配置来实现的。当引脚选择了一个功能时,则其它功能无效。在使用外设时,应当

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

20、控制P031引脚。其余依次类推。PINSEL0PINSEL9寄存器,每两个寄存器用于一个端口组:4545PINSEL0寄存器用于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口的31:30引脚。每一对比特设置引脚功能的

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

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

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

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

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

26、54;注意,由于PINSEL是可读写的寄存器,上述写法会使其它引脚的功能回到初始化默认配置。为了不影响其它引脚的功能配置,实用中更好的办法是:先读取寄存器值,然后进行逻辑与和逻辑或操作,再回写到寄存器。PINSEL0=(PINSEL0&0 xFFFFFF0F)|(0 x054);其余的引脚外设功能均可以采用类似方法进行操作。例3.2 启动代码中的相关部分。启动代码负责对芯片复位后的硬件功能进行初始化。芯片复位时,各PINSEL寄存器会自动设置为默认值,所以复位后芯片引脚的功能是确定的。5656如果启动以后,硬件系统各外设功能使用情况比较固定,可以将对应的引脚功能设置写入启动代码以加快启动速度。

27、否则,可以在启动时将所有引脚都配置成GPIO端口,具体使用某部分外设时再对相关引脚进行初始化。相应的程序行为PINSEL0=0 x00000000;PINSEL1=0 x00000000;PINSEL2=0 x00000000;PINSEL3=0 x00000000;PINSEL4=0 x00000000;5757PINSEL5=0 x00000000;PINSEL6=0 x00000000;PINSEL7=0 x00000000;PINSEL8=0 x00000000;PINSEL9=0 x00000000;PINSEL10=0 x00000000;5858LPC1700系列芯片集成了512

28、 KB的片内Flash存储器和64 KB的静态SRAM,其中Flash存储器可以用作代码和数据的固态存储。对Flash存储器的编程可以通过以下方法来实现:通过串口UART0进行的在系统编程(ISP),通过调用嵌入片内的固化代码进行的在应用编程(IAP)以及通过内置的JTAG接口编程。3.3 存存储储器器管管理理5959SRAM支持8位、16位和32位访问。需要注意的是,SRAM控制器包含一个回写缓冲区,它用于防止CPU在连续的写操作时停止运行。回写缓冲区总是保存着软件发送到SRAM的最后1字节。数据只有在软件执行另外一次写操作时被写入SRAM。如果发生芯片复位,实际的SRAM内容将不会反映最近

29、一次的写请求。任何在复位后检查SRAM内容的程序都必须注意这一点。LPC1700 系列Cortex-M3微控制器含有一个4 GB的地址空间,表3.12所示为LPC1700系列Cortex-M3微控制器的存储器分布。6060表3.12 LPC1700系列芯片的存储器空间分布61 61图3.3 LPC1700系统存储器映射6262在LPC1700系列芯片的外设空间中,AHB外设区域为2 MB,可分配多达128个外设。APB外设区域为1 MB,可分配多达64个外设。每个外设空间大小都为16 KB,这样可简化每个外设的地址译码。此外,所有外设寄存器不管规格大小,都按照字地址进行分配(32位边界)。这样

30、就不再需要使用字节定位映射的硬件来进行小边界的字节(8位)或半字(16位)访问。字和半字寄存器都是一次性访问的。例如,不能对一个字寄存器的最高字节执行单独的读或写操作。6363片内外设中,AHB总线属于高速外设,主要使用的有以太网、DMA和USB设备。其余普通外设使用APB总线,LPC1700将APB设备分为了APB0和APB1两组,两个组的外设空间分配见表3.13和表3.14。6464表3.13 APB0外设存储器映射6565在对LPC1700系列芯片编程时,注意不要对一个保留地址或未使用区域的地址进行寻址,否则LPC1700将产生一个数据中止异常。另外,对AHB或APB外设地址执行任何指令

31、取指都会产生预取指中止异常。6666表3.14 APB1外设存储器映射67673.4.1 晶体振荡器晶体振荡器LPC1700含有3个独立的晶体振荡器:内部RC晶振、主晶振和RTC晶振。每个晶振针对不同应用需求有多种使用方法。3.4 时钟和功率控制时钟和功率控制6868复位后,LPC1700系列处理器使用内部RC晶振提供时钟进行操作,直到使用软件进行切换为止。这使得系统可以不依赖于外部时钟进行操作,而且使引导加载程序可以在一个确定的频率下进行操作。当Boot ROM转向用户程序之前,可以激活主晶振从而进入用户代码。69691内部晶体振荡器内部晶体振荡器(IRC,Internal RC Oscil

32、lator)IRC可以用作看门狗定时器的时钟源,也可以作为时钟,驱动PLL锁相环提供给CPU。IRC的精度达不到USB接口的时间基准精度要求(USB接口需要一个更精确的时间基准以遵循USB规范)。如果CAN波特率高于100 kb/s,则IRC不能应用于CAN1/2模块。通常的IRC频率是4 MHz。在开机或芯片复位时,LPC1700使用IRC作为时钟源,之后可以使用软件转为使用其它时钟源。70702主晶振主晶振(Main Oscillator)主晶振可用于为CPU提供时钟,其频率范围为1 MHz24 MHz。这个频率可以通过主PLL锁相环(PLL0)倍频为更高的频率成为CPU的主频,最高可以达

33、到CPU操作频率的最大值。通常把主晶振输出的时钟称为OSCCLK,PLL0输入引脚上的时钟称为PLLCLKIN,ARM Cortex-M3处理器内核时钟频率称为CCLK。当使用主晶振提供时钟而不激活PLL时,这三个值是相等的。71 71图3.4 振荡器模式7272由于芯片复位时使用IRC晶振,主晶振由软件启动(使用SCS寄存器中的OSCEN位),并且在某些应用中始终不会用到。通过SCS寄存器中的OSCSTAT状态位可以使软件判断主晶振是否运行和稳定,也可以通过SCS寄存器中的OSCRANGE位设置其频率范围。LPC1700的振荡器可工作在从属模式和振荡模式下。在从属模式下,输入时钟信号XTAL

34、1与一个100 pF相连,其幅值不少于200 mV,XTAL2引脚不连接。在振荡模式下,由于片内集成了反馈电阻,只需在外部连接一个晶体和电容Cx1、Cx2就可形成基本模式的振荡。73733RTC晶振晶振(RTC Oscillator)RTC晶振的频率为32.768 kHz,一般用于给RTC实时时钟提供时钟源。RTC晶振也可以用于看门狗定时器,通过驱动PLL0也可以用于提供CPU主频。74744时钟源选择几个时钟源都可以用来驱动PLL0,通过PLL0给CPU和片内外设提供时钟。当PLL0未连接时,系统可以通过CLKSRCSEL寄存器安全地改变时钟源。注意:IRC振荡器不应用作(通过PLL0)US

35、B子系统的时钟源;如果CAN波特率高于100 kb/s,则IRC振荡器不应用作(通过PLL0)CAN控制器的时钟源。时钟源选择寄存器(CLKSRCSEL 0 x400F C10C)如表3.15所示。7575表3.15 时钟源选择寄存器76763.4.2 PLL0锁相环锁相环PLL0接受输入的时钟频率范围为32 kHz50 MHz。时钟源在CLKSRCSEL寄存器中选择。PLL将输入时钟升频,然后再分频以提供给CPU、外设或USB子系统使用的实际时钟。需要注意的是,USB子系统有其自身特定的PLL1。PLL0可产生的时钟频率高达100 MHz,是CPU所允许的最大值。PLL的输入频率首先通过一个

36、预分频器分频成为PLL内部频率,预分频器的值用变量“N”表示,“N”值的范围可以为1256。这样,输入分频在相同的输入频率下,就可以提供更多种可能的输出频率范围。7777PLL倍频器的操作在PLL输入分频器之后进行。通过一个电流控制振荡器(CCO)倍增到范围275 MHz550 MHz,倍频器的值用变量“M”表示,“M”值的范围可以为6512。注意:产生的频率必须在275 MHz550 MHz频率范围内,所以要仔细地选择M的取值。倍频器操作是先使用M值分频CCO输出,然后使用相位-频率检测器将分频后的CCO输出与倍频器输入相比较,根据误差输出不同的电流值来控制CCO的振荡频率。7878CCO频

37、率再通过CPU频率设置寄存器分频,使其频率下降到CPU、外设和USB子系统所需要的值,成为提供给CPU的CCLK、APB外设的PCLK时钟。PLL0的方框图见图3.5。7979图3.5 PLL0方框图8080PLL0的激活由PLL0CON控制寄存器进行控制,PLL倍频器和分频器的值由PLL0CFG配置寄存器进行配置。为了防止PLL参数发生改变或失效,对这两个寄存器进行了保护。当PLL提供芯片时钟时,由于芯片的所有操作,包括看门狗定时器在内都可能依赖于PLL0,因此PLL0设置的意外改变将导致CPU执行不期望的动作。保护是通过一个特定的代码序列来实现的,该代码序列由PLL0FEED寄存器实现。P

38、LL0在系统进入掉电模式时会自动关闭并断开。PLL0必须通过软件配置、使能和连接到系统。对PLL0的所有操作要按照PLL0设置序列中的设置步骤来进行,否则PLL可能不操作。81 81当在用户Flash中没有有效代码(由校验和字段决定)或在启动时拉低ISP使能引脚(P2.10)时,芯片将进入ISP模式并且引导代码将用IRC设置PLL。因此,当用户启动JTAG来调试应用代码时,不能假设PLL被禁能。用户启动代码必须断开与PLL的连接。82821PLL0控制寄存器控制寄存器PLL0 Control Register(PLL0CON0 x400FC080)PLL0CON控制寄存器可用于使能和连接PLL

39、0,它是最新的PLL0控制位的保持寄存器,写入该寄存器的值在有效的PLL0馈送序列执行之前不起作用。使能PLL0可使PLL0锁定到当前倍频器和分频器值的设定频率上。连接PLL0可使处理器和所有片内功能都根据PLL0输出时钟来运行。对PLL0CON的更改只有在对PLL0FEED寄存器执行了正确的PLL馈送序列后才生效。PLL控制寄存器如表3.16所示。8383表3.16 PLL控制寄存器8484PLL0在作为时钟源之前必须进行设置、使能并锁定。当PLL时钟源从振荡器时钟切换到PLL0输出或反过来操作时,内部电路对操作进行同步以确保不会产生干扰。在PLL0锁定后,需要软件来进行连接,硬件是不会主动

40、完成PLL0连接的。此外,PLL0脱离锁定状态时,硬件是不会主动断开PLL0连接的;这时振荡器很可能已变得不稳定,此时断开PLL0也没用了。85852PLL0配置寄存器配置寄存器PLL0 Configuration Register(PLL0CFG0 x400FC084)PLL0配置寄存器是最新的PLL0配置值的保持寄存器,包含PLL0倍频器和分频器值。在执行正确的PLL0馈送序列之前改变PLL0CFG寄存器的值不会生效。PLL0配置寄存器如表3.17所示。8686表3.17 PLL0配置寄存器87873PLL0状态寄存器状态寄存器PLL0 Status Register(PLL0STAT0

41、x400FC088)PLLSTAT0为只读寄存器,它是PLL0控制和配置信息的读回寄存器,反映了正在使用的真实PLL0参数和状态。PLL0STAT可能与PLL0CON和PLL0CFG中的值不同,这是因为没有执行正确的PLL0馈送序列,这两个寄存器中的值并未生效。PLL状态寄存器如表3.18所示。PLL0STAT寄存器的PLOCK0位反映PLL0的锁定状态。8888当使能PLL0或改变参数时,PLL0在新的条件下需要一些时间来完成锁定,可通过监控PLOCK0位来确定连接PLL0的时间。当PLL参考频率小于100 kHz或大于20 MHz时,PLOCK0的值可能不稳定,这时可假设PLL启动后经过一

42、段时间即稳定下来。8989表3.18 PLL状态寄存器9090PLOCK0位连接到中断控制器。这样可使用软件使能PLL0,而无需等待PLL0锁定。当发生中断时,可以连接PLL0并禁止中断。PLL0有3种可能的工作模式,由PLLE0和PLLC0组合得到。PLL0的工作模式如表3.19所示。91 91表3.19 PLL0的工作模式92924PLL0馈送寄存器馈送寄存器PLL0 Feed Register(PLL0FEED0 x400FC08C)必须将正确的馈送序列写入PLL0FEED寄存器才能使PLL0CON和PLL0CFG寄存器的更改生效。馈送序列如下:(1)将值0 xAA写入PLL0FEED。

43、(2)将值0 x55写入PLL0FEED。这两个写操作的顺序必须正确,并且必须是连续的APB总线周期,这意味着在执行PLL0馈送操作时必须禁止中断。不管是写入的值不正确还是没有满足前两个条件,对PLL0CON或PLL0CFG寄存器的更改都不会生效。PLL0馈送寄存器如表3.20所示。9393表3.20 PLL0馈送寄存器94945PLL0和掉电模式和掉电模式掉电模式会自动关闭并断开PLL0。从掉电模式唤醒不会自动恢复PLL0的设定,PLL0的恢复必须由软件来完成。通常,一个将PLL0激活并等待锁定然后将PLL0连接的子程序可以在唤醒中断的中断服务程序开头部分调用,从而重新启动PLL0。有一点非

44、常重要,PLL0的重启过程要完整,不要试图在掉电唤醒之后简单地执行馈送序列来重新启动PLL0,否则会出现在PLL0锁定建立之前同时使能并连接PLL0的危险。95956PLL0频率计算举例频率计算举例当一个LPC1700 Cortex-M3系统需要使用PLL0时,应当按照以下原则进行:(1)确定是否需使用USB以及是否由PLL0驱动。USB要求一个占空比为50%的48 MHz时钟源,也就是说,FCCO必须是48 MHz的偶数整数倍(即96 MHz的整数倍),误差范围极小。(2)确定处理器的时钟频率CCLK。这可以根据系统对处理器的整体要求来决定,取决于处理器的吞吐量要求、所支持的特定的UART波

45、特率等。外围器件的时钟频率可以低于处理器频率。9696(3)找出与所需FCCLK的倍数接近的一个FCCO值,再与步骤(1)中USB所要求的FCCO值相比较。FCCO的值应当在275 MHz550 MHz之间,而且应当是CCLK的整数倍。尽量选择较低的FCCO值,这样处理器功耗会更低。(4)确定晶体振荡器频率FIN。FIN的值应当在32 kHz50 MHz之间。这可从主振荡器、RTC振荡器或片内RC振荡器中选择。使用USB功能时,需选择主振荡器。如果使用PLL1而不是PLL0来驱动USB子系统,会影响选择主振荡器的频率。9797PLL的输出频率公式为FCCO=选择两个整数M和N便可得到合适的FC

46、CO值。M的取值范围为6512,N的取值范围为132。总的来说,建议使用一个较小的N值,这样可以降低FCCO的倍频数。由于在某些情况下很难找到最好的值,因此可以使用电子数据表或类似的方法来立即获得多种可能的值,再从中选择出一个最好的值。有关这方面的电子数据表可从NXP公司获取。9898例3.3 假设:在应用中使用USB接口并且由PLL0驱动。在PLL操作范围(275 MHz550 MHz)内,96 MHz的最小整数倍频值为288 MHz,预期的CPU速率为60 MHz,使用外部4 MHz晶振作为系统时钟源。计算:M=如果N=1,这时将产生PLL0所需的最小倍频值,则M=288106/(2410

47、6)=36。因为结果是整数,所以没有必要进一步找出一系列更好的PLL0配置值。9999写入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分频,得到USB子系统所需的占空比为50%的48 MHz频率;通过8分频,得到60 MHz的CPU时钟。令FCCO

48、为480 MHz的PLL0设置参数是N=1和M=60。100100例3.4 假设:在应用中将不使用USB接口,预期的CPU速率为72 MHz,使用32.768 kHz RTC作为系统时钟源。计算:要产生所需的FCCLK为72MHz,而在PLL0的可操作范围内,能使用的最小FCCO为288 MHz(472 MHz)。假设N=1,产生PLL所需的最小倍频值。101101因此,M=288106/(232768)=4394.53125。由于这不是一个整数,所以我们并不能得到一个非常精确的288 MHz频率。我们需要定制一个表格,将不同的结果表示出来,详情参见表3.21。102102表3.21 PLL可

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

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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁