CortexM0_LPC1100_clock

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CortexM0_LPC1100_clock
目录
第2章硬件体系结构 (1)
2.1 时钟系统 (1)
2.1.1 时钟系统概述 (1)
2.1.2 振荡器 (1)
2.1.3 多路选择输入时钟源 (2)
2.1.4 多路选择输出外部时钟 (3)
2.1.5 PLL工作原理与使用 (3)
第2章硬件体系结构2.1 时钟系统
图2.1 时钟产生单元
2.1.2 振荡器
复位后,LPC1100系列Cortex-M0自动选择内部RC振荡器作为系统的时钟源,这使得系统能在没有外部晶振的情况下运行。

在ISP模式中,BootLoader程序也是使用内部RC振荡器作为时钟源。

用户可以通过软件方式修改时钟源选择寄存器,从而选择3种振荡器中的一种作为系统主时钟源。

但需要注意,在切换前必须保证即
将使用的时钟源已经可用。

所有振荡器在用作CPU时钟源时,可以通过PLL获得较高的F CCLK值(必须小于或等于50MHz)。

1.内部RC振荡器
内部RC振荡器(IRC)可用作看门狗定时器的时钟源,也可以用作驱动PLL和CPU的时钟源。

由于IRC的标称频率为12MHz(精度为±1%),所以在一些特殊的应用场合(例如需要定时器定时特定的时间)则需要使用精度更高的外部晶体振荡器作为系统时钟源。

在上电或任何片上复位时,LPC1100系列Cortex-M0使用IRC作为时钟源。

此后,用户可通过编程切换到另一种可用的时钟源。

2.主振荡器
,也可以用作CPU的时
位符号值描述复位值
1:0 SEL
00
01
10
11
系统PLL时钟源
IRC振荡器
系统振荡器
保留
保留
0x00 31:2 - -
保留0x00 注:只有在PLL断开连接时,才可更换PLL输入时钟源。

在更换完时钟源后必须在系统时钟源更新使能寄存器先写0然后再写1。

可用来驱动系统的时钟源包括IRC振荡器、输入时钟到系统PLL、WDT振荡器和系统PLL 时钟输出,见表2.2所列。

表2.2 主时钟源选择寄存器(MAINCLKSEL)位描述位符号

描述
复位值1:0 SEL
00
01
10
11
主时钟的时钟源
IRC振荡器
输入时钟到系统PLL
WDT振荡器
系统PLL时钟输出
0x00 31:2 - -
保留0x00 注:在更换完主时钟源后必须在主时钟源更新使能寄存器先写0,然后再写1。

(见“系统PLL时钟源及芯片外设所使用的实际
图2.4 PLL的锁定过程
需要特别注意的是,PLL作为时钟系统中的一个重要模块,它为系统的内核以及所有部件(包括看门狗定时器)提供时钟,如果操作不当将会引起非常严重的后果。

所以为了避免程序对PLL正在使用的相关参数意外修改,芯片厂商从硬件上提供了保护,该保护是由一个类似于操作看门狗定时器的代码序列来实现,详情请参阅SYSPLLUEN 寄存器的描述。

注:PLL在芯片复位和进入掉电模式时会被关闭并从时钟系统中切换出去。

芯片从掉电模式被唤醒后,PLL并不会自动使能和连接,只能通过软件使能。

程序必须在配置并激活PLL后等待其锁定,然后再连接PLL。

2.PLL和掉电控制
参数系统PLL
FCLKIN 从SYSPLLCLKSEL多路复用器输出的sys_pllclkin的频率(系统PLL的输入时钟)
F CCO CCO的频率,范围在156MHz~320MHz之间
F CLKOUT sys_pllclkout的频率
P 系统PLL的后置分频比率;由SYSPLLCTRL中的位PSEL来设置M 系统PLL的反馈分频比率;由SYSPLLCTRL中的位MSEL来设置
如图2.3所示,展示了F CLKIN与F CCO之间的关系,同时在“PLL工作原理”部分已经描述了PLL输出频率的公式,频率关系如下:
F CLKOUT=M×F CLKIN=F CCO /(2×P)
为了选择合适的M和P值,推荐如下步骤:
●指定输入时钟频率F CLKIN;
●计算M值以获得所需的输出频率F CLKOUT,M =F CLKOUT /
F CLKIN;
●找出一个值使得F CCO=2×P×F CLKOUT;
●检查所有的频率和分频器值设置,是否符合“系统PLL控制寄存器(SYSPLLCTRL)
位功能描述”内的限定。

在PLL的输入时钟频率范围为10MHz~25MHz下,允许M值的范围为1~32,这是支持主振荡器和IRC操作的整个M值的范围。

4.PLL设置步骤
要对PLL进行正确初始化,须注意下列步骤:
●如果选择主振荡器作为PLL的输入时钟源,则在PDRUNCFG中对主振荡器先上电;
●在系统PLL时钟源选择寄存器中选择作为PLL输入的时钟源,主振荡器或IRC振荡
器;
●写系统PLL时钟源更新使能寄存器,使系统PLL时钟源选择有效;
●在系统PLL控制寄存器中写计算好的M和P值;
●在PDRUNCFG中对系统PLL上电,并等待PLL信号锁定;
●在主时钟源选择寄存器中选择PLL时钟作为系统的时钟;
●写主时钟源选择更新使能寄存器,使主时钟源选择系统PLL时钟输出有效。

PLL操作代码如程序清单2.1所示。

程序清单2.1 设置PLL的代码
......
PDRUNCFG &= ~(0x1ul << 5); /* 系统振荡器上电 */ for ( i = 0; i < 0x100; i++ ) { /* 等待振荡器稳定 */ }
SYSPLLCLKSEL = MAIN_CLKSRCSEL_V ALUE; /* 选择系统振荡器OSC */ SYSPLLCLKUEN = 0x00; /* 切换时钟源 */ SYSPLLCLKUEN = 0x01; /* 更新时钟源 */ while (!(SYSPLLCLKUEN & 0x01)) { /* 等待更新完成*/ }
uiRegVal = SYSPLLCTRL;
uiRegVal &= ~0x1FF;
SYSPLLCTRL = (uiRegVal | (PLL_PV ALUE << 5) | PLL_MV ALUE); /* 预分频:M + 1 与2×P */ PDRUNCFG &= ~(0x01ul << 7); /* 系统MAIN PLL上电*/ while (!(SYSPLLSTAT & 0x01)){ /* 等待锁定 */ }
MAINCLKSEL = 0x03; /* 选择PLL输出*/ MAINCLKUEN = 0x01; /* 更新MCLK时钟源选择*/ MAINCLKUEN = 0x00; /* 翻转更新寄存器*/ MAINCLKUEN = 0x01;
while (!(MAINCLKUEN & 0x01)) { /* 等待更新完成*/ }
5.PLL和其送PLL和启动/引导代码的相互作用
当在用户Flash中没有有效代码(由校验和字决定)或在启动时拉低ISP使能引脚(PIO0.1)时,芯片将进入ISP模式,并且引导代码将用IRC设置PLL。

因此,当用户启动SWD来调试用户代码时,不能认为PLL被禁止,用户须在启动代码中对PLL进行重新设置。

相关文档
最新文档