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.

[参考译文] CCS/MSP430F5419A:LMP4中的 XT1电流

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/786511/ccs-msp430f5419a-xt1-current-in-lmp4

器件型号:MSP430F5419A

工具/软件:Code Composer Studio

大家好、我有一个电路板、它在 XT1上有一个外部16MHz 晶体。

我有从内部 DCO @ 16MHz 或者使用外部 xtal 运行这个电路板的代码。

当配置为外部振荡器时、在 LMP4模式下、我将获得比内部 DCO 多约350uA 的电流。

在进入 LMP4之前、我应该关闭 XT1吗?

void InitXTAL (void)
{
//设置 Vcore 电压电平2高达20Mhz
PMM_setVCore (PMM_CORE_LEVEL_2);

#ifdef INT_XTAL
//配置 XTAL IO
GPIOOUT 低电平(IO_XTAL_XT1_XXIN);//XT1输出低
电平 GPIOCLLCLLCLLCLL_/ REF_CLK_REF_REF_REF_REF_CLK

;/ REF_CLK_CLK_CLK_REF_CLK_REF_REF_CLK_REF_CLK_REF_REF_REF_CLK_REF_CLK_REF_REF_REF_CLK_REF_CLK_CLK_REF_CLK_REF_CLK_REF_CLK_CLK_REF_CLK_CLK_REF_CLK_CLK_CLK_REF_CLK_REF_CLK_REF_CLK_CLK_CLK_CL

/2
UCSCTL6 = XT1OFF | XT2OFF;//关闭 XT1和 XT2

//将 DCO 初始化为16.00MHz
__bis_SR_register (SCG0);//禁用 FLL 控制循环

UCSCTL0 = 0x0000u;//将 DCOx、MODx
SCTL1设置为最低可能值;//设置
为 UCSCTL2 = 0x0000U;//设置为 DCOx = 50 = UCSCTL2 = UCSCT8;//将 DCO 乘法器设置为16MHz
//(N + 1)* FLLRef = Fdco
//(488 + 1)* 32768 = 16MHz

__BIC_SR_register (SCG0);//启用 FLL 控制环路

// DCO 范围位已
更改时最坏情况下的稳定时间//为 n x 32 x 32 x f_MCLK /f_FLL_reference。
有关优化、请参阅5xx // UG 中的 UCS 一章。
// 32*32*16MHz/32768Hz = 500000 = MCLK 周期,DCO 要使
__delay_cycles (500000u);

#else //Ext XTAL
//配置 XTAL IO
GPIODirInput (IO_XTAL_XT1_XIN);//输入
GPIODirOutput (IO_XTAL_XT1_XOUT);//输出
GPIOPeripheralEnable (IO_XTAL_XT1_XIN);//将 XIN 设置为外设功能、即 XT1
GPIOallalEnable (IO_XT1);//将 XT1设置为外设功能

//启用具有中等驱动强度
的 XT1 UCSCTL6 = XTS | XT1DRIVE_1 | XT2OFF;
//XTAL = 16MHz - MCLK 16MHz - SMCLK 8MHz
UCSCTL4 = SELA__REFOCLK | SELM_XT1CLK | SELM_XT1CLK;MCLK
= 1:MCLK;/ CLK = CLK;MCLCLK = CLK;/ CLK = CLK/ CLK/ CLK/ CLK/ CLK/ CLK/ CLK/ CLK/ CLK: REFCLK:1:CLK /2



#endif

//确保 ACLK 始终保持开启
BitSet (UCSCTL8、ACLKREQEN);

//循环直到 XT1、XT2和 DCO 故障标志被清除*/
执行
{
//清除 XT2、XT1、DCO 故障标志(如果仍然存在故障则复位)
BitClear (SC1HTOL、XFFG + UC1HTOL + TFFG + TCLG
//清除振荡器故障标志
BitClear (SFRIFG1、OFIFG);
}
while (BitTest (SFRIFG1、OFIFG));//测试振荡器故障标志
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Steven、
    您的代码中有一些内容需要检查。
    第一件事是两个代码行
    GPIODirInput (IO_XTAL_XT1_XIN);//输入
    GPIODirOutput (IO_XTAL_XT1_XOUT);//输出
    在查看此器件的数据表时、您可以在表6-51中找到 XT1功能选择所需的设置。
    P7DIR.x 控制位无关。 在 XIN/XOUT 两种情况下都需要设置 P7SEL.0、XT1BYPASS 需要清零。
    因此、您需要检查是否发生了这种情况
    GPIOPeripheralEnable (IO_XTAL_XT1_XIN);//将 XIN 设置为外设功能、即 XT1
    GPIOPeripheralEnable (IO_XTAL_XT1_XOUT);//将 XOUT 设置为外设功能、即 XT1
    执行、但 GPIODir... 指令是无用的。
    对于 ACLK、您选择 REFO 作为时钟源并启用时钟请求、注释显示"确保 ACLK 始终保持开启状态"。 现在、LPM4的本质是关闭所有时钟源和振荡器、那么为什么要转到 LPM4、同时强制器件保持 REFO 和 ACLK 激活状态?
    电流消耗是器件有源/非有源模块的影响。 此外、对于 XT1、当打算使用高频振荡器切换到 LPM4时、应将其禁用。 与 DCO 不同、DCO 在 LPM3模式下如果不用于时钟域、则会被停用、在 LPM4模式下、任何情况下都会关闭、而在高频模式下、XT1情况都不是这样。

    此致
    Peter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、GPIOPeripheralEnable 设置 P7SEL.0和 P7SEL.1位。 当 UCSCTL6被置位时、第41行上的 XT1BYPASS 被清零。

    我正在使用 ACKL 运行计时器(TA0)以将处理器唤醒、从而使其始终运行。

    如何禁用 XT1振荡器? 喜欢这个吗?

    BitSet (UCSCTL6、XT1OFF);
    _bis_SR_register (LPM4_BITS); //进入 LPM4

    之后是否需要重新启用它?

    我知道运行 aclk 会消耗电流。 我目前无法理解的是、为什么选择 XT1而不使用 DCO / FLL 会消耗350uA 的电流。

    当 INT_XTAL 被定义时、我的电路板位于 LPM4中、电流为320uA、当它被注释掉时、电流为670uA。 这似乎不正确。 高功率是我的板的其他部分、我只对内部和外部之间的差值感兴趣。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Steven、
    关于 LPM4、我只是想说、只要您强制 MSP 在 LPM4中使 ACLK 保持活动状态、无论您是设置 LPM4还是 LPM3、它都可能没有太大的影响。 这是一件不同寻常的事情、有时以某种方式使用这些东西是有风险的、而这并不是它们的目的。
    就 XT1停用而言、XT1OFF 的设置应该足以在任何模式下禁用振荡器。
    是的、当您再次需要来自 XT1的时钟时、或者更好的说、您需要通过再次清除 XT1OFF 来重新启动它。 您需要考虑振荡器的启动时间、这在很大程度上取决于您的和使用的晶体的硬件设置。 此外、您为 XT1选择的驱动级别也会产生重大影响。
    如果您理解正确的注释、如果选择了具有 FLL 的内部 DCO、则电流消耗低于使用 XT1的电流消耗、对吧?
    虽然所选频率相同(根据您的注释)、但您不一定以16MHz 的频率运行 DCO。
    您将通过禁用 FLL
    _bis_SR_register (SCG0); //禁用 FLL 控制环路
    F5xx 和 F6xx 系列中的 DCO 本身非常不准确。 这就是我们在这些系列中集成了 FLL 时钟系统的原因、该系统通过使用参考时钟源(通常是32.768kHz 晶体)来支持使用 FLL 稳定 DCO。
    查看数据表中最低调制位
    UCSCTL0 = 0x0000u; //设置可能的最低 DCOx、MODx

    UCSCTL1 = DCORSEL_7; //将 RSELx 设置为 DCO = 50MHz
    可能的 DCO 频率范围为8.5MHz - 19.6MHz。 因此、与频率为16MHz 的 XT1相比、DCO 的时钟速度可能是时钟速度的一半。
    也不确定为什么您评论为50MHz。 我始终建议通过将相应的时钟切换到引脚并使用示波器测量信号来检查实际时钟。 第二个建议肯定是使用有源 FLL 操作 DCO。 否则、MSP 代码执行性能、时序和电流可能会因器件和温度的不同而有很大差异。 这是人们通常不想拥有的东西。
    为了真正检查电流消耗值是否由时钟源选择而不是其他因素产生、我建议创建从我们的代码示例派生的小测试代码、但很难对必要的修改进行评论、因为我不知道您的硬件。 基本上、您需要终止所有未使用的 GPIO 以避免节点悬空、将时钟源切换至 SMCLK 输出引脚、并在测量电流消耗的同时将器件切换至 LPM0。
    还请记住、晶体振荡器的电流消耗取决于晶体(ESR 和负载电容)和您的硬件设计。
    我希望这对您有所帮助。

    此致
    Peter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Steven、
    您是否仍需要有关此方面的支持? 我认为您的问题已经得到充分的回答、因此我将关闭该主题、但如果您的侧仍有问题、您可以重新打开它。

    此致
    Peter