Цитата(Bulat @ Apr 9 2007, 06:37)

Недостающую скобку я поставил, но ошибку всеравно выдает.
expected a field name. Посмотрите как описан регистр AT91C_AIC_IVR в заголовочном файле вашего компилятора. Похоже, что AT91C_BASE_AIC описан не как структура и AT91C_AIC_IVR не ее член. Хотя, вы упоминаете IAR, тогда вопрос: какой заголовочный файл (ioAT91xxxxx.h) вы используете?
Цитата(Bulat @ Apr 9 2007, 06:37)

И еще по поводу моего третьего вопроса. Если пришел запрос на обработку прерывания от источника PID1, то вызывается функция Handler1(), если от PID2, то Handler2()?
Будет вызван тот Handler, адрес которого вы занесете в соответствующий регистр AIC_SVR при инициализации, например:
Код
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (uint32_t)Handler1;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SPI] = (uint32_t)Handler2;
строка (void (*)(void))(AT91C_BASE_AIC->AT91C_AIC_IVR)(); дословно означает следующее: взять число из регистра AT91C_AIC_IVR, представить себе, что это адрес функции и вызвать функцию по этому адресу. После возврата из функции программа попадет на следующую команду, т.е. на AT91C_BASE_AIC->AIC_EOICR = 0, как и с обычной функцией. Адрес в AT91C_AIC_IVR заносит контроллер прерываний (AIC). Как он это делает - попробуйте понять из описания контроллера.