ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
824386 Топик полностью
LightElf (16.03.2018 16:00, просмотров: 136) ответил Dingo на Спасибо! 1) После ClearPending поставить __DSB() - пофиксило. Можете объяснить, что там происходило в общих чертах? Про инструкцию прочитал, но понятней, в каких случаях они нужны, не стало.
Вы делаете запись в регистр EXTI, данные пошли по D-Bus, а процессор пошел выполнять следующие команды. Регистры EXTI находятся на шине APB2. Тактовая частота этой шины отличается от тактовой частоты процессора, соответственно существует мост со схемами синхронизации, буферами и прочей тряхомудией. Пока данные пройдут через все эти мосты и дойдут до регистра EXTI - процессор уже успел выйти из обработчика и сбросить флаг прерывания в NVIC. Поскольку на момент выхода из прерывания флаг в EXTI не был сброшен - NVIC тут же снова взводится и процессор снова влетает в прерывание.
Не надо делать мне как лучше, оставьте мне как хорошо