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.

[参考译文] MSP430FR5989-EP:低功耗模式3.5

Guru**** 2034120 points
Other Parts Discussed in Thread: MSP430FR5989-EP, MSP430FR6989, RM48L952, ENERGYTRACE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/967046/msp430fr5989-ep-low-power-mode-3-5

器件型号:MSP430FR5989-EP
主题中讨论的其他器件: MSP430WAREMSP430FR6989RM48L952ENERGYTRACE

大家好、

我们 在设计中使用了 TMS5703137CGWTMEP 微控制器。 由于 MCU 没有 RTC、并且我们有温度限制、因此我们还选择了仅用于 RTC 应用的 MSP430FR5989-EP。

请大家解释一下如何在 LPM3.5模式下仅使用 RTC。

在 我们的设计中附加了 MSP430FR5989-EP 电路以供参考。 如图所示、引脚编号 出于 LPM 目的、14和15连接到 TMS5703137CGWTMEP MCU。

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

    示例 msp430fr69xx_lpm3-5_01.c 演示了如何使用具有 RTC 唤醒功能的 LPM3.5:

    https://dev.ti.com/tirex/explore/node?node=AFyv-fW9sxHfoEm94nud.Q__IOGqZri__LATEST

    示例 msp430fr69xx_lpm4-5_01.c 演示了如何使用具有引脚唤醒功能的 LPM4.5:

    https://dev.ti.com/tirex/explore/node?node=AOgGKPNEcmInD2zOl9llyw__IOGqZri__LATEST

    您需要将这两者结合起来、以获得 LPM3.5和引脚唤醒功能。 (您可能还需要 RTC 唤醒。) LPM3.5和 LPM4.5之间的唯一区别是 RTC 是否正在运行。

    在这两个示例中、假设没有任何引脚连接、则将 GPIO 配置(整体)为输出低电平。 您应该审核这些设置、以确保不会设置与某些外部连接的总线冲突。

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

    您好、Bruce、

    我随附了我们的代码供您参考。 请检查 LPM3.5的配置是否正确。

    下面是代码。

    /*
    版权所有-- BSD_EX
    *版权所有(c) 2014、德州仪器(TI)公司
    *保留所有权利。
    *
    *以源代码和二进制形式重新分发和使用、有无
    *如果满足以下条件、则允许进行修改
    符合*:
    *
    **源代码的重新分发必须保留上述版权
    *注意、此条件列表和以下免责声明。
    *
    **二进制形式的再发行必须复制上述版权
    *请注意、中的此条件列表和以下免责声明
    *随分发提供的文档和/或其他材料。
    *
    **德州仪器公司的名称和名称均不相同
    *其贡献者可用于认可或推广衍生产品
    *未经特定的事先书面许可。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *以及任何明示或暗示的保证、包括但不限于:
    *特定适销性和适用性的隐含保证
    *不承认目的。 在任何情况下、版权所有者不得或
    *派遣国应对任何直接、间接、偶然、特殊、
    *典型或必然的损害(包括但不限于
    *采购替代货物或服务;丧失使用、数据或利润;
    *或业务中断)、无论原因是什么以及任何责任理论、
    *无论是合同、严格责任还是侵权行为(包括疏忽或)
    *否则)因使用本软件而以任何方式产生、
    *即使被告知可能会发生此类损坏。
    *
    秘书长的报告
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是通常包含的低级程序
    *高度演示单个外设功能或器件功能
    *简明扼要。 为此、代码可能依赖于器件的加电默认值
    *寄存器值和设置、如时钟配置和注意
    *在组合多个示例中的代码时应采取这种方法、以避免潜在的问题
    *效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
    *用于外设配置的 API 函数库方法。
    *
    *--/版权--
    秘书长的报告
    // MSP430F59xx 演示- eUSCI_A0、SPI 4线从数据回显
    //
    //说明:SPI 从设备使用4线制模式与 SPI 主设备进行通信。 收到的数据
    //从主器件回传。
    // ACLK = 32.768kHz、MCLK = SMCLK = DCO ~ 1MHz
    //注意:确保在主器件之前为从器件加电、以防止由于而导致的延迟
    //从初始化。
    //
    //
    // MSP430FR6989
    //------------
    ///|\| XIN|-
    //||| 32KHz 晶振
    //--|RST XOUT|-
    //||
    //| P2.0|->数据输出(UCA0SOMI)
    //||
    //| P2.1|<-数据输入(UCA0SIMO)
    //||
    //| P1.5|->串行时钟输出(UCA0CLK)
    //| P1.4|<-从器件选择(UCA0STE)
    //
    //
    // William Goh
    // Texas Instruments Inc.
    // 2014年4月
    //使用 IAR Embedded Workbench V5.60和 Code Composer Studio V6.0构建
    秘书长的报告 /

    /*
    复位后、时钟源默认配置
    *============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    * 1) SMCLK:子系统主时钟打开
    * 2) VLO:内部超低功耗低频振荡器关闭
    * 3) LFXTCLK:低频振荡器关闭
    * 3.1) LFXT BYPASS:LFXT 源自外部晶振(复位)
    * 3.2) LFXTDRIVE:最大驱动强度和最大电流消耗 LFXT 振荡器(3h)
    4) HFXTCLK:高频振荡器关闭
    * 5) DCOCLK:内部数控振荡器(DCO)打开(DCO 时钟默认为4MHz)。
    6) MODCLK:频率典型值为5MHz 的内部低功耗振荡器
    *====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *


    #include "main.h"
    #include "Peripheral_Init.h"
    #include "msp430_Flash.h"
    #include "sRAM.h"


    //#define DEBUGPORT_UART

    #if defined (__TI_Compiler_version__)
    #pragma DATA_SECTION (FRAM_writeRead、".infoA")
    uint16_t FRAM_writeRad[write_size]={0};
    #Elif defined (_IAR_systems_icc_)
    __persistent unsigned long FRAM_WRITE[WRITE_SIZE]={0};
    #Elif defined (_GNU_)
    unsigned long __attribute__(persistent) FRAM_write[write_size]={0};
    其他
    错误编译器不受支持!
    #endif

    volatile uint8_t Rxdata=0;
    RTC_t 日历时间;

    uint8_t RTCUpdateFlag=0;
    void SendRTCData (void);
    volatile uint8_t UartRXData = 0;
    volatile uint8_t UartTXData = 1;

    volatile uint8_t RTC_Counter=0;


    int main (空)


    uint16_t delay=0;
    //停止看门狗计时器
    WDTCTL = WDTPW | WDTHOLD;

    for (delay=0;delay<1000;delay++);
    //配置 PinMux
    PinMux();

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~LOCKLPM5;

    //配置系统时钟
    SystemClockConfig();

    //配置 RTC 参数
    calender_time.Sec = 30;
    calender_time.min = 43;
    calender_time.hour = 18;
    calender_time.Day of 周=3;
    calender_time.day = 24;
    calender_time.month = 9;
    calender_time.Year = 2020;

    //初始化 MSP430外设
    MSP430_PeripheralInit();

    //将 P4.0设置为默认高电平状态,
    //一旦 P4.0为低电平,生成中断到主设备以开始获取 RTC 值
    //在 RTC ISR 内将发生 P4.0从低到高的事务
    P3OUT = 0x01;


    //默认情况下,RTC_UpdateCmplt 将被清除
    calender_time.rtc_UpdateCmplt=复位;

    //闪存测试程序获取软件校验和和和版本,计算校验和
    FlashTestProgram();

    //进入 LPM3模式且中断被启用
    _bis_SR_register (LPM4_bits| GIE);
    //_bis_SR_register (LPM3_bits | GIE);
    while (1)

    if (Calender_time.rtc_UpdateCmplt==设置)

    //用新的 RTC 值重新初始化
    RTC_Initialization (&Calender_Time);

    //更新后复位 RTC 更新完成标志。
    calender_time.rtc_UpdateCmplt=复位;

    //在启用中断的情况下进入 LPM3模式
    _bis_SR_register (LPM4_bits| GIE);

    #ifdef DEBUGPORT_UART
    while (1)

    while (!(UCA1IFG & UCTXIFG));
    UCA1TXBUF = UartTXData;//将数据加载到缓冲区中
    /*while (!(UCA1IFG & UCRXIFG));
    UartRXData = UCA1RXBUF;//将数据加载到缓冲区
    UartTXData++;*/

    //_bis_SR_register (LPM3_bits| GIE);//启用中断后进入 LPM3模式
    _bis_SR_register (LPM4_bits| GIE);

    #endif


    /*------------------
    函数名称:SendRTCValuetoMaster()
    说明:将更新 RTC 值发送到主板
    参数:命令类型为 uint8_t
    返回:无
    ---------------------------------------------------- *
    内联空 SendRTCValuetoMaster (uint8_t u8Command)

    switch (u8Command)

    案例虚拟写入:
    Rxdata=Calender_time.Sec;
    UCA0TXBUF=Rxdata;//在 RTC_ISR 中、Txbuf 被载入 RTCSEC;载入下一个字节为最小值
    中断;
    CMD_SEC 案例:
    Rxdata=Calender_time.min;
    UCA0TXBUF=Rxdata;//在 RTC_ISR 中、Txbuf 被载入 RTCSEC;载入下一个字节为最小值
    中断;
    案例 CMD_MIN:
    Rxdata=日历计时小时;
    UCA0TXBUF=Rxdata;// Tx 本来是最小值;以小时的形式加载下一个字节
    中断;
    案例 CMD_Hour:
    Rxdata=Calender_time.dY_of_week;
    UCA0TXBUF=Rxdata;// Tx 本来是一个小时;作为周中的一天加载下一个字节
    中断;
    案例 CMD_Dow:
    Rxdata=日历时间。天;
    UCA0TXBUF=Rxdata;// Tx 本来是一周中的某一天;将下一个字节加载为天
    中断;
    案例 CMD_DAY:
    Rxdata=日历时间月;
    UCA0TXBUF=Rxdata;// Tx 本来是一天的;以月的形式加载下一个字节
    中断;
    案例 CMD_MONTH:
    Rxdata=(uint8_t)(Calender_time.Year & 0xff);
    UCA0TXBUF=Rxdata;// Tx 本来是月份;将下一个字节作为年份 lsb 加载
    中断;
    案例 CMD_year LSB:
    Rxdata=(Calender_time.Year>>8)和0xff);
    UCA0TXBUF=Rxdata;
    中断;
    案例 CMD_year MSB:
    //将 P4.0设置为“低”
    P3OUT = 0x01;
    //从主站侧进行虚拟传输,以接收到主站侧的 MSB 年值
    // Tx 本来是年 lsb;将下一个字节加载为年 MSB
    中断;
    默认值:
    中断;


    /*------------------
    函数名:GetRTCValuefromMaster()
    说明:从主板获取新的 RTC 值
    参数:命令类型为 uint8_t,新 RTC 数据类型为 uint8_t
    返回:无
    ---------------------------------------------------- *
    内联空 GetRTCValuefromMaster (uint8_t u8Command、uint8_t u8NewRTCData)

    switch (u8Command)

    CMD_SEC 案例:
    calender_time.Sec=u8NewRTCData;
    UCA0TXBUF=0xA2;// Tx 本来会变为0xA1;将下一个字节加载为0xA2
    calender_time.rtc_UpdateCounter=2;
    中断;
    案例 CMD_MIN:
    calender_time.min=u8NewRTCData;
    UCA0TXBUF=0xA3;// Tx 本来会变为0xA2;将下一个字节加载为0xA3
    calender_time.rtc_UpdateCounter=3;
    中断;
    案例 CMD_Hour:
    calender_time.hour=u8NewRTCData;
    UCA0TXBUF=0xA4;// Tx 本来会变为0xA3;将下一个字节加载为0xA4
    calender_time.rtc_UpdateCounter=4;
    中断;
    案例 CMD_Dow:
    calender_time.Day of 周=u8NewRTCData;
    UCA0TXBUF=0xA5;// Tx 本来会变为0xA4;将下一个字节加载为0xA5
    calender_time.rtc_UpdateCounter=5;
    中断;
    案例 CMD_DAY:
    calender_time.day = u8NewRTCData;
    UCA0TXBUF=0xA6;// Tx 本来会变为0xA5;将下一个字节加载为0xA6
    calender_time.rtc_UpdateCounter=6;
    中断;
    案例 CMD_MONTH:
    calender_time.month=u8NewRTCData;
    UCA0TXBUF=0xA7;// Tx 本来会变为0xA6;将下一个字节加载为0xA7
    calender_time.rtc_UpdateCounter=7;
    中断;
    案例 CMD_year LSB:
    calender_time.Year=(uint8_t) u8NewRTCData;
    UCA0TXBUF=0xA8;// Tx 本来会变为0xA7;将下一个字节加载为0xA8
    calender_time.rtc_UpdateCounter=8;
    中断;
    案例 CMD_Year_MSB://Dummy transmit from master side to receive the MSB value of Year to Master Side
    calender_time.Year|=(uint16_t)(u8NewRTCData<8);
    UCA0TXBUF=0;// Tx 本来会变为0xA8;加载下一个字节为0x00
    calender_time.rtc_UpdateCounter=reset;
    calender_time.rtc_UpdateNewFlag=reset;
    calender_time.rtc_UpdateCmplt=设置;
    中断;

    空 PinMux (空)

    //配置 GPIO
    //P1SEL0 |= BIT5 | BIT4 | BIT6 | BIT4;//引脚多路复用器配置为 UCB0。
    //P1SEL1 |= BIT5 | BIT4;//配置 P1.4-->从器件选择和
    P2SEL0 |= BIT0 | BIT1 | BIT2 | BIT3;//配置 P2.0->MOSI 和 P2.1->MISO 和 P2.2->CLK 和 P2.3->SLAVE 选择
    P3SEL0 |= BIT4 | BIT5;//为 P3.4->USCAXD 和 P3.5->USCAXD 配置 UART
    PJSEL0 |= BIT4 | BIT5;//用于 XT1


    /*------------------
    函数名称:SystemClockConfig()
    说明:配置系统时钟
    参数:void
    返回:无
    ---------------------------------------------------- *
    空 SystemClockConfig (空)

    //将系统时钟从 DCOCLK 配置为1MHz
    // ACLK->LFXTCLK (低频振荡器)- 32、768Hz、MCLK->DCOCLK (内部数控振荡器)
    // SMCLK->DCOCLK。
    // XT1设置
    CSCTL0_H = CSKEY >> 8;//解锁 CS (时钟系统)寄存器
    CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
    CSCTL1 &=~DCORSEL;//对于 DCO 的低速器件配置、它始终为0。 以便仅将 DCO 保持在1MHz
    CSCTL2 = SELA_LFXTCLK | SEL__DCOCLK | SELM_DCOCLK;// ACLK->LFXTCLK (低频振荡器)- 32、768HZ、MCLK->DCOCLK (内部数控振荡器)
    // SMCLK->DCOCLK。
    CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;//设置所有分频器
    CSCTL4 &=~LFXTOFF;// LFXT (低频振荡器)打开
    操作

    CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志,在最后一次复位后没有发生故障情况
    SFRIFG1 &=~OFIFG;//针对无中断挂起清除振荡器故障中断标志
    } while (SFRIFG1&OFIFG);//测试振荡器故障标志
    CSCTL0_H = 0;//锁定 CS (时钟系统)寄存器

    /*------------------
    函数名:SPIInitConfig()
    说明:初始化 SPI 外设
    参数:void
    返回:无
    ---------------------------------------------------- *
    空 SPIInitConfig (空)

    //为 SPI 从运行配置 USCI_A0
    UCA0CTLW0 = UCSWRST;//将状态机置于复位状态**
    UCA0CTLW0 |= UCSYNC| UCMSB | UCMODE_2 | UCSTEM|UCCKPL|UCCKPH;// 4引脚、8位 SPI 从器件、时钟极性低、MSB 优先、 8位配置
    UCA0CTLW0 |= UCSSEL_UCLK;// SPI 从设备的 UCLK,因为主板将为从设备生成时钟
    UCA0BR0 = 0x02;//将比特率控制寄存器配置为2
    UCA0BR1=0;
    //UCB0MCTLW = 0;//无调制
    UCA0CTLW0 &=~UCSWRST;//初始化 USCI 状态机
    UCA0IE |= UCRXIE;//启用 USCI_A0 SPI RX 中断


    /*------------------
    函数名称:GpioInitConfig()
    说明:配置 GPIO 引脚
    参数:void
    返回:无
    ---------------------------------------------------- *
    空 GpioInitConfig (空)

    //P1DIR|=BIT0;//将端口1.0配置为连接到 LED1的输出
    P3DIR|=BIT0 | BIT1;//将端口3.0配置为输出,连接到 RM48L952以生成中断

    /*------------------
    函数名:UARTInitConfig()
    说明:初始化 UART 外设
    参数:void
    返回:无
    ---------------------------------------------------- *
    空 UARTInitConfig (空)

    //将 USCI_A0配置为 UART 模式
    UCA1CTL1 |= UCSWRST;
    UCA1CTL1 = UCSSEL_ACLK;//将 ACLK = 32768设置为 UCBRCLK
    UCA1BR0 = 3;// 9600波特
    UCA1MCTLW = 0x5300;// 32768/9600 - INT (32768/9600)=0.41
    // UCBRSx 值= 0x53 (请参阅 UG)
    UCA1BR1 = 0;
    // UCA1STATW |=(1<<7);
    UCA1CTL1 &=~Ω UCSWRST;//从复位中释放
    UCA1IE |= UCRXIE;//启用 USCI_A0 RX 中断

    /*------------------
    函数名称:MSP430_PeripheralInit()
    说明:初始化 MSP430外设
    参数:void
    返回:无
    ---------------------------------------------------- *
    void MSP430_PeripheralInit (void)

    GPIO 引脚的//初始化
    GpioInitConfig();

    SPI 外设的//初始化
    SPIInitConfig();

    #ifdef DEBUGPORT_UART
    // UART 外设的初始化
    UARTInitConfig();
    #endif

    //初始化 RTC 外设。
    RTC_Initialization (&Calender_Time);

    /*------------------
    函数名称:RTC_Initialization()
    说明:初始化 RTC 外设
    参数:void
    返回:无
    ---------------------------------------------------- *
    void RTC_Initialization (RTC_t * RTC日历)

    //实时时钟键。 应向该寄存器写入 A5h 以解锁 RTC_C A
    //写入除 A5h 以外的值会锁定模块。 读取该寄存器
    //始终返回96h。
    RTCCTL0_H=RTC_UNLOCK;

    //日历模式和分钟已更改
    RTCCTL1 = RTCMODE + RTCTEV_0;

    //日历以及预分频器计数器、RT0PS 和 RT1PS 都被停止
    RTCCTL1 |= RTCHOLD;

    //将 RTC 参数更新到 RTC 寄存器
    RTCSEC = RtcCalender->Sec;
    RTCMIN = rtcCalender->min;
    RTCHOUR = RtcCalender->Hour;
    RTCDOW = RtcCalender->Day of 周;
    RTCDAY = rtcCalender->天;
    RTCMON = rtcCalender->Month;
    RTCYEAR = RTC日历->年;

    //启用 RTC 读取就绪和 RTC 时间事件中断
    RTCCTL0_L = RTCTEVIE | RTCRDYIE;

    //实时时钟(日历模式)可用。(释放 RTC)
    RTCCTL1 &=~RTCHOLD;

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

    这是一个相当多的代码、我在"工作日"、因此我无法在今天晚上之前查看。

    同时:当您运行它时、它有什么作用?

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

    您的目标是 LPM4还是 LPM3.5? 此代码使用 LPM4。

    对于 LPM4、它看起来正常。 您的 UART 不会在 LPM4中运行、但我看不到它的任何用途。 我看不到任何 ISR、但 SPI 能够将您从 LPM4唤醒。

    对于 LPM3.5、存在一些代码丢失。 此外、由于 SPI 不工作、在 LPM3.5模式下、我看不到主机将如何与 MSP430联系。 我想象 MSP_pU-1/2 (P3.0/1)将用作唤醒引脚、但它们似乎被指向主机。

    用户指南(SLAU367P)第1.4.3.1节介绍了 LPM3.5的条目、但区别在于:

    1) 1) LDO 在进入 LPMx.5时关闭:

    PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器以写入
    PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF
    
    

    2)通过在 main()上的复位(重新启动)实现唤醒。 它不会从 LPM 条目重新启动

    由于 SPI 不会将您从 LPM3.5唤醒、并且您没有唤醒引脚、因此 LPM4可能是您真正需要的。

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

    您好、Bruce、

    我的目标是在 LPM3.5下运行。

    根据我先前分享的代码、MSP430 IC 消耗的电流约为200uA。 我想它是在工作模式下运行的。

    如何确认它是在工作模式还是低功耗模式下运行? 此外、如何将其从工作模式更改为工作模式?

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

    对于 LPM4、200uA 是相当大的。 需要检查的事项:

    1) 1)所有未使用的引脚应按照用户指南(SLAU367P)表1-4进行配置。 (当我这样做时、我会做一份检查清单。) 这可以避免在会消耗功率的施密特触发器中发生"抖动"。 这(可能)不会生成200uA、但可能会生成50uA。 我提到的这些例子就是这样做的,但正如我在前面提到的那样,你应该谨慎对待它。

    2) 2)避免总线冲突;这些冲突会消耗相当大的电流。 P3.0/1现在是否连接到 RM48? 如果是、那么该端的引脚是如何配置的? 如果它也在驱动它们、这是一个总线冲突。

    3) 3)您正在使用哪些唤醒(从 LPM4)源? 该代码中没有任何 ISR、因此很难告诉我。 如果您太频繁地醒来、LPM 会失去很多好处。

    即使您的长期目标是 LPM3.5、我建议您首先将 LPM4降至低于5 μ A、因为 LPM4更易于使用。

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

    感谢您的早期重放

    1) 1。  在 LPM 3.5中、当检查能量跟踪技术时、RTC 不运行、

    对于以下代码:
     
    PMMCTL0_H = PMMPW_H;                     //打开 PMM 寄存器进行写入
    PMMCTL0_L |= PMMREGOFF;                  //并设置 PMMREGOFF
     
    //在 启用中断的情况下进入 LPM4模式
    _bis_SR_register (LPM4_bits| GIE);
     
    并获取56uA 的电流。
     
    SPI 中断能否在 LPM3.5上工作、以便从主控制器读取 RTC 值、为什么 RTC 不在 LPM3.5中运行?
     
    而在 LPM3.5模式下、RTC 未运行。
     
     
    2)  2) RTC 时钟在 LPM4中以0.80uA 的电流工作、无需连接调试器工具               
      当检入万用表时、使用调试器检查时、电流约为106uA。
    3)  3)在 LPM4中、具有 SPI 接收器中断标志的 SPI 接收器被启用为红色 RTC 数据、当连接到调试器时、它消耗的电流为130.11uA、在这个 LPM4 RTC 运行良好、而没有调试器.90uA 电流消耗。
     
    为什么在 LPM3.5中不产生中断、RTC 也不工作、但它将进入 LPM3.5?
     
    1. 在 LPM 3.5中、当检查能量跟踪技术时、RTC 不运行、
    对于以下代码:
     
    PMMCTL0_H = PMMPW_H;                     //打开 PMM 寄存器进行写入
    PMMCTL0_L |= PMMREGOFF;                  //并设置 PMMREGOFF
     
    //在 启用中断的情况下进入 LPM4模式
    _bis_SR_register (LPM4_bits| GIE);
     
    并获取56uA 的电流。
     
    SPI 中断能否在 LPM3.5上工作、以便从主控制器读取 RTC 值、为什么 RTC 不在 LPM3.5中运行?
     
     
     
    2.                在万用表中检查时、RTC 时钟在 LPM4中以0.80uA 的电流工作、而不连接调试器工具。
     
    使用调试器进行检查时、电流约为106uA。
    在  LPM4中、具有 SPI 接收器中断标志的 SPI 接收器被启用为红色 RTC 数据、当连接到调试器时、它消耗的电流为130.11uA、在这个 LPM4 RTC 运行良好、而没有调试器.90uA 电流消耗。
     
     
     
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1) 1) SPI 不会将 CPU 从 LPM3.5唤醒。 [参考用户指南(SLAU367P)第1.4节] RTC 中断不能满足您的通信目的、因此您需要一个引脚中断来提供唤醒功能。

    2) 2)如何判断 RTC 未运行? 我不确定 EnergyTrace++能否判断 RTC 是否在 LPM3.5下运行。

    3) 3)您是否使用 Free Run 或(标准) Run? 建议对 EnergyTrace 测量使用 Free Run、因为(标准) Run 会给出错误的读数。

    4) 4)您发布的代码有多个 LPM (4)点。 您针对 LPM3.5更改了哪个(哪些)?

    5) 5)您发布的启动(主)代码没有 LPM3.5配置。 您在其中添加了什么代码?

    我(仍然)建议您使用 LPM4、直到始终如一地获得所需的结果。 LPM3.5将添加许多新变量。