Гость do_not_know_Linux 3 сентября, 2021 Опубликовано 3 сентября, 2021 · Жалоба Здравствуйте... скажите пожалуйста почему EXTI_IMR, к примеру, называется Mask Registеr? почему регистр масок ? о каких масках идет речь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 34 3 сентября, 2021 Опубликовано 3 сентября, 2021 · Жалоба Регистр масок прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 3 сентября, 2021 Опубликовано 3 сентября, 2021 · Жалоба Маска от слова маскировка, а не для лица которая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 3 сентября, 2021 Опубликовано 3 сентября, 2021 · Жалоба 34 minutes ago, Arlleex said: Маска от слова маскировка, а не для лица которая. можно подробнее и посерьезнее? что маскируется и для чего? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 3 сентября, 2021 Опубликовано 3 сентября, 2021 · Жалоба 52 minutes ago, do_not_know_Linux said: что маскируется и для чего? Для скрытного проникновения в расположение противника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 3 сентября, 2021 Опубликовано 3 сентября, 2021 · Жалоба 2 часа назад, do_not_know_Linux сказал: почему регистр масок ? о каких масках идет речь? А о каких регистрах идёт речь вас почему не интересует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 4 сентября, 2021 Опубликовано 4 сентября, 2021 · Жалоба 11 hours ago, do_not_know_Linux said: Здравствуйте... скажите пожалуйста почему EXTI_IMR, к примеру, называется Mask Registеr? почему регистр масок ? о каких масках идет речь? Уж назвали так назвали )))) А вы раздел External interrupt/event controller (EXTI) целиком прочитали или только описание регистров ? EXTI_IMR это своего рода регистр разрешения прерываний в периферийном модуле EXTI. Чтобы обработчик прерываний сработал, надо произвести два разрешения - в контроллере прерываний (NVIC) и в периферийном модуле. В данном случае периферийный модуль это ETXI. В том же разделе есть картинка поясняющая. На ней показано как включены логические элементы, по которым проходит сигнал события, вызывающего прерывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 4 сентября, 2021 Опубликовано 4 сентября, 2021 · Жалоба 4 hours ago, dimka76 said: В том же разделе есть картинка поясняющая. так а почему регистр масок? что на что накладывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 4 сентября, 2021 Опубликовано 4 сентября, 2021 · Жалоба 30 minutes ago, do_not_know_Linux said: что на что накладывается? Отсутствие знаний накладывается на отсутствие желания их получить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 4 сентября, 2021 Опубликовано 4 сентября, 2021 · Жалоба 2 minutes ago, x893 said: Отсутствие знаний а у вас знание о том почему EXTI_IMR называется регистром масок видимо присутсвтует. Тогда объясните пожалуйста. Может еще кому понадобится в этом разобраться и вместо всякой ереси что вы пишите человек действительно наткнется на содержательный пост. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 4 сентября, 2021 Опубликовано 4 сентября, 2021 · Жалоба 53 minutes ago, do_not_know_Linux said: Тогда объясните пожалуйста Красным обведено выше двумя постами. А также http://easyelectronics.ru/arm-uchebnyj-kurs-vneshnie-preryvaniya.html#:~:text=EXTI_IMR — Регистр масок прерываний.,После сброса там нули. http://www.rotr.info/electronics/mcu/stm32f100/stm32_exti.htm Надо заставлять себя читать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 4 сентября, 2021 Опубликовано 4 сентября, 2021 · Жалоба 42 minutes ago, x893 said: Надо заставлять себя читать. что ж, неважно каким способом, но вы натолкнули на ответ почему регистра EXTI_IMR называется регистром маски я кажется понял. Спасибо вам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 4 сентября, 2021 Опубликовано 4 сентября, 2021 · Жалоба 6 minutes ago, do_not_know_Linux said: я кажется понял УРА !!! 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 27 августа, 2023 Опубликовано 27 августа, 2023 · Жалоба "Латентность" EXTI? Чтобы не создавать новую тему по мелочному вопросу, решила написать в эту тему, поскольку в ее заглавии есть и название моего контроллера (STM32F103), и EXTI, на которую у меня есть жалоба 🙂. Слово "латентность" забрала в кавычки, потому что латентностью обычно называют временную задержку между фронтом входного импульса и срабатыванием обработчика прерывания в ответ на него. Тогда как у меня несколько другая ситуация. Расскажу по порядку. Взялась я определять, с какой предельной скоростью можно считать импульсы по прерыванию (т.е. когда на активный пин контроллера подается заданная частота/меандр, а в обработчике прерывания EXTI к какой-то переменной/счетчику прибавляется единица). Один раз в секунду (чтобы число на счетчике численно равнялось частоте в Гц) счетчик подвергается ревизии, а переменная, в которой шло накопление, занулялась. Пока частота входного меандра не превышала 16 КГц, результат счета полностью совпадал с частотой входного сигнала. Но выше частоты 16 КГц начинались потери импульсов: при частоте 18 КГц терялось около 5-ти импульсов, при 20 КГц - около сотни, и т.д. по нарастающей. Казалось бы, этот эффект легко объясним латентностью прерывания (в ее обычном значении) и временем работы обработчика прерывания, где помимо полезной работы могут присутствовать еще и операции по сохранению и восстановлению рабочих регистров, неявно добавляемые компилятором. Но каково же было мое удивление, когда, запустив параллельно точно такой же счет по другому пину, получила всё те же 16 КГц безупречного счета на обоих! Запустила параллельно счет сразу на трех пинах - тот же самый результат: до 16 КГц безупречно, а выше начинаются потери. Как такое может быть? Ведь если потери импульсов происходят из-за "медлительности" системы прерываний на этом контроллере (72 МГЦ тактовая), то по идее прерывания по соседним пинам (EXTI1, EXTI2, EXTI3, ...) должны тормозить друг друга, но это почему-то не происходит. Более того, подав на один из трех пинов достаточно высокую частоту, чтобы счетчик "захлебнулся" (100 КГц), обнаружила что, вопреки ожиданиям, остальные два счетчика по-прежнему безупречно вели счет на частоте 16 КГц, хотя "захлебнувшийся"счетчик пропускал импульсы уже тысячами. Конкретика: все три прерывания были организованы единообразно и имели одинаковый приоритет: HAL_NVIC_SetPriority(EXTI1_IRQn, 4, 0); HAL_NVIC_EnableIRQ(EXTI1_IRQn); HAL_NVIC_SetPriority(EXTI2_IRQn, 4, 0); HAL_NVIC_EnableIRQ(EXTI2_IRQn); HAL_NVIC_SetPriority(EXTI3_IRQn, 4, 0); HAL_NVIC_EnableIRQ(EXTI3_IRQn); void EXTI1_IRQHandler(void) { counter1++; __HAL_GPIO_EXTI_CLEAR_IT( GPIO_PIN_1); } void EXTI2_IRQHandler(void) { counter2++; __HAL_GPIO_EXTI_CLEAR_IT( GPIO_PIN_2); } void EXTI3_IRQHandler(void) { counter3++; __HAL_GPIO_EXTI_CLEAR_IT( GPIO_PIN_3); } Входные меандры с заданной частотой генерировала тем же контроллером с помощью таймеров 1, 3 и 4 (здесь всё тривиально). Больше вроде бы никакой специфики у меня не было. Моё личное впечатление - как будто после выхода из прерывания это прерывание какое-то время "отдыхает", пропуская вперед остальные два процесса. А потому его "захлеб" работе остальных двух процессов не мешает. Но ведь такого не может быть! Т.к. хорошо известно, что порой приходится добавлять в обработчик задержку (я не добавляла), чтобы он не сработал дважды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 27 августа, 2023 Опубликовано 27 августа, 2023 · Жалоба 32 минуты назад, Xenia сказал: Как такое может быть? Элементарно: у Cortex-Mx механизм входа/выхода из прерываний имеет кое-какие особенности для ускорения обработки запросов, следующих друг за другом: tail-chaining и late arrival. Гуглится легко, в том числе на сайте ARM P.S. Сброс флагов запроса лучше всегда переносить в начало обработчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться