[an error occurred while processing this directive]
|
Данные у Вас, похоже, идут с чередованием отсчетов (т.е. отсчет действительный, затем отсчет мнимый, потом опять, действительный, мнимый, и т.д.). Когда Вы останавливаете процесс, то порт может об этом и не знать (если у Вас прием через ДМА) и данные по прежнему идут. Во время прерывания и может произойти смещение: действительный отсчет уже поступил, а мнимый еще нет. Такое может произойти и в случае, когда читаете вручную (т.е. процессор сам читает).
Посмотрите, как Вы данные укладываете в буфер, как Вы их читаете.
Напишите простую тестовую программу, которая будет работать с двумя буферами. В одном данные будут гарантированно правильными, а другой буфер будет незавершенным. Не забудьте перед брейкпойнтом остановить ДМА, либо запретите прерывания, по которому Вы копируете данные из ДМА в свой буфер.