Приветствую всех форумчан.
Прошу помочь разобраться с драйвером под LMS430. Пытаюсь подключить связку imx233+EPM7064+ADV7125=VGA. Как видно из текста lcd_lms430.c =>
Драйвер использует режим DotClk - тоесть будет выдаваться сигнал HSYNC и VSYNC. Для стандарта 640х480х60Гц необходима частота 25.175МГц = 40 нс(что и выбрано выше).
bpp=32. Т.е. передается 3-и цвета по 8 бит mxsfb.c =>
Дефайнами выставил в соответствие с описанием задержки. Правда немного пришлось подогнать...получилось так lcd_lms430.c =>
Идея заключается в том, чтобы последовательно защелкивать по 8 бит цвета и на 3-и такте выдавать их в adv7125.
Значит собираю я ядро с этим драйвером и вижу а выходе из imx по линии dotclk частоту ~25MHz на осцилле...т.е. то, что заказывали в драйвере...но как же ему удается выполнить условие передачи цвета, как описано в mxsfb.c? Частота же должна быть в 3-и раза выше..т.е. 75 MHz...на сколько я понимаю.
В результате 224 битный tux (извиняюсь за плохое качество фото) выглядет вот так =>
Пробовал выводить картинки в фреймбуфер 640х480 залитые красным, синим, зеленым - но наблюдаю какие-то полосы с градиентами цвета...очень тусклые.
Подскажите, как получить мне 3-и цвета по 8 бит с нужной частотой для разрешения 640х480?
Исходники драйверов это одно, вы почитайте даташит - контроллеру LCD нужно сообщить что у него шина на выходе 8 бит иначе вы один цвет получаете - он же должен как-то понять что вы от него хотите serial RGB.
С Вашими настройками (без поправки) выводит Tux-a , только он серый весь(скорее всего в fpga прошивку надо сменить...у меня сейчас 3-и такта считывает данные с шины, а на 4-й такт выводит в adv7125)...
Это при BF_LCDIF_CTRL1_BYTE_PACKING_FORMAT(0x7)...Вообще по ДШ не смог понять на какие байты влияет этот регистр...Они нарисовали что мол можно выбирать вывод ABCD байт..но что они обозначают? кто из них RGB? мне казалось, что RGB=ABC соответственно..так ли это?
BYTE_PACKING_FORMAT - указывает, сколько байт из входного 32 битного слова оставлять, т. е. в вашем случае без правки в fpga нужно указать BF_LCDIF_CTRL1_BYTE_PACKING_FORMAT(0xf) и соответственно увеличить частоту и все остальное, вот так
Правда мне не ясно - по идее для вертикальной синхронизации юниты - количество строк, тайминги для _целой строки_ остаются те-же - частоту увеличили в 4 раза но и увеличили число тактов на строку в 4 раза. По поводу ARGB - там все правильно, это же регистр, байты написаны старший-первый, но выводятся младший-первый (little-endian), см. Figure 18-3. 8-Bit LCDIF Register Programming—Example A стр. 945 + стр. 960 HW_LCDIF_CTRL Bit Field Descriptions
INPUT_DATA_SWIZZLE:
NO_SWAP = 0x0 No byte swapping.(Little endian)
LITTLE_ENDIAN = 0x0 Little Endian byte ordering (same as
NO_SWAP).
Кстати - у вас наверно цвета будут перемешаны, так как получается он выводит BGR - я не помню этот момент, помоему у себя я в настройках контроллера внешнего LCD указывал что данные в BGR идут - не получится средствами этого контроллера LCD выдавать на шину R->G->B->A - все что угодно кроме этого :)
При этих настройках на шину будет выдаваться B->G->R->A, если оставите как я писал в предыдущем посте, там будет B->G->R, чтобы получить R->G->B (или A->R-G->B соотвественно если в маске оставить все входные байты)) можно исправить так:
С ARGB понятно, спасибо...Значит я использую настройки =>
Таким образом на выходе должна получаться частота 100МГц (осциллом не проверял, верю). И данные должны выходить B->G->R->A. DOTCLK_HB_PORCH пришлось поправить, а то частота была слишком высокая (~>65MHz). В результате получилось не совсем то, что ожидалось:
Данные о строчной развертке по цветам начинаю считывать по перепаду сигнала LCD_ENABLE из '0' в '1'. Считываю три цвета подряд (3-и такта), на 4-м вывожу в цап. Код VHDL =
- вы по примеру делали ? а то в даташите на adv7125
Потом вы запускаете
но если вы не меняли ничего в драйвере, у ENABLE активный уровень - низкий (стр 953 Figure 18-8. LCD Interface Signals in DOTCLK Mode) - Default 0 active low during valid data transfer on each
horizontal line, при этом клок adv7125 надо всегда генерировать ибо
иначе какой смысл выставлять всякие PORCH в драйвере.
если я что-то не так понял - поправьте, я c VHDL незнаком.
В общем условие нужно убрать и просто делить на 4 клок и выдавать rgb - тупой десериализатор, синхросигналы напрямую на монитор VGA через преобразователи уровней, sync на adv7125 не забыть на землю посадить, blank, psave - подать 3,3В, входы инвертированные. Вот это делить на 4 не надо
blank, psave можно посадить на gpio и дописать драйвер панели вот тут, если нужно энергосбережение:
Еще там управление подсветкой надо убрать (удалить просто строку эту)
.bl_data = &bl_data,