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

 
 
> Вопрос по лпц2148, прерывания
_artem_
сообщение Dec 7 2007, 02:24
Сообщение #1


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Содерживмое регистра VICDefVectAddr используется :
а. для загрузки VICVectAddr если совершившееся прерывание не векторное и не быстрое fiq
б. для прямого вызова спуриос обработчика прерываний

В случае а. Если мы собираемся вызвать функцию невекторного прерывания (из обработчика прерываний чей адрес записан в таблице векторов) ее декларация будет записываться в простом виде без атрибутики __irq.

В случае б. приведена однозначная декларация с приведенным выше аттрибютoм (как описывается в ан10414), так как при спуриос вызов пойдет напрямую в обход обработчика irq прерываний

Почему такая двухсмысленность в исполнении или это только моя фантазия?

Второй вопрос - нужно ли при невекторных и fiq быстрых прерываниях записывать что нибудь в VICVectAddr , для сброса контроллера перед выходом из обработчика прерываний?


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
etoja
сообщение Dec 7 2007, 05:20
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Синтаксис объявления прерывания зависит от компилятора.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Dec 7 2007, 07:29
Сообщение #3


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Это понятно , только непонятно почему для одного случая я должен его обьявляь как функцию прерывания в то же время для другого это не требуется .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 7 2007, 10:25
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_artem_ @ Dec 7 2007, 05:24) *
Почему такая двухсмысленность в исполнении или это только моя фантазия?

Почему двусмысленность? Если уж попали на вектор 0x18, то возвращаться всегда нужно специфическим образом.

Цитата(_artem_ @ Dec 7 2007, 05:24) *
Второй вопрос - нужно ли при невекторных и fiq быстрых прерываниях записывать что нибудь в VICVectAddr , для сброса контроллера перед выходом из обработчика прерываний?

По-идее, нет: FIQ всегда имеет высший приоритет, а невекторные прерывания - всегда низший.
Впрочем, невекторные прерывания использовать не приходилось, векторов хватало всегда smile.gif
Go to the top of the page
 
+Quote Post
_artem_
сообщение Dec 7 2007, 11:34
Сообщение #5


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Спасибо за ответ.

Двухсмысленность в том что если VICDefVectAddr будет загружен адресом обработчика для спуриоус прерываний то этот обработчик должен декларироваться с атрибютом __irq.
А если также используются больше чем 16 прерываний то некоторые прерывания придется использовать как невекторные , что означает вызов этих прерываний через IRQ векторный обрабочик который прочтет адрес обрабочика невекторного прерывания из VICVectAddr (потому что при невекторном прерывании VICVectAddr содержит адрес из VICDefVectAddr, но он уже загружен адресом обработчика спуриоус, который можно по идее использоват для обработйки невекторных прерываний также ) и вызовет его как обычную функцию (в этом случае функция с атрибютом __irq будет вызвана из функции с тем же атрибютом).
Можно конечно же обойти путем сравнения адреса из VICVectAddr с VICDefVectAddr прежде чем вызвать функцию по адресу из VICVectAddr.

Конечно 16 прерываний это много , но чем черт не шутит ).


По моему ошибка в nxp аппноте (и в моем понимании функции прерываний ) где они задекларировали спуриоус обработчик как __irq хотя он таковым не должен быть.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 7 2007, 12:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Какая разница, векторное прерывание, или нет? В любом случае процессор окажется в режиме IRQ, и обработчик должен позаботиться о правильном выходе.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Dec 7 2007, 13:23
Сообщение #7


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Верно. В этом и была моя ошибка .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post

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

 


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


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