打印
[技术问题解答]

求助飞思卡尔MCU起振问题,请大神指点,谢谢

[复制链接]
738|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mzzzb|  楼主 | 2016-10-13 09:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        采用飞思卡尔MKL26Z256VLH4,硬件图如下图;现象为外部系统晶振振幅很小,软件没有检测到外部晶振。初步以为是晶振硬件问题,但是换了三个不同厂家晶振及相应电容后,问题仍然一样。
        软件系统时钟初始化代码如下:   软件仿真时一直没法跳出” while((MCG->S & 0x0CU) != 0x08U) { } “   请大神指点,谢谢!

                    /* SIM->SCGC5: PORTA=1 */
       SIM->SCGC5 |= (uint32_t)0x0200UL;     /* Enable clock gate for ports to enable pin routing */
            /* SIM->CLKDIV1: OUTDIV1=1,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,OUTDIV4=1,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */
            SIM->CLKDIV1 = (uint32_t)0x10000000UL; /* Update system prescalers */
           /* PORTA->PCR18: ISF=0,MUX=0 */
       PORTA->PCR[18] &= (uint32_t)~0x01000700UL;
            /* PORTA->PCR19: ISF=0,MUX=0 */
       PORTA->PCR[19] &= (uint32_t)~0x01000700UL;
           /* Switch to FBE Mode */
          /* MCG_C2: LOCRE0=0,RANGE0=2,HGO0=0,EREFS0=1,LP=0,IRCS=0 */
       MCG->C2 = (uint8_t)((MCG->C2 & (uint8_t)~(uint8_t)0x9BU) | (uint8_t)0x14U);
           /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=1,SC4P=0,SC8P=0,SC16P=0 */
      OSC0->CR = (uint8_t)0x80U;
          /* MCG_C1: CLKS=2,FRDIV=3,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
       MCG->C1 = (uint8_t)0x9AU;
              /* MCG->C4: DMX32=0,DRST_DRS=0 */
      MCG->C4 &= (uint8_t)~(uint8_t)0xE0U;
            /* MCG->C5: ??=0,PLLCLKEN0=0,PLLSTEN0=0,PRDIV0=1 */
      MCG->C5 = (uint8_t)0x03U;
            /* MCG->C6: LOLIE0=0,PLLS=0,CME0=0,VDIV0=0 */
      MCG->C6 = (uint8_t)0x00U;
      while((MCG->S & MCG_S_IREFST_MASK) != 0x00U) { /* Check that the source of the FLL reference clock is the external reference clock. */
       }
      while((MCG->S & 0x0CU) != 0x08U) {    /* Wait until external reference clock is selected as MCG output */
       }

  /* Switch to PBE Mode */
  /* MCG->C6: LOLIE0=0,PLLS=1,CME0=0,VDIV0=0 */
  MCG->C6 = (uint8_t)0x40U;
  while((MCG->S & 0x0CU) != 0x08U) {    /* Wait until external reference clock is selected as MCG output */
  }
  while((MCG->S & MCG_S_LOCK0_MASK) == 0x00U) { /* Wait until locked */
  }

  /* Switch to PEE Mode */
  /* MCG->C1: CLKS=0,FRDIV=3,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
  MCG->C1 = (uint8_t)0x1AU;
  while((MCG->S & 0x0CU) != 0x0CU) {    /* Wait until output of the PLL is selected */
  }




2.gif (61.69 KB )

硬件原理图

硬件原理图

相关帖子

沙发
mzzzb|  楼主 | 2016-10-13 14:05 | 只看该作者
我先顶

使用特权

评论回复
板凳
aeromoon| | 2016-10-14 13:07 | 只看该作者
R22焊接了吗,焊了的话,去掉试试

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
mzzzb + 1 赞一个!
地板
leumber| | 2016-10-14 16:27 | 只看该作者
本帖最后由 leumber 于 2016-10-14 16:53 编辑

感觉是你寄存器配置问题
你给寄存器赋值就直接这样等于不好吧,你设置后边的时候考虑是否也改了之前设置的
而且时钟配置的模式变化较多,这样很容易把已经设置好的某个模式给改了设置有的寄存器之后需要判断一下是否完成,这里是需要等待的

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
mzzzb + 3 很给力!
5
mzzzb|  楼主 | 2016-10-31 10:01 | 只看该作者
谢谢上楼leumber,你的见议很好,现在问题己经解决了,是keil里面的环境变量没有设置好!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

55

帖子

0

粉丝