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修订历史记录

用于生成多个频率的 ISR

要在单个计时器模块上实现多个频率,计时器 ISR 中只需确定触发中断的 TxCCRx 计数并将相应周期一半的计时器计数加到当前 TxCCRx 值上。之所以加上该周期的一半,是因为每次计数达到 TxCCRx 值,输出都会进行切换,因此需要经过两次中断,一个完整周期才会结束。以下代码显示了 multi_freq_g2452_example.c 文件中的计时器 ISR:

// Timer_A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
  TACCR0 += 100;                           // reload period
}
// Timer_A1 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{
  switch( TA0IV )
  {
  case  2:  TACCR1 += 200;                 // reload period
           break;
  case  4:  TACCR2 += 500;                 // reload period
           break;
  case 10: P1OUT ^= 0x01;                  // Timer overflow
           break;
  default: break;
  }
}

此示例显示了从 1MHz 计时器时钟源生成 5kHz、2.5kHz 和 1kHz 信号的 ISR(请参阅Equation4)。

Equation4. GUID-2EC5E3E0-0C07-4F98-AC58-95D16547A92D-low.gif