目前、我们阅读了"MSP430FR2155勘误文档"。
我们可能在产品生命周期中遇到的 CS13问题。 我们使用 LPM3.0并使用 RTC ISQ 每1秒唤醒 MCU。 该器件支持 GPIO 退出中断。
因此、当器件进入 LPM3.0并请求中断(例如 GPIO 中断或 RTC 中断)时、它可能会遇到此 CS13问题。
我们的 DCO 频率为8MHz。
有两个问题需要回答:
如果看门狗可以恢复这种锁定?
2.我们尝试使用第4个解决方案来解决此问题。 我的代码如下所示、请检查。 是否有任何东西丢失?
在进入 LPM3.0之前、将 DOC 频率从8MHz 切换到1MHz:
#ifdef WU_SWITCH_8M
_bis_SR_register (SCG0);//禁用 FLL
CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_0;// DCOFTRIM = 3、DCO 范围= 1MHz
CSCTL2 = FLLD_0 + 30;
_BIC_SR_register (SCG0);//启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));//轮询直到 FLL 被锁定
//Software_Trim ();//软件调整可获得最佳 DCOFTRIM 值
#endif
//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;// OLD
if (UTL_BitIsOn (bit_B_SLEEP))//反向加电并输出中断,然后进入睡眠模式
{
_bis_SR_register (LPM3_bits | GIE);//输入 LPM3 w/中断,此行无法添加其他函数行
__no_operation();//进行调试并等待一小段时间
//需要重新初始化 RTC 或外部中断唤醒
UTL_BitClear (bit_B_SLEEP);
}
唤醒后、将 DOC 频率从1MHz 初始化为8MHz。
{
#ifdef WU_SWITCH_8M
WDTCTL = WDT_ARST_1000;//清除 WDT // WDT 时间为3s
_bis_SR_register (SCG0);//禁用 FLL
CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_3;// DCOFTRIM = 3、DCO 范围= 8MHz
CSCTL2 = FLLD_0 + 243;// DCODIV = 8MHz
_BIC_SR_register (SCG0);//启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));//轮询直到 FLL 被锁定
//Software_Trim ();//软件调整可获得最佳 DCOFTRIM 值
#endif
}
P1OUT = 0x00;
P1DIR |= BIT5;//P1.5 PTT 控制引脚输出
P1REN |= BIT5;
P1IES = 0x00;
P1IE = 0x00;
…