开发者

Timer a usage in msp430 in high compiler optimization mode

开发者 https://www.devze.com 2023-01-03 02:28 出处:网络
I have used timer A in MSP430 with high compiler optimization, but found that my timer code is failing when high compiler optimization used.

I have used timer A in MSP430 with high compiler optimization, but found that my timer code is failing when high compiler optimization used. When none optimization is used code works fine.

This code is used to achieve 1 ms timer tick. timeOutCNT is increamented in interrupt.

Following is the code,

        //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开发者_JAVA百科 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

Can anybody help me here to resolve this issue? Is there any other way we can use timer A so it works fine in optimization modes? Or do I have used is wrongly to achieve 1 ms interrupt?


Are any of your variables (e.g. timeOutCNT) modified in an interrupt handler?

If so, ensure that you declare them as volatile, e.g.

volatile int timeOutCNT;

This prevents the compiler from making optimisations that assume that timeOutCNT is not modified by interrupt handlers or other threads.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号