Я использовал таймер A в MSP430 с высокой оптимизацией компилятора, но обнаружил, что мой код таймера терпит неудачу, когда используется высокая оптимизация компилятора. Когда ни одна оптимизация не используется, код работает нормально.Мой таймер не работает, когда IAR настроен на максимальную оптимизацию
Этот код используется для достижения таймера таймера 1 мс. timeOutCNT увеличивается в прерывании.
Ниже приведен код
//Disable interrupt and clear CCR0
TIMER_A_TACTL = TIMER_A_TASSEL | // set the clock source as SMCLK
TIMER_A_ID | // set the divider to 8
TACLR | // clear the timer
MC_1; // continuous mode
TIMER_A_TACTL &= ~TIMER_A_TAIE; // timer interrupt disabled
TIMER_A_TACTL &= 0; // timer interrupt flag disabled
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 500;
TIMER_A_TACTL &= TIMER_A_TAIE; //enable timer interrupt
TIMER_A_TACTL &= TIMER_A_TAIFG; //enable timer interrupt
TACTL = TIMER_A_TASSEL + MC_1 + ID_3; // SMCLK, upmode
timeOutCNT = 0;
//timeOutCNT is increased in timer interrupt
while(timeOutCNT <= 1); //delay of 1 milisecond
TIMER_A_TACTL = TIMER_A_TASSEL | // set the clock source as SMCLK
TIMER_A_ID | // set the divider to 8
TACLR | // clear the timer
MC_1; // continuous mode
TIMER_A_TACTL &= ~TIMER_A_TAIE; // timer interrupt disabled
TIMER_A_TACTL &= 0x00; // timer interrupt flag disabled
Может кто-нибудь помочь мне здесь, чтобы решить эту проблему? Есть ли другой способ использования таймера A, поэтому он отлично работает в режимах оптимизации? Или я использовал неверно для достижения прерывания 1 мс?