求助:5310单片机的晶振调试问题

[复制链接]
2854|11
 楼主| shenmu2012 发表于 2012-9-19 12:42 | 显示全部楼层 |阅读模式
原代码:
WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
  
  PMAPPWD = 0x02D52;                        // Enable Write-access to modify port mapping registers
  P4MAP7 = PM_MCLK;
  PMAPPWD = 0;   
UCSCTL3 |= SELREF_2;                      // Set DCO FLL reference = REFO
  UCSCTL4 |= SELA_2;                        // Set ACLK = REFO  *********

  // Increase Vcore setting to level1 to support fsystem=12MHz
  // NOTE: Change core voltage one level at a time..
  //SetVcoreUp (0x01);
  // Initialize DCO to 12MHz  
  __bis_SR_register(SCG0);                  // Disable the FLL control loop
  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
  UCSCTL1 = DCORSEL_5;                      // Select DCO range 24MHz operation
  UCSCTL2 = FLLD_1 + 374;                   // Set DCO Multiplier for 12MHz
                                            // (N + 1) * FLLRef = Fdco
                                            // (374 + 1) * 32768 = 12MHz
                                            // Set FLL Div = fDCOCLK/2
  __bic_SR_register(SCG0);                  // Enable the FLL control loop
  // Worst-case settling time for the DCO when the DCO range bits have been
  // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
  // UG for optimization.
  // 32 x 32 x 12 MHz / 32,768 Hz = 375000 = MCLK cycles for DCO to settle
  __delay_cycles(375000);

  // Loop until XT1,XT2 & DCO fault flag is cleared
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

该代码调试是可以通过的,
但是,上述代码中其他寄存器的配置都不变
我仅改动  UCSCTL4 为
UCSCTL4 |= SELA_2+SELM0+SELM1+SELS0+SELS1;      // Set ACLK = REFO MCLK =SCLK=DCOCLK =12MHz

就通过不了,一直在
do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
循环中出不来,想问下大虾门是何原因?
 楼主| shenmu2012 发表于 2012-9-19 12:45 | 显示全部楼层
我修改时参照资料的,见如下图,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| shenmu2012 发表于 2012-9-26 11:11 | 显示全部楼层
大家有没有知道的啊,有的话给解释解释的啊,我这有分送啊,谢谢
fgbin 发表于 2012-9-26 12:57 | 显示全部楼层
坐等大神解释
 楼主| shenmu2012 发表于 2012-10-15 17:42 | 显示全部楼层
这个问题我还是把它顶起来,高手们给解决下的啊,谢谢
happybird21 发表于 2012-10-15 19:47 | 显示全部楼层
顶顶顶
comeon201208 发表于 2012-10-16 15:56 | 显示全部楼层
楼主看下你的外接晶振的啊,XT2IN /XT2OUT是需要外接高频晶振的才可起振的,在XTIN/XTOUT外接低频晶振也是可以起振的
comeon201208 发表于 2012-10-16 15:57 | 显示全部楼层
所以说,楼主看下你的外部晶振是怎样接的,然后在就这程序的调试一下的,应该是可以跳出这个while循环的
hawksabre 发表于 2012-10-16 18:22 | 显示全部楼层
可能是硬件电路问题   晶振这一块焊接一定要注意   烙铁头停留时间不能过长   底层驱动这块   一定要选择好合适的时钟源    同时在循环式注意不能出现死循环   呵呵  希望对你有帮助
angerbird 发表于 2012-10-17 09:29 | 显示全部楼层
我看多半也是硬件的问题的,看下你的晶振的具体是怎样接的啊,你的程序我也看了,没啥问题的啊
 楼主| shenmu2012 发表于 2012-11-16 10:23 | 显示全部楼层
恩,这个是硬件的问题的啊,谢谢各位的探讨的,我结贴了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

4324

帖子

9

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