ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
20 мая
19954 Топик полностью
ChumA (20.01.2005 21:02, просмотров: 1) ответил LeonV на Ответ: Вопрос задан не до конца, после спец. функц. с "T0TCR = 1; // Enable timer 0." в симуляторе не идет, а во FLASH, через JTAG идет???
Ну тогда поясните, что значит "не идет", может обработчик прерывания не того,с? Код ниже проверен на LPC2214... 
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 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) 

VICIntEnable |= (1 << VIC_TIMER0);  // прерывание от 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.
}