MSP430 - XT1 Crystal 在 LPM3 中关闭

MSP430 - XT1 Crystal turning OFF in LPM3

我正在使用 MSP430F6638 控制器。 根据数据表 ACLK 和从中派生 ACLK 的源时钟将不会在 LPM3(深度睡眠)中关闭。

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

上述情况仅在 XT2 crystal 关闭时发生。如果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);

Crystal 来源

XT1 : 32.768 Khz

XT2 : 16 Mhz

外设取决于 ACLK(因此取决于 XT1)

UART baud generation

Watch Dog Interrupt

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

我已经确定的:

I made sure that the Interrupts are working (while in LPM3)

在以下情况下工作正常

  1. When USB is connected ( XT2 is active )

  2. XT2 NOT Turned OFF

  3. Debugger/Emulator Connected ( I understand that LPM doesnt entirely work with Emulator connected)

试过这个页面: https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/131760

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

提前致谢。

问题已解决。回答我自己的问题,这样其他人可能会觉得有帮助。

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

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

我不知道为什么 XT1 在 DVCC 未关闭时依赖 VBAT 供电。

总之,问题已经解决:)