реклама на сайте
подробности

 
 
> Таймер и прерывания, Хочу понять принцип работы
whiteTigr
сообщение Aug 15 2011, 12:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 25-07-11
Пользователь №: 66 407



Среда разработки: Keil.
Микроконтроллер: 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;
}


Код
__irq void Timer2Handler()
{
  if (OnTimerInterupt)
    OnTimerInterupt();  
  
  T2IR = 0x01;
  VICVectAddr = 0;  
}


Код
typedef void (*CallBackFunction)(void);
CallBackFunction OnTimerInterupt = 0;


Допустим, я назначаю на прерывание функцию, которая выполняется около 1мс (пусть будет Func1).
При прерывании в этой функции запускаю этот же таймер, переопределяя OnTimerInterupt на функцию с небольшим временем выполнения (пусть будет Func2), и настраиваю таймер на срабатывание через 100 мкс.

Вопрос: как поведет себя выполняющаяся функция Func1, при следующем прерывании таймера (в котором вызовется Func2)?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- whiteTigr   Таймер и прерывания   Aug 15 2011, 12:21
- - whiteTigr   Сегодня дошло, что в первом сообщении глупость. В ...   Aug 16 2011, 07:28
|- - sergeeff   Цитата(whiteTigr @ Aug 16 2011, 10:28) Се...   Aug 16 2011, 07:46
|- - whiteTigr   Цитата(sergeeff @ Aug 16 2011, 11:46) А ч...   Aug 16 2011, 07:52
- - sergeeff   Вы же ARM'ами заняты? Там всего два прерывания...   Aug 16 2011, 08:50
|- - whiteTigr   Цитата(sergeeff @ Aug 16 2011, 12:50) Вы ...   Aug 16 2011, 09:50
- - sergeeff   Как-то я с VIC'ом не работал, только с AIC...   Aug 16 2011, 10:00
|- - whiteTigr   Цитата(sergeeff @ Aug 16 2011, 14:00) Как...   Aug 16 2011, 10:26
|- - sergeeff   Цитата(whiteTigr @ Aug 16 2011, 13:26) И ...   Aug 16 2011, 11:40
|- - whiteTigr   Цитата(sergeeff @ Aug 16 2011, 15:40) Ну ...   Aug 16 2011, 11:49
|- - toweroff   Цитата(whiteTigr @ Aug 16 2011, 15:49) 20...   Aug 16 2011, 16:22
|- - whiteTigr   Цитата(toweroff @ Aug 16 2011, 20:22) ойо...   Aug 17 2011, 05:04
- - sergeeff   Тогда уж напишите: Кодif (++buffer->addrW...   Aug 17 2011, 06:28
|- - whiteTigr   Цитата(sergeeff @ Aug 17 2011, 10:28) Тог...   Aug 17 2011, 07:09
- - toweroff   если размер буфера равен степени двойки, то вот та...   Aug 17 2011, 08:40
- - whiteTigr   Цитата(toweroff @ Aug 17 2011, 12:40) есл...   Aug 17 2011, 10:06
- - toweroff   Цитата(whiteTigr @ Aug 17 2011, 14:06) Мо...   Aug 17 2011, 10:08
- - whiteTigr   Цитата(toweroff @ Aug 17 2011, 14:08) да ...   Aug 17 2011, 10:43


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016