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

 
 
> Обработка прерывания от SPI, at91sam7s256
Bulat
сообщение Mar 30 2007, 09:53
Сообщение #1


Местный
***

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



1. Какому источнику прерывания в регистре AIC_IECR (PID2, 3, 4,...) соответствует прерывание от SPI?
2. Вектор прерывания ARM находится по адресу 0х18. Можно по этому адресу записать команду, типа goto "метка", а метку уже поставить рядом с функцией обработки прерывания, ну и таким образом вызвать функцию обработки прерывания? Ну даже если делать как написано в документации, т.е. производить чтение AIC_IVR, то как именно по адресу 0х18 записать нужную команду. Я понимаю так:

adr[int()]=0x18; //задаем адрес ф-ии int()
void int()
{
goto 1;
}
1: void irq() //функция обрабоки прерывания
{
...
}

Только оператор adr[] IAR не воспринимает.
3. Как по другому задать адрес функции?
Если можно то напишите свой вариант кода на С.
Заранее благодарен!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sergei_K
сообщение Apr 10 2007, 12:24
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



Здравствуйте. У меня та же проблема, что у автора.. разбираюсь с прерываниями.. smile.gif
Собсно, заношу в программу код:

__irq __arm void IRQ_Handler1() {



AT91C_BASE_AIC->AIC_EOICR = 0;
}


При компиляции выдает ошибки:

main.c(52): error: #40: expected an identifier
main.c(52): error: #1021: __irq functions must return no result

При занесении:

__irq __arm void IRQ_Switch() {
(void (*)(void))(AT91C_BASE_AIC->AT91C_AIC_IVR)();
AT91C_BASE_AIC->AIC_EOICR = 0;
}


void Handler1() {

}
void Handler2() {

}

к ним добавляется ошибка:

main.c(53): error: #134: expected a field name

Таким образом, это навевает следующий вопрос: можно ли вобще таким образом работать в Keil (именно в нем я и работаю smile.gif ), а если можно - как избавиться от этих ошибок... Если нет - то как с ними работать..
Возможно, если бы знающие люди выложили более полный код (пример) и вопросы бы отпали smile.gif

P.S. Эх.. старый добрый 51.. как все было просто smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 10 2007, 14:23
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Sergei_K @ Apr 10 2007, 11:24) *
Таким образом, это навевает следующий вопрос: можно ли вобще таким образом работать в Keil
Примеры были под IAR. Похоже, у кейла нет ключевого слова __arm, именно на него и ругается компилятор (expected an identifier, __irq functions must return no result). Посмотрите в хелпе как описать arm-функцию.
Цитата(Sergei_K @ Apr 10 2007, 11:24) *
error: #134: expected a field name
Пришлите почтой заголовочный файл с описанием SFR от кейла, посмотрю в чем тут дело.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 18:06
Рейтинг@Mail.ru


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