Ответ: На сон грядущий тяжело соображается, но похоже, что засада в отсутствии собственно обработчика 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)
}