всё сделал как надо:
проц завёл на 56 МГц, что бы АЦП работал на 14 МГц (1 выборка за 1 мкс)
подключил ДМА к АЦП, что бы оперативно складывать всё в буфер
настроил таймер для ШИМ: ШИМ инверсный, частота 40 кГц, скважность 50%
выключение ШИМ по достижении счетчика импульсов (эти занимается обработчик прерывания по флагу UIF)
соединил напрямую (для теста) выход ШИМ и вход АЦП
запускаю, смотрю результат:
в момент включения таймера АЦП регистрирует высокий уровень на ноге ШИМ в течение двух измерений, далее ШИМ работает и отключается как ожидалось.
делал запуск АЦП по прерыванию CCIE (мне нужно стартовать АЦП именно в момент подачи импульса) - всё равно эти два значения высокого уровня.
начал экспериментровать и понял, что эти "паразитные всплески" связаны именно с началом работы таймера
включил АЦП
какая-то задержка
инициализировал (но не включил) таймер
ещё какая-то задержка
включил таймер
продолжаю работу ШИМ и АЦП с заданным алгоритмом.
Что в итоге:
после запуска АЦП до инициализации таймера - регистрируются случайные значения (очевидно порт висит в воздухе и ловит помехи)
после инициализации до старта таймера - регистрируется низкий уровень
в момент старта таймера - высокий уровень (в течение 2мкс)
далее всё в порядке, согласно ожиданиям.
наличие высокого уровня до начала измерений неприемлемо, ибо может повлиять на результат измерений.
если с мусором пока порт висит в воздухе я могу справиться введением дополнительного аппаратного ключа, то как побороть эти "паразитные всплески"?
почему в момент старта таймера регистрируется событие CCIF (вставлял запуск АЦП в обработчик этого прерывания)?
как побороть этот баг?


