Микроконтроллер: lpc2367.
Есть таймер, генерирующий прерывания. Таймер работает по принципу "Отсчитал до нужного MR, прервался и остановился".
Процедура, на которую он прыгает при прерывании переопределяемая.
Код
void InitTimer()
{
/* Initialize Timer 2 */
PCONP |= PCTIM2;
PCLKSEL1 &= ~(3 << PCLK_TIMER2_OFFSET);
PCLKSEL1 |= (1 << PCLK_TIMER2_OFFSET);
T2PR = 63; // 1 mks
T2MR0 = 99; // 100 mks
T2MCR = 7; // interupt, reset, stop
VICIntEnClr = INTTIM2;
VICVectAddr26 = (unsigned long)Timer2Handler;
VICVectPriority26 = 10;
T2TCR = 0x01;
VICIntEnable += INTTIM2;
}
{
/* Initialize Timer 2 */
PCONP |= PCTIM2;
PCLKSEL1 &= ~(3 << PCLK_TIMER2_OFFSET);
PCLKSEL1 |= (1 << PCLK_TIMER2_OFFSET);
T2PR = 63; // 1 mks
T2MR0 = 99; // 100 mks
T2MCR = 7; // interupt, reset, stop
VICIntEnClr = INTTIM2;
VICVectAddr26 = (unsigned long)Timer2Handler;
VICVectPriority26 = 10;
T2TCR = 0x01;
VICIntEnable += INTTIM2;
}
Код
__irq void Timer2Handler()
{
if (OnTimerInterupt)
OnTimerInterupt();
T2IR = 0x01;
VICVectAddr = 0;
}
{
if (OnTimerInterupt)
OnTimerInterupt();
T2IR = 0x01;
VICVectAddr = 0;
}
Код
typedef void (*CallBackFunction)(void);
CallBackFunction OnTimerInterupt = 0;
CallBackFunction OnTimerInterupt = 0;
Допустим, я назначаю на прерывание функцию, которая выполняется около 1мс (пусть будет Func1).
При прерывании в этой функции запускаю этот же таймер, переопределяя OnTimerInterupt на функцию с небольшим временем выполнения (пусть будет Func2), и настраиваю таймер на срабатывание через 100 мкс.
Вопрос: как поведет себя выполняющаяся функция Func1, при следующем прерывании таймера (в котором вызовется Func2)?