MSP430 - 在LPM3中关闭XT1晶体

时间:2016-02-12 14:58:47

标签: embedded msp430 iar

我使用的是MSP430F6638控制器。 根据产品规格ACLK和源自ACLK的源时钟不会在LPM3(Deep SLeep)中关闭。

但就我而言,一旦我进入LPM3,XT1就会停止振荡。

仅在XT2晶体关闭时才会出现上述情况。如果XT2未关闭然后进入LPM3,则XT1仍然是振荡。

我如何配置时钟

  P3SEL |= BIT4; // SMCLK
  P3DIR |= BIT4;

  P7SEL |= 0x0C; // P7.3,2 -> XT2OUT, XT2IN

  // Unlock XT1 pins for operation
  while(BAKCTL & LOCKBAK)
  {
    BAKCTL &= ~(LOCKBAK);
  }

  // From XT2 = 16 Mhz
  UCSCTL6 |= XCAP_2; // Fz 120216: Internal load cap (CAP Value + 2)/2 = 8.5pF (Refer Datasheet)
  UCSCTL6 &= ~(XT1DRIVE1 | XT1DRIVE0 | XT2DRIVE1);
  UCSCTL6 |= (XT2DRIVE0);
  UCSCTL6 &= ~XT2OFF;       // Set XT2 On
  UCSCTL6 &= ~XT1OFF;       // Set XT1 On
  UCSCTL3 = 0x0021; // FLL : REFOCLK and divby2

  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG); // Clear XT1 fault flags
  }while(UCSCTL7 & (XT2OFFG + XT1LFOFFG)); // Test XT1 fault flag

  __bis_SR_register(SCG0); // Disable the FLL control loop

  UCSCTL0 = 0x1F00; //Range
  UCSCTL1 = 0x50; //Range
  UCSCTL2 = 0x1138; // MCLK : 5 Mhz

  _delay_ms(100);

  // Clock Source Selection :
  UCSCTL4 = 0x0054;     // ACLK : XT1CLK; SMCLK : XT2CLK; MCLK : DCOCLKDIV
  UCSCTL5 |= DIVS1;     // SMCLK div by 4 (4 Mhz)

  UCSCTL3 |= 0x0021;      // FLLRef : REF0; FLLRef/2 => MCLK = 5Mhz

  // Enable the FLL control loop
  __bic_SR_register(SCG0);

  // Loop until XT1,XT2 & DCO fault flag is cleared
  do
  {
    UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG); // Clear XT2,XT1,DCO fault flags; XT1HFOFFG

    SFRIFG1 &= ~OFIFG; // Clear fault flags

  }while(SFRIFG1 & OFIFG); // Test oscillator fault flag

我如何关闭XT2:

UCSCTL6 |= (SMCLKOFF);
_delay_ms(10);
UCSCTL6 |= (XT2OFF);

水晶来源

  

XT1: 32.768 Khz

     

XT2: 16 Mhz

外围设备取决于ACLK(因此也取决于XT1)

  

UART波特生成

     

看门狗中断

一旦我进入LPM3,我希望WDT定时器从深度睡眠中唤醒控制器,但观察到当我进入LPM3(也尝试过LPM0)时XT1立即关闭,因此控制器永远不会从睡眠中唤醒。

我已经确定的内容:

  

我确保中断正在工作(在LPM3中)

在以下情景中正常工作

  
      
  1. 连接USB时(XT2处于活动状态)

  2.   
  3. XT2 NOT关闭

  4.   
  5. 调试器/仿真器连接(我知道LPM不能完全与连接的仿真器配合使用)

  6.   

尝试过此页: https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/131760

还尝试了 ERRATA UCS11 错误。 (我假设在关闭XT2时不需要这样做)

先谢谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。回答我自己的问题,以便其他人可能会发现它有用。

在我的设计中,VBAT引脚未连接。根据用户手册,它应该在不使用时连接到DVcc。

将VBAT连接到DVcc解决了这个问题。

我不知道为什么当DVCC没有关闭时XT1依赖于VBAT电源。

无论如何,问题已经解决了:)