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.

[参考译文] MSP430FR2355:尝试获取100us 计时器中断

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1182025/msp430fr2355-try-get-100-us-timer-interrupt

器件型号:MSP430FR2355

您好!

我将 MSP430FR2355与 RF433Mhz 传感器搭配使用。 我想解码 RF433Mhz 传感器接收器数据、为此、我必须将计时器设置为大约200us 或100us Tigger。  

MSP430库使用计时器令人困惑。 我只想使用简单的计时器来生成100us 或200us 中断,我可以使用哪个计时器来执行此操作?

我已经浏览过 MCU 的数据表,在计时器部分中解释了4种计时器操作模式,那么哪一种适合计时器?

MSP430FR2355 在内部时钟频率为16MHz 的情况下运行 、请查看一次时钟设置。  对于计时器,我可以使用哪个时钟来生成延迟?

时钟设置。

void msp_system_clock_initialization(void) {
    // Configure one FRAM waitstate as required by the device datasheet for MCLK
    // operation beyond 8MHz _before_ configuring the clock system.
    FRCTL0 = FRCTLPW | NWAITS_1;

    __bis_SR_register(SCG0);                           // disable FLL
    CSCTL3 |= SELREF__REFOCLK;                         // Set REFO as FLL reference source
    CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_5;                         // DCOFTRIM=5, DCO Range = 16MHz
    CSCTL2 = FLLD_0 + 487;                             // DCOCLKDIV = 16MHz
    __delay_cycles(3);
    __bic_SR_register(SCG0);                           // enable FLL
    Software_Trim();                                   // Software Trim to get the best DCOFTRIM value

    CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK;        // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz
                                                      // default DCOCLKDIV as MCLK and SMCLK source
}

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

    Ketan、您好!

    用户指南中介绍了时钟资源:

      

    您可以参考以下示例代码、它描述了基本的计时器中断用法:

    https://dev.ti.com/tirex/explore/node?node=A__ALWr1t0raw35d-7mYwuR2A__msp430ware__IOGqZri__LATEST

    此致

    SAL

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

    您好!

    我使用 SMCLK 作为时钟源、它是16MHz。  

    我可以按连续模式存档? 应在100us 时间段内进行分频的时间。

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

    Ketan、您好!

    当然、您可以设置连续模式。  

    如果不存在其它分频的时钟频率,请将计数器的值设置为1599,以满足您的期望。 有关代码的详细信息、请参阅我之前的链接。

    此致

    SAL

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

    您好!

    感谢你的答复。  

    按照我的理解、我必须将计时器时钟源设置为  SMCLK 、它是16MHz、没有分频器。  

    计数器值。

    根据连续 模式中的库、没有设置计数器值的选项。

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

    Ketan、您好!

    [引用 userid="522967" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1182025/msp430fr2355-try-get-100-us-timer-interrupt/4452040 #4452040"]

    您可以参考以下示例代码、它描述了基本的计时器中断用法:

    https://dev.ti.com/tirex/explore/node?node=A__ALWr1t0raw35d-7mYwuR2A__msp430ware__IOGqZri__LATEST

    [/报价]

    您可以参阅我的链接以了解代码详细信息。

    此致

    SAL

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

    您好!

    好的、您是如何计算16MHz 时钟源的计数器值为1599的?

    以下代码是计时器设置。 您能验证一次。

    void MSP_timer_initialization(){


    TB0CCTL0 |= CCIE;//启用 TBCCR0中断
    TB0CCR0 = 1599;
    TB0CTL |= TBSSEL_SMCLK | MC__Continous;// SMCLK,连续模式

    // Timer B 中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=TIMER0_B0_VECTOR
    _interrupt void TIMER0_B0_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((interrupt (TIMER0_B1_vector)) TIMER0_B1_ISR (void)
    其他
    不支持#ERROR 编译器
    #endif

    ticksMs++;
    TB0CCR0 += 1599;

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

    Ketan、您好!

    计数器编号会增加或减少计时器时钟的成本、因此计数器值1599将花费(1599+1)计时器时钟、即1/16MHz * 1600 = 100us。 定时器模式的详细信息在用户指南中有说明,请检查这些信息,它将帮助您了解定时器的工作原理: https://www.ti.com/lit/pdf/slau445

    [引用 userid="393211" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1182025/msp430fr2355-try-get-100-us-timer-interrupt/4452094 #4452094"]

    ticksMs++;
    TB0CCR0 += 1599;

    [/报价]

    请删除 TB0CCR0 += 1599、它不会减少到零、它将是一个用于生成中断的常量值。

    我应该 重新更正我的建议、我发现在连续模式下、计数器将加载在0xFFFF 处、因此它不会实现您的目标。 请采用向上计数模式。 至于代码、您可以参考以下链接:

    https://dev.ti.com/tirex/explore/node?node=A__AMhfYuxqib4vXPngV3J-AQ__msp430ware__IOGqZri__LATEST

    顺便说一下 、验证您的代码不是我的职责、  我建议您使用器件测试您的代码。 最简单的验证方法是在中断中设置 GPIO 切换、然后您可以抓住波形并检查频率。

    此致

    SAL

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

    您好!

    谢谢你。

    我一定会检查代码。

    感谢您的支持。