Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FIQ, AT91RM9200 и IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Paramedic
Есть внешний источник прерывания на PB28. Пытаюсь написать обработку FIQ:

void AT91F_FIQ_HANDLER(void)
{
asm("nop");
}

main()
{
AT91F_PIOB_CfgPMC();
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOB, (1 << 28), 0);
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_FIQ,
AT91C_AIC_PRIOR_HIGHEST,
AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE,
(VoidFpnt_t)AT91F_FIQ_HANDLER);
// Enable FIQ interrupt
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_FIQ);

...
}
Далее при возникновении внешнего события программа сбивается на какой-то далёкий адрес, при этом в обработчик даже не заходит.
Другие прерывания (системный таймер и TWI) работают нормально.
Даже если пытаться тоже самое сделать через IRQ0 - тоже всё работает.
Чем FIQ так отличается от всех?
Где я чего не доглядел?
AlexBoy
Цитата(Paramedic @ Feb 5 2007, 16:03) *
Чем FIQ так отличается от всех?
Где я чего не доглядел?

Надо смотреть в startup что в таблице векторов по адресу FIQ
LDR PC, Reset_Addr ; reset
LDR PC, Undefined_Addr ; Undefined Instruction
LDR PC, SWI_Addr ; Software Interrupt
LDR PC, Prefetch_Addr ; Prefetch Abort
LDR PC, Abort_Addr ; Data Abort
LDR PC, Reserved_Addr ; reserved
LDR PC, [PC,#-0xF20] ; IRQ : read the AIC
LDR PC, [PC,#-0xF20] ; FIQ : read the AIC
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.