Таймер ACLK не останавливается - MSP430 - eZ430 - PullRequest
0 голосов
/ 20 января 2020

Я запускаю встроенную программу в CCS IDE.

Мой проект должен выполнить для l oop от 0 до 3 (4 раза), и для каждого раунда выбрать случайное число, распечатать его и дождитесь, пока пользователь нажмет на тот же номер на клавиатуре.

Если пользователь нажмет ранее, чем 1 сек c, то сохраненное время будет временем реакции или 1 сек c, если пользователь нажал неправильный номер или нажмет после 1 сек c.

Инициализация выглядит следующим образом:

srand(time(NULL));   // Initialization, should only be called once.
WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
BCSCTL1 = CALBC1_1MHZ; //set Basic Clock System Control 1 to - 1 Mhz
DCOCTL = CALDCO_1MHZ;  //set DCO Clock Frequency Control to - 1 Mhz

UCA0CTL1 |= UCSSEL_2;    //use ACLK
UCA0CTL1 |= UCSWRST;     //USCI software reset
P3SEL |= 0x30;             //Pin P3.5 and P3.4 and P3.3 used by USART module
UCA0BR0 = 104;            //DIVIDE CLOCK FOR BAUD RATE 9600
UCA0BR1 = 0;              //DIVIDE CLOCK FOR BAUD RATE 9600
UCA0MCTL = 2;             //UCBRSx=1
UCA0CTL1 &= ~UCSWRST;     //initialize USCI
UC0IE |= UCA0RXIE;        //enabling USCI_A0 RX interrupt
_BIS_SR(GIE);
uart_init();

и ISR:

// it is timer interrupt handler
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void) {
    if (time_received) {
    TACTL = TASSEL_1 + MC_0;    //should reset the timer
    time_received = 0;
    }
}


#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void) {
time_t time;
char  valuchar;
valuchar = UCA0RXBUF;
UCA0TXBUF = valuchar;


    // Checking if the user hit the right hole(should be equal to r)
    if ((valuchar - 48) == random) {
        // Assign timer_A value to time
        time = TAR;                         //sampling the timer value
        // If the user pressed too late
        if (time == 12000)
            user_time_arr[index++] = 12000;    //12000 = 1 sec

        else
            user_time_arr[index++] = time;
    }
    // Press on the wrong number - automatically failed
    else
        user_time_arr[index++] = 12000;   //12000 = 1 sec

    time_received = 1;

}

Кажется, что таймер не сбрасывается, даже если и должен. Есть идеи?

TIA

...