惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
罗磊的独立博客
小众软件
小众软件
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
博客园_首页
N
Netflix TechBlog - Medium
B
Blog
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
博客园 - 【当耐特】

博客园 - zelu

质量工程读书笔记 - 零缺陷管理的基本原则 质量工程读书笔记 - 品质部的职责 Arduino SoftwareSerial + CO2传感器模组MH-Z14 质量工程读书笔记 - 精益生产 质量工程读书笔记 - 预防为主的质量管理系统 质量工程读书笔记 - 优秀经理人的潜质 质量工程读书笔记 - 经理人的修炼 质量工程读书笔记 - 产品检验 质量工程读书笔记 - 质量工程师的工作 距离 Restart MSP430G2553 Launchpad 硬件I2C驱动 MSP430G2553 模数转换器 ADC10 MSP430 G2553 Launchpad实现电容测量 MSP430 G2553 比较器Comparator_A+、数据流程图DFD、状态转换图STD MSP430 G2553 计时/计数器 Timer_A MSP430 G2553 基本时钟模块+ (Basic Clock Module+) MSP430 G2553 LaunchPad GPIO中断 MSP430 G2553 LaunchPad设置GPIO
MSP430 G2553 低功耗模式LPMx
zelu · 2015-08-16 · via 博客园 - zelu

MSP430除了正常运行时的active模式外,还支持五种低功耗模式(Low-power mode),分别为LPM0、LPM1、LPM2、LPM3、LPM4,由状态寄存器中的CPUOFF、OSCOFF、SCG0、SCG1比特位设置。

六种模式对应的时钟状态为:

其中,LPM3、LPM4比较常用,对低功耗的贡献也最大。LPM3模式关闭了DCO、CPU,从而MCLK、SMCLK无法工作,ACLK(来源为LFXT1或VLO)可以正常工作并用于系统的定时唤醒。LPM4模式下所有内部时钟信号都关闭,系统只能由外部中断唤醒。几种模式的功耗情况大致如下图所示:

io430g2553.h头文件中已经宏定义好了几种模式的实现语句:

#define LPM0      __bis_SR_register(LPM0_bits)     /* Enter Low Power Mode 0 */
#define LPM0_EXIT __bic_SR_register_on_exit(LPM0_bits) /* Exit Low Power Mode 0 */
#define LPM1      __bis_SR_register(LPM1_bits)     /* Enter Low Power Mode 1 */
#define LPM1_EXIT __bic_SR_register_on_exit(LPM1_bits) /* Exit Low Power Mode 1 */
#define LPM2      __bis_SR_register(LPM2_bits)     /* Enter Low Power Mode 2 */
#define LPM2_EXIT __bic_SR_register_on_exit(LPM2_bits) /* Exit Low Power Mode 2 */
#define LPM3      __bis_SR_register(LPM3_bits)     /* Enter Low Power Mode 3 */
#define LPM3_EXIT __bic_SR_register_on_exit(LPM3_bits) /* Exit Low Power Mode 3 */
#define LPM4      __bis_SR_register(LPM4_bits)     /* Enter Low Power Mode 4 */
#define LPM4_EXIT __bic_SR_register_on_exit(LPM4_bits) /* Exit Low Power Mode 4 */

示例

利用MSP430G2553 Timer0_A,产生频率为1Hz的方波,驱动LED进行显示。系统除了中断处理外,其余时间都处于LPM3模式。LPM3下时钟源只能使用ACLK,而ACLK的来源为LFXT1或VLO。G2 Launchpad随板提供了一个32.768k的晶体,若使用LFXT1,则需要将该晶体焊接到板子上。此例子中VLO作为ACLK的时钟源。

VLO的主要问题是不够精准。从MSP430G2553手册可以看出,VLO频率范围为4kHz~20kHz,且受温度、供电电压影响较大。

虽然手册给出的VLO典型值为12kHz,以下程序实测方波频率为约0.84~0.85kHz,即实际VLO的频率为约10kHz

 1 #include "io430.h"
 2 
 3 #define LED1 BIT0 //red
 4 #define LED2 BIT6 //green
 5 
 6 void main(void)
 7 {
 8   // Stop watchdog timer to prevent time out reset
 9   WDTCTL = WDTPW + WDTHOLD;
10   
11   P1OUT = LED1;
12   P1DIR |= LED1+LED2;
13   
14   BCSCTL1 = CALBC1_1MHZ; //Running at 1MHz
15   DCOCTL = CALDCO_1MHZ;
16   
17   BCSCTL3 |= LFXT1S_2; //ACLK source: VLO; VLO typical freq = 12kHz
18   BCSCTL1 |= DIVA_2; //ACLK = VLO divided by 4: typical 3kHz
19   
20   TA0CCR0 = 1500 - 1;//overflow freq = 3000/(TACCR0+1) = 2Hz (500ms) 
21   TA0CCTL0 = CCIE; //enable interrupt
22   TA0CTL = TASSEL_1 + MC_1 +TACLR; //ACLK, no divide, up mode ,clear timer
23   //the actual overflow period measured: 585~595ms -> VLO freq is ~10k
24   //so the VLO is not very accurate.
25   
26   __enable_interrupt();
27   LPM3; //enter the low-power mode 3
28   
29 }
30 
31 //ISR
32 #pragma vector = TIMER0_A0_VECTOR
33 __interrupt void CCR0_ISR(void)
34 {
35     //TA0CCR0 flag clearing is automatic
36     P1OUT ^= LED1 + LED2;
37 }