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.

[参考译文] MSP430FR5972:使用计时器的延迟

Guru**** 2535150 points
Other Parts Discussed in Thread: MSP430FR5972

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/576832/msp430fr5972-delay-using-timer

部件号:MSP430FR5972

MSP430FR5972,CCS v7

您好,我需要帮助在没有ISR的情况下使用计时器生成延迟,但计时器应该在一个程序中使用,这些功能就是

TA0 -刺激LED闪烁
TA1 -电池指示灯闪烁
TA2 - ADC采样
TA3 -延时计时器100 MS延时)
TB0 -按钮退信使用的延迟  
PLZ建议使用或提供一些使用TA0, TA1, TA2, TA3和TB0的示例代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只需等待相应的IFG位设置。 问题到底是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只需要为延迟编写一个程序,但在我的程序中,TA0,TA1,TA2,TA3和TB0分别使用函数。 因为我需要将所有这些计时器用于不同的外设
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您说TA3是一个延迟计时器。 您的意思是不能使用这些计时器模块中的任何一个?

    您不能使用其中一个计时器的另一个CCR吗?

    您是否正在使用看门狗计时器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Clemens感谢您的回复。实际上,我是MSP430的新用户,因此无法访问计时器功能
    否,我没有使用看门狗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    可以使用同一计时器模块的多个CCR来获得不同的间隔。 请参阅用户指南的19.2 .2.3 部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Clemens我非常感谢您给我发送任何演示代码,因为在示例代码中每次只使用一个计时器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请参阅单个MSP430计时器模块(SLAA513)上的多时基应用报告

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只是在一些示例代码的帮助下开发了10秒的代码,但它不能正常运行10秒(运行大约8秒)
    我没有使用任何晶体示波器。 代码如下。请引导我或在您认为需要更改的地方进行更改...

    #include <MSP4S.h>
    #include "stdint.h"

    内部主(无效)

    WDTCTL = WDTPW | WDTHOLD; //停止WDT

    //配置GPIO
    P1DIR || BIT0;
    P1OUT |= BIT0;

    //禁用GPIO开机默认高阻抗模式以激活
    //以前配置的端口设置
    PM5CTL0 &=~LOCKLPM2;

    TA0CCTL0 = CCIE; //已启用TACR0中断
    TA0CCR0 = 3.2768万;

    TA0CTL = tassel_1 | ID_0 | MC_2;// ACLK,分隔符1,连续模式,清除

    //TA0CTL = tassel__SMCLK | MC__CONTAUS;// SMCLK,连续模式

    __bis_sr_register (LPM0_bits + GIE); //输入LPM0 w/ interrupt
    __no_operation(); //用于调试器
    }
    // Timer0_A0中断服务例程
    #if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
    #pragma vector = TIMER0_A0_vector
    __interrupt void Timer0_A0_ISR (void)
    #Elif已定义(__GMNU__)
    void __attribute__((interrupt (TIMER0_A0_vector))) Timer0_A0_ISR (void)
    #否则
    错误编译器不受支持!
    #endif

    静态uint8_t计数器= 0; //用于计算1秒倍数的变量

    TA0CCR0 +=3.2768万; //添加另一秒

    IF (++计数器>= 10) //已过去10秒

    P1OUT ^= P1OUT; //切换LED
    计数器= 0; //重置计数器
    }
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    即使我也使用此代码5秒,但不工作(它在4.3 秒左右有效)。代码如下:


    #include <MSP4S.h>
    #include "stdint.h"

    内部主(无效)

    WDTCTL = WDTPW | WDTHOLD;//停止WDT

    //配置GPIO
    P1DIR || BIT0;
    P1OUT |= BIT0;

    //禁用GPIO开机默认高阻抗模式以激活
    //以前配置的端口设置
    PM5CTL0 &=~LOCKLPM2;

    TA0CCTL0 = CCIE;//已启用TACR0中断
    TA0CCR0 = 2.0479万;

    TA0CTL = tassel_1 | ID_3 | MC_2;// ACLK,分隔符1,连续模式,清除

    __bis_sr_register(LPM0_bits + GIE);//输入带中断的LPM0
    __no_operation();//用于调试器
    }
    // Timer0_A0中断服务例程
    #if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
    #pragma vector = TIMER0_A0_vector
    __interrupt void Timer0_A0_ISR (void)
    #Elif已定义(__GMNU__)
    void __attribute__((interrupt (TIMER0_A0_vector))) Timer0_A0_ISR (void)
    #否则
    错误编译器不受支持!
    #endif

    TA0CCR0 +=2.0479万;//添加另一秒
    P1OUT ^= P1OUT;//切换LED
    }

    PLZ回复

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

    用户指南的3.2 部分说明:

    … CS模块默认配置为:
    LFXT被选为LFXTCLK的振荡器源。 为ACLK (SELAx =0)选择了LFXTCLK,且ACLK未分割(DIVAx =0)。

    […] 但禁用LFXT。 […] 故障控制逻辑会立即导致LFMODCLK找到ACLK

    LFMODCLK为5 MHz/128=39 kHz,这将导致4.2 延迟,这正是您所看到的。 (而MODCLK的开头不太准确。)

    如果要使用32.768 kHz时钟,必须正确启动晶体。 (有关如何执行此操作,请参见示例程序。)