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

C8051F340系统时钟配置

时间:11-28 来源:互联网 点击:
//C8051F340包含一个可编程内部高频振荡器,该振荡器在系统内复位后默认为系统时钟。该高频振荡器为12MHz。

//使能外部振荡器后,至少要等待1ms,再来判断外部晶体振荡器是否稳定工作。
//使能时钟乘法器后需要等待5us,再来初始化时钟乘法器,之后来判断时钟乘法器是否稳定工作。

使用外部晶振的时,语句一定要在ClockInit()函数调用之前执行。
原因:C8051F340的IO口默认都是数字输出。
语句含义:P0.6(XTAL1),P0.7(XTAL2)配置为模拟输入。

//函数名: ClockInit()
//描述 : 系统时钟和USB时钟初始化
//时钟来源为外部振荡器——12MHz晶振
void ClockInit(void)
{
unsigned int Temp; //临时变量
OSCXCN = 0x67; //外部振荡器为晶体振荡器方式,外部晶体振荡器频率在[10MHz,30MHz]
for (Temp=0;Temp<3000;Temp++); //等待1ms
while ((OSCXCN&0x80) == 0); //判断晶体振荡器工作是否稳定
FLSCL = 0x90; //flash相关频率配置
CLKMUL |= 0x81; //时钟乘法器使能,时钟乘法器的时钟来源为外部振荡器,即12MHz晶振
for(Temp=0;Temp<200;Temp++); //等待5us初始化
CLKMUL |= 0xC0; //初始化时钟乘法器
while ((CLKMUL & 0x20) == 0); //判断时钟乘法器是否稳定

CLKSEL = 0x03; //USB时钟来源为时钟乘法器,系统时钟来源为时钟乘法器,即都为48MHz

OSCICN = 0x00; //禁止内部高频振荡器 ,此语句在系统时钟完全配置好了后执行
}

//函数名: ClockInit()
//描述 : 系统时钟和USB时钟初始化
//时钟来源为内部振荡器——12MHz晶振
void ClockInit( void )
{
unsigned int Temp;
OSCICN |= 0x80; //使能内部高频振荡器
CLKMUL = 0x00; //复位时钟乘法器,时钟乘法器时钟来源为内部高频振荡器
CLKMUL |= (1<7); //使能时钟乘法器
for(Temp=0;Temp<200;Temp++); //延时5us
CLKMUL |= (1<6)|(1<7); //初始化时钟乘法器
for(Temp=0;Temp<2000;Temp++);
while(!(CLKMUL&(1<5))); //等待时钟乘法器准备好
CLKSEL = 0x03; //USB时钟来源为时钟乘法器,系统时钟来源为时钟乘法器,即都为48MHz
}

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

网站地图

Top