【MSP430】5438 定时器A TIMER A 新认识|定时器A 划分几个独立时间间隔

目录

定时器A TIMER A 新认识

msp430的定时器A 划分几个独立时间间隔


定时器A TIMER A 新认识

2011-06-02 21:18:50

6月2日 周四 晴    定时器A

现在的认识:

MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB

了解了定时器A的用法:

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

在头文件中可以查到:


 

TIMER0 含  TA0CCR0- TA0CCR4 五个

TIMER1 含  TA1CCR0- TA1CCR2 三个 

TA0CCR0\TA1CCR0 用于控制计数周期,也就是每当TA0R\TA1R 计数到TA0CCR0\TA1CCR0所设定的数值后就会清零。

如:

 TA0CCR0 =8000;                             // CCR0必须最大,因为一计数到CCR0即立刻清0,用于   

                                             控制周期 每8000单位时间就触发一次,并TA0R从新 

                                              计数

  TA0CCR1=4000;                             //每4000单位时间就触发一次

  TA0CCR2=1000;                             //每1000单位时间就触发一次

/

/ 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;

 }

}

msp430的定时器A 划分几个独立时间间隔

TAIV:

#define TAIV_TACCR1         (0x0002)   

#define TAIV_TACCR2         (0x0004)   

#define TAIV_TAIFG          (0x000A)   

TIMERA1_VECTOR是一个中断向量,主要处理CCR1,CCR2,以及定时器A溢出的中断标志,而CCR1,CCR2,以及定时器A产生中断是的TAIV是不同的,分别是2,4,10

switch( TAIV ) { case 2: break; case 4: break; case 10: P3OUT ^= BIT4; break; }

这一句的意思是,判断是哪个产生中断的,以执行不懂的程序,当然,在里面没写有,但是当你自己去写的时候可自己加进去。

CCR0,CCR1,CCR2

分别是比较/捕获模块1,2,3的比较/捕获寄存器,一般CCR0用来控制周期。

至于具体怎么应用,这是很难解释的,解释了可能你还是不同。最好的办法就是一边写程序,一边查书。

6月2日 周四 晴    定时器A

现在的认识:

MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB

了解了定时器A的用法:

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

在头文件中可以查到:

#define TIMER1_A1_VECTOR    (48 * 2u)
 #define TIMER1_A0_VECTOR    (49 * 2u)

#define TIMER0_A1_VECTOR    (53 * 2u)
#define TIMER0_A0_VECTOR    (54 * 2u)

TIMER0 含  TA0CCR0- TA0CCR4 五个

TIMER1 含  TA1CCR0- TA1CCR2 三个

TA0CCR0 对应中断向量 A0_VECTOR   

TA0CCR1-4 对应中断向量 A1_VECTOR   

 //A0定时器,用于界面处理
  TA0CCTL0 = CCIE;                          // CCR0 interrupt enabled
  TA0CCTL1 = CCIE;                          // CCR1 interrupt enabled//时间周期1使能
  TA0CCTL2 = CCIE;                          // CCR2 interrupt enabled//时间周期2使能
 TA0CCTL3= CCIE;                          // CCR3 interrupt enabled//时间周期3使能
 //TA0CCTL4= CCIE;                          // CCR3 interrupt enabled//时间周期3使能
  TA0CCR0=256;//TA0R 计数到65535才清零。
  TA0CCR1=4096;  //1s
  TA0CCR2=1024; //1/4
  TA0CCR3=8192;  //2s

  TA0CTL = TASSEL_1+ID_3 + MC_2 + TACLR+ TAIE;     // ACLK, 8分频,MC_2:连续模式, clear TAR 

// Timer1 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
 // TA0CCR0 += 64;// Add Offset to CCR0
  TA0CCR0 += 256;// 1/16s Add Offset to CCR0
  if(ReadUART0_new>0)
    ReadUART0_new--;
   if(ReadUART1_new>0)
    ReadUART1_new--;
 
}


// 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:
    TA0CCR1 +=4096;                //1s  Add Offset to CCR1
    SecondReach=1;
    CountToMunite++;
    SecondTimecount++;
    if(waringstatus>0)
    {
      //buzzer();
     // waringlight();
    }
    break;                         // CCR4 not used
  case 4:
    TA0CCR2+= 1024;                // 1/2s Add Offset to CCR2
   // buzzer();
   // waringlight();
    break;
  case 6:
    spark++;
     TA0CCR3+=8192;                // 2s Add Offset to CCR3
  // buzzer();
   // waringlight();
    break;
  case 8:
    break;                         // CCR3 not used
  case 10:
    break;                         // CCR5 not used
  case 12:
    break;                         // Reserved not used
  case 14:                       

posted on 2022-10-04 01:31  bdy  阅读(66)  评论(0编辑  收藏  举报

导航