用的是5529开发板,P2.0管脚输入方波。
思路是,用TA0定时一段时间,在这段时间内用TA1捕获上升沿个数。
定时器设置如下:
P2SEL = BIT0;
P1DIR |= 0x01; // P1.0 output
TA1CTL = TASSEL_2 + MC_2 + TACLR + TAIE; // SMCLK, contmode, clear TAR
TA1CCTL1 = CM_1+CAP+SCS+CCIE+CCIS_0; //输入上升沿捕获,CCI0A为捕获信号源
TA0CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CCR0 = 20000;
TA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, upmode, clear TAR
定时器中断中的内容如下:
#pragma vector=TIMER1_A1_VECTOR
__interrupt void TIMER1_A1_ISR(void)
{
up+=1; //脉冲计数
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
P1OUT ^= 0x01; // Toggle P1.0
frequency=((float)(up))/600; //单位KHZ,600为指示灯亮灭周期的一半,单位Ms
up=0;
}
这样哪里出了问题?那些寄存器TA0CTL0 TA1CLT1 中的0和1到底分别代表什么?初学者有点弄不清楚。
