Я не большой специалист в ARM, но делал так Написал подпрограммку установки вектора
//********* Установка номера и вектора IRQ ********** void InitLPC::SetIRQ(int num,int pri,unsigned int ADDR) { unsigned long *ptr; VICIntSelect &= ~(1<<num); // Если установлен FIQ № num - сбросить ptr = (unsigned long *)(&VICVectCntl0); // указатель на 0-й эл-т VICVectCntl ptr[pri] = 0x20|num; // вектору pri назначается прерывание № num ptr = (unsigned long *)(&VICVectAddr0); // указатель на 0-й эл-т VICVectAddr ptr[pri] = ADDR; // вектору pri назначается адрес функции обработки прерывания VICIntEnable |= 1<<num; // разрешить прерывание № num }и вызываю ее, например для таймера:
initLPC.SetIRQ(4,0,(unsigned int)(&Timer0Handler)); // установить вектор прерываниягде обработчик
//************ Обработка прерывания ***************** void Timer0::Timer0Handler() { static unsigned int time; // подсчет времени 1 сек. T0IR_bit.MR0INT = T0IR_bit.MR0INT; // сбросить запрос на прерывание if(++time<1000) SendEvent(Time_1ms); // событие 1 мсек else { time = 0; SendEvent(Time_1s); } // событие 1 сек. }