LPC1700系列Cortex-M3内部时钟系统
1、缩略语
osc:oscillator,意为振荡器,晶振。是一种能量转换装置——将直流电能转换为具有一定频率的交流电能。其构成的电路叫振荡电路。
osc_clk:外部晶体振荡器
rtc_clk:real time clock
2. 振荡器
2.1 内部RC振荡器(IRC)
内部RC振荡器(Inner RC),可用作WatchDog的时钟源,也可用作驱动PLL0和CPU的时钟源。IRC的精度达不到USB借口的时间基准精度要求(在使用LPC1700的USB功能时要求使用精度更高的外部晶体振荡器作为系统时钟源)。除此以外,如果CAN波特率高于100Kbit/s,则IRC也不能应用于CAN1/2模块。IRC的标称频率为4MHz。
在上电或任何片上复位时,LPC1700系列Cortex-M3使用IRC作为时钟源。此后,软件可将其切换为另一种可用的时钟源。
2.2 主振荡器(osc)
主振荡器(外部晶体振荡器)可作为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振荡器开始,因此主振荡器只能由软件请求来启动。
2.3 RTC振荡器
RTC振荡器可提供1Hz到32KHz的RTC时钟输出,可用作PLL0、CPU和看门狗定时器的时钟源。
3. 多路选择输入时钟源
用来驱动PLL0、CPU和片内外围设备的时钟源包括主振荡器、RTC振荡器和内部RC振荡器。
只有在PLL0断开连接时,才可更换输入时钟源。
3.1 PLL时钟源选择寄存器(CLKSRCSEL - 0x400F C10C)
1:0 CLKSRC {00 使用内部RC振荡器(默认值); 01选择主振荡器; 10选择RTC振荡器; 11 保留值}, 7:2{0保留值}
4. 多路选择输出外部时钟
4.1 输出外部时钟源选择
为了便于系统测试和开发,LPC1700系列Cortex-M3任何一个内部时钟均可作为输出外部时钟源,引出CLKOUT(P1.27引脚)功能。
通过CLKOUT可观察到的输出外部时钟源有CPU时钟(cclk)[0000]、主振荡器时钟(osc_clk)[0001]、内部RC振荡器时钟(irc_osc)[0010]、USB时钟(usb_clk)[0011]和RTC时钟(rtc_clk)[0100]
4.2 时钟输出配置寄存器(CLKOUTCFG - 0x400F C1C8)
CLKOUTCFG寄存器可以选择在CLKOUT引脚上作为输出的内部时钟,并允许通过一个整数值(1~16)对时钟进行分频。对于大多数时钟源可进行1分频。当选择CPU时钟且该时钟高于50MHz时,输出必须经过分频,使得频率在适当的范围内。
5. PLL0工作原理与使用
LPC1700系列Cortex-M3内部具有两个PLL模块,分别为PLL0和PLL1。其中PLL0支持32KHz~50MHz范围内的输入时钟频率,而PLL1仅支持10MHz~25MHz范围内的输入时钟频率。
5.1 PLL0工作原理
PLL0时钟源的选择在CLKSRCSEL寄存器中设置,PLL0将输入时钟升频,然后再分频以提供CPU及芯片外设使用的实际时钟。PLL0可产生的时钟频率高达100MHz,是CPU所允许的最大值。
PLL0接受的输入时钟频率范围为32KHz~50MHz,PLL0的输出时钟信号就是CCO(电流控制振荡器)的输出,CCO的振荡频率由“相位频率检测”部件控制(内部结构可以忽略),公式为F(PLLin) / N = F(cco) / 2M, 即Fcco = Fpllin * 2M / N
通常CCO的输出频率是有限的,超出这个范围则无法输出预期的时钟信号。LPC1700系列Cortex-M3内部的CCO可工作在275MHz ~ 550MHz,其中,最佳频率点为288MHz。
其实,PLL0输出还有其他的分频器,使其频率下降到CPU、USB和其他外设所需要的值。详见“时钟分频器”。
由于CCO(流控振荡器)与“相位频率检测”部件的工作原理需要一定时间才能稳定,因此需要查询PLL0STAT是否就绪再来启用。
由于PLL0作为时钟系统中的一个重要模块,为避免程序对PLL0正在使用的相关参数意外修改,芯片厂商从硬件上提供了保护,PLL0FEED(PLL0馈送寄存器),该寄存器使能PLL0CON、PLL0CFG,将前两个配置信息载入到实际影响PLL0操作的映像寄存器中。
5.2 PLL0寄存器描述
PLL0CON, PLL0CFG, PLL0STAT, PLL0FEED
5.2.1 PLL0控制寄存器
LPC1700系列Cortex-M3内部时钟系 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)