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

 
 
> Вложенные прерываня
moonrock
сообщение Jul 7 2006, 20:39
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 24-03-05
Из: Санкт-Петербург
Пользователь №: 3 661



Всем привет, недавно начал разбираться с LPC2132, среда - Keil uVision,
и вот встал вопрос, как сделать, чтобы прерывания с высшим приоритетом могли прерывать исполнение обработчиков прерываний с низшим приоритетом?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Jul 8 2006, 19:32
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата
можно и повторный вызов обработчика схлопотать

Повторный вызов не схлопотать. Запрещаются все приоритеты равные и ниже текущего. А то, что нельзя делать одинаковые приоритеты я и сам жалею. Помню как удобно было на 51/52 процах с трёхуровневой системой прерываний. Быстро и удобно.

В данном вопросе только один минус - лишняя многоуровневость. Но гораздо больше плюсов. Особенно быстрое время реакции на все прерывания с учётом приоритетов. А медленные софтверные прерывания вообще не сделать без вложенности.

Цитата
просто их не надо использовать без необходимости

Не-а. Я бы советовал не использовать обычные прерывания без особой необходимости. Особенно длинные или использующие много стека.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
KeiserSose
сообщение Jun 19 2009, 07:30
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 17-11-08
Пользователь №: 41 713



Цитата(GetSmart @ Jul 8 2006, 22:32) *
Повторный вызов не схлопотать. Запрещаются все приоритеты равные и ниже текущего. А то, что нельзя делать одинаковые приоритеты я и сам жалею. Помню как удобно было на 51/52 процах с трёхуровневой системой прерываний. Быстро и удобно.

В данном вопросе только один минус - лишняя многоуровневость. Но гораздо больше плюсов. Особенно быстрое время реакции на все прерывания с учётом приоритетов. А медленные софтверные прерывания вообще не сделать без вложенности.


Не-а. Я бы советовал не использовать обычные прерывания без особой необходимости. Особенно длинные или использующие много стека.


Повторный вызов можно схлопотать элементарно. VicVectAddr=0 открывает ВСЕ прерывания. Нужно явно маскировать и восстанавливать приоритеты.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 19 2009, 07:36
Сообщение #4


Гуру
******

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



Цитата(KeiserSose @ Jun 19 2009, 11:30) *
Повторный вызов можно схлопотать элементарно. VicVectAddr=0 открывает ВСЕ прерывания. Нужно явно маскировать и восстанавливать приоритеты.


Ошибаетесь:
Цитата
Writing to the VICVECTADDR Register indicates to the interrupt priority hardware that the
current interrupt is serviced, enabling lower priority or the same priority interrupts to be
removed, and for the interrupts to become active to go active.
Go to the top of the page
 
+Quote Post
KeiserSose
сообщение Jun 19 2009, 09:11
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 17-11-08
Пользователь №: 41 713



Цитата(aaarrr @ Jun 19 2009, 10:36) *
Ошибаетесь:


Если мы обсуждаем версию ARM PrimeCell, используемую в большинстве LPC, то ошибаетесь Вы. Действительно, при чтении VicVectAddr, контроллер повышает приоритет разрешенных прерываний до уровня текущего прерывания. Это обеспечивает правильный вход в стэк прерываний, но только до первой записи в VicVectAddr, что сбрасывает логику контроллера. Таким образом, незавершенные ISR могут прерываться прерываниямм с более низким приоритетом, если прерывания этого типа разрешены в CPSR. Макросы Keil'a просто открывают прерывания. Никакого "Handle nested interrupt" в них нет. VicSWPriorityMask должен быть использован для правильной реализации вложенности.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 19 2009, 10:07
Сообщение #6


Гуру
******

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



Цитата(KeiserSose @ Jun 19 2009, 13:11) *
Если мы обсуждаем версию ARM PrimeCell, используемую в большинстве LPC, то ошибаетесь Вы.

Во-первых, и так понятно, что речь шла о pl190, у pl192 этот регистр называется VICADDRESS.
Во-вторых читаем (pl192):
Цитата
The PrimeCell VIC implements two forms of interrupt priority masking:

Hardware masking
The hardware masking is applied whenever an interrupt is being serviced,
either with a read from the VICADDRESS Register, or by asserting the
VICIRQACK input when the VIC port is used. This prevents other
active interrupts of an equal or lower priority generating a new IRQ while
the interrupt service routine is being executed. When the interrupt routine
has completed and the VICADDRESS Register has been written to, the
interrupt mask is cleared to allow all enabled interrupt sources through.
Note
The VICIRQSTATUS and VICRAWINTR Registers are not affected by
this masking.

Software masking
The software masking is applied using the value programmed into the
VICSWPRIORITYMASK Register. This mask is applied continuously,
and at the same time as the hardware mask when an interrupt is being
serviced.
Note
The values in the VICIRQSTATUS and VICRAWINTR Registers do not
reflect the masking by the VICSWPRIORITYMASK Register.

и еще:
Цитата
Writing to the VICADDRESS
Register indicates to the interrupt priority hardware that the current interrupt is serviced,
enabling the masking of lower priority or the same priority interrupts to be removed and
for the interrupts to become active.

И как получается вывод
Цитата
VicSWPriorityMask должен быть использован для правильной реализации вложенности.

?

Программное управление приоритетами было введено в дополнение к аппаратному, и никак его не отменяет:
Цитата
Software-programmable interrupt priority level masking added, in addition to the
hardware priority level masking.
Go to the top of the page
 
+Quote Post
KeiserSose
сообщение Jun 19 2009, 19:41
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 17-11-08
Пользователь №: 41 713



Убедил. Был неправ. Вспылил.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- moonrock   Вложенные прерываня   Jul 7 2006, 20:39
- - DASM   Цитата(moonrock @ Jul 8 2006, 00:39) Всем...   Jul 7 2006, 22:04
|- - Andrew2000   Цитата(DASM @ Jul 8 2006, 02:04) А никак....   Jul 7 2006, 22:40
- - moonrock   как я понимаю, такое ограничение накладывает контр...   Jul 7 2006, 22:44
- - GetSmart   Извращенцы вы тут все. Говорят о том, что не знают...   Jul 7 2006, 23:07
- - aaarrr   Читать лучше не абстрактные хелпы, а обратиться к ...   Jul 7 2006, 23:41
- - DASM   да... был неправ. Всем спасибо, век живи - век учи...   Jul 8 2006, 05:01
- - moonrock   Всем большое спасибо, а вот тот ответ, который я х...   Jul 8 2006, 09:23
|- - aaarrr   Цитата(moonrock @ Jul 8 2006, 13:23) ...н...   Jul 8 2006, 11:22
- - yuri_t   IMHO,без крайней необходимости с nested interrupt...   Jul 8 2006, 10:17
- - zltigo   Цитата(moonrock @ Jul 8 2006, 12:23) ARM ...   Jul 8 2006, 10:38
|- - GetSmart   Цитата(zltigo @ Jul 8 2006, 16:38) Не ков...   Jul 8 2006, 15:22
|- - zltigo   Цитата(GetSmart @ Jul 8 2006, 18:22) И ес...   Jul 8 2006, 15:52
|- - GetSmart   Цитата(zltigo @ Jul 8 2006, 21:52) Ну и г...   Jul 8 2006, 17:38
|- - zltigo   Цитата(GetSmart @ Jul 8 2006, 20:38) Они ...   Jul 8 2006, 18:41
- - GetSmart   Те же, кто не хочет использовать много асма, могут...   Jul 8 2006, 12:14
|- - zltigo   Цитата(GetSmart @ Jul 8 2006, 15:14) У ме...   Jul 8 2006, 12:49
|- - Andrew2000   А на мой вопрос про завменитель CLZ кто-нить может...   Jul 8 2006, 13:00
|- - zltigo   Цитата(Andrew2000 @ Jul 8 2006, 16:00) А ...   Jul 8 2006, 13:08
- - aaarrr   Цитата(GetSmart @ Jul 8 2006, 16:14) Те ж...   Jul 8 2006, 13:06
|- - Andrew2000   Цитата(aaarrr @ Jul 8 2006, 17:06) Могли ...   Jul 8 2006, 13:48
|- - zltigo   Цитата(Andrew2000 @ Jul 8 2006, 16:48) Пр...   Jul 8 2006, 14:00
- - aaarrr   Цитата(Andrew2000 @ Jul 8 2006, 17:48) На...   Jul 8 2006, 14:12
|- - Andrew2000   Цитата(aaarrr @ Jul 8 2006, 18:12) Цитата...   Jul 10 2006, 15:53
- - DASM   А вот и не подеретесь Zltigo - а чего в ентих...   Jul 8 2006, 16:42
|- - zltigo   Цитата(DASM @ Jul 8 2006, 19:42) Zltigo -...   Jul 8 2006, 17:17
- - DASM   Да уж... Мне как-то повезло... Ни разу FIQ не надо...   Jul 8 2006, 17:38
- - moonrock   блин, тут все такие умные, один умней другого, аж ...   Jul 8 2006, 19:37
|- - zltigo   Цитата(moonrock @ Jul 8 2006, 22:37) мой ...   Jul 8 2006, 20:02
|- - Nixon   Цитата(moonrock @ Jul 8 2006, 22:37) блин...   Jul 10 2006, 16:08
|- - Сергей Борщ   Цитата(Nixon @ Jul 10 2006, 19:08) В каче...   Jul 10 2006, 16:25
- - GetSmart   Я старым (уже) IAR 4.20 Тут где-то выкладывали ссы...   Jul 8 2006, 20:02
- - aaarrr   Цитата(Сергей Борщ @ Jul 10 2006, 20:25) ...   Jul 10 2006, 16:34
|- - zltigo   Цитата(aaarrr @ Jul 10 2006, 19:34) До за...   Jul 10 2006, 17:06
- - aaarrr   Цитата(zltigo @ Jul 10 2006, 21:06) Прове...   Jul 10 2006, 17:12
|- - zltigo   Цитата(aaarrr @ Jul 10 2006, 20:12) КодRe...   Jul 10 2006, 17:25
|- - Angle   Подскажите, если кто знает, пример кода для обрабо...   Oct 1 2007, 10:55
|- - xelax   Цитата(Angle @ Oct 1 2007, 14:55) Подскаж...   Oct 2 2007, 05:52
- - Tannen   Мои пять копеек вопроса про вложенные прерывания....   Jun 18 2009, 13:17
|- - Сергей Борщ   Цитата(Tannen @ Jun 18 2009, 16:17) Код ...   Jun 18 2009, 14:01
- - Step_ARM   Половину не понял из того, что написано... Хотя во...   Jun 23 2009, 05:43
- - meister   Цитата(Step_ARM @ Jun 23 2009, 09:43) Кор...   Jun 23 2009, 06:41
- - Step_ARM   Цитата(meister @ Jun 23 2009, 10:41) Когд...   Jun 23 2009, 08:12


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

 


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


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