osc:oscillator,意为振荡器,晶振。是一种能量转换装置将直流电能转换为具有一定频率的交流电能。其构成的电路叫
内部RC振荡器(Inner RC),可用作WatchDog的时钟源,也可用作驱动PLL0和CPU的时钟源。IRC的精度达不到USB借口的时间基准精度要求(在使用LPC1700的USB功能时要求使用精度更高的外部晶体振荡器作为系统时钟源)。除此以外,如果CAN波特率高于100Kbit/s,则IRC也不能应用于CAN1/2模块。IRC的标称频率为4MHz。
在上电或任何片上复位时,LPC1700系列Cortex-M3使用IRC作为时钟源。此后,软件可将其切换为另一种可用的时钟源。
主振荡器(外部晶体振荡器)可作为CPU的时钟源(不管是否使用PLL0)。主振荡器工作在1MHz~25MHz下。该频率可通过主PLL(PLL0)来提高至CPU操作频率的最大值。主振荡器的输出称为OSC_CLK。 PLLCLKIN选择用作PLL0输入时钟,周立功的书里将Cortex-M3处理器时钟频率称为CCLK。除非PLL0有效且已连接,否则PLLCLKIN和CCLK的频率相同。
LPC1700系列Cortex-M3的主振荡器可工作在两种模式下:从属模式、主振荡模式。
在丛书模式下,输入时钟信号应该与一个100pF的电容相连,其幅值为200mVrms到1000mVrms,相当于方波信号在280mV到1.4V之间浮动。在这种配置下XTAL2引脚可以不连接。
在主振荡模式下,由于片内集成了反馈电阻,只需在外部连接一个晶体和电容Cx1, Cx2就可形成基本模式的振荡电路(基本频率用L、Cl和Rs来表示。
由于芯片操作总是从内部RC振荡器开始,因此主振荡器只能由软件请求来启动。
RTC振荡器可提供1Hz到32KHz的RTC时钟输出,可用作PLL0、CPU和看门狗定时器的时钟源。
用来驱动PLL0、CPU和片内外围设备的时钟源包括主振荡器、RTC振荡器和内部RC振荡器。
为了便于系统测试和开发,LPC1700系列Cortex-M3任何一个内部时钟均可作为输出外部时钟源,引出CLKOUT(P1.27引脚)功能。
CLKOUTCFG寄存器可以再一次进行选择在CLKOUT引脚上作为输出的内部时钟,并允许通过一个整数值(1~16)对时钟进行分频。对于大多数时钟源可进行1分频。当选择CPU时钟且该时钟高于50MHz时,输出一定要经过分频,使得频率在适当的范围内。
PLL0时钟源的选择在CLKSRCSEL寄存器中设置,PLL0将输入时钟升频,然后再分频以提供CPU及芯片外设使用的实际时钟。PLL0可产生的时钟频率高达100MHz,是CPU所允许的最大值。
通常CCO的输出频率是有限的,超出这个范围则无法输出预期的时钟信号。LPC1700系列Cortex-M3内部的CCO可工作在275MHz ~ 550MHz,其中,最佳频率点为288MHz。
其实,PLL0输出还有别的的分频器,使其频率下降到CPU、USB和其他外设所需要的值。详见“时钟分频器”。
由于CCO(流控振荡器)与“相位频率检测”部件的工作原理需要一段时间才能稳定,因此就需要查询PLL0STAT是否就绪再来启用。
由于PLL0作为时钟系统中的一个重要模块,为避免程序对PLL0正在使用的相关参数意外修改,芯片厂商从硬件上提供了保护,PLL0FEED(PLL0馈送寄存器),该寄存器使能PLL0CON、PLL0CFG,将前两个配置信息载入到实际影响PLL0操作的映像寄存器中。
对于PLL0CON寄存器的更改,只有在执行了正确的PLL0馈送序列后才生效
掉电模式会自动关闭并断开PLL0。从掉电模式唤醒不会自动恢复原先的PLL0设置参数,必须在软件中恢复PLL0。通常,可以在中断服务程序的开始激活PLL0、等待锁定并连接PLL0,该中断服务程序也可以在掉电唤醒时调用。
在较高的振荡器频率下(超过1MHz),允许M值的范围从6~512,这是支持主振荡器和IRC操作的整个M值范围。
对于较低频率,特别是在RTC振荡器用来计时PLL0时,选择了65个M值用于支持波特率产生和CAN/USB操作
(1)确定是不是需要使用USB还有是不是由PLL0驱动。USB需要一个占空比为50%的48MHz时钟源,也就是说Fcco必须是48MHz的偶数整数倍(即96MHz的整数倍),此时误差范围极小;
(2)选择所需的处理器频率(Fcclk)。这取决于处理器的吞吐量要求,外设可在较低时钟频率下运行,这个频率可低于处理器的频率(较低的Fcco值,处理器功耗也更低)。找出与所需Fcclk的倍数接近的一个Fcco值,再与USB所要求的Fcco值相比较;
(3)选择PLL0输入频率(Fin)的值。这可从主振荡器、RTC振荡器或片内RC振荡器中选择。使用USB功能时,需选择主振荡器;
a. 在应用中使用USB接口并且由PLL0驱动。在PLL0操作范围(275MHz ~ 550MHz)内,96MHz的最小整数倍频值是288MHz(越小则功耗越低);
(3) 若需要,可在没有PLL0的情况下改变CPU时钟分频器的设置以加速操作;
(5) 写PLL0CFG并用一个馈送序列使其有效。PLL0CFG只能在PLL0被禁止时更新;
(8) 通过监控PLL0STAT寄存器的PLOCK位0,或者使用PLL0锁定中断来等待PLL0实现锁定。此外,当使用低频时钟作为PLL0的输入时(也就是32KHz时),需要等待一个固定的时间。当PLL参考频率Fref(=Fin/N)少于100KHz或大于20MHz时,PLOCK0的值可能不稳定。在这一些状况下,启动PLL0后等待一段时间即可。当Fref大于400KHz时,这一段时间为500us;当Fref少于400KHz时,这一段时间为200/Fref秒;
注意:不要合并上面的任何一个步骤。例如,不能用相同的馈送序列同时更新PLL0CFG和使能PLL0
当在用户Flash中无有效代码(由校验和字决定)或在启动时拉低ISP使能引脚(P2.10)时,芯片将进入ISP模式,并且引导代码将用IRC设置PLL0。因此,当用户启动JTAG来调试用户代码时,用户代码不能认为PLL0被禁止。在用户启动代码中必须对PLL0进行重新设置。
PLL1仅接受主振荡器的时钟输入,并且为USB子系统提供一个固定的48MHz时钟。除了从PLL0产生USB时钟外,这是产生USB时钟的另一种选择。
PLL1在复位时禁止和掉电。如果PLL1保持禁止,那就能由PLL0提供USB时钟。
PLL1仅支持从10MHz到25MHz范围内的输入时钟频率。倍频值M可以是1~32的整数值(对于USB,倍频值不能高于4)。Fcco的操作范围从156MHz到320MHz,输出分频器P可设为2、4、8、16分频来产生输出时钟。
LPC1700系列Cortex-M3 CPU的时钟频率最大值为100MHz。能选用适当的分频器值CCLKSEL来降低CPU的操作频率,以达到暂时节省功耗无需关闭PLL0的目的。
注意:该寄存器仅在PLL1禁止时使用。如果PLL1使能,则其输出自动使用PLL1作USB时钟源,且必须配置其为USB子系统提供准确的48MHz时钟。
7.3 IRC调整寄存器(IRCTRIM),该寄存器用于调整片内4MHz振荡器。
7.4 外设时钟选择寄存器(PCLKSEL0,PCLKSEL1),每个外设都有各自独立的分频器,两位,可表示1、1/2、1/4、1/8倍的CCLK