[求助] MSP430F6系列

zilong   2014-10-13 19:02 楼主
我现在用MSP430F6系列单片机,使用两个外部晶振,XT1和XT2,但是这两个晶振不起振,我用TI的库函数例程也是不起振。给32768Hz的晶振接两个22pF电容也不管用。我没有思路了,请各位大神帮帮忙啊!!拜托喽!!程序如下
void Init_Clk()
{
  P7SEL |= 0x03;                                                 // 选择XT1使能
  UCSCTL6 |= XCAP_3 + XT1DRIVE_0;
  UCSCTL6 &= ~(XT1OFF );
                                  //打开XT1全选外部晶振;配置XT1的电容;XT1在低频模式

  UCSCTL4 |= SELS_5 + SELM_5;     //MCLK=XT2CLK,SMCLK=XT2CLK,UCSCTL4  默认ACLK=XT1CLK   时                                                                                //钟源发生错误,ACLK会自动选择REFOCLK
                                  //其余时钟会选择DCO——CLK


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

回复评论 (2)

貌似我隐约的记得不是这么配置时钟的啊,可以看看ti的官方寄存器版本的
世间万物皆系于一键之上~
点赞  2014-10-13 19:36
官方例程
#include  

void main(void)
{
  volatile unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P5DIR |= 0x10;                            // P5.4= output direction
  P5SEL |= 0x10;                            // P5.4= MCLK option select
  BCSCTL1 &= ~XT2OFF;                       // XT2= HF XTAL

  do
  {
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
    for (i = 0xFF; i > 0; i--);             // Time for flag to set
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?

  BCSCTL2 |= SELM_2;                        // MCLK= XT2 (safe)

  for (;;);                                 // Do nothing
}

和我的那个区别在于时钟源选择在晶振启动后,我也按照这个配置了XT2,还是不行啊
点赞  2014-10-14 09:18
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复