Имеется отладочная плата sam7-mt256 фирмы olimex. На плате имеется джойстик, состоящий из 5 кнопок.
Хочу сделать прерывание по нажатию на одну из этих кнопок, но как-то не выходит. Т.е. по нажатию на кнопку программа уходит в прерывание и крутится в нем, пока не перезагрузишь контроллер. На сколько я понял, за окончание прерывания отвечает запись любого значения в регистр AIC_EOICR, но это тоже не помогает. Может кто делал что-нибудь подобное, подскажите куда копать? Ниже приведена часть кода, в котором производится настройка и описание прерывания.
Используемая среда разработки IAR 5.4.
CODE
#define SW2 BIT27
#define LED1 BIT7
int a = 0;
__irq void int_sw(void){
for(int i=0;i<10000;i++)
{}
a=~a;
if(a!=0)
{
*AT91C_PIOA_CODR |= LED1;
}
else
{
*AT91C_PIOA_SODR |= LED1;
}
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_PIOA->PIO_ISR;
}
int main(void)
{
InitPeriphery();
InitFrec();
// Initialize interrupts
*AT91C_PIOA_ASR = (1<<SW2);
*AT91C_PIOA_IER = SW2;
*AT91C_PIOA_IMR = SW2;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_IRQ1] = 0x00;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_IRQ1] = (unsigned int) int_sw;
AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_IRQ1);
while (1)
{
}
}