На AT91RM9200 это вынлядит так. Думаю все основные моменты на AT91SAM7S64 будут теми же.
Код
//Настройка AIC
AIC_IDCR=0xFFFFFFFF; //Запретим все прерывания
for(unsigned int i=0; i<8; i++) AIC_EOICR=0;
AIC_IECR=(1<<1); //Разрешим прерывания Source 1
ST_IER=(1<<2); //Разрешить прерывания RTTINC
AIC_SVR1=(int) &Interrupt_Source1;
__enable_interrupt();
void Interrupt_Source1(void)
{
int st_sr=ST_SR;
if(st_sr&0x00000004)
{ //Прерывание RTC (1 раз в секунду)
}
}
#pragma vector=0x18
__irq __arm void interrupt_handler(void)
{
void (*interrupt_task)();
unsigned int vector;
vector = AIC_IVR; // Get interrupt vector.
interrupt_task = (void(*)())vector;
AIC_IVR = 0; // Acknowledge interrupt in VIC.
(*interrupt_task)(); // Execute the task associated with this interrupt.
AIC_EOICR=0;
return;
}