Алексей ВМ 0 7 августа, 2019 Опубликовано 7 августа, 2019 (изменено) · Жалоба Добрый день! Чип stm32f405. Имеется прерывание от DMA, приоритет 15. В этом прерывании запускается таймер, приоритет 0, далее обработчик прерывания DMA занимается своими делами ещё 5 мкс. Таймер выставлен на 3 мкс. Если я правильно понимаю, выполнения обработчика прерывания DMA должно прерваться при срабатывании таймера, однако этого не происходит. Что я делаю не так? Инициализация NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); Обработчик DMA void DMA2_Stream5_IRQHandler(void) { uint8_t i,j = 0; if(DMA_GetITStatus(DMA2_Stream5, DMA_IT_TCIF5)) { DMA_ClearITPendingBit(DMA2_Stream5, DMA_IT_TCIF5); DMA_Cmd(DMA2_Stream5, DISABLE); TIM_Cmd(OUT_TIM, DISABLE); TIM_ClearITPendingBit(TIM3, TIM_IT_Update); TIM_SetCounter(TIM3, 0); TIM_Cmd(TIM3, ENABLE); ....... Изменено 7 августа, 2019 пользователем Алексей ВМ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 7 августа, 2019 Опубликовано 7 августа, 2019 · Жалоба Покажите вызов NVIC_SetPriorityGrouping, в частности - значение ее параметра. К слову: NOTE: Some third-party code libraries (e.g., the STM32 driver library) change the priority grouping configuration to non-standard. Therefore, it is highly recommended to explicitly re-set the priority grouping to the default by calling the CMSIS function NVIC_SetPriorityGrouping(0U) after initializing such external libraries. подробности Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ 0 7 августа, 2019 Опубликовано 7 августа, 2019 (изменено) · Жалоба NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); 4 бита для for preemption. Функцию NVIC_SetPriorityGrouping() не вызываю, она же дублирует NVIC_PriorityGroupConfig() ? Никаких сторонних либ не использую. Изменено 7 августа, 2019 пользователем Алексей ВМ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 7 августа, 2019 Опубликовано 7 августа, 2019 · Жалоба 9 minutes ago, Алексей ВМ said: NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); 4 бита для for preemption. Тыц Quote Никаких сторонних либ не использую. Уверены? ;) 9 minutes ago, Алексей ВМ said: Функцию NVIC_SetPriorityGrouping() не вызываю, она же дублирует NVIC_PriorityGroupConfig() ? Не знаю, в CMSIS нет NVIC_PriorityGroupConfig. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ 0 7 августа, 2019 Опубликовано 7 августа, 2019 · Жалоба 3 minutes ago, Forger said: Уверены? ;) Да )). Проект совсем простенький. Ну, если SPL не считать за стороннюю )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vlad_new 1 11 августа, 2019 Опубликовано 11 августа, 2019 · Жалоба Судя по таблице, в группе из 4 бит, NVIC_IRQChannelSubPriority должен быть равен 0. The table below gives the allowed values of the pre-emption priority and subpriority according to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function ============================================================================================================================ NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description ============================================================================================================================ NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority | | | 4 bits for subpriority ---------------------------------------------------------------------------------------------------------------------------- NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for pre-emption priority | | | 3 bits for subpriority ---------------------------------------------------------------------------------------------------------------------------- NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority | | | 2 bits for subpriority ---------------------------------------------------------------------------------------------------------------------------- NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority | | | 1 bits for subpriority ---------------------------------------------------------------------------------------------------------------------------- NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for pre-emption priority | | | 0 bits for subpriority ============================================================================================================================ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться