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.

[参考译文] MSP430FR2111:MSP430的计时器帮助

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/958413/msp430fr2111-timer-help-for-msp430

器件型号:MSP430FR2111

大家好、

是否有人可以指导我如何在我的情况下使用计时器?

据我了解、使用__delay_cycles (15000)不是一个很好的功耗解决方案。

我不想使用外部晶振、更喜欢最低功耗的内部振荡器、时序精度一点也不重要。  

~1/4秒到2秒的可调定时器将是最佳选择。

谢谢、

Jay

#include 

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;
P1DIR = 0xFF;
P1OUT = 0x00;
P2DIR = 0xFF;
P2OUT = 0x00;

P1OUT &=~BIT0;
P1DIR |= BIT0;

P1OUT |= BIT3;
P1REN |= BIT3;
P1IES |= BIT3;
P1IE |= BIT3;

PM5CTL0 &=~LOCKLPM5;
P1IFG &=~BIT3;

while (1)
{
_bis_SR_register (LPM4_bits | GIE);
P1OUT |= BIT0;
_delay_cycles (15000);
P1OUT &=~BIT0;
}
}

#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
P1IFG &=~BIT3;
_BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);

} 

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

    我不清楚您想要对计时器执行什么操作。 这是一个可能的方案--为 G2553编写,但应该相当容易适应:

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/718133/2648381

    您可能不会从 LPM4中获得太多的资源、因为在 FR2111上、没有时钟在 LPM4中运行。 [参考数据表(SLASE78C)表6-1]在 LPM3中、您可以将 VLOCLK 用于 RTC 或 WDT [参考数据表表表6-7]、其中任何一个都可以以类似的方式用于时序。 正如您提到的、VLOCLK 不是很精确、但很便宜、FR21系列上的 REFO 价格适中(15-20uA)。

    [编辑:我想我应该再搜索一点。 数据表第6.3节中的"注释"说明您可以在 LPM4中使用 VLOCLK (用于 WDT 或 RTC)。 而第5.7节中的表中甚至包含这些可能性的条目。 我建议您在"打赌您的项目"之前尝试一下。]

    ------

    未经请求:我建议您使用"P1DIR &=~BIT3;"、或者每次按下按钮时、您都会将大量电流转储到 GND。

    ------

    [编辑:移动了编辑:以更清晰。]

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

    您好、Bruce、

    非常感谢您的链接。 我仍在争论是否值得使用计时器和中断、还是继续使用 __delay_cycles(15000);

    整个想法是通过不使用_delay_cycles ()来节省功耗、但我似乎不会节省太多的功耗、而是使代码更复杂、不需要这么简单的延迟。

    根据链接、自由运行的计时器也是一个好主意、如果需要、我可以在将来用于各种任务。 但是、如果没有显著的节能效果、那么从现在开始看起来不值得付出任何努力。

    此外、感谢您提出的关于更改端口方向的建议。 您是否建议按如下方式排线? 我将一个 hal 传感器连接到该引脚、当调用中断时、我应该按如下方式更改方向?

    #pragma vector=Port1_vector
    __interrupt void Port_1 (void)
    {
    P1IFG &=~BIT3; 
    P1DIR &=~BIT3;//更改此处的引脚方向以将电流漏极节省到接地? _BIC_SR_REGISTER_ON_EXIT (LPM4_BITS); }

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

    我赞同这里的建议:

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/955490

    您知道您的霍尔传感器是如何比我更好地工作的 但是、如果它尝试将线路驱动为低电平、而您将线路驱动为高电平、则这是一个总线冲突。

    我建议您尽快将其切换至输入(通过清除 P1DIR:BIT3)。 理想情况下、不要将其设置为输出、但在另一端驱动为低电平之前、这一点无关紧要。