微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC1114时钟配置

LPC1114时钟配置

时间:11-13 来源:互联网 点击:

PC1114的时钟被设置成为主时钟48MHz,AHB时钟48MHz,输入输出端口(GPIO)时钟使能的状态。

在上述程序中,PLL输入选择寄存器(SYSPLLCLKSEL),主时钟选择寄存器(MAINCLKSEL),AHB分频选择寄存器(SYSAHBCLKdiv)均在前面讨论过,下面来看一下没讨论过的寄存器。先看“掉电配置寄存器(PDRUNCFG)”,下表是它的位结构。

符号

描述

复位值

0

IRCOUT_PD

(IRC振荡器输出掉电)

1

掉电

0

0

上电

1

IRC_PD

(IRC振荡器掉电)

1

掉电

0

0

上电

2

FLASH_PD

(Flash掉电)

1

掉电

0

0

上电

3

BOD_PD

(BOD掉电)

1

掉电

0

0

上电

4

ADC_PD

(ADC掉电)

1

掉电

1

0

上电

5

SYSOSC_PD

(系统振荡器掉电)

1

掉电

1

0

上电

6

WDTOSC_PD

(看门狗振荡器掉电)

1

掉电

1

0

上电

7

SYSPLL_PD

(系统PLL掉电)

1

掉电

1

0

上电

8

-

-

保留

1

9

-

0

保留,置0

0

10

-

-

保留

1

11

-

1

保留,置1

1

12

-

0

保留,置0

0

15∶13

-

-

保留

1

31∶16

-

-

保留

从表中可以看出,系统振荡器和系统PLL在默认情况下是掉电的,也就是说默认它们不处于工作状态,要让它们工作就必须给它们置0上电。所以要通过执行语句“SYSCON->PDRUNCFG &= ~(1 < 5)”和“SYSCON->PDRUNCFG &= ~(1 < 7)”来把SYSOSC和SYSPLL置0。

接下来看“系统振荡器控制寄存器(SYSOSCCTRL)”,下表是它的位结构。

符号

描述

复位值

0

BYPASS

(旁路系统振荡器)

0

未被旁路

0

1

被旁路

1

FREQRANGE

(低功耗振荡器确定频率范围)

0

1~20MHz

0

1

15~25MHz

31∶2

-

-

保留

0

从表中可以看出,如果要让系统振荡器工作,则其第0位就应该选择0,即不被旁路,只有在从外部直接输入振荡信号的情况下才会选择旁路(比如使用有源晶振)。第1位用于选择外部晶振的频率范围,使用12MHz时该位选择0。执行语句“SYSCON->SYSOSCCTRL = 0x00000000”就可以实现上述配置,但实际上复位后的值就是该配置,也可不执行该语句。

从上述程序中还可以看出,在配置了时钟后(无论是PLL时钟还是主时钟),都需要更新一下才能正常工作。而更新的操作则根据管方手册,必须要给相应的允许寄存器“toggle”一下(即先向其写0再紧接着写1)。“系统PLL时钟源更新允许寄存器(SYSPLLCLKUEN)”和“主时钟源更新允许寄存器(MAINCLKUEN)”的位结构是一样的,下表是MAINCLKUEN寄存器的位结构。

符号

描述

复位值

0

ENA

(允许主时钟源更新)

0

无变化

0

1

更新时钟源

31∶1

-

-

保留

0

在主时钟源及PLL时钟源更改后,要紧接着及时更新相应的允许寄存器才能让其正常工作。此外还要注意一点,“toggle”后需要查询相应的允许寄存器是否已更新,若没有就需要等待直到其更新为止(例如在更新PLL时钟源更新允许寄存器SYSPLLCLKUEN后要执行语句“while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01));”,以等待其更新完成)。

接下来看一下PLL的配置,要让PLL对输入时钟进行倍频或分频,就要配置“系统倍频控制寄存器(SYSPLLCTRL)”,下表是该寄存器的位结构。

符号

描述

复位值

4∶0

MSEL

(反馈分频器的值,

分频器的值M是MSEL+1)

00000

M=1

0x00

……

……

11111

M=32

6∶5

PSEL

(后分频器的值,

分频器的值为2×P)

00

P=1

0x00

01

P=2

10

P=4

11

P=8

31∶7

-

-

保留,不能写1

0x00

PLL的输出频率要符合下面的公式。

Fclkout为PLL的输出频率,Fclkin为外部晶振的频率,FCCO的值必须在156MHz ~320MHz之间,M为倍频的倍数,P值要符合要求。若以12MHz的晶振做为输入,系统主时钟要为48MHz,则M=4(MSEL=0011),P的值只能取2(PSEL=01)才能满足公式要求。因此寄存器SYSPLLCTRL的值应该为10011(0x13),所以要配置此项只需要执行语句“SYSCON->SYSPLLCTRL = 0x00000013”就可以了。

在改变了PLL的倍频之后,需要查询“倍频状态寄存器(SYSPLLSTAT)”,看PLL锁定了没有,若没有就需要等待直到其锁定为止(执行语句“while (!(LPC_SYSCON->SYSPLLSTAT & 0x01));”)。下面是“倍频状态寄存器(SYSPLLSTAT)”的位结构。

符号

描述

复位值

0

LOCK

(PLL锁定状态)

0

未锁定

0

1

已锁定

31∶1

-

-

保留

0

CPU要对GPIO进行操作,就必须给GPIO时钟信号,即需要使能GPIO的时钟。在默认情况下GPIO时钟是允许的,也可以对“系统AHB时钟控制寄存器(SYSAHBCLKCTRL)”中相应的位进行操作来选择允许时钟,下面是该寄存器的位结构。

符号

描述

复位值

0

SYS

(允许AHB时钟,只读)

0

保留

1

1

允许

1

ROM

(允许ROM时钟)

0

禁止

1

1

允许

2

RAM

(允许RAM时钟)

0

禁止

1

1

允许

3

FLASHREG

(允许flash寄存器接口时钟)

0

禁止

1

1

允许

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top