на вывод icp3/int7 приходят импульсы сигнала PPM например такие:

это сигналы для управления моделями по радиоканалу, само устройство тоже генерирует подобный сигнал в прерывании interrupt [TIM1_COMPA] void timer1_compa_isr(void)
цель получить значения длительностей между двумя соседними импульсами - на схеме это длительности с числами 1,2,3,4,5....
размеры импульсов с 800 до 2200 мкс, общий размер пачки 20 мс, размер паузы всегда более 3000 мкс
генерация собственных импульсов и захват приходящих должны осуществляться одновременно - это разные сигналы уходяще-приходящие на разные ноги (то есть захватывать нужно не свой сигнал).
аппаратную структуру железки менять не могу.
с мегами дела до недавнего времени не имел, прошу оценки алгоритма который я придумал - будет ли он работать или может быть есть другое решение?
хочу задать тактовую частоту генератора timer3 в 2 мгц, генератор не должен генерировать никаких прерываний
по выводу int5 настроить прерывание на положительный 0->1 или на отрицательный 1->0 фронты импульса (на рисунке отрицательный, но сигнал может иметь и положительную полярность)
при генерации прерывания:
1. считываем значение счетчика, делим его на 2 (получаем как раз значение в мкс)
2. если значение длительности меньше 2200 мкс
- помещаем значение длительности в номер соответствующего канала,
- канальный счетчик (который определяет какой канал захватили) увеличиваем на единицу
3. если значение длительности больше 3000 мкс - то значит это пауза - сбрасываем счетчик каналов (чтобы считывать каналы с первого)
4. счетчик таймера устанавливаем в ноль для начала отсчета длительности нового промежутка
теперь вопросы - никому ничего глаза не режет ?
timer3 может увеличивать значение собственного счетчика сам и не генерить при этом прерываний ?
далее - как настроить приоритеты чтобы захват и генерация сигналов происходили одновременно ?
если я запрещу прерывания при захвате импульса и разрешу при выходе из захвата - и при этом прерывание timer1 будет в этом запрещенном промежутке времени - после разрешения прерывания - timer1 сделает прерывание ?
не бросайте котенка в воду, помогите !
p.s. предполагаю что многие вещи написаны в даташите - но с английским у меня туго - и хотелось бы сначала чтобы ктото сказал рабочий ли я алгоритм придумал - дальше начну курить даташит
p.s. ссылка на мой проект (не реклама, просто может кому то будет понятнее) http://forum.rcdesign.ru/blogs/50021/blog9239.html#comments
вот документация на то что уже получилось. http://narod.ru/disk/23022923000/vcoder.zip.html