Отключать прерывания не нужно.
Код
AT91F_AIC_DisableIt_MY(AT91C_BASE_AIC, AT91C_ID_PIOA);
После того как вновь включаете, должна быть команда очистки прерываний (не помню точно как регистр называется).
Цитата(sergeeff @ Aug 5 2009, 09:46)

Должно быть:
Код
if(i>=200000 && i<=300000) regs->PIOA_ODSR = 0x0080001; //Лампочка горит
if(i>=100000 && i<200000) regs->PIOA_ODSR = 0x0080000; //не горит
вот так, помоему даже красивше:
Код
if((200000<=i) && (i<=300000)) regs->PIOA_ODSR = 0x0080001; //Лампочка горит
Код
AT91C_BASE_AIC->AIC_EOICR = status;
А вот этого уже не нужно. В стартапе уже есть
Код
;- Mark the End of Interrupt on the AIC
ldr r14, =AT91C_BASE_AIC
str r14, [r14, #AIC_EOICR]
Код
if(i_status&[b]0x800000[/b]) AT91F_PIO_InterruptDisable(AT91C_BASE_PIOA,[b]SW3_MASK[/b]); //Прерывание пришло от PA23
Почему бы просто не написать i_status&
SW3_MASKИ код
Код
PIO_copy = regs->PIOA_PDSR; //считываем данные с порта контроллера
if(PIO_copy != 0x0) i_PIO=1;
if(i_PIO == 1)
Можно заменить просто одним условным оператором.
Сообщение отредактировал Troll - Aug 5 2009, 06:21