用的是5529开发板,P2.0管脚输入方波。
思路是,用TA0定时一段时间,在这段时间内用TA1捕获上升沿个数。
定时器设置如下:
P2SEL = BIT0;P1DIR |= 0x01;// P1.0 outputTA1CTL = TASSEL_2 + MC_2 + TACLR + TAIE; // SMCLK, contmode, clear TARTA1CCTL1 = CM_1+CAP+SCS+CCIE+CCIS_0;//输入上升沿捕获,CCI0A为捕获信号源TA0CCTL0 = CCIE;// CCR0 interrupt enabledTA0CCR0 = 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到底分别代表什么?初学者有点弄不清楚。
step by step:
你好楼主,
你出问题的现象是什么?不能正常进入中断?
你是指TA0CCTL0里的0代表的意思吗?他代表的是不同的CCR即计时/比较单元
xinyi chen:
回复 step by step:
嗯,脉冲计数那个中断进不了。指示灯定时反转中断能进的。
kqian0327:
回复 xinyi chen:
你好,
下面链接是关于定时器作为波或模块的一个例子,应该对你的问题有帮助:
http://www.deyisupport.com/question_answer/microcontrollers/msp430/f/55/p/61736/138248.aspx#138248
xinyi chen:
回复 kqian0327:
谢谢,问题解决了
kqian0327:
回复 xinyi chen:
你好,
如果我们有帮到你解决问题,请结掉该贴。
谢谢配合。