[求助] TA0和TA1到底什么关系啊

伍师傅32   2012-5-2 23:44 楼主
今天几乎就纠结在这TA0和TA1的设置中了。手册上对TA1根本就没有任何提及。可是在仿真的时候,TA1拥有和TA0完全一样的寄存器,而且头文件里对它们都有定义。可是这两个却总是不能同时运行。同样的程序,TA0能用,修改成TA1就不行了。下面这个程序就是这样,TA0、TA1都可以计数,但是就TA0可以进中断,TA1就是不行。我真是非常的纳闷啊。求指教啊!
#include<msp430g2553.h>
#define uint unsigned int
#define uchar unsigned  char

void main()
{
  volatile uint i;
  WDTCTL = WDTPW + WDTHOLD;
//  BCSCTL3 |= LFXT1S_2;
//  IFG1 &= ~OFIFG;
//  __bis_SR_register(SCG1 + SCG0);
  BCSCTL2 |=  DIVS_3;
  P1DIR |= BIT0 + BIT6;
  P1OUT &= ~(BIT0 + BIT6);
  
  CCR0 = 4000;
  CCTL0 = CCIE;
  TACTL = TASSEL_2 + MC_1 + ID_3;
  TA1CCR0 = 5000;
  TA1CCTL0 = CCIE; 
  TA1CTL = TASSEL_2 + MC_1 + ID_3; 
  
//  while(1);
  _BIS_SR(LPM0_bits + GIE);
}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer0_a0(void)
{
    P1OUT ^= BIT0;
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer0_a1(void)
{
    P1OUT ^= BIT6;
}

回复评论 (7)

2推荐 ydzh1225 

TA0和TA1是TA的两个实例,是完全一样的,同等地位,也就是说TA包括两个,TA0和TA1,功能相同
点赞  2013-8-2 19:56

回复 楼主 伍师傅32 的帖子

我觉得最后一段应该改成:
#pragma vector = TIMER1_A0_VECTOR
__interrupt void Timer0_a1(void)
{
    P1OUT ^= BIT6;
}
试下看吧~
点赞  2012-5-4 09:26

回复 沙发 sywcxx 的帖子

多谢提示啊,可以用了。头文件后面的注释没看,就自己瞎揣摩TI工程师的意思了,哎!真是非常感谢!
点赞  2012-5-4 23:03
我现在也遇到了同样的问题,对于TA0 TA1以及TIMER0_A1_VECTOR TIMER1_A1_VECTOR有什么区别,搞不清楚,想用定时器呢,楼主给我说说呗
点赞  2013-7-27 10:13
刚刚弄清楚了,没看懂手册
点赞  2013-7-27 11:14
MS430的每个TIMER都有2个中断向量, 以TIMER0为例子:
TIMER0_A0_VECTOR 和TIMER0_A1_VECTOR,
其中A0用来处理CCP0的中断,A1用来处理CCP1,2的中断.
这里的A0,A1不要和TIMER0,TIMER1搞混淆了.

同样,TIMER1也有2个中断向量,TIMER1_A0_VECTOR 和TIMER1_A1_VECTOR。
点赞  2013-8-2 11:07
双胞胎的关系,为了标识,分为老大老二
点赞  2013-8-2 20:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复