📄 osc.c
字号:
/*------------------------------------------------------------
File Name: osc.c
Auther: Samuel
Revision: R1
History: R1 Jul.05, 2007 Creation
------------------------------------------------------------*/
#include "common.h"
#include "osc.h"
void Osc_Init(Osc_Init_Parameter_t Osc_Init_Parameter)
{
switch(Osc_Init_Parameter.Source_Select)
{
case EXTERNAL_OSC:
{
switch(Osc_Init_Parameter.External_Mode)
{
case DISABLE:
break;
case COMS_CLK:
break;
case COMS_CLK_DIV2:
break;
case RC_OR_C_DIV2:
break;
case CRYSTAL:
if(Osc_Init_Parameter.Frequency>6700000)
{
OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
OSCXCN = Reg_Field_Set(OSCXCN, BIT0);
}
else
{
if(Osc_Init_Parameter.Frequency>2200000)
{
OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
}
else
{
if(Osc_Init_Parameter.Frequency>720000)
{
OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
OSCXCN = Reg_Field_Set(OSCXCN, BIT0);
}
else
{
if(Osc_Init_Parameter.Frequency>270000)
{
OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
}
else
{
if(Osc_Init_Parameter.Frequency>95000)
{
OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
OSCXCN = Reg_Field_Set(OSCXCN, BIT0);
}
else
{
if(Osc_Init_Parameter.Frequency>30000)
{
OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
}
else
{
if(Osc_Init_Parameter.Frequency>12000)
{
OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
OSCXCN = Reg_Field_Set(OSCXCN, BIT0);
}
else
{
OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
}
}
}
}
}
}
}
OSCXCN = Reg_Field_Set(OSCXCN, BIT6);
OSCXCN = Reg_Field_Set(OSCXCN, BIT5);
OSCXCN = Reg_Field_Clr(OSCXCN, BIT4);
break;
case CRYSTAL_DIV2:
break;
default:
break;
}
Loop_Delay(256);
while (!(OSCXCN & 0x80));
OSCICN = Reg_Field_Set(OSCICN, BIT3);
OSCICN = Reg_Field_Set(OSCICN, BIT7);
OSCICN = Reg_Field_Clr(OSCICN, BIT2);
while (!(OSCXCN & 0x80));
OSCICN = Reg_Field_Clr(OSCICN, BIT7);
break;
}
case INTERNAL_OSC:
{
break;
}
default:
{
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -