Столкнулся с такой проблемкой:
Ну, как обычно формирую пакет из N байт, устанавливаю свой флажок типа датареди, по которому далее включается прерывание по TXE. В обработчике прерывания при выполнении условия (UART_DSP_TXE && UART_DSP_TxDataReady) соответственно посылаю побайтно пакет по UART5 и при передаче последнего байта датареди = 0 и выключаю прерывание по TXE. Все, вроде как в прерывание больше не должен влетать и можно тихо-мирно ждать следующей передачи или принимать данные. Но вместо этого после передачи последнего байта прерывание зацикливается. При отладке обнаружил, что прерывание выключается, но при выходе из обработчика снова включается, и прерывание зацикливается, т.к. датареди уже сброшен и никто не обрабатывает. ПОЧЕМУ? кто снова взводит бит включения прерывания?!? Задался я этим вопросом, ведь более нигде его не включал. При этом я понимал, что когда датареди=1 в фоне это прерывание включается много раз, но не придавал этому значения: включенного уж более не включишь, а в конце передачи датареди вместе с отключением сбрасывается.
И вот уж более ничего другого не придумав, решил поэкспериментировать. Обнаружил, что если несколько раз подряд включить прерывание, то происходит описанная выше проблема.
У кого-нибудь такое встречалось? Можете прокомментировать?