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

 
 
> По ARM архитектуре (LPC2106), вложенные прерывания
SasaVitebsk
сообщение Jun 16 2008, 19:52
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



(Пожалуйста не предлагать варианты с ОС.)

Имеется несколько прерываний. Одно объявлено как FIQ и несколько по типу IRQ через VIC. Хочу сделать одно совтовое прерывание. Во время его работы должны быть разрешены все другие прерывания (вложенные).

Попытался его объявить следующим образом
Код
#pragma swi_number=VIC_SW                                // Èñïîëíåíèå êîììàíä
__irq  __arm    __nested    __swi    static void    ShowActive(void)

Пишет об ошибке. Убрал __irq - пишет, что __nested только с __irq может быть применено.

Пример из описалова по nested меня не устраивает, так как мне не надо во всех irq прерываниях разрешать fiq, а только в совтовом.

Может я неправильно __swi применяю и это не для данного случая. Если это так, то как необходимо проинициилизировать, вызвать и обработать. Если можно примерчик пож.

Заранее благодарю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Jun 16 2008, 20:42
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Как-то все мутно изложено sad.gif. Но насколько можно понять "вложеные" тут ни сном ни духом. Просто разрешите прерывания в Вашем обработчике SWI и все.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 16 2008, 23:03
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(zltigo @ Jun 16 2008, 23:42) *
Как-то все мутно изложено sad.gif


Хотел просто покороче.
Имеются прерывания irq от rs485 (Это просто для информации).

Имеется быстрое регулярное прерывание от таймера fiq.

Каждое N-ое прерывание fiq надо вызвать софтовое прерывание (N=56). При этом прерывание софтовое выполняется достаточно долго (3-30 прерываний fiq) и необходимо чтобы прерывания fiq и irq были бы разрешены.

Ещё раз почитав думаю что это можно сделать двумя способами. 1 через swi. 2 посредством VIC с вызывом прерываний с софтовым вектором. Во втором случае необходимо использовать ключевое слово __nested. Хотя пока в голове туман.

Вопрос если я хочу воспользоваться swi, то такие вопросы:
1) как вызвать прерывание
2) как его разрешить
3) если я вызову в прерывании fiq, то оно будет обработано по выходу?
4) Почему в данном случае не надо сохранять SPSR_irq

Если я воспользуюсь irq, то вроде бы всё понятно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 17 2008, 04:50
Сообщение #4


Гуру
******

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



Туман надо ликвидировать smile.gif

Цитата(SasaVitebsk @ Jun 17 2008, 03:03) *
3) если я вызову в прерывании fiq, то оно будет обработано по выходу?

Нет, процессор тут же ломанется выполнять SWI.

Цитата(SasaVitebsk @ Jun 17 2008, 03:03) *
4) Почему в данном случае не надо сохранять SPSR_irq

Потому что процессор будет переключен в режим супервизора.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 14:35
Рейтинг@Mail.ru


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