K60锁相环时钟设置.docx
《K60锁相环时钟设置.docx》由会员分享,可在线阅读,更多相关《K60锁相环时钟设置.docx(39页珍藏版)》请在冰点文库上搜索。
K60锁相环时钟设置
/*
*hw_pll.c
*
*Createdon:
2012-4-17
*Author:
lenovo
*/
总线频率设置:
64
#include"common.h"
#include"hw_pll.h"
//锁相环频率为50/12*54=225M测试函数
voidpllinit225M(void)
{
uint32_ttemp_reg;
//使能IO端口时钟
SIM_SCGC5|=(SIM_SCGC5_PORTA_MASK
|SIM_SCGC5_PORTB_MASK
|SIM_SCGC5_PORTC_MASK
|SIM_SCGC5_PORTD_MASK
|SIM_SCGC5_PORTE_MASK);
//这里处在默认的FEI模式
//首先移动到FBE模式
MCG_C2=0;
//MCG_C2=MCG_C2_RANGE
(2)|MCG_C2_HGO_MASK|MCG_C2_EREFS_MASK;
//初始化晶振后释放锁定状态的振荡器和GPIO
SIM_SCGC4|=SIM_SCGC4_LLWU_MASK;
LLWU_CS|=LLWU_CS_ACKISO_MASK;
//选择外部晶振,参考分频器,清IREFS来启动外部晶振
//011IfRANGE=0,DivideFactoris8;forallotherRANGEvalues,DivideFactoris256.
MCG_C1=MCG_C1_CLKS
(2)|MCG_C1_FRDIV(3);
//等待晶振稳定
//while(!
(MCG_S&MCG_S_OSCINIT_MASK)){}//等待锁相环初始化结束
while(MCG_S&MCG_S_IREFST_MASK){}//等待时钟切换到外部参考时钟
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x2){}
//进入FBE模式,
//0x18==25分频=2M,
//0x08==15分频=3.333M
//0x09==16分频=3.125M,
//0x10==17分频=2.94M
//0x11==18分频=2.7778M
//0x12==19分频=2.63M,
//0x13==20分频=2.5M
MCG_C5=MCG_C5_PRDIV(0x0b);
//确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLLVCO分频器
MCG_C6=0x0;
//保存FMC_PFAPR当前的值
temp_reg=FMC_PFAPR;
//通过M&PFD置位M0PFD来禁止预取功能
FMC_PFAPR|=FMC_PFAPR_M7PFD_MASK|FMC_PFAPR_M6PFD_MASK|FMC_PFAPR_M5PFD_MASK
|FMC_PFAPR_M4PFD_MASK|FMC_PFAPR_M3PFD_MASK|FMC_PFAPR_M2PFD_MASK
|FMC_PFAPR_M1PFD_MASK|FMC_PFAPR_M0PFD_MASK;
///设置系统分频器
//MCG=PLL,core=MCG,bus=MCG/3,FlexBus=MCG/3,Flashclock=MCG/9
SIM_CLKDIV1=SIM_CLKDIV1_OUTDIV1(0)|SIM_CLKDIV1_OUTDIV2
(2)
|SIM_CLKDIV1_OUTDIV3
(2)|SIM_CLKDIV1_OUTDIV4(8);
//从新存FMC_PFAPR的原始值
FMC_PFAPR=temp_reg;
//设置VCO分频器,使能PLL为100MHz,LOLIE=0,PLLS=1,CME=0,VDIV=26
MCG_C6=MCG_C6_PLLS_MASK|MCG_C6_VDIV(30);//VDIV=31(x54)//VDIV=26(x50)
while(!
(MCG_S&MCG_S_PLLST_MASK)){};//waitforPLLstatusbittoset
while(!
(MCG_S&MCG_S_LOCK_MASK)){};//WaitforLOCKbittoset
//进入PBE模式
//通过清零CLKS位来进入PEE模式
//CLKS=0,FRDIV=3,IREFS=0,IRCLKEN=0,IREFSTEN=0
MCG_C1&=~MCG_C1_CLKS_MASK;
//等待时钟状态位更新
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x3){};
//SIM_CLKDIV2|=SIM_CLKDIV2_USBDIV
(1);
//设置跟踪时钟为内核时钟
SIM_SOPT2|=SIM_SOPT2_TRACECLKSEL_MASK;
//在PTA6引脚上使能TRACE_CLKOU功能
PORTA_PCR6=(PORT_PCR_MUX(0x7));
//使能FlexBus模块时钟
SIM_SCGC7|=SIM_SCGC7_FLEXBUS_MASK;
//在PTA6引脚上使能FB_CLKOUT功能
PORTC_PCR3=(PORT_PCR_MUX(0x5));
}
//锁相环频率为50/13*55=211.538462M测试函数
voidpllinit211M(void)
{
uint32_ttemp_reg;
//使能IO端口时钟
SIM_SCGC5|=(SIM_SCGC5_PORTA_MASK
|SIM_SCGC5_PORTB_MASK
|SIM_SCGC5_PORTC_MASK
|SIM_SCGC5_PORTD_MASK
|SIM_SCGC5_PORTE_MASK);
//这里处在默认的FEI模式
//首先移动到FBE模式
MCG_C2=0;
//MCG_C2=MCG_C2_RANGE
(2)|MCG_C2_HGO_MASK|MCG_C2_EREFS_MASK;
//初始化晶振后释放锁定状态的振荡器和GPIO
SIM_SCGC4|=SIM_SCGC4_LLWU_MASK;
LLWU_CS|=LLWU_CS_ACKISO_MASK;
//选择外部晶振,参考分频器,清IREFS来启动外部晶振
//011IfRANGE=0,DivideFactoris8;forallotherRANGEvalues,DivideFactoris256.
MCG_C1=MCG_C1_CLKS
(2)|MCG_C1_FRDIV(3);
//等待晶振稳定
//while(!
(MCG_S&MCG_S_OSCINIT_MASK)){}//等待锁相环初始化结束
while(MCG_S&MCG_S_IREFST_MASK){}//等待时钟切换到外部参考时钟
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x2){}
//进入FBE模式,
//0x18==25分频=2M,
//0x08==15分频=3.333M
//0x09==16分频=3.125M,
//0x10==17分频=2.94M
//0x11==18分频=2.7778M
//0x12==19分频=2.63M,
//0x13==20分频=2.5M
MCG_C5=MCG_C5_PRDIV(0x0C);
//确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLLVCO分频器
MCG_C6=0x0;
//保存FMC_PFAPR当前的值
temp_reg=FMC_PFAPR;
//通过M&PFD置位M0PFD来禁止预取功能
FMC_PFAPR|=FMC_PFAPR_M7PFD_MASK|FMC_PFAPR_M6PFD_MASK|FMC_PFAPR_M5PFD_MASK
|FMC_PFAPR_M4PFD_MASK|FMC_PFAPR_M3PFD_MASK|FMC_PFAPR_M2PFD_MASK
|FMC_PFAPR_M1PFD_MASK|FMC_PFAPR_M0PFD_MASK;
///设置系统分频器
//MCG=PLL,core=MCG,bus=MCG/3,FlexBus=MCG/3,Flashclock=MCG/8
SIM_CLKDIV1=SIM_CLKDIV1_OUTDIV1(0)|SIM_CLKDIV1_OUTDIV2
(2)
|SIM_CLKDIV1_OUTDIV3
(2)|SIM_CLKDIV1_OUTDIV4(7);
//从新存FMC_PFAPR的原始值
FMC_PFAPR=temp_reg;
//设置VCO分频器,使能PLL为100MHz,LOLIE=0,PLLS=1,CME=0,VDIV=26
MCG_C6=MCG_C6_PLLS_MASK|MCG_C6_VDIV(30);//VDIV=31(x54)//VDIV=26(x50)
while(!
(MCG_S&MCG_S_PLLST_MASK)){};//waitforPLLstatusbittoset
while(!
(MCG_S&MCG_S_LOCK_MASK)){};//WaitforLOCKbittoset
//进入PBE模式
//通过清零CLKS位来进入PEE模式
//CLKS=0,FRDIV=3,IREFS=0,IRCLKEN=0,IREFSTEN=0
MCG_C1&=~MCG_C1_CLKS_MASK;
//等待时钟状态位更新
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x3){};
//SIM_CLKDIV2|=SIM_CLKDIV2_USBDIV
(1);
//设置跟踪时钟为内核时钟
SIM_SOPT2|=SIM_SOPT2_TRACECLKSEL_MASK;
//在PTA6引脚上使能TRACE_CLKOU功能
PORTA_PCR6=(PORT_PCR_MUX(0x7));
//使能FlexBus模块时钟
SIM_SCGC7|=SIM_SCGC7_FLEXBUS_MASK;
//在PTA6引脚上使能FB_CLKOUT功能
PORTC_PCR3=(PORT_PCR_MUX(0x5));
}
//锁相环频率为50/13*54=207.7M测试函数
voidpllinit207M(void)
{
uint32_ttemp_reg;
//使能IO端口时钟
SIM_SCGC5|=(SIM_SCGC5_PORTA_MASK
|SIM_SCGC5_PORTB_MASK
|SIM_SCGC5_PORTC_MASK
|SIM_SCGC5_PORTD_MASK
|SIM_SCGC5_PORTE_MASK);
//这里处在默认的FEI模式
//首先移动到FBE模式
MCG_C2=0;
//MCG_C2=MCG_C2_RANGE
(2)|MCG_C2_HGO_MASK|MCG_C2_EREFS_MASK;
//初始化晶振后释放锁定状态的振荡器和GPIO
SIM_SCGC4|=SIM_SCGC4_LLWU_MASK;
LLWU_CS|=LLWU_CS_ACKISO_MASK;
//选择外部晶振,参考分频器,清IREFS来启动外部晶振
//011IfRANGE=0,DivideFactoris8;forallotherRANGEvalues,DivideFactoris256.
MCG_C1=MCG_C1_CLKS
(2)|MCG_C1_FRDIV(3);
//等待晶振稳定
//while(!
(MCG_S&MCG_S_OSCINIT_MASK)){}//等待锁相环初始化结束
while(MCG_S&MCG_S_IREFST_MASK){}//等待时钟切换到外部参考时钟
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x2){}
//进入FBE模式,
//0x18==25分频=2M,
//0x08==15分频=3.333M
//0x09==16分频=3.125M,
//0x10==17分频=2.94M
//0x11==18分频=2.7778M
//0x12==19分频=2.63M,
//0x13==20分频=2.5M
MCG_C5=MCG_C5_PRDIV(0x0C);
//确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLLVCO分频器
MCG_C6=0x0;
//保存FMC_PFAPR当前的值
temp_reg=FMC_PFAPR;
//通过M&PFD置位M0PFD来禁止预取功能
FMC_PFAPR|=FMC_PFAPR_M7PFD_MASK|FMC_PFAPR_M6PFD_MASK|FMC_PFAPR_M5PFD_MASK
|FMC_PFAPR_M4PFD_MASK|FMC_PFAPR_M3PFD_MASK|FMC_PFAPR_M2PFD_MASK
|FMC_PFAPR_M1PFD_MASK|FMC_PFAPR_M0PFD_MASK;
///设置系统分频器
//MCG=PLL,core=MCG,bus=MCG/3,FlexBus=MCG/3,Flashclock=MCG/8
SIM_CLKDIV1=SIM_CLKDIV1_OUTDIV1(0)|SIM_CLKDIV1_OUTDIV2
(2)
|SIM_CLKDIV1_OUTDIV3
(2)|SIM_CLKDIV1_OUTDIV4(7);
//从新存FMC_PFAPR的原始值
FMC_PFAPR=temp_reg;
//设置VCO分频器,使能PLL为100MHz,LOLIE=0,PLLS=1,CME=0,VDIV=26
MCG_C6=MCG_C6_PLLS_MASK|MCG_C6_VDIV(30);//VDIV=31(x54)//VDIV=26(x50)
while(!
(MCG_S&MCG_S_PLLST_MASK)){};//waitforPLLstatusbittoset
while(!
(MCG_S&MCG_S_LOCK_MASK)){};//WaitforLOCKbittoset
//进入PBE模式
//通过清零CLKS位来进入PEE模式
//CLKS=0,FRDIV=3,IREFS=0,IRCLKEN=0,IREFSTEN=0
MCG_C1&=~MCG_C1_CLKS_MASK;
//等待时钟状态位更新
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x3){};
//SIM_CLKDIV2|=SIM_CLKDIV2_USBDIV
(1);
//设置跟踪时钟为内核时钟
SIM_SOPT2|=SIM_SOPT2_TRACECLKSEL_MASK;
//在PTA6引脚上使能TRACE_CLKOU功能
PORTA_PCR6=(PORT_PCR_MUX(0x7));
//使能FlexBus模块时钟
SIM_SCGC7|=SIM_SCGC7_FLEXBUS_MASK;
//在PTA6引脚上使能FB_CLKOUT功能
PORTC_PCR3=(PORT_PCR_MUX(0x5));
}
//锁相环频率为50/15*54=180M测试函数
voidpllinit180M(void)
{
uint32_ttemp_reg;
//使能IO端口时钟
SIM_SCGC5|=(SIM_SCGC5_PORTA_MASK
|SIM_SCGC5_PORTB_MASK
|SIM_SCGC5_PORTC_MASK
|SIM_SCGC5_PORTD_MASK
|SIM_SCGC5_PORTE_MASK);
//这里处在默认的FEI模式
//首先移动到FBE模式
MCG_C2=0;
//MCG_C2=MCG_C2_RANGE
(2)|MCG_C2_HGO_MASK|MCG_C2_EREFS_MASK;
//初始化晶振后释放锁定状态的振荡器和GPIO
SIM_SCGC4|=SIM_SCGC4_LLWU_MASK;
LLWU_CS|=LLWU_CS_ACKISO_MASK;
//选择外部晶振,参考分频器,清IREFS来启动外部晶振
//011IfRANGE=0,DivideFactoris8;forallotherRANGEvalues,DivideFactoris256.
MCG_C1=MCG_C1_CLKS
(2)|MCG_C1_FRDIV(3);
//等待晶振稳定
//while(!
(MCG_S&MCG_S_OSCINIT_MASK)){}//等待锁相环初始化结束
while(MCG_S&MCG_S_IREFST_MASK){}//等待时钟切换到外部参考时钟
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x2){}
//进入FBE模式,
//0x18==25分频=2M,
//0x08==15分频=3.333M
//0x09==16分频=3.125M,
//0x10==17分频=2.94M
//0x11==18分频=2.7778M
//0x12==19分频=2.63M,
//0x13==20分频=2.5M
MCG_C5=MCG_C5_PRDIV(0x0e);
//确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLLVCO分频器
MCG_C6=0x0;
//保存FMC_PFAPR当前的值
temp_reg=FMC_PFAPR;
//通过M&PFD置位M0PFD来禁止预取功能
FMC_PFAPR|=FMC_PFAPR_M7PFD_MASK|FMC_PFAPR_M6PFD_MASK|FMC_PFAPR_M5PFD_MASK
|FMC_PFAPR_M4PFD_MASK|FMC_PFAPR_M3PFD_MASK|FMC_PFAPR_M2PFD_MASK
|FMC_PFAPR_M1PFD_MASK|FMC_PFAPR_M0PFD_MASK;
///设置系统分频器
//MCG=PLL,core=MCG,bus=MCG/3,FlexBus=MCG/3,Flashclock=MCG/8
SIM_CLKDIV1=SIM_CLKDIV1_OUTDIV1(0)|SIM_CLKDIV1_OUTDIV2
(2)
|SIM_CLKDIV1_OUTDIV3
(2)|SIM_CLKDIV1_OUTDIV4(7);
//从新存FMC_PFAPR的原始值
FMC_PFAPR=temp_reg;
//设置VCO分频器,使能PLL为100MHz,LOLIE=0,PLLS=1,CME=0,VDIV=26
MCG_C6=MCG_C6_PLLS_MASK|MCG_C6_VDIV(30);//VDIV=31(x54)//VDIV=26(x50)
while(!
(MCG_S&MCG_S_PLLST_MASK)){};//waitforPLLstatusbittoset
while(!
(MCG_S&MCG_S_LOCK_MASK)){};//WaitforLOCKbittoset
//进入PBE模式
//通过清零CLKS位来进入PEE模式
//CLKS=0,FRDIV=3,IREFS=0,IRCLKEN=0,IREFSTEN=0
MCG_C1&=~MCG_C1_CLKS_MASK;
//等待时钟状态位更新
while(((MCG_S&MCG_S_CLKST_MASK)>>MCG_S_CLKST_SHIFT)!
=0x3){};
//SIM_CLKDIV2|=SIM_CLKDIV2_USBDIV
(1);
//设置跟踪时钟为内核时钟
SIM_SOPT2|=SIM_SOPT2_TRACECLKSEL_MASK;
//在PTA6引脚上使能TRACE_CLKOU功能
PORTA_PCR6=(PORT_PCR_MUX(0x7));
//使能FlexBus模块时钟
SIM_SCGC7|=SIM_SCGC7_FLEXBUS_MASK;
//在PTA6引脚上使能FB_CLKOUT功能
PORTC_PCR3=(PORT_PCR_MUX(0x5));
}
//锁相环频率为50/16*54=168.75M测试函数
voidpllinit168d75M(void)
{
uint32_ttemp_reg;
//使能IO端口时钟
SIM_SCGC5|=(SIM_SCGC5_PORTA_MASK
|SIM_SCGC5_PORTB_MASK
|SIM_SCGC5_PORTC_MASK
|SIM_SCGC5_PORTD_MASK
|SIM_SCGC5_PORTE_MASK);
//这里处在默认的FEI模式
//首先移动到FBE模式
MCG_C2=0;
//MCG_C2=MCG_C2_RANGE
(2)|MCG_C2_HGO_MASK|MCG_C2_EREFS_MASK;
//初始