LPC1788系统时钟的设置
LPC1788有3个独立的振荡器。他们是主振荡器,内部RC振荡器,RTC振荡器。复位后,LPC1788将用内部的RC振荡器运行,直到被软件切换。这样就能在没有任何外部晶振的情况下运行。LPC1788的时钟控制如图1所示(英文手册P35):
使用12M的晶振作为主振荡器,它通过锁相环PLL0来提高频率提供CPU。由于芯片总是从内部的RC振荡器开始工作,因此主振荡器只会应软件的请求而启动。实现方法是设定SCS寄存器中的OSCEN位使能。主振荡器提供一个状态标志SCS寄存器的OSCSTAT位,这样软件就可以确定何时主振荡器在运行稳定。此时,软件可以控制切换到主振荡器,使其作为时钟源。在启动以前,必须通过SCS的OSCRANGE位,选择一个频率范围。在确定了主振荡器之后,需要进行锁相环的配置。
1) 配置CLKSRCSEL选择正确的时钟源,内部振荡器切换为主振荡器(osc_clk);
2) 配置PLL0将正确的PLL0设置值写入PLL0CFG寄存器并且在PLL0CON中使能PLL0,向PLLFEED寄存器中写入馈送序列0xAA,0x55;
3) 配置PLL1,同PLL0;
4) 设置所需的时钟分配器如CCLKSEL,PCLSEL,EMCCLKSEL,以及USBCLKSEL寄存器。
在转载的LPC1788启动代码分析有提到启动代码程序完成如下内容的工作:
在 Reset_Handler函数中会执行SystemInit函数,这个函数在文件system_LPC177x_8x.c中。
#define CLOCK_SETUP 1
#define SCS_Val 0x00000021
#define PLL0_SETUP