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

 
 
> NVIC Cortex-M процов, Группы приоритетов прерываний
Golikov A.
сообщение May 7 2015, 09:49
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет!

Есть регистр Application Interrupt and Reset Control Register, в котором задается поле PRIGROUP, то есть разбитие прерываний на группы и подгруппы по приоритетам.
Вопрос нафига оно надо, чисто для удобства?

допустим у нас 16 групп и 16 подгрупп, прерывание из 5 группы, 0 уровня, 5.0 (значение в поле приоритета 0x50 = 80) имеет приоритет выше прерывания 6.0 (значение в поле приоритета 0x60 = 96). Но так и прерывание 80 имеет приоритет выше 96.

То есть разбитие на группы получается чисто для человека, удобства чтения, что ли...

Более того это поле вынесено в другие регистра, а не в группу NVIC, который вроде как является частью всех кортексов. И как я понимаю его вообще не интересуют группы, ему нужен конечный номер, да еще с числом используемых им в реализации бит или же я ошибаюсь?
в NVIC прерывание с высшим приоритетом всегда прервет текущее, а с тем же или более низким будет ждать окончание текущего, не зависимо от группы, или это не так? И прерываться будут только подгруппы? А внутри одной группы прерывания не будут друг друга прерывать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение May 7 2015, 12:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я знаю, спасибо.
Просто искать на arm.com и infocetr.arm.com по результатам, получается по разному, не понятно почему...
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение May 8 2015, 06:45
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Golikov A. @ May 7 2015, 13:59) *
я знаю, спасибо.

Мои 5 копеек: во всех моих программах я вызываю:

Код
void NVIC_Basic_Config(void)
{
#if defined(__TARGET_CPU_CORTEX_M3) || defined(__TARGET_CPU_CORTEX_M4)
    NVIC_SetPriorityGrouping(0x03);
#endif    
}

и получаю 16 уровней приоритетов 16-ти подгрупп.
При инициализации прерывания периферии я подгруппы не использую (всегда 0), только лишь раскидываю периферии по 16-ти приоритетам, чего, по моему мнению, более чем достаточно. По опыту хватило бы и 8-ми.
Go to the top of the page
 
+Quote Post
scifi
сообщение May 8 2015, 07:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(KnightIgor @ May 8 2015, 09:45) *
и получаю 16 уровней приоритетов 16-ти подгрупп.

Какой МК, если не секрет?
Я как бы намекаю, что, например, в STM32 всего 4 бита приоритета, а в LPC - вообще 3. Поэтому это ваше щедрое деление 8 бит на 4 и 4 - это возможно только в очень богатом МК.

Цитата(adnega @ May 8 2015, 10:18) *
Одновременно прерывания наступить не могут

Не прерывания, а запросы на прерывание. И не одновременно, а в пределах одного такта. Очень даже могут. Но очень редко. И на этот случай есть механизм разруливания коллизии, и он описан в мануале.
Go to the top of the page
 
+Quote Post
adnega
сообщение May 8 2015, 08:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(scifi @ May 8 2015, 10:34) *
И не одновременно, а в пределах одного такта. Очень даже могут. Но очень редко.

Обсуждение ведется в части целесообразности sub-приоритетов.
Есть мнение, что это лишнее. Мол, отработать в природе они не смогут, т.к. событие очень редкое - должны придти запросы в пределах одного такта.
Я же привел пример, как повысить вероятность "работы" sub-приоритетов.

Вот скажите, если приоритетное прерывание работает (PRIO-1), возникает запрос на прерывание от менее приоритетного (PRIO-2.2), а затем
через 1000 тактов возникает запрос на прерывание от другого источника с таким же низким приоритетом (PRIO-2.1).
Можно считать, что нет разницы когда возникли несколько менее приоритетных прерываний, т.к. анализировать NVIC их будет в момент окончания
более приоритетного прерывания? Кста, победит PRIO-2.1 именно за счет sub-приоритета.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Golikov A.   NVIC Cortex-M процов   May 7 2015, 09:49
- - Uuftc   Цитата(Golikov A. @ May 7 2015, 12:49) И ...   May 7 2015, 09:56
- - Golikov A.   А внутри группы будет запускаться первым прерывани...   May 7 2015, 09:59
- - scifi   К примеру, у STM32 есть только 4 бита для приорите...   May 7 2015, 10:01
- - Golikov A.   Я всегда работал в 0 режиме, когда все биты - это ...   May 7 2015, 10:07
|- - scifi   Цитата(Golikov A. @ May 7 2015, 13:03) Хо...   May 7 2015, 10:12
- - Golikov A.   ЦитатаМануал. Ну нельзя же так неуважительно относ...   May 7 2015, 10:12
|- - jcxz   Цитата(Golikov A. @ May 7 2015, 16:12) бу...   May 7 2015, 11:00
||- - jcxz   Цитата(adnega @ May 8 2015, 14:03) Есть м...   May 8 2015, 08:25
||- - adnega   Цитата(jcxz @ May 8 2015, 11:25) Не обяза...   May 8 2015, 08:42
|- - jcxz   Цитата(scifi @ May 8 2015, 13:34) Я как б...   May 8 2015, 08:18
||- - scifi   Цитата(jcxz @ May 8 2015, 11:18) Это в ка...   May 8 2015, 08:23
|- - KnightIgor   Цитата(scifi @ May 8 2015, 08:34) Какой М...   May 11 2015, 06:31
- - SasaVitebsk   Цитата(Golikov A. @ May 7 2015, 12:49) А ...   May 8 2015, 07:08
- - adnega   ЦитатаВнутри группы при одновременном поступлении ...   May 8 2015, 07:18


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

 


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


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