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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> М3/М4 - как сделать трюк с прерываниями?
_Артём_
сообщение Oct 23 2012, 20:31
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Allregia @ Oct 23 2012, 18:46) *
Или можно просто после всех инициализаций, которые у меня есть сейчас, написать:
Код
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        NVIC_SetPriority(SPI2_IRQn,                1);  //    SPI priority=1
        NVIC_SetPriority(EXTI15_10_IRQn,       2);  //    SW interrupt priority=2
        NVIC_SetPriority(USART3_IRQn_IRQn,  3);  //    UART=3
        NVIC_SetPriority(SysTick_IRQn,            4);  //    SysTick priority=4

Можно так и написать.
Странно что приоритеты не от 0 задаёте (0 - умолчание), а от 1.

Нужно вызвать NVIC_PriorityGroupConfig с соответствующим параметром (например 0 - отмена групп).


Цитата(Allregia @ Oct 23 2012, 23:18) *
Т.е. если я хочу чтобы прерывание с более высоким приоритетом прерывало прерывание с более низким, они обязательно долдны быть в разных группах?


А если они из одной группы, и выполняется прерывание с бОльшим номером подгруппы (т.е. менее приоритетное), то прерывание той-же группы с меньшим номером (по идее более приоритетное) его не прервет?

Прерывания одного приритета друг друга не могут прервать. исполняемое прерывание может быть прервано только более приоритетным.


Цитата(Allregia @ Oct 23 2012, 23:18) *
Т.е. если в момент выполнения высокоприоритетного прерывания возникает другое, менее приоритетное, то оно подождет и будет выполнено после

Подождёт.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 23 2012, 20:32
Сообщение #17


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Есть ещё удобная функция
Код
uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)


Я обычно делаю так:
где-то в начале задаю группировку:
Код
NVIC_SetPriorityGrouping(5); // 2 bit preemption (0..3), 2 bit of subprio (0..3)


И по месту, при настройке нужного прерывания:
Код
NVIC_SetPriority(SPI2_IRQn,
    NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 1, 2));

- задаёт приоритет с preemtion priority = 1 и subpriority = 2.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Allregia
сообщение Oct 23 2012, 20:47
Сообщение #18


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Понятно, вначале я включаю приоритеты вызовом NVIC_PriorityGroupConfig() с ненулевым аргументом.
Далее надо ля каждого прерывания расставить приоритет.
Если я это делаю при инициализации соотв. прерывания, при заполнении структуры:
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0F;

то как я понимаб, потом уже не нужно делать для каждого NVIC_SetPriority - оно может понадобиться только если я захочу изменить приоритет, так?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 23 2012, 20:55
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Allregia @ Oct 23 2012, 23:47) *
Понятно, вначале я включаю приоритеты вызовом NVIC_PriorityGroupConfig() с ненулевым аргументом.

Можно и нулём , тогда в SBC->AIRCR поле PRIGGRUP станет равным 0.


Цитата(Allregia @ Oct 23 2012, 23:47) *
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0F;

Это в ST-шной либе такие структуры? Страшно выглядят...
Go to the top of the page
 
+Quote Post
SSerge
сообщение Oct 24 2012, 07:30
Сообщение #20


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(_Артём_ @ Oct 24 2012, 03:55) *
Это в ST-шной либе такие структуры? Страшно выглядят...

sm.gif
Это Вы ещё вычисление BRR в USART_Init() не видели...


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 24 2012, 12:05
Сообщение #21


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(_Артём_ @ Oct 24 2012, 00:55) *
Страшно выглядят...
Зажмуриваемся и используем:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


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


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