[Kinetis] KL26 PLL初始化不通过

[复制链接]
2896|11
 楼主| 北雪 发表于 2014-8-20 17:50 | 显示全部楼层 |阅读模式
KL26运行的时候,卡在 while (MCG_S & MCG_S_IREFST_MASK) {};   //等待FLL参考时钟 为 外部参考时钟(S[IREFST]=0,表示使用外部参考时钟,)
FSL_TICS_Jeremy 发表于 2014-8-20 18:43 | 显示全部楼层
你好,楼主!
请问你的板子和例程具体是什么?

评分

参与人数 1威望 +1 收起 理由
北雪 + 1 赞一个!

查看全部评分

 楼主| 北雪 发表于 2014-8-20 19:11 | 显示全部楼层
板子是野火的,芯片烧坏了,我自己换了一块芯片,例程也是野火的。原来的板子没有这样的问题,换了芯片之后就出现了上面的问题
 楼主| 北雪 发表于 2014-8-20 19:14 | 显示全部楼层
  mcg_div_count( pll);

    SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;      //PTA18 和 PTA19 用于 晶振

    // set clock dividers to desired value
    SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(mcg_div.core_div) |  SIM_CLKDIV1_OUTDIV4(mcg_div.bus_div);


    //上电复位后,单片机会自动进入 FEI 模式,使用 内部参考时钟

    //FEI -> FBE
    OSC0_CR  =  ( 0
                  | OSC_CR_ERCLKEN_MASK     //使能 外部参考时钟
                  //| OSC_CR_SC2P_MASK      //配置电容
                  //| OSC_CR_SC4P_MASK      //配置电容
                  //| OSC_CR_SC8P_MASK      //配置电容
                  | OSC_CR_SC16P_MASK       //配置电容
                 );

    MCG_C2 =    ( 0
                | MCG_C2_RANGE0(2)
                | MCG_C2_EREFS0_MASK
                );

    MCG_C1 = (0
              | MCG_C1_CLKS(2)
              | MCG_C1_FRDIV(7)
              | MCG_C1_IRCLKEN_MASK
              );

    while (MCG_S & MCG_S_IREFST_MASK) {};                       //等待FLL参考时钟 为 外部参考时钟(S[IREFST]=0,表示使用外部参考时钟,)(就卡在这里)

    while ((MCG_S & MCG_S_CLKST_MASK)  != MCG_S_CLKST(0x2)) {}; //等待选择外部参考时钟
for(int i=1000;i>0;i--);
    //现在已经进入了 FBE模式

    //FBE -> PBE


    MCG_C5 = MCG_C5_PRDIV0(mcg_cfg[pll].prdiv);                      //分频, EXTAL_IN_MHz/( PRDIV+1)
    MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV0(mcg_cfg[pll].vdiv) ;    //倍频, EXTAL_IN_MHz/( PRDIV+1)  * (VDIV+24)

    while (!(MCG_S & MCG_S_PLLST_MASK)) {};                         //等待时钟源选择PLL

    while (!(MCG_S & MCG_S_LOCK0_MASK)) {};                          //等待 PLL锁了(锁相环)

    // 现在已经进入了 PBE 模式

    // PBE -> PEE
    //MCG_C1 &= ~MCG_C1_CLKS_MASK;
    MCG_C1 = MCG_C1_IRCLKEN_MASK;

    while (((MCG_S & MCG_S_CLKST_MASK) ) != MCG_S_CLKST(0x3)) {};//等待选择输出PLL

    // 现在已经进入了 PEE 模式

    return mcg_cfg[pll].clk;
} //pll_init
FSL_TICS_Jeremy 发表于 2014-8-20 19:36 | 显示全部楼层
北雪 发表于 2014-8-20 19:11
板子是野火的,芯片烧坏了,我自己换了一块芯片,例程也是野火的。原来的板子没有这样的问题,换了芯片之后 ...

你用示波器测试一下晶振的波形。
攻城狮 发表于 2014-8-20 22:05 | 显示全部楼层
北雪 发表于 2014-8-20 19:11
板子是野火的,芯片烧坏了,我自己换了一块芯片,例程也是野火的。原来的板子没有这样的问题,换了芯片之后 ...

换了块芯片就不行,问题应该出在硬件身上
 楼主| 北雪 发表于 2014-8-20 23:02 | 显示全部楼层
我用的是8M无源晶振,用示波器看过了,没有输出方波。
 楼主| 北雪 发表于 2014-8-20 23:17 | 显示全部楼层
无源晶振的电路图如下,但是就是没有方波输出,
_7J]L{{04P0M0JO0WBVQYU3.jpg
FSL_TICS_Jeremy 发表于 2014-8-21 09:07 | 显示全部楼层
北雪 发表于 2014-8-20 23:17
无源晶振的电路图如下,但是就是没有方波输出,

你好,楼主!
我猜测也是有硬件原因造成的,如果你确认代码没修改过且以前可以正常运行的,建议还是检查一下硬件,实在不行,可以重新焊块再试试
 楼主| 北雪 发表于 2014-8-22 14:09 | 显示全部楼层
我换了块晶振就好了。谢谢了
FSL_TICS_Jeremy 发表于 2014-8-22 14:52 | 显示全部楼层
北雪 发表于 2014-8-22 14:09
我换了块晶振就好了。谢谢了

估计是你换MCU时,弄坏了,重点是问题解决了就好,以后有问题再来论坛交流
FSL_TICS_ZJJ 发表于 2014-8-28 13:51 | 显示全部楼层
一般卡在while (MCG_S & MCG_S_IREFST_MASK) {};
这句的基本都是晶振电路有问题,所以在测之前,要用示波器测试下,晶振电路是否起振了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部