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.
1. 之前有提问过LPM4 使用RTC唤醒的问题(https://e2echina.ti.com/question_answer/microcontrollers/msp430/f/55/t/176268),大概原因就是:CSCTL8寄存器中的ACLKRREQEN(时钟请求默认是启用的),当进入LPM4之前检测到RTC是活动的,ACLK会开启,导致不能真正进入LPM4模式。
2. 上述现象,我是不是可以理解为实际进入的是LPM3模式?因为我在实际测试中发现,睡眠唤醒都很正常,加上我的一些外围电路,睡眠时的功耗只有约6ua。
3. 如果我的猜想成立,那我程序中睡眠时直接写入LPM3模式,功耗应该也差不多是6ua?,但我实际测试同样的电路功耗约24ua,差别很大,(RTC唤醒方式:程序用LPM3模式睡眠功耗约24,程序用LPM4模式睡眠功耗约6ua)。
4. 如果我的猜想不成立,那RTC唤醒的情况下,程序使用LPM4睡眠到底真正是进入什么睡眠状态呢,这种方式到底可不可正常使用用呢?
请教各位高手,谢谢!
1. 我想搞清楚两者功耗差距的原因:
A)我LPM3模式操作有问题?(进入LPM3模式还需要其它特定操作?所有外设都是关闭的包括看门狗,;只开启了RTC;CS寄存器我也反复查看过,没有特定操作来降低LPM3的功耗,时钟条件请求位也禁用了),
B)又或者是LPM3与LPM4的功耗相差本来就这么大(但是从官方手册上看不应该有这么大的差距)
void sleep(void); int main(void) { // Stop Watchdog timer WDTCTL = WDTPW + WDTHOLD; //初始化gpio /* 按低功耗要求配置 */ LowPower_InitGPIO( ); CSCTL3 |= 0x0010; //REFO做为FLL稳定频率 __bic_SR_register(SCG0); // enable FLL while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // 等待频率锁相环FLL锁定 // 选择MCLK和SMCLK时钟源:DCOCLKDIV(FLL将MCLK和SMCLK的频率稳定为1MHz 并且DCOCLKDIV频率为1MHz), // SMCLK默认与MCLK同频;选择ACLK时钟源:REFO(内部32kHz 时钟源) CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; CSCTL8 = 0; //禁用时钟条件请求 __enable_interrupt();
sleep(); ...... } void sleep(void) { RTCMOD = LOWPOWER_TIME_10SEC; // TI 建议在使能RTC 计数器中断前通过读取RTCIV 寄存器将RTCIFG 位清零。 if ( RTCIV ){ } else { } //1000分频,VLOCLK时钟源 RTCCTL |= RTCPS__1000 | RTCSS__VLOCLK | RTCIE | RTCSR; __bis_SR_register(LPM3_bits | GIE); }
1. 这是我贴出的部分低功耗处理代码,麻烦看一下
2. 我对比了TI官方的LPM3例程,好像没有太大的区别,只是官方使用的是XT1,而我用的是REFO
3. GPIO部分我没有贴出,都是按照低功耗要求处理的,因为在LPM4+RTC模式下没有功耗异常,应该是正确的