прерывание от 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 работает нормально.