PAGE1
PAGE1
LPC1100系列的片上振荡器与外部时钟源
片上振荡器
LPC1100系列单片机配备了多种时钟源,其中片上振荡器是基本的时钟源之一。片上振荡器可以提供稳定的时钟信号,确保单片机在各种工作条件下正常运行。LPC1100系列的片上振荡器主要有两种类型:内部主振荡器(InternalMainOscillator,IMO)和内部副振荡器(InternalWatchdogOscillator,IWO)。
内部主振荡器(IMO)
内部主振荡器(IMO)提供一个默认的4MHz时钟信号,可以通过频率调整寄存器(FROFrequencyAdjustRegister,FROFREQ)来微调其频率。IMO的频率可以在500kHz到20MHz之间调整,调整步长为1kHz。
寄存器配置
FROFREQ:频率调整寄存器,用于设置IMO的频率。
SYSAHBCLKCTRL:系统时钟控制寄存器,用于启用或禁用IMO时钟。
代码示例
以下是一个简单的示例,展示如何配置IMO时钟频率为12MHz,并启用IMO时钟。
#includeLPC11xx.h
//配置IMO时钟频率为12MHz
voidconfigure_IMO(void){
//设置FROFREQ寄存器,频率为12MHz
LPC_SYSCON-FROFREQ=(12000-500)/1000;//(12MHz-500kHz)/1kHz=11.5
//启用IMO时钟
LPC_SYSCON-SYSAHBCLKCTRL|=(11);//位1对应IMO时钟
}
intmain(void){
//配置IMO
configure_IMO();
//主循环
while(1){
//系统运行代码
}
}
内部副振荡器(IWO)
内部副振荡器(IWO)提供一个32kHz的低频时钟信号,主要用于低功耗模式和看门狗定时器。IWO的频率固定为32kHz,无需调整。
寄存器配置
SYSAHBCLKCTRL:系统时钟控制寄存器,用于启用或禁用IWO时钟。
PDRUNCFG:电源配置寄存器,用于控制IWO的运行状态。
代码示例
以下是一个简单的示例,展示如何启用IWO时钟。
#includeLPC11xx.h
//启用IWO时钟
voidenable_IWO(void){
//启用IWO时钟
LPC_SYSCON-SYSAHBCLKCTRL|=(12);//位2对应IWO时钟
//确保IWO处于运行状态
LPC_SYSCON-PDRUNCFG=~(12);//位2对应IWO电源管理
}
intmain(void){
//启用IWO
enable_IWO();
//主循环
while(1){
//系统运行代码
}
}
外部时钟源
除了片上振荡器,LPC1100系列单片机还支持外部时钟源。外部时钟源通常通过晶振或外部时钟信号输入到单片机的XIN和XOUT引脚。外部时钟源可以提供更高的频率和更精确的时钟信号,适用于需要高精度时钟的应用场景。
晶振配置
LPC1100系列支持外部晶振,其频率范围通常在1MHz到25MHz之间。配置外部晶振时,需要调整相应的寄存器以确保晶振正常工作。
寄存器配置
SYSOSCCTRL:系统振荡器控制寄存器,用于配置外部晶振。
SYSAHBCLKCTRL:系统时钟控制寄存器,用于启用外部晶振时钟。
PDRUNCFG:电源配置寄存器,用于控制外部晶振的运行状态。
代码示例
以下是一个示例,展示如何配置外部晶振并启用外部晶振时钟。
#includeLPC11xx.h
//配置外部晶振
voidconfigure_external_oscillator(void){
//配置系统振荡器控制寄存器
LPC_SYSCON-SYSOSCCTRL=(10)|(11);//位0和位1分别控制晶振启动和使能
//启用外部晶振时钟
LPC_SYSCON-SYSAHBCLKCTRL|=(10);//位0对应外部晶振时钟
//确保外部晶振处于运行状态
LPC_SYSCON-PDRUNCFG=~(10);//位0对应外部晶振电源管理