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操控存放器(PLL0CON)
[0] 使能PLL0,答应PLL0测验确认倍频器和分频器的当时设定值
[1] 衔接PLL0,使PLL0输出作为处理器和大多数片内外设的时钟源
关于PLL0CON存放器的更改,只要在执行了正确的PLL0馈送序列后才收效
5.2.2 PLL0装备存放器(PLL0CFG)
[14:0] MSEL0, PLL0倍频器值; [15] 保存;[23:16] NSEL0, PLL0预分频器值; [31:24] 保存
5.2.3 PLL0状况存放器(PLL0STAT)
PLL0STAT存放器供给了当时收效的PLL0作业参数和状况。
[14:0] MSEL0,保存的值是M – 1; [15] 保存
[23:16] NSEL0,N – 1; [24] PLLE0,使能位; [25] PLLC0,衔接位;
[26] PLOCK0,反响PLL0的确认状况。 [31:27] 保存
5.2.4 PLL0馈送存放器(PLL0FEED)
运用次序:PLL0CFG = ***; PLL0FEED = 0xAA; PLL0FEED = 0x55;
5.3 PLL0和掉电形式
掉电形式会主动封闭并断开PLL0。从掉电形式唤醒不会主动康复原先的PLL0设置参数,有必要在软件中康复PLL0。一般,能够在中止服务程序的开端激活PLL0、等候确认并衔接PLL0,该中止服务程序也能够在掉电唤醒时调用。
5.4 PLL0频率计算中的参数
Fin, Fcco, N, M
Fcco = Fin x 2M / N 【留意:PLL0输入和设定有必要满意下面的条件,Fin的规模32KHz ~ 50MHz, Fcoo的规模 275~550MHz】
在较高的振动器频率下(超越1MHz),答应M值的规模从6~512,这是支撑主振动器和IRC操作的整个M值规模。
关于较低频率,特别是在RTC振动器用来计时PLL0时,挑选了65个M值用于支撑波特率发生和CAN/USB操作
5.5 确认PLL0频率参数的进程
(1)确认是否需求运用USB以及是否由PLL0驱动。USB需求一个占空比为50%的48MHz时钟源,也便是说Fcco有必要是48MHz的偶数整数倍(即96MHz的整数倍),此刻差错规模极小;
(2)挑选所需的处理器频率(Fcclk)。这取决于处理器的吞吐量要求,外设可在较低时钟频率下运转,这个频率可低于处理器的频率(较低的Fcco值,处理器功耗也更低)。找出与所需Fcclk的倍数挨近的一个Fcco值,再与USB所要求的Fcco值相比较;
(3)挑选PLL0输入频率(Fin)的值。这可从主振动器、RTC振动器或片内RC振动器中挑选。运用USB功用时,需挑选主振动器;
(4)核算M和N的值来发生非常精确的Fcco频率。
总的来说,主张运用一个较小的N值,这样能够下降CCO的倍频数。
5.6 PLL0频率核算举例
例1:在运用中运用USB接口
a. 在运用中运用USB接口而且由PLL0驱动。在PLL0操作规模(275MHz ~ 550MHz)内,96MHz的最小整数倍频值是288MHz(越小则功耗越低);
b. 预期的CPU速率为60MHz;
c. 运用外部4MHz晶振或内部4MHz作为体系时钟源。 核算 M = (Fcco * N ) / (2 * Fin)
d. 为了使PLL0的倍频值最小,可挑选N=1。因而M = 288 * 10^6 * 1 / (2 * 4 * 10^) = 36
例2:在运用中不适用USB接口
a. 预期的Fcclk为72MHz;
b. 运用32.768KHz RTC时钟源作为体系时钟源。
c.要发生所需的Fcclk,而在PLL操作规模内,最小的Fcco为288MHz(4*72MHz),此刻,咱们令N=1,以取得Fcco的最小倍频值。M=288*10^6/(2*32768)=4394.53125。咱们取不同的N值,得到M值不同,且Fcco能够算出几个差错,求得最挨近的M=8789, N=2
5.7 PLL0设置过程
要对PLL0进行正确初始化,须留意下列过程:
(1) 假如PLL0已衔接,则用一个馈送序列断开与PLL0的衔接;
(2) 用一个馈送序列制止PLL0;
(3) 假如需求,可在没有PLL0的情况下改动CPU时钟分频器的设置以加快操作;
(4) 假如需求,可操作“时钟源挑选操控存放器”以改动体系时钟源;
(5) 写PLL0CFG并用一个馈送序列使其有用。PLL0CFG只能在PLL0被制止时更新;
(6) 用一个馈送序列使能PLL0;
(7) 改动CPU时钟分频器设置,使之与PLL0一同操作;
留意:在衔接PLL0之前完结这个操作。
(8) 经过监控PLL0STAT存放器的PLOCK位0,或许运用PLL0确认中止来等候PLL0完成确认。此外,当运用低频时钟作为PLL0的输入时(也便是32KHz时),需求等候一个固定的时刻。当PLL参阅频率Fref(=Fin/N)少于100KHz或大于20MHz时,PLOCK0的值或许不安稳。在这些情况下,发动PLL0后等候一段时刻即可。当Fref大于400KHz时,这个时刻为500us;当Fref少于400KHz时,这个时刻为200/Fref秒;
(9) 用一个馈送序列衔接PLL0。
留意:不要兼并上面的任何一个过程。例如,不能用相同的馈送序列一起更新PLL0CFG和使能PLL0
5.8 PLL0和发动/引导代码的相互作用
当在用户Flash中无有用代码(由校验和字决议)或在发动时拉低ISP使能引脚(P2.10)时,芯片将进入ISP形式,而且引导代码将用IRC设置PLL0。因而,当用户发动JTAG来调试用户代码时,用户代码不能以为PLL0被制止。在用户发动代码中有必要对PLL0进行从头设置。
6. PLL1作业原理与运用
6.1 PLL1作业原理
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分频来发生输出时钟。
6.2 PLL1的存放器描绘(与PLL0的存放器根本相同)
7. 时钟分频器
7.1 CPU时钟装备存放器(CCLKCFG)
LPC1700系列Cortex-M3 CPU的时钟频率最大值为100MHz。能够选用恰当的分频器值CCLKSEL来下降CPU的操作频率,以到达暂时节约功耗无需封闭PLL0的意图。
7.2 USB时钟装备存放器(USBCLKCFG)
留意:该存放器仅在PLL1制止时运用。假如PLL1使能,则其输出主动运用PLL1作USB时钟源,且有必要装备其为USB子体系供给精确的48MHz时钟。
USBCLKCFG存放器操控对PLL0输出时钟的分频,然后供给给USB子体系运用。操作示例:USBCLKCFG = (Fcco / Fusbclk – 1)
7.3 IRC调整存放器(IRCTRIM),该存放器用于调整片内4MHz振动器。
7.4 外设时钟挑选存放器(PCLKSEL0,PCLKSEL1),每个外设都有各自独立的分频器,两位,可表明1、1/2、1/4、1/8倍的CCLK