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/msp430g2553:从引脚启动计时器

Guru**** 2546020 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/587366/ccs-msp430g2553-starting-timer-from-pin

器件型号:MSP430G2553

工具/软件:Code Composer Studio

大家好

我目前正在尝试找出 msp430g2553定时器模块的所有可能性。 我想直接从输入引脚启动计时器。 此时、我使用中断通过 TACTL 来启动计时器。 我想知道、如果没有任何代码、直接从引脚启动计时器是否可行。

当前代码:

#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
TACTL |= MC_1;
} 

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

    但您要解决的实际问题是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题本身并不是那么困难。 必须在输入信号的下降沿之后触发长度测量的脉冲。 我希望尽可能绕过软件、以避免因程序执行而出现时序错误的任何可能性。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当您为脉冲使用计时器输出时、可以轻松控制其长度。

    输入边沿和脉冲开始之间的时间是否重要?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答!

    边沿和定时器开始之间的时间很重要。 我想、正确的答案是使用正确的中断优先级、因此没有其他任何东西会影响触发函数。 关于使用计时器输出、我知道我可以通过 P1SEL 命令将该引脚连接到计时器、但我一直在努力处理单脉冲输出。 我只实现了闪烁或持续开启状态。 我是否需要试验 TACTL |= TAIE 和开关情况中断?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在比较模式下、当达到编程时间时、CCR 输出会发生变化。 同时、一个中断可被触发;使用这个来停止定时器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在过去的几天里、我尝试研究 CCR 中断、但仅通过以下声明获得了所需的结果:

    P1DIR |= BIT6; //P1.6输出
    P1SEL |= BIT6; //P1.6 TA1/2选项
    TACCTL0 |= CCIE; //启用定时器
    TACCR0 = 30上的中断; //定时器
    TACTL 中的周期数|= tassel_2; //使用 SMCLK 作为计时
    器 TACTL 的源&=~MC_1;
    TACTL |= MC_0;
    TACTL |= ID_1; //Divider
    TACCTL1 = OUTMOD_2;
    TACCR1 = 1; 

    目前、我不知道为什么没有 TACCR1 = 1和 OUTMOD 声明、我的代码无法正常工作。 以下内容在中断序列中:

    #pragma vector=TIMER0_A0_VECTOR
    __INTERRUPT void Timer_A0 (void)
    {
    TACTL &=~MC_1;
    TACTL |= TACLR;
    
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您应该在引脚更改中断中启动计时器。

    OUTMOD_2表示切换/复位。 因此、CCR1输出在达到其自身计数(1)时切换、并在达到 CCR0计数(30)时复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    最后、让计时器输出模块与引脚 P1.5和 OUTMOD_7一起工作。 不知怎么说、如果不使用 OUTMOD、它就不会向引脚输出信号。  代码的工作设置部分如下所示:

    P1DIR |= BIT5; // P1.5输出
    P1SEL |= BIT5; // P1.5 TA1/2选项
    TACCTL0 |= CCIE+OUTMOD_7; //启用中断和 outmod
    TACCR0 = 30;
    TACTL |= tassel_2; //使用 SMCLK 作为计时器源
    TACTL |= MC_1;
    TACTL |= ID_2;
    
    

    和中断

    // Timer_A 中断服务例程
    #pragma vector=TIMER0_A0_vector
    __interrupt void Timer_A0 (void)
    {
    TACTL &=~MC_1;
    TACTL |= TACLR;
    }