我正在查看我可以在 MSP 中解决的问题、以降低设计的功耗。 吸引我眼球的一件事是使能的 SVSHE 位。 我的代码配置一些 I/O、配置一些外设、包括 FLL/CLK、然后将一些配置发送到无线电。 在此之后,我“尝试”禁用 PMM 寄存器中的 SVSHE,但这样做会导致调试器在 while (CSCTL7..... 请参阅以下功能。 此函数在我配置 I/O 并关闭看门狗之后的序列开始时发生。 在 LPM3设置之前的最后尝试禁用此位时、有人可以告诉我为什么调试器要在这里挂起?
void initClockTo16MHz (void) { FRCTL0 = FRCTLPW | NWAITS_1; 操作 { CSCTL7 &=~(XT1OFFG | DCOFFG); //清除 XT1和 DCO 故障标志 SFRIFG1 &=~OFIFG; } while (SFRIFG1和 OFIFG); //测试振荡器故障标志 _bis_SR_register (SCG0); //禁用 FLL CSCTL3 |= SELREF_XT1CLK; //将 XT1设置为 FLL 基准源 CSCTL0 = 0; CSCTL1 &=~(DCORSEL_7); CSCTL1 |= DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_5;// DCOFTRIM = 5、DCO 范围= 16MHz CSCTL2 = FLLD_0 + 487; // DCOCLKDIV = 16MHz _DELAY_CYCLES (3); _BIC_SR_register (SCG0); //启用 FLL // Software_Trim (); while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1)); CSCTL4 = SELMS_DCOCLKDIV | SELA_XT1CLK;//将 XT1 (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz }
我测量的接地电流约为68uA、我确实确保了 SELA 被设定为 XT1CLK。 由于处于睡眠状态的无线电和100k 下拉电阻器、我考虑了大约48uA 的电流、但我想看看我是否可以解决额外的20uA。 我将使用100欧姆电阻器来测量该值。 我在整个用户指南中查看了是否可以启用其他功能、但没有什么吸引我的眼球。