Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IRQ
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Novichok1
Разбираюсь с LPC2478, после прочтения соответствующей литературы сложилось некоторое представление о настройке IRQ прерываний:
есть некотроый канал прерываний, по которому некое устройство шлет свои прерывания,
есть модуль VIC со своими слотами, причем у каждого слота есть регистр адреса обработчика прерывания VICVectAddrxx(это понятно), и регистр упраления вектором VICVectCntrlxx, у котрого имеется два поля: номер канала и флаг разрешения прерывания, причем последнее наверное состоит из одного млашего бита.
Так вот, хотелось бы знать, верно ли мое представление, и откуда брать номер канала прерывания для различных устройств.
Novichok1
Все, вроде понимание появилось, но прерывания все-равно не хотят работатьsad.gif
Подскажите пожалуйста, что делаю не так, или чего не хватает?

Настраиваю прерывания IRQ таким образом

Код
void Irq_init
{
        PINSEL0 = 0x00100000; // Настраиваю пин P2.10 на внешнее прерывание EINT0
      VICIntSelect &= ~0x00004000; // Настраиваю прерывание по слоту 14 как IRQ
      VICIntEnable |= 0x00004000; // Делаю это прерывание доступным
      VICVectCntl14 = 0x05; // Настраиваю приоритет прерывания (наверное)
      VICVectAddr14 = (tU32)Irq_Handler; // Указываю адрес обработчика
}

void Irq_Handler(void) __attribute__((interrupt("IRQ"))); // Указываю компилятору, что это IRQ- обработчик

Собственно, обработчик:
void Irq_Handler(void)
{
    FIO2DIR |= P2i00;
    FIO2SET |= P2i00; // Мигаю светодиодом

        EXTINT = 0x00000002;//Clear the peripheral interrupt flag
        VICVectAddr = 0x00000000;//Dummy  write to signal end of interrupt
}
baralgin
Похоже, что в обработчике проблема точно есть (независимо от того, вызывается он или нет smile.gif ). Мигание светодиодом означает его переодическое включение и отключение, а у Вас на каждом шаге только включение - он должен просто гореть.
Novichok1
Ну да, согласен- описался- включение светодиода, не миганиеsmile.gif
Ну так он же и не горит, зараза!
espectro
Novichok1, пишите в ИАРе?
Novichok1
Нет, пользуюсь GNUARM.
Novichok1
Ну как всегда, все дело в невнимательности и мелких мелочах.
Во-первых не PINSEL0, а PINSEL4.
Во-вторых в конфиге нужно было прописать
#define IRQ_HANDLER 1
вместо
#define IRQ_HANDLER 0.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.