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

 
 
> Приорететы прерываний в STM32F4, Совсем запутался. Нужна помощь клуба.
vlad_new
сообщение Aug 27 2013, 11:38
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Перетаскиваю огромный проект с F3 на F4. Обновил KEIL. Старый проект был написан в кейловском стиле и c его визартами. Теперь приходится все переводить на стандартные библиотеки. И вот с приоритетами я тут здорово засел. У меня используется 8 вытисняющик друг друга приоритетов. Делал все вроде как по описанию, а получается все как то наоборот. Объясните плиз, как все же правильно задавать, к примеру, 15 вытисняющих приоритетов:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
Это вроде как схема разделения групп и подгруп. Вот так я получу свои 15 приоритетов?

И что тогда здесь указывать?
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ???;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = ???;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

И еще. В новом кейле, (в режиме отладки) окно Nested Vectored Interrupt Controller (NVIC) в поле Pryority показывает номера от 0 до 255. Раньше было от 0 до 15. Это меня совсем в тупик завело.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vlad_new
сообщение Aug 28 2013, 03:34
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Тогда так: NVIC_PriorityGroup_0 - вытисняющих приоритетов нет. NVIC_PriorityGroup_4 - вроде то же не безопасно применять. В 3 ядре с этим были проблеммы.
Ну не удается урвать 15 уровней, ну и фиг с ним.
Значит, если я правильно понял, остается NVIC_PriorityGroup_3 (8 вытисняющих приоритета в 2 группах).
Тогда в NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority я должен указывать приоритет от 0 до 7, а в NVIC_InitStructure.NVIC_IRQChannelSubPriority указывать всегда 0 или 1.
Так будут работать 8 вытисняющих уровней?


Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 28 2013, 10:31
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(vlad_new @ Aug 28 2013, 06:34) *
Тогда так: NVIC_PriorityGroup_0 - вытисняющих приоритетов нет. NVIC_PriorityGroup_4 - вроде то же не безопасно применять. В 3 ядре с этим были проблеммы.
Ну не удается урвать 15 уровней, ну и фиг с ним.
Значит, если я правильно понял, остается NVIC_PriorityGroup_3 (8 вытисняющих приоритета в 2 группах).
Тогда в NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority я должен указывать приоритет от 0 до 7, а в NVIC_InitStructure.NVIC_IRQChannelSubPriority указывать всегда 0 или 1.
Так будут работать 8 вытисняющих уровней?


Да, интересно где бы найти окончательную ясность.

В документации от ARM на Cortex-M4 четко сказано, что если регистр NVIC->IPR как-то изменяется у производителей, то только занулением младших бит.
А поскольку установка группы начинается от младших бит, то первые четыре установки группировки в регистре SCB->AIRCR (NVIC_PriorityGroup_0..NVIC_PriorityGroup_3) не производят никакого эффекта.
Субприоритеты в этом случае установить невозможно, а уровней вытесняющих приоритетов по прежнему будет 16.

Но сейчас вижу, что в BSP от уважаемой фирмы Freescale все равно считают, что под вытесняющие приоритеты есть только 3-и бита. Так словно младшие биты смещаются влево в регистре NVIC->IPR на 4-е позиции.

Или программисты в солидных фирмах не просекли разницу в программировании поля PRIGROUP регистра SCB->AIRCR между Cortex-M3 и Cortex-M4 ?
Go to the top of the page
 
+Quote Post



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

 


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


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