Привет
Есть функция-обработчик прерывания от таймера
__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 по каким-то причинам и поэтому условие не выполняется?
Спасибо.