ZHCABH5B December   2011  – February 2022 MSP430G2112 , MSP430G2152 , MSP430G2212 , MSP430G2252 , MSP430G2312 , MSP430G2352 , MSP430G2412 , MSP430G2452

 

  1.   摘要
  2.   商标
  3. 1典型单时基方法
  4. 2多时基方法
  5. 3在定制应用中实现多时基方法
    1. 3.1 计时器时钟源选择
    2. 3.2 周期和频率计算
    3. 3.3 占空比计算
  6. 4示例代码
    1. 4.1 方法
      1. 4.1.1 用于生成多个频率的 ISR
      2. 4.1.2 用于生成多个频率和占空比(PWM)的 ISR
    2. 4.2 包含的代码示例
  7. 5多时基方法的限制
    1. 5.1 ISR 开销
    2. 5.2 最大输出频率与信号数量
    3. 5.3 功耗
  8. 6参考文献
  9. 7修订历史记录

用于生成多个频率和占空比(PWM)的 ISR

要在单个计时器模块上实现多个占空比以及多个频率,计时器 ISR 会变得稍微复杂一些。在确定触发中断的 TxCCRx 计数后,我们还必须确定输出是进入信号输出的高电平还是低电平部分,以便判断是否要增加高电平时间或低电平时间对应的计数。这可以通过检查相应 TxCCTL0 寄存器中的 CCI 位来实现。如果 CCI 位为 1,那么我们便知道输出刚刚切换至高电平,信号位于高电平周期的开始处,因此我们必须增加高电平时间对应的计数。相反,如果 CCI 位为 0,则表示输出刚刚切换至低电平,因此我们必须增加低电平时间对应的计数。高电平时间和低电平时间所对应计数之和决定信号的周期,而高电平时间和低电平时间与周期值之比则决定占空比。以下代码显示了 multi_freq_g2452_pwm_example.c 文件中的计时器 ISR:

// Timer_A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
    if(TACCTL0 & CCI)                         // If output currently high
    {
        TACCR0 += 50;                         // 25% high
    }
    else
    {
        TACCR0 += 150;                        // 75% low
    }
}
// Timer_A1 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{
  switch( TA0IV )
  {
  case  2:  if(TACCTL1 & CCI)                 // If output currently high
            {
                TACCR1 += 50;                 // 12.5% high
            }
            else
            {
                TACCR1 += 350;                // 87.5% low
            }
           break;
  case  4:  if(TACCTL2 & CCI)                 // If output currently high
            {
                TACCR2 += 600;                // 60% high
            }
            else
            {
                TACCR2 += 400;                // 40% low
            }
           break;
  case 10: P1OUT ^= 0x01;                   // Timer overflow
           break;
  default: break;
  }
}

本例中,代码会从 1MHz 计时器时钟源生成多个 5kHz、2.5kHz 和 1kHz 的相同频率信号。不过,这时信号的占空比分别为 25%、12.5% 和 60%(请参阅Equation5)。

Equation5. GUID-193E9597-D1A4-4466-98F2-D3FFE8A272C5-low.gif