J'ai utilisé le temporisateur A dans MSP430 avec une optimisation élevée du compilateur, mais j'ai trouvé que mon code temporisateur échoue lorsque l'optimisation du compilateur est utilisée. Si aucune optimisation n'est utilisée, le code fonctionne correctement.Minuteur une utilisation dans msp430 en mode d'optimisation du compilateur haut
Ce code est utilisé pour obtenir une coche de temporisation de 1 ms. timeOutCNT est incrémenté en interruption.
Voici le 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 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
Quelqu'un peut-il me aider à résoudre ce problème? Existe-t-il un autre moyen d'utiliser la minuterie A pour qu'elle fonctionne correctement dans les modes d'optimisation? Ou ai-je utilisé à tort pour atteindre 1 ms d'interruption?
Et je crois que les différents compilateurs géreront de ne pas avoir 'volatile 'là-bas différemment même avec des optimisations élevées. – nategoose
Salut Artelius, Merci pour la solution, cela a fonctionné pour moi. Vishal N – Vishal