Использую AT91SAM7X - EK и yagarto
Надо повесить джойстик на прерывание.
Перерыл все примеры, сделал как там - все равно не работает.
Инициализация
Код
AT91C_BASE_PIOA->PIO_PER = (0x1F <<21);
AT91C_BASE_PIOA->PIO_ODR = (0x1F <<21);
AT91C_BASE_PIOA->PIO_IFER = (0x1F <<21);
AT91C_BASE_PIOA->PIO_CODR = (0x1F <<21);
AT91C_BASE_PIOA->PIO_IER = (0x1F <<21);
AT91C_BASE_PIOA->PIO_MDDR = (0x1F <<21);
AT91C_BASE_PIOA->PIO_PPUER = (0x1F <<21);
AT91C_BASE_PIOA->PIO_OWDR = (0x1F <<21);
//LEDS
AT91C_BASE_PIOB->PIO_PER = (0xF<<19);
AT91C_BASE_PIOB->PIO_OER = (0xF<<19);
AT91C_BASE_PIOB->PIO_IFDR = (0xF<<19);
AT91C_BASE_PIOB->PIO_SODR = (0xF<<19);
AT91C_BASE_PIOB->PIO_IDR = (0xF<<19);
AT91C_BASE_PIOB->PIO_MDDR = (0xF<<19);
AT91C_BASE_PIOB->PIO_PPUDR = (0xF<<19);
AT91C_BASE_PIOB->PIO_OWDR = (0xF<<19);
//interrupts
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
AT91F_AIC_ConfigureIt(AT91C_ID_PIOA, BUTT_INT_LEVEL_PRIORITY, AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE, ( void (*)( void ) ) ButtonsISR_Test );
AT91C_BASE_AIC->AIC_IMR = 1 << AT91C_ID_PIOA;
AT91C_BASE_AIC->AIC_IECR = 1 << AT91C_ID_PIOA;
Обработчик (в отдельном модуле, компилится по ARM)
Код
void __attribute__((interrupt("IRQ"), naked )) ButtonsISR_Test()
{
AT91C_BASE_PIOB->PIO_CODR = (0x1<<19);
}
Подскажите, может я где-то что-то упустил? заранее спасибо.