2016-02-12 103 views
2

我正在使用MSP430F6638控制器。 根据数据表ACLK和从中派生ACLK的源时钟将不会在LPM3(Deep SLeep)中关闭。MSP430-XT1在LPM3中关闭晶体振荡器

但在我的情况下,只要我进入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 

我怎么是图灵OFF的XT2:

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

晶源

XT1: 32.768千赫

XT2: 16兆赫

外围设备根据ACLK(并且因此上XT1)

UART波特率代

看门狗中断

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

我已经确信:

我确信,中断是工作(而在LPM3)

工作正常在下列情况下

  1. Wh连接USB连接(XT2有效)

  2. XT2不关闭

  3. 调试器/仿真器连接(我的理解是LPM犯规完全用模拟器工作有关)

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

也试过ERRATA UCS11错误。 (我认为这是关闭XT2时不需要)

在此先感谢。

回答

0

问题已解决。回复我自己的问题,以便其他人可能会发现它有帮助。

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

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

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

反正,问题解决了:)