This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求教:MSP430F5418A SVS/SVM设置LPM3唤醒时间



最近项目中发现一个问题, 就是使用JTAG debug时候, 程序从LPM3唤醒到AM工作正常, 但是不接JTAG就不正常, 查DataSheet发现是TEST pin的关系:

看到这段描述 ,我的理解是当TEST为高时,唤醒时间为wake-up-fast,如果为低,则是由SVS(L)和SVM(L)来设置,

继续查找datasheet相关设置的资料:

看了这个表我有点疑惑, 为了让唤醒时间达到fast的效果, 是同时需要SVS(L)和SVM(L)为t(wake-up-fast)还是只需要其中一个?

比较自己的代码:

void SetVcoreUp (unsigned int level)
{
    // Open PMM registers for write
    PMMCTL0_H = PMMPW_H;
    // Set SVS/SVM high side new level
    SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
    // Set SVM low side to new level
    SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
    // Wait till SVM is settled
    while ((PMMIFG & SVSMLDLYIFG) == 0);
    // Clear already set flags
    PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
    // Set VCore to new level
    PMMCTL0_L = PMMCOREV0 * level;
    // Wait till new level reached
    if ((PMMIFG & SVMLIFG))
    while ((PMMIFG & SVMLVLRIFG) == 0);
    // Set SVS/SVM low side to new level
    SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
    // Lock PMM registers for write access
    PMMCTL0_H = 0x00;
}

其中SVSMLACE=0, 为手动模式,

SVSLE=1,SVSLMD=0,SVSLFP=0;  SVS(L)为t(wake-up-slow)

SVMLE=1,SVMLFP=0; SVM(L)为t(wake-up-slow)

为了让SVS(L)和SVM(L)都为t(wake-up-fast), 需要将SVSLFP=1,SVMLFP=1;

也就是:

SVSLE=1,SVSLMD=0,SVSLFP=1

SVMLE=1,SVMLFP=1

但这种情况下, 从AM进入LPM3, 直接关机了(也有可能是reset了)

如果单单只设置一个SVSLFP或是SVMLFP, 那么进入LPM3没问题,但是唤醒时间还是wake-up-slow的, 

到底如何配置才能正确的让LPM3唤醒时间为fast,求教.

注: 我也测试过SVSLE=0和SVMLE=0的情况, 唤醒时间确实为fast,但在LPM3模式下有时唤不醒,不太稳定,也不知道原因

  • 另外还发现个有意思的现象, 我使用的板子是没有用外部晶振的,用的是内部DCO, 频率是24Mhz,

    P5.2/P5.3是默认为GPIO, 这样的配置LPM3唤醒会出问题.

    但是将P5.2/P5.3改成XT2IN / XT2OUT功能, LPM3唤醒就正常了, 但是耗电流就增加了3mA, 不知道对解决这个问题有没有帮助 

  • 方便的话,建议提供下工程文件或者完整代码

  • 你好,不方便提供完整代码,您需要看哪部分的代码?

  • 偶觉得产品出去的时候一般不会接JTAG调试接口的,而且连着仿真器调低功耗意义也不是很大。为啥要去纠结这个唤醒时间呢?

  • 不知道你是不是没有仔细看完我的问题:

    现在是连着JTAG正常, 不连就不正常....所以才纠结啊..

    看文档,接着JTAG是 t(wake-up-fast).(实际上就是一个TEST的电位问题,我单独上拉测试过,就是这个脚影响),

    我现在就想做到不接JTAG也设置成t(wake-up-fast), 但是设置不起作用,想请教如何设置才是正确

  • 顶一下, 希望大大们能解答一下关于SVS/SVM的设置问题

  • 如果要手动模式,首先要设置SVSMLACE=0;SVSLMD=1。然后再按照Table 2.7和2.9来设置。手动模式已经和自动模式的配置没关系了。

  • HG 说:

    如果要手动模式,首先要设置SVSMLACE=0;SVSLMD=1。然后再按照Table 2.7和2.9来设置。手动模式已经和自动模式的配置没关系了。

    感谢HG的回复,

    按照您说的,我设置了SVSMLACE=0,SVSLMD=1,然后根据Table2.7和2.9设置了SVMLFP和SVSLFP, 

    结果开不了机了....

    代码如下:

    void SetVcoreUp (unsigned int level)
    {
    // Open PMM registers for write
    PMMCTL0_H = PMMPW_H;
    // Set SVS/SVM high side new level
    SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
    // Set SVM low side to new level
    SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level + SVSLMD + SVMLFP + SVSLFP;
    // Wait till SVM is settled
    while ((PMMIFG & SVSMLDLYIFG) == 0);
    // Clear already set flags
    PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
    // Set VCore to new level
    PMMCTL0_L = PMMCOREV0 * level;
    // Wait till new level reached
    if ((PMMIFG & SVMLIFG))
    while ((PMMIFG & SVMLVLRIFG) == 0);
    // Set SVS/SVM low side to new level
    SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level + SVSLMD + SVMLFP + SVSLFP;
    // Lock PMM registers for write access
    PMMCTL0_H = 0x00;
    }

    另外还有个问题, SVS(L)和SVM(L)哪个才是决定wakeup时间的?比如SVS(L)设置成fast,SVM(L)设置成slow,那wakeup到底是fast还是slow?