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.

[参考译文] MSP430FR5994:LPM3,使用计时器中断。

Guru**** 2524550 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/618978/msp430fr5994-lpm3-using-timer-interrupt

部件号:MSP430FR5994

尊敬的先生:

   我有一个在430fr5994启动板上运行的简单程序。  它始终处于lpm 3中,但计时器运行并操作中断,从而切换LED。  将一切都放下。  装置应以8MHz运行。   

   我测量的睡眠电流为94ua,LED电流为3mA。   我想知道94ua是否正确。  希望这能不到10个月。

该方案如下:


#include <MSP4S.h>
/*
*定义LED端口和PIN
*/
#define LED_Pdir P1DIR
#define LED_pout P1OUT
#define LED_PIN BIT0

void ConfigTimerA(unsigned int delayCycles);
/***************************************************************************
*
*函数:BlinkInterrupt
*
*用途:使用TimerA和中断使LED闪烁
*
*参数:无
*
*                      .43ma和3.28ma
*
*                      .094和2.97ma 额外跳线已移除
*
* /
Void主(void)

   WDTCTL = WDTPW | WDTHOLD;              //停止看门狗计时器
   PM5CTL0 &=~LCKLPM5;                  //禁用GPIO开机默认高阻抗模式

   //初始化时钟和I/O:
   //启动时钟系统,最大DCO设置为~8MHz
   CSCTL0_H = CSBey >> 8;                   // CSBKey=A500。  解锁时钟寄存器
   CSCTL1 = DCOFSEL_3 | DCORSEL;            //将DCO设置为8MHz。  6|40
   CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;
   CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1;    //设置所有分隔线
   CSCTL0_H = 0;                            //锁定CS寄存器


   //配置LED
   P1SEL0 &=~BIT0;         //为WFP 1.0 选择GPIO
   P1SEL1 &=~BIT0;
   P1DIR = 0;//将P1端口设置为输入方向
   P1REN = 0; //下拉

   LED_Pdir || LED_PIN;//将WFP 1.0 设置为输出引脚
   LED_pout &=~LED_PIN;//将WFP 1.0 设置为低(关闭LED)


   //将未使用的端口设置为下拉:
   P2SEL0 &=~BIT0;         //为WFP 1.0 选择GPIO
   P2SEL1 &=~BIT0;
   P2DIR =0;//将P2设置为输入方向
   P2REN = 0;     //下拉

   P3SEL0 &=~BIT0;         //为WFP 1.0 选择GPIO
   P3SEL1 &=~BIT0;
   P3DIR =0;//将P2设置为输入方向
   P3REN = 0;     //下拉

   P4SEL0 &=~BIT0;
   P4SEL1 &=~BIT0;
   P4DIR =0;          //至输入方向
   P4REN = 0;     //下拉


   P5SEL0 &=~BIT0;         //这有按钮
   P5SEL1 &=~BIT0;
   P5DIR =0;          //至输入方向
   P5REN = 0;     //下拉

   P6SEL0 &=~BIT0;
   P6SEL1 &=~BIT0;
   P6DIR =0;          //至输入方向
   P6REN = 0;     //下拉

   P7SEL0 &=~BIT0;
   P7SEL1 &=~BIT0;
   P7DIR =0;          //至输入方向
   P7REN = 0;     //下拉

   P8SEL0 &=~BIT0;
   P8SEL1 &=~BIT0;
   P8DIR =0;          //至输入方向
   P8REN = 0;     //下拉

   ConfigTimerA(5万);//配置计时器
   同时(1)
   {
       _BIS_SR_REGISTER (LPM3_BITS + GIE);//使用中断进入低功耗模式3
   }
}
/***************************************************************************
*
*函数:configTimerA
*
*用途:配置TimerA
*
*参数:delayCycles:延迟的时钟周期数
*
* /
void ConfigTimerA (无符号int delayCycles)

   TA0CCTL0 |= CCIE;//启用计时器中断
   TA0CCR0 = delayCycles;//计时器中的周期数
   TA0CTL |= tassel_1;//使用ACLK作为计时器的来源
   TA0CTL |= MC_1;//使用UP模式计时器

}
/***************************************************************************
*
*功能:TIMER_A0
*
*用途:中断处理程序,为TimerA0中断提供服务
*
*参数:无
*
* /
#pragma vector=TIMER0_A0_vector
__interrupt void Timer_A0 (void)

   LED_pout ^= LED_PIN;//切换LED
//当我们退出中断例程时,我们返回到低功率模式
}

请告诉我。

谢谢!

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    一些评论:

    1. 要优化功耗,应将未使用的端口/引脚配置为输出低电平
      1. 不使用下拉菜单输入
    2. 您如何测量电流消耗?
      1. 如果连接了调试器,则会增加电流消耗  
      2. 设备应在未连接调试器的情况下自由运行
    3. 您运行MPS430FR5994的硬件是什么?
      1. 由于主板上消耗电流的其他组件,可能很难在启动板上获得数据表功率编号
    4. 您正在从VLO获取计时器  
      1. 根据数据表,您应该能够获得~0.5uA电流消耗(不包括SVS)

    此致,  
    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢,Caleb:

    使用fr5994启动垫。 连接调试器(至少现在这样的UA较少)。 在3.3V引脚上使用Fluke DVM。 将更改为输出,并尽快驱动低电平。

    谢谢!
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Caleb:
    我将输出更改为全驱动低。 电流几乎相同。 由于某种原因,该装置独立地提取10 % less睡眠电流,但连接了调试器。 调试软件关闭时,它的电流较低。

    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Caleb:

    同时将SD卡从其连接器中拉出。
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    5V跳线输出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SD卡周围的R5和R7不在中。 串行端口跳线已出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,John:

    您提到设备在不处于调试模式时消耗的电流较低。 这是预期的,您应该在设备自由运行的情况下进行任何电流测量。

    您能否提供有关如何为设备供电的更多信息? 此外,您的代码设置为定期唤醒设备,以切换LED。 您可能看到Fluke上的平均电流,而不仅仅是低功率模式电流。

    我再次强调,由于消耗电流的外部组件增加,因此很难从启动板上的数据表中获得低功率数字。

    此致,
    Caleb Overbay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢,Caleb:

    你也是一个救生员。 是的,无论您如何操作,这种低功耗都很难实现。 无论如何,我以前初始化J端口失败了。
    在J初始化为低输出(与其它所有的一样)后,LED熄灭时的电流降至0.7ua! 指示灯打开时为2.83ma。
    另外,在另一个系统上,当调试引脚断开时,电流更低。
    此程序使LED循环亮起约6秒,然后熄灭约6秒

    谢谢!
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,John:

    很高兴在这里,您能够找出导致高电流消耗的原因。 您还有其他问题吗?

    此致,
    Caleb Overbay