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

 
 
> FIQ и IRQ LPC 2106
xelax
сообщение Nov 8 2006, 14:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



прерывание от MR1 таймера Timer0, раз в миллисекунду.
Код
void InitTimer1 (void)
{
   T1TCR = 0x00000002; // синхронный сброс счётчика таймера и счётчика предделителя
   T1PR  = 0x0000170A;
   T1MR1 = 0x00000009;
   T1MCR = 0x00000018;  // разрешаю прерывание по 1 мс  
   T1TCR = 0x00000001;   // старт таймера
}

// конфигурирование контроллера прерываний
void InitVIC(void)
{
  /*  // Setup interrupt controller.    
    VICVectCntl3=0x00000025;
    VICVectAddr3 =(unsigned )Timer1Int;
//   VICIntSelect |=0x20;
    VICIntEnable |=0x20;
     VICVectAddr = 0;        
}

#pragma vector=0x1C
__fiq __arm void interrupt_function(void)
{      
  
   T1IR = 0x000000FF;
  
   if (IOPIN_bit.P0_14)  
      IOCLR_bit.P0_14=1;  
   else
      IOSET_bit.P0_14=1;  
}

__arm static void Timer1Int(void)
{        
   T1IR = 0x000000FF;
  
   if (IOPIN_bit.P0_14)
      IOCLR_bit.P0_14=1;  
   else
      IOSET_bit.P0_14=1;  
}



#pragma vector=0x18
__irq __arm void isr_handler_irq(void)
{
  void (*interrupt_function)();
  unsigned int adrvector;

  adrvector = VICVectAddr;                    
  interrupt_function = (void(*)())adrvector;
  (*interrupt_function)();                  

  VICVectAddr = 0;
}


Наблюдаю следующую картину осциллом на 14 пине, когда использую FIQ вместо меандра вижу иногда проскакивают увеличенные в два раза по времени импульсы. Иногда посередине этого импульса виден узкий пичёк. Такое ощущение, что FIQ происходит два раза подряд. Что в коде не так??? IRQ работает нормально.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:01
Рейтинг@Mail.ru


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