реклама на сайте
подробности

 
 
> Проблема с записью вектора прерывания, IAR 4.41, at91sam7s
Bulat
сообщение Nov 15 2007, 12:07
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241



Я пытаюсь проинициализировать обработчик прерывания
Код
#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();//Запись адреса обработчика прерывания


Основной вопрос по последней строчки кода.
Строку "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. Правильно?
Заранее благодарен!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Bulat
сообщение Nov 15 2007, 12:47
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241



Когда я написал как вы сказали - (void (*)(void))(AT91C_BASE_AIC->AIC_IVR)();
Т.е. добавил пустые скобки, компилятор, ссылаясь на строку "(void (*)(void))(AT91C_BASE_AIC->AIC_IVR)();" выдал ошибку:
Error[Pe109]: expression must have (pointer-to-) function type

Еще компилятор ругается на строку "AT91C_BASE_AIC->AIC_IECR[AT91C_ID_UDP] = 1;"
Выдает ошибку, ссылаясь на эту строку:
Error[Pe142]: expression must have pointer-to-object type
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 21:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01339 секунд с 7
ELECTRONIX ©2004-2016