Jump to content

    

C6745 PRUSS в качестве видео-подсистемы

Необходимо обеспечить передачу видео-сигнала NTSC на 75-омный видео-вход ТВ. (AV in).  В качестве энкодера NTSC микросхемы: AD724 или CXA1145 или CXA1645, которые из RGB, Hsync,Vsync делают NTSC.

 

Значит, необходимо со стороны PRUSS реализовать чтение видеопамяти, сформировать сигналы H,V-sync , компоненты RGB превратить в аналоговые с помощью простейшего резистивного ЦАП  и подать их в энкодер.

 

Требуемый режим:  400x240  60 Гц,  16 бит на точку (5:6:5, можно 5:5:5).   Можно не на весь экран, а с бордюрами.

 

PRU ядро, на частоте 228 МГц, память кода 4 кБ  и данных 0,5 кБ  для этих целей хватит?   Или не взлетит? 

 

DSP TMS320C6745.

 

P.S. с ПЛИСами и спец-чипами заморачиваться неохотно, желается сделать решение на 1 кристалле C6745

Edited by __inline__

Share this post


Link to post
Share on other sites

там рядом лежит ADV7390, который в два раза дешевле чем AD724.

и я так понимаю человеческого параллельного видео порта и 2D DMA, как в тех же блэкфинах, которые это всё сами сделают, у С6745 нету, а lcd контроллер есть только С6547.

но я бы всё равно попробовал сначала на EMIFA, если он свободен, цифровой видеоэнкодер повесить.

Share this post


Link to post
Share on other sites
12 minutes ago, _pv said:

там рядом лежит ADV7390, который в два раза дешевле чем AD724.

и я так понимаю человеческого параллельного видео порта и 2D DMA, как в тех же блэкфинах, которые это всё сами сделают, у С6745 нету, а lcd контроллер есть только С6547.

но я бы всё равно попробовал сначала на EMIFA, если он свободен, цифровой видеоэнкодер повесить.

EMIFA 8 бит - занят LCD, EMIFB  16 бит занят SDRAM.   Делать временное разделение шины не хотелось бы (нужна производительность).

Остаются GPIO + PRUSS.

 

 

 

Share this post


Link to post
Share on other sites

почему ADV7390 нельзя посадить параллельно с lcd на EMIFA?

вам одновременно нужны разные картинки на lcd и тв выходе?

 

Edited by _pv

Share this post


Link to post
Share on other sites
13 minutes ago, _pv said:

почему ADV7390 нельзя посадить параллельно с lcd на EMIFA?

вам одновременно нужны разные картинки на lcd и тв выходе?

 

 

Посадить на EMIFA можно.  Требуется только один режим из двух: или LCD (со своим контроллером и памятью)   или  ТВ.

 

Вопрос, насколько ощутима потеря цветовых оттенков из-за суб-дискретизации в 4:2:2  из RGB 5:6:5  на ТВ приёмнике (ЭЛТ, кинескоп) ?

 

И где брать HSYNC, VSYNC - из стробов WR и CS делать функцию или отдельные GPIO ?

 

 

Edited by __inline__

Share this post


Link to post
Share on other sites
1 час назад, _pv сказал:

и я так понимаю человеческого параллельного видео порта и 2D DMA, как в тех же блэкфинах, которые это всё сами сделают, у С6745 нету

Человеческого 2D нет, есть нечеловеческий 3D.  :biggrin:

Share this post


Link to post
Share on other sites

только надо посмотреть как там с приоритетами на шинах и возможностью синхронизации ДМА или EMIFA (через какой-нибудь drdy, если он есть) от таймера,

чтобы не получилось что данные будут выдаваться с каким попало джиттером, NTSC кодеру такое сильно не понравится, думаю.

а сами синхроимпульсы либо каким-нибудь таймером,

либо можно их завести на старшие адресные линии EMIFA, и дма (опять же если умеет) настраивать на две посылки, сначала данные, а потом по другому адресу сколько надо нулей, для того чтобы кодек синхроимпульс с адреса брал.

 

есть, наверное, ещё один похабный вариант, взять RMII, сделать из TXD0/1 двухбитный r2r ЦАП и добавив ещё поверх сигма-дельта модуляцию генерить NTSC напрямую, с колор бурстами и квадратурной модуляцией цветоразностных сигналов, как раз задача для PRUSS :), возможно затактировать его придётся от чего-то кратного 3.5МГц (или сколько там у NTSC), 3.5*14 ~ 50МГц, а может и так сойдёт, частота всё-таки довольно большая.

для нескольких цветов из SPI чуть ли не на AVR такое вроде делал кто-то, но там всего один бит и удвоенная частота и (либо sin либо cos), а тут и частота выше и ЦАП аж двухразрядный, 65к цветов не получится конечно, но при разрешении 400х240 исключительная точность цветопередачи думаю не самая большая проблема.

2 minutes ago, jcxz said:

Человеческого 2D нет, есть нечеловеческий 3D.  :biggrin:

ну хорошо,

правда если синхроимпульсы генерить всё равно некому и придётся самому руками, радости особой от того что можно целый кадр отправить, а не построчно всё равно не сильно много.

Share this post


Link to post
Share on other sites
3 минуты назад, _pv сказал:

только надо посмотреть как там с приоритетами на шинах и возможностью синхронизации ДМА или EMIFA

У C67xx кроме 3D-DMA есть ещё 2 PRU-ядра, которые можно рассматривать как супер-мега-фичастые DMA-контроллеры.  :acute: О чём ТС и писал изначально. 

Приоритеты доступа к шинам у OMAP-L137 можно было запрограммировать по отдельности для каждого bus-master-а. Думаю что у C67xx должно быть аналогично.

Edited by jcxz

Share this post


Link to post
Share on other sites
9 минут назад, _pv сказал:

правда если синхроимпульсы генерить всё равно некому и придётся самому руками, радости особой от того что можно целый кадр отправить, а не построчно всё равно не сильно много.

У C67xx есть McASP (только не помню сколько шт. и по сколько каналов). Это - последовательный порт с множеством сериализаторов, каждый из которых можно запрограммировать независимо от других сериализаторов на ввод/вывод и обслуживание DMA-контроллером.

По-крайней мере у меня в проекте на OMAP-L137 один 16-канальный McASP обслуживал 3 отдельных канала SPI-АЦП (на ввод), и один аудио-кодек (1 сериализатор - ввод, 1 сериализатор - вывод). И все эти сериализаторы обслуживались EDMA-контроллером одновременно.

Edited by jcxz

Share this post


Link to post
Share on other sites

хоть и фичастые, но просто перекладывание руками (пусть и pru ядра) данных из памяти в регистр gpio при наличии отдельного дма, внутреннее чувство прекрасного не принимает.

хотя если им действительно заняться больше нечем, почему бы и нет.

Share this post


Link to post
Share on other sites
2 минуты назад, _pv сказал:

хоть и фичастые, но просто перекладывание руками (пусть и pru ядра) данных из памяти в регистр gpio при наличии отдельного дма, внутреннее чувство прекрасного не принимает.

Лучше по возможности использовать McASP. Но не уверен сколько сериализаторов остались свободными у ТС. Ведь судя по всему - у него много ног уже занято (SDRAM, LCD по параллельной шине, ...). Может оказаться что ноги McASP все уже заняты. Тогда придётся GPIO-шить.  :unknw:

Share this post


Link to post
Share on other sites
1 hour ago, jcxz said:

Лучше по возможности использовать McASP. Но не уверен сколько сериализаторов остались свободными у ТС. Ведь судя по всему - у него много ног уже занято (SDRAM, LCD по параллельной шине, ...). Может оказаться что ноги McASP все уже заняты. Тогда придётся GPIO-шить.  :unknw:

На McASP занят 1 канал - дует звук в аудио-ЦАП.

 

Чем решение с GPIO плохое?  Допустим, есть ещё свободные биты GPIO: 16 штук + 2 (на синхры). Неужели для PRUSS ничего нельзя сообразить толкового при таких условиях?

 

С GPIO тоже не выходит, часть заняты и нету с 0 по 15 свободного GPIO.   Остаётся EMIFA 8 бит и 2 на H/V sync + скрип зубов от потери цвета при суб-пиксельной дискретизации YUV 4:2:2 и ещё конверт RGB в YUV на плечи процессора

 

В этом случае всё-же AD724 или CXA1145 будут лучше, так как они тупо принимают аналог RGB и делают NTSC/PAL, без всякого дополнительного программирования по I2C(как в случае ADV7390 ).

 

Как вариант - рассмотреть вывод на монитор (аналог, D-SUB). Не могу найти времянки для 400x240, вижу только стандартные растактовки кадров, стандартизированных VESA'ой (640x480, 800x600 и т.д.)

Edited by __inline__

Share this post


Link to post
Share on other sites

а чем 4:2:2 помешал, разрешение и так в два раза меньше телевизионных 750 точек.

или крестик снимите или трусы наденьте, а то субсэмплинг 422 так УЖАС-УЖАС, а вот R2R ЦАП (на который ещё 16ти битную шину найти надо) и потом ещё аналоговое же преобразование в NTSC так всё нормально, ничего не потеряется. я вот что-то совсем не уверен что картинка из r2r цапа будет лучше чем от нормального энкодера пусть и с 422.

у ADV7392/3 есть и RGB565 режим но придётся защёлку 8ми битную ставить на EMIF.

 

так и не было вроде таких разрешений, были 320х240, 640х480, 800х600

Share this post


Link to post
Share on other sites
11 hours ago, _pv said:

или крестик снимите или трусы наденьте, а то субсэмплинг 422 так УЖАС-УЖАС, а вот R2R ЦАП (на который ещё 16ти битную шину найти надо) и потом ещё аналоговое же преобразование в NTSC так всё нормально, ничего не потеряется. я вот что-то совсем не уверен что картинка из r2r цапа будет лучше чем от нормального энкодера пусть и с 422.

На плате olinuxino A13 есть R-ЦАП на VGA выхлопе, и ничего. Картинки видел, по качеству устраивал. + сам так делал.

 

Quote

так и не было вроде таких разрешений, были 320х240, 640х480, 800х600

Тогда из 640x480 сделать 400 на 240 путём стретча пиксела по горизонтали в 1,6 раз и с двойным сканированием строки - чтобы 240 строк стали толще в 2 раза для покрытия 480.

И ещё больной вопрос про aspect ratio: 400x240 на мониторе 4:3 будет смотреться вытянутым по вертикали - тут решение с бордюами наверное лучше, чем OverScan (на весь экран)

 

 

В общем прикинул, в моем случае ничего хорошего не получится. Нет детерминированности в обращении к памяти.  L1 отданы под кеш, L2 также отдан под кеш + стек ,  во внешней SDRAM код и данные.  Так что чтение из любой из них приведет к неопределенному времени.   Пикселы будут неровными и будет дрожать. Не годится. Это в случае - PRUSS+ GPIO.  С ДМА всё ещё более сложнее - неизвестно сколько времени будет чтение из SDRAM, на которую претендует ещё CPU и кеш.

 

 

Увы, без ПЛИС или спец-контрорллера тут не отделаешься.   В простейшем случае нужен видеоконтроллер с 8 битной шиной (на EMIFA чтоб завязаться) с фреймбуфером не менее 187,5 кБайт (400x240 16 bpp)

Edited by __inline__

Share this post


Link to post
Share on other sites
В 15.08.2019 в 11:57, __inline__ сказал:

Необходимо обеспечить передачу видео-сигнала NTSC на 75-омный видео-вход ТВ. (AV in).  В качестве энкодера NTSC микросхемы: AD724 или CXA1145 или CXA1645, которые из RGB, Hsync,Vsync делают NTSC.

Так вы же уже почти аллвиннер освоили, припоминаю, тогда зачем весь этот натюрморт, когда в большинстве их чипов есть нормальный и правильный ТВ выход??

ЗЫ. Для всяких "лялек и поделок" есть и крохотные и очень дешевые платки на Н2 чипе, типа "бананы" без HDMI, с которым приходилось не сладко, но с ТВ выходом и аудиокодеком, причем механизм загрузки у нее такой же, как у А13го...

И кстати, почему именно NTSC? Не PAL, например..

14 часов назад, __inline__ сказал:

Тогда из 640x480 сделать 400 на 240 путём стретча пиксела по горизонтали в 1,6 раз и

А что это, правда, за разрешение такое, куда ни прикину - так везде либо 320х240, как у старых компов-игрушек, или 640х400, как у ХТшки айбиэмовской или VGA 640х480 и т.д.  Ну или ТВ 510строк или как его уж не помню...

Edited by mantech

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this