您好!
我正在尝试为 TA0 CCR0、1、2和溢出创建独立的计时器中断。 我的目标是学习 timer0_A3和 Timer1_A3的全部8个计时器中断。 我已经尝试 使用 timer0获得4个中断(ccr0、ccr1、ccr2、溢出),并且没有接收到 TA0CCR2中断。 我使用了单独的引脚排列进行验证、并将其用于教学目的。 代码如下。
#include <msp430.h> volatile int k=0; void main(void){ WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer P1DIR |= 0xEF; // configure P1.7 as input P2DIR |= 0x01; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; //Timer0................................................................................... TA0CCTL2 |= CCIE; //Timer 1 CCR2 interrupt enabled TA0CCR2 = 30000; TA0CCTL1 |= CCIE; // CCR1 interrupt enabled TA0CCR1 = 40000; TA0CCTL0 |= CCIE; // CCR0 interrupt enabled TA0CCR0 = 5000; TA0CTL = TASSEL_2 + MC_2 + ID_3 + TAIE; //overflow enabled //Timer1................................................................................... TA1CCTL0 = CCIE; // timer 2 CCR0 interrupt enabled TA1CCR0 = 60000; TA1CTL = TASSEL_2 + MC_2 + ID_3; //Port_Interrupt................................................................................... P2IES &= (~0x80); // rising Edge P2IFG &= (~0x80); // Clear interrupt flag for P1.1 and P1.2 P2IE |= (0x80); //Enable interrupt for P1.3 _enable_interrupt(); while(1); } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer0_A0(void){ //TA0CCR0 P1OUT ^= 0x01; } #pragma vector=TIMER0_A1_VECTOR __interrupt void Timer0_A1(void){ //TA0CCR1 + TA0CCR2 + OVERFLOW switch( TA0IV ) { case 0X0002: { P1OUT ^= 0x08; break;} case 0X0004: { P1OUT ^= 0x10; break;} case 0x000A: { P1OUT ^= 0x40; break;} } } #pragma vector = TIMER1_A0_VECTOR // TA1CCR0 __interrupt void Timer_A1 (void){ P2OUT ^= 0x01; }
我想知道没有发生 ccr2中断的原因。 不要介意端口中断。 任何类型的帮助都将非常感谢。