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