Подключил <intrinsics.h> и вставил
функцию __enable_interrupt().
Вот текст программы
Код
void pio_c_irq_handler ( void )
{
int dummy;
count_int_pio++;
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2);
delay_t (2000000);
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2);
delay_t (2000000);
dummy =AT91C_BASE_PIOA->PIO_ISR;
dummy=AT91C_BASE_AIC->AIC_ISR;
dummy=AT91C_BASE_AIC->AIC_IECR;
}
void main( void )
{
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA );
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK );
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK );
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, SW4_MASK);
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_PIOA,PIO_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, pio_c_irq_handler);
AT91C_BASE_AIC->AIC_EOICR = 0;
__enable_interrupt();
AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA,SW4_MASK);
AT91F_AIC_EnableIt (pAic, AT91C_ID_PIOA);
for (;;)
{
}
}
Вот, то что в окне дизасемблерра
Код
IRQ_Handler_Entry:
00000090 E24EE004 SUB LR, LR, #0x4
00000094 E92D4000 STMDB SP!, {LR}
00000098 E14FE000 MRS LR, SPSR
0000009C E92D4000 STMDB SP!, {LR}
000000A0 E92D0001 STMDB SP!, {R0}
000000A4 E59FE048 LDR LR, [PC, #+72] ; [_?2 (0xF4)] =AIC_SMR (0xFFFFF000)
000000A8 E59E0100 LDR R0, [LR, #+256]
000000AC E58EE100 STR LR, [LR, #+256]
000000B0 E321F013 MSR CPSR_c, #0x13
000000B4 E92D500E STMDB SP!, {R1,R2,R3,R12,LR}
000000B8 E1A0E00F MOV LR, PC
000000BC E12FFF10 BX R0
000000C0 E8BD500E LDMIA SP!, {R1,R2,R3,R12,LR}
000000C4 E321F092 MSR CPSR_c, #0x92
000000C8 E59FE024 LDR LR, [PC, #+36] ; [_?2 (0xF4)] =AIC_SMR (0xFFFFF000)
000000CC E58EE130 STR LR, [LR, #+304]
000000D0 E8BD0001 LDMIA SP!, {R0}
000000D4 E8BD4000 LDMIA SP!, {LR}
000000D8 E16FF00E MSR SPSR_cxsf, LR
000000DC E8FD8000 LDMIA SP!, {PC}^
AT91F_Default_FIQ_handler:
000000E0 EAFFFFFE B AT91F_Default_FIQ_handler; 0xE0
AT91F_Default_IRQ_handler:
000000E4 EAFFFFFE B AT91F_Default_IRQ_handler; 0xE4