您好、TI 团队:
我希望有人检查一下为 MSP430FR2433编写的这一低功耗代码。 我要确认的是、此代码是否会使器件进入 LMP3模式30秒、然后唤醒以使 LED 闪烁。 可以有人确认一下。
#包含
void Init_GPIO (void);
void Init_Timer (void);
volatile unsigned int blinkCounter = 0;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//根据 MCLK 的器件数据表需要配置一个 FRAM 等待状态
//在配置时钟系统之前8MHz 之外的操作。
FRCTL0 = FRCTLPW | NWAITS_1;
//配置 GPIO
init_gpio();
//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;
__ bis_SR_register (SCG0);//禁用 FLL
CSCTL3 |= SELREF__REFOCLK;//将 REFO 设置为 FLL 基准源
CSCTL0 = 0;//清除 DCO 和 MOD 寄存器
CSCTL1 &=~(DCORSEL_7);//首先清除 DCO 频率选择位
CSCTL1 |= DCORSEL_5;//设置 DCO = 16MHz
CSCTL2 = FLLD_0 + 487;// DCOCLKDIV = 16MHz
__delay_cycles (3);
__BIC_SR_register (SCG0);//启用 FLL
(CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));// FLL 锁定
CSCTL4 = SELMS__DCOCLKDIV | SELM__REFOCLK;//将默认 REFO (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
//配置 TimerA
Init_Timer ();
//输入 LPM3
__ bis_SR_register (LPM3_bits | GIE);
while (1)
{
//由于我们处于 LPM3中,因此无法访问这部分代码
// TimerA 中断将处理 LED 闪烁并且 LPM3退出
}
}
void Init_Timer (void)
{
TA0CCTL0 = CCIE;//启用计时器 A0中断
TA0CCR0 = 62768;//设置1秒的周期(ACLK 频率为32768Hz)
TA0CTL = TASSEL__ACLK | MC__UP;// ACLK、向上计数模式
}
//计时器 A0中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A0_vector
__interrupt void TimerA_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (TIMER0_A0_vector)) TimerA_ISR (void)
#else
#错误编译器不受支持!
#endif
{
if (blinkCounter == 1)
{
P1OUT |= BIT0;
}
否则
{
P1OUT &=~BIT0;
}
BlinkCounter ++;
if (blinkCounter > 30)
{
BlinkCounter = 0;
}
//在从中断返回时退出 LPM3
__ bic_SR_register_on_exit (LPM3_BITS);
}
void Init_GPIO()
{
P1DIR = BIT0;//将 P1.0设置为输出
P1OUT 且=~BIT0;//最初关闭 LED
}
谢谢!
此致、
普赫拉吉·辛格
