Привет Есть функция-обработчик прерывания от таймера __irq void TIMER2_IRQHandler(void) { LPC_TIM2->TCR = 2;//timer disable and reset
if (a==1) {LPC_TIM2->MR0 = 10000;b=1;}; if (a==2) {LPC_TIM2->MR0 = 20000;}; if (a==3) {LPC_TIM2->MR0 = 30000;b=0;a=0;}; a++; LPC_TIM2->TCR = 1;//counter enable LPC_TIM2->IR = 1;//сброс прерывания MR0 таймера2 }; Задача такая, чтобы условия выполнялись через заданные промежутки времени, которые задаю совпадением mr0. Нужно, чтобы условия при каждом a выполнялись без пребоя. Так-то работает, но иногда (редко) переменная b устанавливается в 1 и не сбрасывается в 0. Не могу причину найти. В программе есть еще один обработчик внешнего прерывания. Подскажите в чем может быть проблема или как лучше сделать отсчет времени и выполнение нужной функции по истечению, чтобы не было сбоев в работе. Параметр b используется в основной программе вне прерываний. Может быть такое, что счетчик проскакивает совпадение mr0 по каким-то причинам и поэтому условие не выполняется? Спасибо.
Сообщение отредактировал alt3857 - Dec 2 2010, 05:10
|