Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 09.03.2014, 06:37  
makser1
Прописка
 
Регистрация: 14.04.2009
Сообщений: 103
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
makser1 на пути к лучшему
По умолчанию Вложенность прерываний в Cortex-M

Столкнулся с такой проблемой в STM32F407.
Есть два прерывания, от DMA, редко вызывается, достаточно длительная обработка и от TIM (по переполнению), вызывается чаще, обработка быстрая.
Инициализация этих прерываний:
Код:
    NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori  ty =0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init (&NVIC_InitStructure);

   NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori  ty = 0;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure);
Естественно после вызова прерывания флаг прерывания сразу сбрасывается.
Проблема вот в чем, как бы не игрался параметрами IRQChannelPreemptionPriority и IRQChannelSubPriority, прерывания идут только друг за другом, т.е. пока не обработается DMA2_Stream0_IRQn,
TIM4_IRQn не происходит, а надо, что бы и в работе DMA2_Stream0_IRQn происходили TIM4_IRQn. По описанию такое возможно, я понял, что это достигается раскидывание по группам,, на деле нет эффекта.
Как настроить вложенность прерываний? Как сделать, что бы Sys_Tick прерывания были самым приоритетным и вложенным в другие от периферии?
Реклама:
makser1 вне форума  
Непрочитано 09.03.2014, 08:28  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

Ну так у тебя сейчас у обоих прерываний стоит одинаковый и максимальный приоритет = 0. Поэтому сейчас выполняются в порядке очереди расположения в таблице векторов
niXto вне форума  
Непрочитано 09.03.2014, 09:06  
makser1
Прописка
 
Регистрация: 14.04.2009
Сообщений: 103
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
makser1 на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

Так я писал, что игрался значениями IRQChannelPreemptionPriority, IRQChannelSubPriority, без эффекта. Похоже чего то не хватает.
makser1 вне форума  
Непрочитано 09.03.2014, 09:22  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

Попробуй
void NVIC_SetPriority (IRQn_t IRQn, uint32_t priority)
Это работает, с шагом 0х10

Хотя лично я предпочитаю тупо писать константы в NVIC_IPR
Так компактней получается, хотя хомячки за такое здесь заклюют
niXto вне форума  
Непрочитано 09.03.2014, 09:51  
makser1
Прописка
 
Регистрация: 14.04.2009
Сообщений: 103
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
makser1 на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

Пробовал, то же самое, сейчас попробовал шаг 0х10, нет эффекта.
makser1 вне форума  
Непрочитано 09.03.2014, 11:38  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

А если максимальные значения - 0хFF и 0х00? Тоже не работает?
niXto вне форума  
Непрочитано 09.03.2014, 13:35  
makser1
Прописка
 
Регистрация: 14.04.2009
Сообщений: 103
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
makser1 на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

niXto, поставил NVIC_SetPriority (DMA2_Stream0_IRQn,0xFF);, и ЗАРАБОТАЛО!
прерывания от TIM4 стали вызываться внутри обработки от DMA!
Спасибо.
Стал пробовать разные значения от 0х01, тоже работает, странно...
Но такой фокус с Sys_Tick не прошел ((
makser1 вне форума  
Непрочитано 09.03.2014, 15:28  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

Сообщение от makser1 Посмотреть сообщение
Но такой фокус с Sys_Tick не прошел ((
Вы фокусами занимаетесь или программированием?
Приоритет прерывания SysTick определяется другими регистрами: System Handler Priority Registers. Описаны они в мануале на ядро в пунктах посвящённых System Control Block.
Или вызывайте функцию NVIC_SetPriority с нужным для Systick параметром.
Код:
static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
  if(IRQn ‹ 0) {
    SCB-›SHP[_SHP_IDX(IRQn)] = (SCB-›SHP[_SHP_IDX(IRQn)] & ~(0xFF ‹‹ _BIT_SHIFT(IRQn))) | 
        (((priority ‹‹ (8 - __NVIC_PRIO_BITS)) & 0xFF) ‹‹ _BIT_SHIFT(IRQn)); }
  else {
    NVIC-›IPR[_IP_IDX(IRQn)] = (NVIC-›IPR[_IP_IDX(IRQn)] & ~(0xFF ‹‹ _BIT_SHIFT(IRQn))) |
        (((priority ‹‹ (8 - __NVIC_PRIO_BITS)) & 0xFF) ‹‹ _BIT_SHIFT(IRQn)); }
}
Видите, для системных обработчиков(IRQn‹0) свои регистры.

Последний раз редактировалось _Артём_; 09.03.2014 в 15:42.
_Артём_ вне форума  
Непрочитано 09.03.2014, 15:58  
makser1
Прописка
 
Регистрация: 14.04.2009
Сообщений: 103
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
makser1 на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

Да, странно, ведь пробовал раньше NVIC_SetPriority(), а теперь без проблем.
Код:
 
   NVIC_SetPriority (SysTick_IRQn,0x00);
   NVIC_SetPriority (DMA2_Stream0_IRQn,0x01);
Зачем только инициализация
Код:
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori  ty =0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
если она не работает.

Последний раз редактировалось makser1; 09.03.2014 в 16:02.
makser1 вне форума  
Непрочитано 09.03.2014, 17:00  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Вложенность прерываний в Cortex-M

Сообщение от makser1 Посмотреть сообщение
Да, странно, ведь пробовал раньше NVIC_SetPriority(), а теперь без проблем.
Бывает...
Сообщение от makser1 Посмотреть сообщение
Код:
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori  ty =0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
если она не работает.
Так прямо и не работает. Что именно не работает?
Чему у вас равен регистр SCB-›AIRCR? Он отвечает за количество приоритетов.
P.S. Попробуйте вызвать прерывания программно для проверки работает ли у вас вложенность.
_Артём_ вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
ATMega & TWI в режиме прерываний nerozero Микроконтроллеры, АЦП, память и т.д 13 07.12.2010 17:24
Обработка прерываний UART ADuC7026 korel_one Микроконтроллеры, АЦП, память и т.д 0 01.04.2010 10:44
Как очистить очередь прерываний в ATMega8535? greafuger Микроконтроллеры, АЦП, память и т.д 4 04.06.2008 23:03
Обработка прерываний. Tibo Микроконтроллеры, АЦП, память и т.д 12 13.07.2007 17:22


Часовой пояс GMT +4, время: 13:34.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot