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.

[参考译文] MSP430FR2311:为低功耗模式禁用 ACLK [禁用 REFO/XT1CLK]

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/782916/msp430fr2311-disable-aclk-for-lower-power-mode-disable-refo-xt1clk

器件型号:MSP430FR2311
主题中讨论的其他器件: ENERGYTRACE

大家好、我们将在 EXP430FR2311 Launchpad 上使用 MSP430FR2311进行开发。


我们能够在 LPM 3.5和 LPM4中降低到低功耗。  但是、我们无法在 LPM3中实现低功耗模式。  在其他论坛帖子中、我能够看到这是因为 ACLK 请求 XT1CLK、然后请求 REFO、消耗15 uA。  但是、在我们的应用中、我们不需要 ACLK、因为我们可以直接从 VLOCLK 获取 RTC。  

我们使用的是 TI MSP driverlib、因此我们将其添加到了代码中:

//HWREG8 (CS_BASE + OFS_CSCTL8)&&~选择时钟;
CS_disableClockRequest (CS_ACLK | CS_MCLK | CS_SMCLK | CS_MODOSC);

鉴于此、我们预计 ACLK 将在 LPM3中关闭、因为我们不允许它获取任何时钟请求。 [这意味着 REFO 时钟也会关闭]。

但是、它似乎不起作用、我们看到~17uA 泄漏。


请帮帮我们。 我们希望最大程度地降低 LPM3中的功耗、并且我们只需要运行 VLOCLK + RTC [或 timer0/Timer1]。 然而、REFO -> ACLK 似乎仍在正常运行、这是没有理由的。 最后粘贴了我们的最小代码

#include 
#include 

void init_clock()
{
FRAMCTL_configureWaitStateControl (FRAMCTL_ACCESS_TIME_CYCESS_0);

// REFO 时钟(精确为32kHz)-> FLL -> 8MHz OUT (DCO)
// CS_initClockSignal (CS_FLLREF、CS_REFOCLK_SELECT、CS_CLOCK_DIVIDER_1);// fLLREFCLK /1 = 32.768kHz
//CS_initFLLSettle (7995,243);//fDCOCLKDIV =(FLLN + 1)*(fFLLREFCLK/n)、9MHz =(x + 1)* 32.768kHz

//DCO -> SMCLK。 仅供 SPI 使用
//CS_initClockSignal (CS_SMCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK_DIVIDER_1);

//DCO -> MCLK。 由 CPU/FRAM/RAM 使用
//CS_initClockSignal (CS_MCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK_DIVIDER_1);

//VLO -> ACLK。 使用者
CS_initClockSignal (CS_ACLK、CS_VLOCLK_select、CS_clock_divider);

//关闭 SVS
PMM_disableSVSH ();


//初始化 RTC
RTC_INIT (RTC_BASE、10000、RTC_CLOCKDIVIDER_1);

RTC_clearInterrupt (RTC_BASE、RTC_overflow_interrupt_FLAG);

//为 RTC 溢出启用中断
RTC_enableInterrupt (RTC_BASE、RTC_overflow_interrupt);

//使用时钟源 VLOCLK 启动 RTC 时钟
RTC_START (RTC_BASE、CS_ACLK);

cs_disableClockRequest (CS_ACLK | CS_MCLK | CS_SMCLK | CS_MODOSC);
}

void main (void)
{

WDT_A_HOLD (WDT_A_base);
// init_clock ();

GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN_All8);
GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN_All8);
GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN_All8);
GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN_All8);

//TBDXXX
PMM_unlockLPM5 ();
CS_TurnOffSMCLK ();
RTC_STOP (RTC_BASE);
while (1) _bis_SR_register (LPM3_bits);

} 

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

    首先、ACLK 有两个源:REFO 或 XT1。 VLO 不能配置为 ACLK 源。
    如果您不使用外部 XT1并将其配置为 ACLK 源和 FLL 基准时钟。 REFO 将作为 ACLK 源和 FLL 基准时钟打开、FLL 时钟为 MCLK/SMCLK 源。 它将保持 REFO 请求、我认为这就是为什么这里的17uA 电流。

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

    我不想使用 ACLK。 我想禁用 ACLK。 我不希望或不需要 ACLK 运行。

    我可以直接将 VLO 时钟馈入 RTC、无需 ACLK。

    在 LPM3期间、MCLK\SMCLK 应该被关闭(并且我专门将 SMCLK 关闭)。 但我看不到如何关闭 ACLK。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现这个答复似乎暗示 ACLK 在 LPM3期间保持激活。

    但是、这与数据表直接相矛盾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要关闭 ACLK、请设置 OSCOFF。 然后、您将使用 LPM4。 [参考用户指南(SLAU445H)图1-5.]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、SLAU445H 看起来非常完美。

    问题是 RTC 在 LPM4中保持关闭、这意味着我们无法轻松使用 LPM4。   另一方面、LPM3.5工作正常、但我们需要重新设置 I2C 和 SPI、因为它们的寄存器将在 RAM 复位时复位。

    数据表如何显示 ACLK 在 LPM3中是可选的、但指南却说不是可选的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > //使用时钟源 VLOCLK 启动 RTC 时钟
    > RTC_START (RTC_BASE、CS_ACLK);

    这似乎应该是 RTC_CLOCKSOURCE_VLOCLK、而不是 CS_ACLK。

    即使您需要 ACLK、CS_ACLK 也不属于这里(而是 RTC_CLOCKSOURCE_ACLK)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、您说得对、应该是 RTC_CLOCKSOURCE_VLOCLK。   我更改了它、但当前信息仍然相同。 无论采用哪种方式、当 我尝试使用 RTC_Stop 时、它都不会影响、这意味着它不应请求时钟。

    看起来 ACLK 仍在运行。 如何在 LPM3中关闭 ACLK?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的观点是、如果你(或者至少是 I)从 VLOCLK 运行 RTC、并且在 LPM4中等待(ACLK 关闭)、那么 RTC 运行就很好了。 在本例中、LPM01A 显示小于0.8uA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    啊,我看到你说什么。

    但是、在这种情况下、RTC 事件不会从 LPM4唤醒。 (或者至少我不能得到任何?)。 在我的示例中、我删除了 RTC_STOP、将 RTC_START 更改为使用 RTC_...VLOCLK。  但是、我没有触发 RTC ISR (这是预期的、因为 RTC 不会从 LPM4触发?)

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

    这里是我一直在使用的东西。 您必须将其转换为 Driverlib 调用、但它是自包含的。

    当我在 Launchpad 上运行时、我会以类似于0.5Hz 的频率闪烁。 如果我移除 LED 跳线、EnergyTrace 为1.9uA、LPM01A 为0.75uA。

    //////
    开始使用寿命为 msp430fr231x_LPM3_01.c
    //
    #include 
    int
    main (void)
    {
    WDTCTL = WDTPW | WDTHOLD;
    RTCMOD = 10000UL; //假设 VLOCLK 大约为10kHz
    RTCCTL = RTCSS_3 | RTCPS_0 | RTCIE | RTCSR;// VLOCLK/1、启用、立即加载
    //端口配置将所有未使用的引脚输出为低电平
    P1OUT = 0x00;
    P2OUT = 0x00;
    P1DIR = 0xff;
    P2DIR = 0xff;
    PM5CTL0 &=~LOCKLPM5; //启用 GPIO
    FRCTL0 = FRCTLPW | NWAITS_0; // NWAITS=0;仅用于消除该警告
    CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;// REFO (~32768Hz)作为 ACLK
    _bis_SR_register (LPM4_bits | GIE); //进入 LPM4
    __no_operation(); //对于调试
    }
    
    #pragma vector=RTC_vector
    __interrupt void RTC_ISR (void)
    {
    _bis_SR_register (OSCOFF); // ACLK (REFOCLK)关闭
    (无效)RTCIV; //我们知道它=2
    P1OUT ^= BIT0; //每1次切换 P1.0 (LED)
    返回;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只是注意到 ISR 明确设置了 OSCOFF。 这是另一个实验的剩余部分、不会影响这个实验。 (您可以将其删除或忽略。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Bruce!

    这个例子给我带来了最大的惊喜。  然后、我将代码修改为 driverlib、它仍然有效(我意外地收到了一条错误的注释)。  

    如果您不介意、在我关闭问题之前、让我先简单地问您一些有关您的代码的问题!

    1、为什么在每次中断时禁用 ACLK? 这不是您应该能够执行一次的操作(通过调用 LPM4 ENTER)吗? 已经有 OSCOFF 标志的寄存器、对吧)

    2.为什么这样做有效? 数据表明确指出、您只能从 IO 唤醒、而不能从 RTC/计时器唤醒。  

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

    1) 1)我在前一个注释中想说的是:关闭 ISR 中的 ACLK 是我之前实验中的一项剩余操作、我在发布之前忘记了删除它。 它在 ISR (微小) 5uA 尖峰中不会产生可测量的差异。 (这实际上是实验。)
    2) 2)我必须将文档问题推迟给 TI 人员。 我不确定如何解读表6-1。

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

    对于第二个问题、当由 VLOCLOCK 或 XT1CLK 供源时、RTC 可在 LPM4中工作。 请参阅表6-1的注释。 数据表中的工作模式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    表6-1表明 LPM4没有来自 RTC 计数器的唤醒事件。

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

    感谢您在数据表中指出这种不匹配情况。 当由 XT1CLK 和 VLOCLK 供源时、RTC 计数器可以正常工作、包括唤醒功能。

    我将向我们的文档团队提供反馈、以更新信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Bruce 和 Wei!