Код
#pragma vector = 0x0000018
__irq __arm void IRQ_Switch() {
(void (*)(void))(regAIC->AIC_IVR);
AT91C_BASE_AIC->AIC_EOICR = 0;
}
AT91C_BASE_AIC->AIC_IECR[AT91C_ID_UDP] = 1;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_UDP] = irq_USB();//Запись адреса обработчика прерывания
__irq __arm void IRQ_Switch() {
(void (*)(void))(regAIC->AIC_IVR);
AT91C_BASE_AIC->AIC_EOICR = 0;
}
AT91C_BASE_AIC->AIC_IECR[AT91C_ID_UDP] = 1;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_UDP] = irq_USB();//Запись адреса обработчика прерывания
Основной вопрос по последней строчки кода.
Строку "AT91C_BASE_AIC->AIC_SVR[AT91C_ID_UDP] = irq_USB();" компилятор воспринимает как присвоение регистру AIC_SVR[AT91C_ID_UDP] значение, возвращаемое функцией irq_USB()! А ведь в AIC_SVR[AT91C_ID_UDP] должен записываться адрес функции irq_USB()! Или я что-то неправильно делаю?
И второй вопрос. Он касается предпоследней строки кода "AT91C_BASE_AIC->AIC_IECR[AT91C_ID_UDP] = 1;" Это я пытаюсь разрешить прерывание от UDP. Правильно?
Заранее благодарен!