Я разрабатываю голый металлический проект на STM32L4 и начинаю с существующей базы кода.
ISR реализованы следующим образом:
- чтение состояния прерывания в периферийном устройстве, чтобы узнать, какие события вызвали прерывание
- сделать что-то
- очистить флажки, которые были прочитаны в начале.
Это правильный способ снять флаг? Разве флаги не должны быть очищены в самом начале ISR? Насколько я понимаю, если одно и то же периферийное событие происходит во второй раз на шаге 2, оно не будет вызывать второй IRQ, поэтому оно будет потеряно. С другой стороны, если вы снимите флажок, как только сможете, это второе событие будет пульсировать прерывание, состояние которого в ЦП изменится на «ожидающий и активный»: произойдет второй IRQ.
PS: Из Руководства по программированию процессора STM32 я прочитал: «Прерывания STM32 чувствительны как к уровню, так и к импульсу».