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.

[参考译文] MSP430F5329:LPM3和 LPM4中的更多详细信息

Guru**** 2502065 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/685529/msp430f5329-more-details-in-lpm3-and-lpm4

器件型号:MSP430F5329

我有一个必须处于低功耗睡眠模式的系统、该系统需要每小时唤醒一次、进行温度测量、然后返回睡眠状态。 还有其他模式可以全速运行、但我目前并不担心它们。  

是否有一个文档比《家庭手册》slau208p 更详细地讨论了低功耗模式? "MSP430低功耗模式"的搜索生成了0个文档。 搜索3400多篇文章中生成的"MSP430低功耗"。 主要是数据表。  我不知道要搜索什么。  

我认为我无法使用 LPM4、因为它会停止所有振荡器、包括看门狗计时器、因此我无法测量大约1小时的唤醒时间。 我想从 LPM4唤醒的唯一方法是外部信号。  

这就让我使用 LPM3。  

在另一个处理器上、我阅读了一项研究、该研究确定以更快的时钟速率运行更好、因此您处于活动状态的时间更短、并且总体功耗比以更慢的时钟速率运行更低。 (操作的周期数相同。)  是否有关于 MSP430的研究或信息?  

现在我猜、如果我关闭外部32.768kHz 晶体并切换到最佳 VLO。 我应该使用看门狗计时器还是其他计时器之一唤醒我1小时的时间? 我不确定权衡。 这就是我试图找到一个文档的原因。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Kipton、
    这是一个辩论的主题,是通过实验确定的。 我们尚未进行正式研究来研究这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您错过了其他器件。

    除了系列模块之外、还有其他有关低功耗模式的文档吗?

    例如、在我的待机模式下、我想我将使用 VLO 时钟源10000Hz 运行、ACLK 将为该时钟源的1/32或312.5Hz。

    当我不执行任何操作时、我将转到 LPM3。

    现在、我正在尝试弄清楚如何关闭 DCO、因为我在其他模式下使用 DCO、但在这种模式下不使用 DCO。

    在 slau208p 系列文档第165页中、它说:"中可能存在一些情形
    不需要或不需要哪种 FLL 操作;在这些情况下、无需 FLLREFCLK。 这是可以的
    通过设置 SELREF ={7}"完成

    那么、转到 MSP430F5xx_6xx 驱动程序用户指南- 2_91_05_02的第464页、这不是驱动程序的选项。

    除了查看 slau208p 第161页的图5-1 UCS 框图外、它还显示 SCG0关闭 FLL 中的10位频率积分器。 因此、当我不使用 FLL 时、我需要使该位1降低功耗、或者将 SELREF 设置为7也将实现同样的功能? 或者它们是不同的功率级别吗?

    我没有发现 SCG0是否影响除 FLL 之外的任何其他内容。 那么、在该模式下将其保持为1是安全的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你们让我疯了。

    因此、在 MSP430F5xx_6xx 驱动程序用户指南- 2_91_05_02的第464页中、它们具有 UCS_CLOCK _SELECT 所有选项。 这将置位 UCSCTL3寄存器中的 SELREF 位。

    通过 ucs.h、您可以看到:

    #define UCS_XT1CLK_SELECT SELM_XT1CLK
    #define UCS_VLOCLK_SELECT SELM__VLOCLK
    #define UCS_REFOCLK_SELECT SELM__REFOCLK
    #define UCS_DCOCLK_SELECT SELM__DCOCLK
    #define UCS_DCOCLKDIV_SELECT SELM__DCOCLKDIV
    #define UCS_XT2CLK_SELECT SELM_XT2CLK


    因此、您将 SELM 寄存器的映射用于 SELREF 寄存器、希望没有人犯错。

    相当粗心、但我理解您要做的是什么。 您需要为所有情况使用一个例程。 即使您提供的选项不存在、如果错误、也不会生成错误消息。

    现在、我转到第178页的表5-6 UCSCTL3寄存器说明。

    与第165页不同、它不会说7与关闭相同(请参阅此主题中的上一帖子)。 其内容为"111b =保留供将来使用。 当可用时为 XT2CLK、否则为 REFOCLK"

    第161页的图片、图5-1。 UCS 框图使它看起来像111b 未连接到任何东西。

    那么、什么是正确的?

    我是唯一阅读文档的人吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所以我盲目地向这个射击。 是否有人可以检查我的工作。 我不知道订单是否正确。 我找不到任何示例。 




    void CLK_Init2 (void) { uint16_t status; //我认为一切完成后、时钟为: //使用 REFO 时、ACLK = 32768Hz //使用 REFO 时、MCLK = 8、192、000Hz //从 REFO 时、SMCLK = 8、192、000Hz //设置 DCO FLL 基准= REFO //关闭任何外部晶振 //可能来自较低的级别,因此请先更改内核。 PMM enableSvsInLPMFastWake();//通过启用 LPM 中的监控器低侧 //从 LPM2、LPM3和 LPM4中快速启动 状态= PMM setVCore (PMM_CORE_LEVEL_1); if (status = STATUS_FAIL) while (1);//我们有问题。 调试时、在此处停止。 PMM_enableSvsHSvmH ();//在此模式下,我们启用了高侧。 PMM_enableSvsLSvmL ();//我们需要在此模式中启用低侧。 PMM_enableSvsLReset ();//我们永远不会看到低电压事件 _BIC_SR (SCGO);//确保 FLL 已打开。 UCS_TurnOffXT1 ();//确保外部32.768kHz 晶体关闭 UCS_TurnOffXT2 ();//确保外部14.7456MHz 晶体关闭 UCS_initClockSignal (UCS_FLLREF、 UCS_REFOCLK_SELECT、 UCS 时钟分频器1); //设置 ACLK = REFO UCS_initClockSignal (UCS_ACLK、 UCS_REFOCLK_SELECT、 UCS 时钟分频器1); UCS_initClockSignal (UCS_SMCLK、 UCS_DCOCLKDIV_SELECT、 UCS 时钟分频器1); //设置比率和所需的 MCLK 频率并初始化 DCO UCS_initFLSettle (8192、// kHz 250);// 8192/32.768 = 250 //验证时钟设置是否为预期 的时钟值[0]= UCS_getMCLK (); 时钟值[1]= UCS_getSMCLK (); 时钟值[2]= UCS_getACLK (); return; }

    这是我的快速时钟、这是我的待机时钟

    void clk_InitStandby (void)
    {
    uint16_t status;
    //我认为一切完成后、时钟为:
    // ACLK = 1250Hz (使用 VFO)/32//
    MCLK = 10000Hz (使用 VFO
    )// SMCLK = 10000Hz (使用 VFO)
    //设置 DCO FLL 基准= REFO
    //任何外部晶振关闭
    
    //设置 ACLK = VLO /32
    UCS_initClockSignal (UCS_ACLK、
    UCS_VLOCLK_SELECT、
    UCS 时钟分频器_32);
    //设置 SMCLK = VLO --这由睡眠期间禁用的 I2C 和 UART 使用
    /* UCS_initClockSignal (UCS_SMCLK、
    UCS_VLOCLK_SELECT、
    UCS 时钟分频器1);
    */
    UCS TurnOffSMCLK ();//关闭它,因为它不在该模式中使用。
    
    
    //设置 MCLK = VLO
    UCS_initClockSignal (UCS_MCLK、
    UCS_VLOCLK_SELECT、
    UCS 时钟分频器1);
    
    //确保 DCO 关闭
    UCS_initClockSignal (UCS_FLLREF、
    SELREF_7、//库中没有针对7的代码。
    UCS 时钟分频器1);
    
    
    
    UCS_TurnOffXT1 ();//确保外部32.768kHz 晶体关闭
    UCS_TurnOffXT2 ();//确保外部14.7456MHz 晶体关闭
    _BIS_SR (SCG0);//关闭 FLL 以节省功耗。
    
    //在此模式下、我们的频率低于8MHz、因此我们可以让 PMMCOREV0 = 1.8V
    //现在频率更低、我们可以设置电压。
    PMM_enableSvsInLPMSlowWake();//通过启用 LPM 中的监控器低电平侧
    //从 LPM2、LPM3和 LPM4中的上升/下降
    状态= PMM_setVCore (PMM_CORE_LEVEL_0);
    if (status = STATUS_FAIL) while (1);//我们有问题。 调试时、在此处停止。
    
    PMM_disableSvsHSvmH ();//在这种模式下,我们永远不会有高侧,因此请关闭电源以省电。
    PMM_enableSvsLSvmL ();//我们需要在此模式中启用低侧。
    PMM_enableSvsLReset ();//我们永远不会看到低电压事件
    
    //验证时钟设置是否为预期
    的时钟值[0]= UCS_getMCLK ();
    时钟值[1]= UCS_getSMCLK ();
    时钟值[2]= UCS_getACLK ();
    return;
    }
    

    我要关闭吗? 是否有任何问题? 有什么缺失吗?  

    基普

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Kip、
    抱歉、我的回复在昨晚被截断。 我想说的是、我会研究 WDT 与 TimerA/B 的使用情况。 确实、WDT 的使用功耗会更低。

    我想 SELREF{7}的混淆来自第165页的注释、此注释针对 MSP430F543x 和 MSP430F541x、非 A 版本、它们被接至将使用 XT2CLK 或 REFOCLK 的逻辑电路。 但对于您的器件、这似乎未以这种方式连接。 在任一种情况下、当不需要 FLL 时、我都将依靠 SCG0位实现最低功耗。

    如果没有其他模块请求您关闭的任何时钟(这可能会导致器件由于请求而处于较高的 LPM)、则代码中没有任何内容会导致我出现故障或丢失。 它是否按预期运行?

    TI Resource Explorer 中提供了 DriverLib 代码示例(通过以下链接扩展了文件结构: dev.ti.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。

    我没有将其连接到示波器来验证频率、但在其他情况下、它似乎正常工作。

    至少来自的值
    clockValue[0]= UCS_getMCLK ();
    clockValue[1]= UCS_getSMCLK ();
    clockValue[2]= UCS_getACLK ();
    这正是我在大多数情况下所期望的。

    更重要的是、没有任何崩溃。 )

    基普