ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
69446 Топик полностью
Михаил Е. (19.09.2006 17:39, просмотров: 1) ответил smartleds на КАк адрес обработчика в VICVectAddr записать, может апнота есть?
Я не большой специалист в 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 сек.
}