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

 
 
 
Reply to this topicStart new topic
> Прерывания в STM32, вопрос
kan35
сообщение Dec 27 2010, 08:26
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Как известно для групирования прерываний в STM32 заведено 5 вариантов группирования (pre-emption и subpriority). В SCB->AIRCR это выражается значениями поля PRIGROUP от 3 до 7, а при старте проца в этом регистре как бы невалидное значение 0. Это значит что прерывания не разделены и то же самое что все прерывания pre-emption (в терминах STM32 - NVIC_PriorityGroup_4)?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 27 2010, 09:08
Сообщение #2


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

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



Из отсутствующих (младших) битов приоритета читаются нули. Поэтому при дефолтном нуле в SCB->AIRCR имеем 4 бита (16 уровней) preemption и ноль уровней subpriority.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 27 2010, 09:32
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(AHTOXA @ Dec 27 2010, 15:08) *
Из отсутствующих (младших) битов приоритета читаются нули. Поэтому при дефолтном нуле в SCB->AIRCR имеем 4 бита (16 уровней) preemption и ноль уровней subpriority.

Код
#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
                                                            4 bits for subpriority */
#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
                                                            3 bits for subpriority */
#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
                                                            2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
                                                            1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
                                                            0 bits for subpriority */

Я имею в виду, что все варианты - это не НУЛИ. А при старте в SCB->AIRCR - НОЛЬ. наеврное я торможу, не понимаю.
Ну когда я назначаю например NVIC_PriorityGroup_4, то в общем то так же все и работает, просто не понятно почему так, а не начиная с НУЛЯ сделали?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 27 2010, 11:10
Сообщение #4


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

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



Ноль работает точно так же, как и NVIC_PriorityGroup_4.
Эти вещи общие для всего семейства Cortex-M3. То есть, дальше идут NVIC_PriorityGroup_5, NVIC_PriorityGroup_6 и NVIC_PriorityGroup_7.
Ноль - это NVIC_PriorityGroup_7. Но, поскольку STM32 значащие биты приоритета заканчиваются на NVIC_PriorityGroup_4, то все остальные варианты аналогичны NVIC_PriorityGroup_4.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 27 2010, 12:51
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



AHTOXA, спасибо!

И вот еще пара вопрос по теме прерываний:
Группы вытесняющих прерываний могут вытеснять друг друга, это значит, что во время обработки одного прерывания возникает другое с высшим приоритетом, то оно вытесняет первое?

А если прерывание возникло из той же группы, что первое прерывание, то новое, даже с более высоким sub-приоритеторм начнет обрабатываться только после того как текущее закончит обрабатываться?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 27 2010, 13:12
Сообщение #6


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

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



Цитата(kan35 @ Dec 27 2010, 20:51) *
Группы вытесняющих прерываний могут вытеснять друг друга, это значит, что во время обработки одного прерывания возникает другое с высшим приоритетом, то оно вытесняет первое?

Да.
Цитата
А если прерывание возникло из той же группы, что первое прерывание, то новое, даже с более высоким sub-приоритеторм начнет обрабатываться только после того как текущее закончит обрабатываться?

Да. Субприоритет важен только при одновременном возникновении прерываний. Скажем, два прерывания одной группы возникли одновременно (или не одновременно, но в то время, пока выполняется какое-то более приоритетное прерывание). Вот в этом случае порядок выполнения этих двух прерываний определяется субприортетом.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


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


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