ОК, поэтому я пытался создать некоторый код, используя стартовую панель TI MSP430FR5994, которая использует Timer0 и 3 отдельных регистра сравнения для запуска 3 отдельных isr. Я успешно получил один для работы, однако, как только я добавляю другой регистр сравнения наборы флагов CCIFE и никогда не конкурирует за выполнение второго isr. Я наблюдал за кодом в отладчике как на CCstudio, так и на IAR. То же самое происходит и в обоих, настроенные регистры верны, и регистры TA0R считают и будут запускать первый isr на основе TA0CCR0, но все остальные регистры сравнения R1 2 3 et c не сработает и не выполнится успешно. Код ниже, идея о том, что я делаю неправильно, будет высоко ценится.
#include "msp430.h"
#include <stdbool.h>
#define COUNT_1 12000
#define COUNT_2 800
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
PM5CTL0 &= ~LOCKLPM5;
P1DIR |= BIT0 + BIT1;
P1OUT = BIT0 + BIT1;
//set up and enable timer A or TA0 for continous mode
TA0CCR0 = COUNT_1;
TA1CCR1 = COUNT_2;
TA0CTL = TASSEL__ACLK + MC_2; //set the max period for 16bit timer operation
TA1CTL = TASSEL__ACLK + MC_2;
TA0CCTL0 = CCIE; //enable compare reg 0
TA1CCTL1 = CCIE; //enable compare reg 1
//TA0CTL |= TAIE;
_BIS_SR( GIE); //ENABLE GLOBAL INTERRRUPTS
//set the max period for 16bit timer operation
while(true){}
}
#pragma vector= TIMER0_A0_VECTOR //compare interrupt 0 flahse red led
__interrupt void TIMER0_A0(void) {
P1OUT ^= BIT1 ;
}
#pragma vector = TIMER1_A1_VECTOR //compare interrupt 1 flashes green led
__interrupt void TIMER1_A1(void) {
P1OUT ^= BIT0;
}