注册 登录
查看: 398|回复: 0

山外哥 你看这个配完的频率 和你们山外配完的频率是不是一样的

[复制链接]
发表于 2014-3-10 13:19:59 | 显示全部楼层 |阅读模式

#include "System_Clock.h"

//-------------------------------------------------------------------------*
//函数名: pll_init                                                         *
//功  能: 初始化pll模块。                                                  *
//参  数: 锁相环频率为50/25*50=100M测试函数                                *
//返  回: 无                                                               *
//说  明: 1:内核/系统时钟频率 == crystalVal/MCG_C5_PRDIV*MCG_C6_VDIV      *
//        2:分频后的总线时钟/FlexBus时钟不能超过100M,Flash时钟不能超过25M*
//-------------------------------------------------------------------------*

void pll_init(void)
{
    // uint32 temp_reg;
    //这里处在默认的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来启动外部晶振
    MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);   
    while (MCG_S & MCG_S_IREFST_MASK){}                  //等待时钟切换到外部参考时钟
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}
    MCG_C5 = MCG_C5_PRDIV(0x18);     //15

    //确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLL VCO分频器
    MCG_C6 = 0x0;
     MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(0x1a);  //VDIV = 31 (x54) 24(x48)
                                                  //VDIV = 26 (x50)
    //保存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/2, FlexBus = MCG/3, Flash clock= MCG/8
    SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(1)
                 | SIM_CLKDIV1_OUTDIV3(7) | SIM_CLKDIV1_OUTDIV4(7);      
    //从新存FMC_PFAPR的原始值
    //FMC_PFAPR = temp_reg;
     //设置VCO分频器,使能PLL为100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26

    while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set   
    while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set   
    //进入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){};
}
//-------------------------------------------------------------------------*
//函数名: trace_clk_init                                                   *
//功  能: 跟踪时钟初始化                                                   *
//参  数: 无                                                                     *       
//返  回: 无                                                               *
//说  明: 用于调试                                                         *
//-------------------------------------------------------------------------*
void trace_clk_init(void)
{
    //设置跟踪时钟为内核时钟
    SIM_SOPT2 |= SIM_SOPT2_TRACECLKSEL_MASK;       
    //在PTA6引脚上使能TRACE_CLKOU功能
    PORTA_PCR6 = ( PORT_PCR_MUX(0x7));
}
//-------------------------------------------------------------------------*
//函数名: fb_clk_init                                                      *
//功  能: FlexBus时钟初始化                                                *
//参  数: 无                                                                   *
//返  回: 无                                                               *
//说  明:                                                                  *
//-------------------------------------------------------------------------*
void fb_clk_init(void)
{
    //使能FlexBus模块时钟
    SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;
    //在PTA6引脚上使能FB_CLKOUT功能
    PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部