最近项目中发现一个问题, 就是使用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模式下有时唤不醒,不太稳定,也不知道原因