|
|
  |
EP9307, настройка видеоадаптера |
|
|
|
Oct 17 2006, 12:59
|

Участник

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373

|
aaarrr, большое спастбо за ценные советы. Судя по всему задачу выполнил. Выяснился не очень ожидаемый факт. Информация выводится на экран не непрерывно, а сначала нечетные строки, затем, с некоторым (причем, нелогичным) смещением в памяти, четные. Проблема неотображения концовок строк вроде как стала не актуальной, так как необходимо использовать не весь экран.
--------------------
Мне триста лет - я выполз из тьмы...
|
|
|
|
|
Oct 18 2006, 15:27
|

Участник

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373

|
Код VidClkDiv= 0x0000C105; //0000 0000 0000 0000 1100 0001 0000 0100
RasterSWLock= 0xAA; VideoAttribs= 0x0060006F; //0000 0000 0 11 0 0000 1100 0 000 0110 1111
VidScrnPage=(unsigned long)&VideoPage[0]; ScrnLines= 479; LineLength= 0x4F; VLineStep= 0x50;
RasterSWLock= 0xAA; VSyncStrtStop= 0x01F301F2; RasterSWLock= 0xAA; VActiveStrtStop=0x000101E1; RasterSWLock= 0xAA; VBlankStrtStop= 0x000101E1; RasterSWLock= 0xAA; VClkStrtStop= 0x000101E1;
RasterSWLock= 0xAA; HSyncStrtStop= 0x02930289; RasterSWLock= 0xAA; HActiveStrtStop=0x00050285; RasterSWLock= 0xAA; HBlankStrtStop= 0x00050285; RasterSWLock= 0xAA; HClkStrtStop= 0x00000280; RasterSWLock= 0xAA; VLinesTotal= 499; RasterSWLock= 0xAA; HClkTotal= 0x00000293;
Pixelmode= 0x00000001; //0000 0000 0000 0000 00 00 00 00 00 000 001 Память и делители частоты настраивал не я. Не имею даже кода. Загрузку LUT'ов скатал из RasterEUsing. Четность строк проверяю так: Код int ModifyAdr(int i) { if(fmod(i,2*words_per_str)<words_per_str){ return beg_of_0+(i/words_per_str)*(words_per_lstr/2)+fmod(i,words_per_str); } else{ return beg_of_1+(i/words_per_str-1)*(words_per_lstr/2)+fmod(i,words_per_str); } } где words_per_str - число слов на строку (в моем случае использования части экрана это 30), word_per_lstr - реальное число слов на строку (80), beg_of_0 - адрес начала первой нечетной строки, beg_of_1 - фдрес начала первой четной строки. Функция ModifyAdr преобразует линейный адрес необходимой мне части экрана в адрес SDRAM.
--------------------
Мне триста лет - я выполз из тьмы...
|
|
|
|
|
Oct 19 2006, 12:18
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
По поводу таймингов и отображения концов строк: - Обратный ход по строкам занимает обычно 20% от времени строки, а не 3%. - Кадры тоже слишком "ужаты". - Счетчики строк и кадров у EP93xx считают сверху вниз. Погуглите что-нибудь вроде "vesa 640x480 timings". Цитата(metalkain @ Oct 18 2006, 19:27)  Четность строк проверяю так: Код int ModifyAdr(int i) { if(fmod(i,2*words_per_str)<words_per_str){ return beg_of_0+(i/words_per_str)*(words_per_lstr/2)+fmod(i,words_per_str); } else{ return beg_of_1+(i/words_per_str-1)*(words_per_lstr/2)+fmod(i,words_per_str); } } где words_per_str - число слов на строку (в моем случае использования части экрана это 30), word_per_lstr - реальное число слов на строку (80), beg_of_0 - адрес начала первой нечетной строки, beg_of_1 - фдрес начала первой четной строки. Функция ModifyAdr преобразует линейный адрес необходимой мне части экрана в адрес SDRAM. Честно попытался разобрать этот код. - Почему "words_per_lstr/2", а не просто "words_per_lstr"? - Зачем во второй части написано "i/words_per_str-1", если адреса четных и нечетных строк уже учтены? - Зачем использовать fmod для целых чисел? ИМХО, лучше так не делать.
|
|
|
|
|
Oct 23 2006, 15:42
|

Участник

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373

|
Цитата Почему "words_per_lstr/2", а не просто "words_per_lstr"? Ибо реально строка располагается на экране на вдвое большем месте. Так, 0-я четная расположится на 0-м, а на 1-м месте будет 0-я нечетная. Может, слегка напутал, но мысль такова. Словом, деление на 2 относится не к words_per_lstr, а к номеру строки в целом. Цитата Зачем во второй части написано "i/words_per_str-1", если адреса четных и нечетных строк уже учтены? ) Да, признаться, уже не помню, почему так написал. И вправду не логично. Судя по всему, это может быть связано с п.1. Возможно, я сдуру решил, что сначала будут выводится четные, а потом нечетные. Цитата Зачем использовать fmod для целых чисел? Не считаю себя прогером с громадным опытом, потому лучшего второпях не нашел). Буду признателен, если подскажете, как проще. ЗЫ. Существует ли алгоритм (без использования стека и рекурсии) для заливки произвольной замкнутой области?
Сообщение отредактировал metalkain - Oct 23 2006, 15:43
--------------------
Мне триста лет - я выполз из тьмы...
|
|
|
|
|
Oct 23 2006, 16:00
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(metalkain @ Oct 23 2006, 19:42)  Ибо реально строка располагается на экране на вдвое большем месте. Так, 0-я четная расположится на 0-м, а на 1-м месте будет 0-я нечетная. Может, слегка напутал, но мысль такова. Словом, деление на 2 относится не к words_per_lstr, а к номеру строки в целом. Совсем запутался, если честно  То есть процедура ModifyAdr должна из адреса для уменьшенного виртуального экрана сделать адрес для нормального экрана, на котором якобы перепутаны строки? Или я что-то не так понимаю? По-моему, сначала нужно разобраться с отображением на полном экране. Цитата(metalkain @ Oct 23 2006, 19:42)  Буду признателен, если подскажете, как проще. Для целых чисел есть оператор %.
|
|
|
|
|
Oct 23 2006, 20:04
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404

|
Цитата(aaarrr @ Oct 19 2006, 16:18)  Погуглите что-нибудь вроде "vesa 640x480 timings". Можно и в исходниках Cirrus посмотреть (videosetup.cpp), там картина на все случаи жизни для CRT Код // Here is the video setup for standard CRT monitiors. Remember that the // horizontal sync must be at least 33Mhz and the refresh rate must be // 60 Hz. // // VSync---------+ // | // | V | // | |< >| // | | | | // |< VBlank >|<---------- Screen Height--------------->|< VBlank >| // | Start | | End | // | | // |<----------------------- VLines Total ----------------------------->| // // // // | | | // |<--HBlank Start--->| | // | | | | // | | | | | // |< HSync >| |<---------- Screen Width--------->|< HBlank >| // | | | | End | // | | // |<----------------------- HClocks Total ---------------------------->| // // // VBlankStart = 6.04 % of Screen Height // VBlankEnd = 3.54 % of Screen Height // VSync = .41 % of Screen Height // // HBlankEnd = 4.00 % of Screen Width // HBlankStart = 40.1 % of Screen Width // HSyncStart = 20 % of Screen Width Цитата(aaarrr @ Oct 10 2006, 02:00)  V- и H- тайминги исправьте, для 640x480 получается примерно такой расклад: Код ... VSyncStrtStop = 0x02000202 ... Только зачем синхронизацию куда-то ближе к началу пихать? может подразумевалось просто VSyncStrtStop = 0x00000002 ?
|
|
|
|
|
Oct 23 2006, 20:29
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sff @ Oct 24 2006, 00:04)  Можно и в исходниках Cirrus посмотреть (videosetup.cpp), там картина на все случаи жизни для CRT Симпатично. Это из WinCE? Цитата(sff @ Oct 24 2006, 00:04)  Только зачем синхронизацию куда-то ближе к началу пихать? может подразумевалось просто VSyncStrtStop = 0x00000002 ? Нет, подразумевалось именно то, что написано. Более того, оно в точности соответствует приведенной Вами картинке  И какая разница, в начале кадра находится синхроимпульс, или в конце?
|
|
|
|
|
Oct 23 2006, 20:54
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404

|
Цитата(aaarrr @ Oct 24 2006, 00:29)  Симпатично. Это из WinCE? да Цитата(aaarrr @ Oct 24 2006, 00:29)  Нет, подразумевалось именно то, что написано. Более того, оно в точности соответствует приведенной Вами картинке  И какая разница, в начале кадра находится синхроимпульс, или в конце? Тут не совсем и начало  , если быть точным: Код VLinesTotal = 0x0000020C VSyncStrtStop = 0x02000202 Для CRT точно никакой разницы, а вот для LCD будет сложнее расчитывать всё остальное, когда синхронизация не в начале и не в конце, но по большому счёту, конечно, без разницы PS: Я свой LCD уговорил работать как надо только с 5 итерации
|
|
|
|
|
Oct 27 2006, 14:33
|

Участник

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373

|
Судя по всему все придется делать по новой. Принесли ЖКИ (TD023SHEB1), ради которого это все в общем и затевалось. Надо замутить разрешение 240*320. Код RasterSWLock= 0xAA; VSyncStrtStop= 0x01450147; //-Vertical sync (2) RasterSWLock= 0xAA; VActiveStrtStop=0x00010141; //Vertical front porch (2), Vertical data start (VS+VBP) (6) RasterSWLock= 0xAA; VBlankStrtStop= 0x00010141; //-||- RasterSWLock= 0xAA; VClkStrtStop= 0x01470147; //always clocks
RasterSWLock= 0xAA; HSyncStrtStop= 0x01170121; //10 clocks RasterSWLock= 0xAA; HActiveStrtStop=0x000900F9; //Horizontal front porch (10), Horizontal data start (HS+HBP) (40) RasterSWLock= 0xAA; HBlankStrtStop= 0x000900F9; RasterSWLock= 0xAA; HClkStrtStop= 0x01210121; //
RasterSWLock= 0xAA; VLinesTotal= 0x147; //Vertical Cycle (328d) RasterSWLock= 0xAA; HClkTotal= 0x121; //Horizontal Cycle (290d) Вопрос следующий. Почему на ЖКИ может не быть изображения, если на CRT оно есть? В чем может быть принципиальная разница? Параметры строго подобраны по мануалу. Вот описалово к ЖКИ. Открывается, к сожалению, не у всех
--------------------
Мне триста лет - я выполз из тьмы...
|
|
|
|
|
Oct 31 2006, 07:59
|

Участник

Группа: Участник
Сообщений: 70
Регистрация: 13-01-06
Пользователь №: 13 126

|
Чтобы прочитать pdf нужны китайские шрифты, если трафика не жалко можно скачать адоб предложит.... Вобщем выставили мы metalkain все тайминги и полярности как в мануале, по идее все должно работать, но... правда есть на стр.16 параграф Power On/Off Sequence, и в нем указано, что надо похитрому включать (Gate Off Voltage, -5.5~-4.5V, Typ. -5V) и (Gate On Voltage, 9.5V ~ 10.5V, Typ. 10V) выдерживать 0,1-10 мс между их включениями, надо это делать или можно обойти? мне просто придется тогда на коленке собирать хитрую схему включения, -5.5 я еще могу управлять, кину с порта EGPIO на DC-DC преобразовательесть функция вкл-выкл. преобразователем, а вот у 10В такой функции нет...
|
|
|
|
|
Oct 31 2006, 09:26
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Gvozdidir @ Oct 31 2006, 10:59)  Вобщем выставили мы metalkain все тайминги и полярности как в мануале, по идее все должно работать, но... Не работает? Напишите все же, что наблюдается на экране (столбцы разноцветные, медленно тающая картинка, или что еще). Цитата(Gvozdidir @ Oct 31 2006, 10:59)  правда есть на стр.16 параграф Power On/Off Sequence, и в нем указано, что надо похитрому включать (Gate Off Voltage, -5.5~-4.5V, Typ. -5V) и (Gate On Voltage, 9.5V ~ 10.5V, Typ. 10V) выдерживать 0,1-10 мс между их включениями, надо это делать или можно обойти? Неправильная последовательность подачи питания может отрицательно сказаться на сроке службы индикатора, но на работоспособность влиять не должна. Цитата(Gvozdidir @ Oct 31 2006, 10:59)  мне просто придется тогда на коленке собирать хитрую схему включения, -5.5 я еще могу управлять, кину с порта EGPIO на DC-DC преобразовательесть функция вкл-выкл. преобразователем, а вот у 10В такой функции нет... Дык что там хитрого - два транзистора.
|
|
|
|
|
Oct 31 2006, 13:21
|

Участник

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373

|
Ситуацией обладаем следующей. 1. На CRT видим катринку с полным отсутствием синхронизации. Очевидно, из-за того, что тайминги стоят под LCD. Цвета выводятся желаемые. 2. На LCD не видно ничего, кроме подстветки. Никакой реакции на запуск программы не наблюдается. HSync и VSync верных полярностей (низкого уровня), их соотношение по фазе не выходит за границы, описанные мануалом. В описании к LCD довольно навязчиво написано: Цитата Power on sequence: Input signal & VCOM_I DC Voltage & DVDD & AVDD -> RESET -> VVEE -> VGH Вопросы: 1. Что такое Input signal? Если это информационные сигналы (RGB), то почему на временной диаграмме он (Input signal) нарисован одной линией, а не шиной (т.е. однозначно указана его полярность). 2. RESET во включенном состоянии (на диграмме) определен высоким уровнем. Мне казалось, RESET есть сигнал сброса, стало быть, во время работы должен быть неактивным. Нет ли здесь нарушения логики? 3. Какой физический смысл несут сигналы VVEE (-5V, Gate Off Voltage) и VGH (10V, Gate On Voltage) и почему рекомендуется вышеописанная их последовательность? Заметим в скобках, что указаны как начальное время их активизации, так и конечное, что наводит на мысли об обязательности выполнения этой последовательности. Привожу требования к таймингам (1m, 2m, 3m) и последовательности запуска (4m).
Сообщение отредактировал metalkain - Oct 31 2006, 13:26
--------------------
Мне триста лет - я выполз из тьмы...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|