ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
45782 Топик полностью
Chum_A (05.12.2005 20:57, просмотров: 1) ответил Ivan S на Люди помогите пожалуйста таймер запустить на LPC2214
Ответ: На сон грядущий тяжело соображается, но похоже, что засада в отсутствии собственно обработчика VIC Для примера, нечто для IAR:
void TO_Setup()
{
T0TCR = 2;  // stop & reset T0
T0PR = 7;   // T0clc = pclc/8 т.е. 0,543 uS на дискрету T0
T0MR0 = 100000; // совпадение при 100 000 * 0,543 uS = ~50 mS
T0MCR = 3;  // .0 == 1 прерывание и .1 = 1 сброс Т0 при достижении T0MR0
T0TCR = 1;  // run T0
}

//==============================================================================================
//
//==============================================================================================
__arm __irq void irq_handler()
{
  void (*interrupt_function)();
  unsigned int vector;

  vector = VICVectAddr; // Get interrupt vector.
  interrupt_function = (void(*)())vector;
  (*interrupt_function)(); // Call vectored interrupt function.
  VICVectAddr = 0; // Clear interrupt in VIC.
}

//==============================================================================================
//
//==============================================================================================
__arm void T0_handler()
{
if(T0IR & 0x01) // это прерывание по MR0
  {
  T0IR = 0x01;
  if(++Sync & 0x01)
    IO3SET = 0x00000003;
  else
    IO3CLR = 0x00000003;
  }
}

//==============================================================================================
//
//==============================================================================================
void Intr_Setup()
{
VICIntSelect = 0; // нет прерываний назначенных на FIQ

VICProtection = 0; // На всякий разрешим и для User mode
VICIntEnClear = 0xffffffff;

VICVectAddr0 = (unsigned int)&T0_handler; // на Addr0 записываем адрес обработчика прерывания T0
VICVectCntl0 = 0x20 | VIC_TIMER0;  // обработчик по Addr0 разрешен и назначен на VIC Chanel №4 (т.е. T0)

VICVectAddr1 = (unsigned int)&SPI0_handler; // на Addr14 записываем адрес обработчика прерывания SPI0
VICVectCntl1 = 0x20 | VIC_SPI;  // обработчик по Addr0 разрешен и назначен на VIC Chanel №10 (т.е. SPI0)
    
VICIntEnable |= (1 << VIC_SPI);   // прерывание от SPI разрешено (оно жестко приписано к VIC Chanel .10)
VICIntEnable |= (1 << VIC_TIMER0);  // прерывание от T0 разрешено (оно жестко приписано к VIC Chanel .4)
}