Jump to content

    
Sign in to follow this  
kan35

Прерывания в STM32

Recommended Posts

Как известно для групирования прерываний в STM32 заведено 5 вариантов группирования (pre-emption и subpriority). В SCB->AIRCR это выражается значениями поля PRIGROUP от 3 до 7, а при старте проца в этом регистре как бы невалидное значение 0. Это значит что прерывания не разделены и то же самое что все прерывания pre-emption (в терминах STM32 - NVIC_PriorityGroup_4)?

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Из отсутствующих (младших) битов приоритета читаются нули. Поэтому при дефолтном нуле в 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, то в общем то так же все и работает, просто не понятно почему так, а не начиная с НУЛЯ сделали?

Share this post


Link to post
Share on other sites

Ноль работает точно так же, как и NVIC_PriorityGroup_4.

Эти вещи общие для всего семейства Cortex-M3. То есть, дальше идут NVIC_PriorityGroup_5, NVIC_PriorityGroup_6 и NVIC_PriorityGroup_7.

Ноль - это NVIC_PriorityGroup_7. Но, поскольку STM32 значащие биты приоритета заканчиваются на NVIC_PriorityGroup_4, то все остальные варианты аналогичны NVIC_PriorityGroup_4.

Share this post


Link to post
Share on other sites

AHTOXA, спасибо!

 

И вот еще пара вопрос по теме прерываний:

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

 

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

Share this post


Link to post
Share on other sites
Группы вытесняющих прерываний могут вытеснять друг друга, это значит, что во время обработки одного прерывания возникает другое с высшим приоритетом, то оно вытесняет первое?

Да.

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this