您好!
我正在尝试为 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中断的原因。 不要介意端口中断。 任何类型的帮助都将非常感谢。