Спасибо за ответ. Задача следующая. У меня есть видеокамера ov7670. Конечная задача передача обработаного(сжатого) видео на комп по уарт. Подчеркну это конечная задача, но иду от простого к сложному, сначала передача не сжатого. Однако т.к. в будущем предполагается обработка(сжатие) видео, я буду предерживаться конечной архитектуры, пусть даже некоторые модули будут пустышки(без функционала). Итак.
Вот
тут
есть описание работы. Ключевая идея: камера работает на 24 МГц, на входе плис стоит RAM буфер (размером на 16 строк пикселов, 2-PORT). Камера(вернее модуль который я сейчас и пишу) ложит туда данные с частотой 24МГц, а т.к. я пока буду вытягивать только канал яркости без цвета, то по факту на 12 МГц. Модуль дальнейшей обработки будет вытягивать на более высокой частоте эти данные и дальше уже обработка/передача.
Т.е. я сейчас пишу модуль, который получая сигналы с камеры будет это ложить в буфер. Т.к. камера выдает данные построчно, задача модуля - считать и положить первые 8 строк пикселов в память, подать сигнал о готовности первой партии данных на модуль дальнейшей обработки, а самому заполнять память дальше, после заполнения вторых 8 строк, подаем сигнал о готовности второй партии и начинаем все заново - запись в буфер с 0.
А вот две ключевые схемы с таймингами.
Раз
и
два
.
Падающий фронт сигнала VSYNC означает начало фрейма(кадра). После этого при высоком HREF идет передача пикселов строки.
Таким образом мне нужно в модуле иметь счетчик адреса (куда записывать пришедшее значение), счетчик строк ( что бы поднимать сигналы готовности первой и второй партии, на 8 и 16 строках) и счетчик смещения (это фактически то же что и счетчик строк).
Счетчик строк считает до 16 (при чем сигнал тактовый сигнал у него HREF а не CLK), скидывается при падающем VSYNC и при достижении 16. На 8 и 16 поднимает высокий уровень на выходах готовности партии данных. Счетчик смещения считает смещение так же как и счетчик строк только, шаг у него 640 (т.к. разрешение фрейма 640х480). Счетчик адреса обнуляется по нарастающему фронту HREF , т.е. каждую новую строку. И мы записываем данные в буфер, по адресу "счетчик адреса + счетчик смещения".
Т.е. сигналы обнуления счетчика у меня HREF и VSYNC и как видно по таймингам они не синхронны с тактовым сигналом.
Старался описать подробно и ясно, пожалуйста спрашивайте если что не понятно. И буду рад любым советам, пожеланиям, идеям, ибо начал изучать плис недавно, до этого работал только с микроконтроллерами. Спасибо.