打印

MSP430 5438 定时器A TIMER A 新认识(转)

[复制链接]
2749|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
初涉职场|  楼主 | 2011-11-21 18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MSP430 5438 3个时钟,分别是 TA0TA1 TB


了解了定时器A的用法:定时器A可以分成几个独立的时间周期。这几个时钟周期共用一个计数器TA1R或TA0R


TIMER0 含  TA0CCR0- TA0CCR4 五个
TIMER1 含  TA1CCR0- TA1CCR2 三个

  
TA0CCR0\TA1CCR0 用于控制计数周期,也就是每当TA0R\TA1R 计数到TA0CCR0\TA1CCR0所设定的数值后就会清零。
当计数器计数到CCR0时,CCR0单元会产生一个中断同样当计数器计数到CCR1CCR2时,两个单元也都会个产生一个中断这样我们可以通过定时器A得到三个定时时间了。
  
注意的是在增加计数模式时CCR1CCR2的值应该小于CCR0,否则CCR1CCR2不会产生中断并且每次CCR1CCR2中断后要把他重新赋值这样才能保证CCR1CCR2的中断间隔时间不变例。



TA0CCR0 =8000;                         // CCR0必须最大,因为一计数到CCR0即立刻清0,用于
控制周期
                                          
8000单位时间就触发一次,并TA0R从新
计数(CCRO清0)
  TA0CCR1=4000;                         //4000单位时间就触发一次(CCR1清0吗?)      TA0CCR2=1000;                          
//1000单位时间就触发一次(CCR2清0吗?)


  
CCTLx是相应比较/捕获寄存器的控制寄存器它可对比较/捕获寄存器进行设置,在这里只用到比较功能,也就是当计数到CCRx时产生中断,由于CCTLx默认的是比较功能,所以一般也就只用到CCIE这个控制字,就是开启相应比较器的中断,中断函数比较/捕获寄存器0和比较/捕获寄存器1、2是分开的,CCR0的中断很容易只需在函数中加上自己的中断相应程序就行但是CCR1CCR2是公用一个中断函数的,这就需要识别到底是哪个中断,这可以通过一个寄存器TAIV来识别

相关帖子

沙发
初涉职场|  楼主 | 2011-11-21 18:05 | 只看该作者
Timer0 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{                 
  UART3_SendStr_char("count to CCR0");     //计数到CCR0触发     
}

// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
  switch(__even_in_range(TA0IV,14))
  {
    case 0: break;                  
    case 2:  UART3_SendStr_char("count to CCR1");                    //计数至CCR1触发  
            break;
case 4:  UART3_SendStr_char("count to CCR2");                    //计数至CCR2触发
        break;
    case 6:  break;                         // CCR3 not used
    case 8:  break;                         // CCR4 not used
    case 10: break;                         // CCR5 not used
    case 12: break;                         // Reserved not used
    case 14: break;                        // 溢出触发         
    default: break;
}
}

这里出现了二个中断服务程序,是因为它用到了Timer0_A的两个中断,所以要写两个函数。
1:TACCRO inperrupt vector for TACCR0 CCIFG。
2: TAIV inperrupt vecter for all other CCIFG flags and TAIFG。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

161

帖子

1

粉丝