обработка одновременных прерываний в STM32
29.03.2017, 18:42
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
обработка одновременных прерываний в STM32
доброго всем дня! Вопрос такой: в МК STM32f103VE приходят несколько прерываний от внешних линий, при этом как минимум пара прерываний может сработать одновременно, может ли МК пропустить одно из них? Приоритет задан у всех одинаковым (=2). Или в МК прерывания буферизуются? можете пояснить ситуацию, кто сталкивался с подобными вещами. Спасибо.
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
29.03.2017, 18:53
|
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,122
Сказал спасибо: 202
Сказали Спасибо 3,283 раз(а) в 2,149 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
две задачи стм32 делать одновременно не может.
вернее процессорное ядро не может.
поэтому либо ставишь разные приоритеты и прерывания по очереди выполняются, либо чтото скидываешь на дма, и тогда в дма данные сами по себе крутятся(например прием по уарту строки или набор буфера из ацп) а ядро еще чтото делает в это же время.
прерывания не буферятся а просто выставляются флаги прерываний и проц по очереди заходит в эти вектора. если данные не успел принять или считать - извините - они пропали
__________________
кагмаподэ магмаподэ
|
|
|
|
29.03.2017, 18:58
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Нет, не пропустятся.
Приходит запрос на прерывание. Если у него достаточный приоритет, то оно ставится в активное и начинается переход к его исполнению. Все остальные пришедшие запросы на прерывания, если их приоритет недостаточен для прерывания активного прерывания, ставятся в "ожидающие" (или "отложенные") - Pending.
Помимо чисто приоритетов, у прерываний есть еще и номера. Так вот, в случае одинаковых приоритетов, приоритет получает прерывание с меньшим номером и поставится в "активные". Остальные - будут установлены в "отложенные".
Как только обработка текущего активного прерывания будет завершена, на обработку поступят "отложенные", в соответствии с их приоритетом и номером.
Если у всех прерываний одинаковый приоритет, то ни одно из них не может прервать работу другого, но зато они будут стоять в очереди. Как только одно из обрабатываемых прерываний завершается, из очереди будет извлечено очередное ожидающее, в соответствии с его номером, от меньшего к большему.
Последний раз редактировалось NewWriter; 29.03.2017 в 19:03.
|
|
|
|
29.03.2017, 18:58
|
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,122
Сказал спасибо: 202
Сказали Спасибо 3,283 раз(а) в 2,149 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Какие прерывания то используются?
__________________
кагмаподэ магмаподэ
|
|
|
|
29.03.2017, 19:05
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
2 линии:
NVIC_EnableIRQ (EXTI3_IRQn);
NVIC_SetPriority(EXTI3_IRQn, 2);
NVIC_EnableIRQ (EXTI15_10_IRQn);
NVIC_SetPriority(EXTI15_10_IRQn, 2);
__________________
То, что нас не убивает - делает нас сильнее
Последний раз редактировалось serb-radio; 29.03.2017 в 19:16.
|
|
|
|
29.03.2017, 19:07
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
В данный момент при одновременном приходе на линию ext3(PD3) и ext13 (PD13) одно из них теряется
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
29.03.2017, 19:10
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
вот функция конфига:
|
Код:
|
void exti_capt (unsigned int exti_msk)
{
AFIO-›EXTICR [13››0x02] |= AFIO_EXTICR4_EXTI13_PD;
EXTI-›IMR |= EXTI_IMR_MR13;
// EXTI-›RTSR |= EXTI_RTSR_TR13;
EXTI-›FTSR |= EXTI_FTSR_TR13;
}
AFIO-›EXTICR [3››0x02] |= AFIO_EXTICR1_EXTI3_PD;
EXTI-›IMR |= EXTI_IMR_MR3;
// EXTI-›RTSR |= EXTI_RTSR_TR3;
EXTI-›FTSR |= EXTI_FTSR_TR3;
NVIC_EnableIRQ (EXTI3_IRQn);
NVIC_SetPriority(EXTI3_IRQn, 2);
NVIC_EnableIRQ (EXTI15_10_IRQn);
NVIC_SetPriority(EXTI15_10_IRQn, 2);
return;
} |
__________________
То, что нас не убивает - делает нас сильнее
Последний раз редактировалось realid; 30.03.2017 в 17:14.
|
|
|
|
29.03.2017, 19:14
|
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,122
Сказал спасибо: 202
Сказали Спасибо 3,283 раз(а) в 2,149 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
А что в прерываниях выполняется?
__________________
кагмаподэ магмаподэ
|
|
|
|
29.03.2017, 19:17
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Сообщение от serb-radio
|
|
AFIO-›EXTICR [1››0x02]
|
вообще не понял, че это??
Последний раз редактировалось NewWriter; 29.03.2017 в 19:22.
|
|
|
|
29.03.2017, 19:18
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Пробовал приоритеты разные ставить для каждой из линий - не помогает
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:04.
|
|