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.

[参考译文] CC2541:CC2541计时器4设置和中断功能

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/920104/cc2541-cc2541-timer-4-setup-and-interrupt-function

器件型号:

你好! 我 尝试使用计时器4生成1MHz 中断、以精确地对微秒进行计数、但它的工作效果不好。 以下是我的代码:

//计时器4设置函数
void Timer4_init (void)
{
//******** Timer4、通道
//定时器4通道0比较值。

CLKCONCMD =(CLKCONCMD &~CLKCON_TICKSPD)| CLKCON_TICKSPD_32M;
T4IE = 1;
/*********
*计时器4设置
*
*定时器4通道0比较值。 启动计时器终端计数值
*更改为224。 在每个定时器比较匹配中断时重置该值。
*
T4CC0 = e0;/224 -> 256 -(32MHz/(预分频器*目标频率)):TARGET_FREQUENCY = 1MHz
/*定时器4通道0 (T4CCTL0)配置:
*-通道0中断被启用。
*-比较模式。
*
T4CCTL0 = T4CCTLn_IM | T4CCTLn_MODE;

/*定时器4控制(T4CTL)配置:
*-预分频器值:1.
*-模数模式。
*计时器也会被清除并启动。
*
T4CTL = T4CTL_DIV_1 | T4CTL_MODE_modulo | T4CTL_CLR | T4CTL_START;

}
//中断函
数#pragma vector = T4_vector
_ interrupt void T4_ISR (void)
{
// //清除模块中断标志。
T4OVFIF = 0;

静态 uint16微秒= 0;

Micros ++;

//清除 CPU 中断标志。
T4IF = 0;

}

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

    [引用用户="Bruno CHAVES"]

    器件型号: CC2541

    你好! 我 尝试使用计时器4生成1MHz 中断、以精确地对微秒进行计数、但它的工作效果不好。 以下是我的代码:

    1
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18
    19.
    20.
    21.
    22.
    23
    24
    25
    26
    27.
    28.
    29.
    30
    31.
    32
    33.
    34
    35.
    36.
    37.
    38.
    39.
    40
    41.
    42.
    43.
    44.
    //Timer 4 Setup function
    voidTimer4_init(void)
    {
        //******************** Timer4, channel
        //  Timer 4 channel 0 compare value.
        
        CLKCONCMD = (CLKCONCMD & ~CLKCON_TICKSPD) | CLKCON_TICKSPD_32M;
        T4IE = 1;
      /***************************************************************************
           * Timer 4 setup
           *
           * Timer 4 channel 0 compare value. Initiates the Timer terminal count value
           * to 224. This value is reseted at each Timer compare match interrupt.
           */
        T4CC0 = e0;//224 -> 256 - (32MHz/(Prescaler*Target_Frequency)): Target_frequency=1MHz
        /* Timer 4 channel 0 (T4CCTL0) configuration:
          * - Channel 0 interrupt enabled.
          * - Compare mode.
          */
          T4CCTL0 = T4CCTLn_IM | T4CCTLn_MODE;
        /* Timer 4 control (T4CTL) configuration:
         * - Prescaler divider value: 1.
         * - Modulo mode.
         * The Timer is also cleared and started.
         */
        T4CTL = T4CTL_DIV_1 | T4CTL_MODE_MODULO | T4CTL_CLR | T4CTL_START;
    }
    //Interrupt function
    #pragma vector = T4_VECTOR
     __interrupt voidt4_isr(void)
    {
      //     // Clears the module interrupt flag.
      T4OVFIF = 0;
        
      staticuint16 micros = 0;
       
      micros ++;
      
      // Clears the CPU interrupt flag.
      T4IF = 0;
       
    }

    [/引述]

    Bruno CHAVES 说:

    器件型号: CC2541

    你好! 我 尝试使用计时器4生成1MHz 中断、以精确地对微秒进行计数、但它的工作效果不好。 以下是我的代码:

    1
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18
    19.
    20.
    21.
    22.
    23
    24
    25
    26
    27.
    28.
    29.
    30
    31.
    32
    33.
    34
    35.
    36.
    37.
    38.
    39.
    40
    41.
    42.
    43.
    44.
    //Timer 4 Setup function
    voidTimer4_init(void)
    {
        //******************** Timer4, channel
        //  Timer 4 channel 0 compare value.
        
        CLKCONCMD = (CLKCONCMD & ~CLKCON_TICKSPD) | CLKCON_TICKSPD_32M;
        T4IE = 1;
      /***************************************************************************
           * Timer 4 setup
           *
           * Timer 4 channel 0 compare value. Initiates the Timer terminal count value
           * to 224. This value is reseted at each Timer compare match interrupt.
           */
        T4CC0 = e0;//224 -> 256 - (32MHz/(Prescaler*Target_Frequency)): Target_frequency=1MHz
        /* Timer 4 channel 0 (T4CCTL0) configuration:
          * - Channel 0 interrupt enabled.
          * - Compare mode.
          */
          T4CCTL0 = T4CCTLn_IM | T4CCTLn_MODE;
        /* Timer 4 control (T4CTL) configuration:
         * - Prescaler divider value: 1.
         * - Modulo mode.
         * The Timer is also cleared and started.
         */
        T4CTL = T4CTL_DIV_1 | T4CTL_MODE_MODULO | T4CTL_CLR | T4CTL_START;
    }
    //Interrupt function
    #pragma vector = T4_VECTOR
     __interrupt voidt4_isr(void)
    {
      //     // Clears the module interrupt flag.
      T4OVFIF = 0;
        
      staticuint16 micros = 0;
       
      micros ++;
      
      // Clears the CPU interrupt flag.
      T4IF = 0;
       
    }

    [/报价]

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

    请查看此处提供的示例:

    Siri