|
подключение монитора к AT91SAM9261 |
|
|
|
Dec 16 2009, 22:37
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(ZAA @ Dec 15 2009, 19:20)  пробовали менять vl_clk и разрешение в файле board/atmel/at91sam9261/at91sam9261.c - не помогло Хоть бы написали, к чему это привело в результате. Цитата(ZAA @ Dec 15 2009, 19:20)  Подскажите, пожалуйста, если кто-то сталкивался с подобным? Глянул исходники - фреймбуфер для LCD под платформу 9261EK расположен в SRAM, поэтому просто поменять разрешение нельзя, нужно сначала перенести его в SDRAM, как это сделано для 9G10. Цитата(Jury093 @ Dec 16 2009, 21:48)  А разве 9261 умеет VGA? Умеет.
|
|
|
|
|
Dec 17 2009, 03:50
|
Частый гость
 
Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906

|
Цитата(aaarrr @ Dec 17 2009, 01:37)  Хоть бы написали, к чему это привело в результате. Ага, еще покопаюсь - напишу. Похоже, на правильном пути. Цитата(aaarrr @ Dec 17 2009, 01:37)  Глянул исходники - фреймбуфер для LCD под платформу 9261EK расположен в SRAM, поэтому просто поменять разрешение нельзя, нужно сначала перенести его в SDRAM, как это сделано для 9G10. Спасибо за подсказку)
|
|
|
|
|
Dec 17 2009, 15:55
|
Частый гость
 
Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906

|
Цитата(aaarrr @ Dec 17 2009, 01:37)  Хоть бы написали, к чему это привело в результате. Опишу проблему подробнее. Задача - подключить к отладочной плате AT91SAM9261-EK VGA монитор с разрешением 800x600 и на 60 ГЦ. Глубина цвета - 8 бит на пиксель. Цифровые сигналы RGB, DCLK и LCDEN перехватываются и посылаются на конвертер TFT-VGA, реализованный на микросхеме ADV7125(самодельный переходник). Проблемы: 1) Не можем получить частоту выше 18 Мгц на линии DCLK. Для разрешения 800x600@60Hz необходимо F=800*600*60*0.8 = 36Mhz (данная формула взята из описания на микросхему ADV7125). В файле board/atmel/at91sam9261/at91sam9261.c меняем настройки: Изначально: Код vidinfo_t panel_info = { vl_col: 240, vl_row: 320, vl_clk: 4965000, vl_sync: ATMEL_LCDC_INVLINE_INVERTED | ATMEL_LCDC_INVFRAME_INVERTED, vl_bpix: 3, vl_tft: 1, vl_hsync_len: 5, vl_left_margin: 1, vl_right_margin:33, vl_vsync_len: 1, vl_upper_margin:1, vl_lower_margin:0, mmio: AT91SAM9261_LCDC_BASE, }; Мы сделали: Код vidinfo_t panel_info = {
vl_col: 800, vl_row: 600, //vl_clk: 25175000, vl_clk: 39720000, vl_bpix: 4, vl_tft: 1,
vl_hsync_len: 96, //HPW vl_left_margin: 48, //HBP vl_right_margin: 16, //HFP
vl_vsync_len: 2, //VPW vl_upper_margin: 31, //VBP vl_lower_margin: 12, //VFP
mmio: AT91SAM9261_LCDC_BASE, }; В файле 'atmel_lcdfb.c' делитель (CLKVAL) подбирается автоматически: Код /* Set pixel clock */ value = get_lcdc_clk_rate(0) / panel_info.vl_clk; if (get_lcdc_clk_rate(0) % panel_info.vl_clk) value++; value = (value / 2) - 1;
if (!value) { lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS); } else lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDCON1, value << ATMEL_LCDC_CLKVAL_OFFSET); где: Код static inline unsigned long get_lcdc_clk_rate(unsigned int dev_id) { return AT91_MASTER_CLOCK; } AT91_MASTER_CLOCK определен в файле include/configs/at91sam9261ek.h Код #define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */ #define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2 */ Функция get_lcdc_clk_rate() возвращает #define-частоту. Но какая частота при этом реальная? После прошивки U-Boot'а и запуска контроллера сигнала DCLK нет вообще. Есть подозрение, что МК не может обеспечить такую частоту,так как работает от SLCK (Low-power 32768 Hz Slow Clock Oscillator ). Возможно, плохо искали, но ни в одном файле мы не нашли места, в котором бы устанавливался Master Clock (MCK). А MCK может быть и 200Мгц. В чем может заключаться проблема и как получить рабочую частоту в 36 МГц и более??? 2)Также есть путаница с параметрами INVVD, INVFRAME, INVLINE, INVCLK, INVVDVAL. В разных примерах их настаривают по-разному. Плюс еще нужно учесть параметры VGA-режима. И еще - DMABDDR1 - это адрес, по которому находится выводимая на экран картинка?? Спасибо, сорри за обилие вопросов)
|
|
|
|
|
Dec 17 2009, 16:33
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(ZAA @ Dec 17 2009, 18:55)  1) Не можем получить частоту выше 18 Мгц на линии DCLK. ... После прошивки U-Boot'а и запуска контроллера сигнала DCLK нет вообще. Есть подозрение, что МК не может обеспечить такую частоту,так как работает от SLCK (Low-power 32768 Hz Slow Clock Oscillator ). Возможно, плохо искали, но ни в одном файле мы не нашли места, в котором бы устанавливался Master Clock (MCK). А MCK может быть и 200Мгц. В чем может заключаться проблема и как получить рабочую частоту в 36 МГц и более??? Так и не понял, DCLK есть, но не выше 18МГц, или же ее нет вообще? Судя по наличию дефайна CONFIG_SKIP_LOWLEVEL_INIT U-boot в этой конфигурации тактирование не настраивает, а пользуется тем, что получено от bootstrap'а - к нему и вопросы. Кроме того, в вашем случае DCLK будет равна MCK/2, т.к. нечетные делители не предусмотрены. Цитата(ZAA @ Dec 17 2009, 18:55)  2)Также есть путаница с параметрами INVVD, INVFRAME, INVLINE, INVCLK, INVVDVAL. В разных примерах их настаривают по-разному. Плюс еще нужно учесть параметры VGA-режима. Все в 0. Монитор поймет. Цитата(ZAA @ Dec 17 2009, 18:55)  И еще - DMABDDR1 - это адрес, по которому находится выводимая на экран картинка?? Да.
|
|
|
|
|
Dec 21 2009, 09:11
|
Группа: Участник
Сообщений: 11
Регистрация: 20-12-09
Пользователь №: 54 366

|
Цитата(aaarrr @ Dec 17 2009, 21:33)  Так и не понял, DCLK есть, но не выше 18МГц, или же ее нет вообще? Судя по наличию дефайна CONFIG_SKIP_LOWLEVEL_INIT U-boot в этой конфигурации тактирование не настраивает, а пользуется тем, что получено от bootstrap'а - к нему и вопросы. Кроме того, в вашем случае DCLK будет равна MCK/2, т.к. нечетные делители не предусмотрены. Здравствуйте. Мы работаем вместе над этой задачей. Все верно, DCLK есть, но не выше 18 МГц. Решили проверить частоту процессора. Вывели на ножку В8 (PCK1) частоту PLLA с делителем 16. В итоге получили 200/16 Мгц. Т.е. процессор работает на 200 Мгц, а master clock (MCK) они настраивают на 100 Мгц. В bootstrap'e. Но в случае вывода частоты на DCLK и PCK1 больше 20 Мгц, на осцилографе получается какой-то модулированный сигнал. По напряжению находится в пределах 1.65В и 1.9В - нижняя и верхняя граница. Почему так происходит??? У ADV7125 (tft-vga) порог единицы = 2В. Использовали логический анализатор, настроенный на порог срабатывания 2В, не захватывает сигнал... В любом случае меандр должен быть в пределах 0 - 3,3В. Так ведь?? Почему не можем посмотреть сигнал в 30-40 Мгц????..... Вот, к примеру, сигнал DCLK ghb 25 Мгц. Как я понимаю такого не должно быть... Должен быть в диапазоне от 0 до 3,3В.
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 21 2009, 16:40
|
Группа: Участник
Сообщений: 11
Регистрация: 20-12-09
Пользователь №: 54 366

|
Цитата(aaarrr @ Dec 21 2009, 20:10)  Полоса пропускания у вашего прибора какая? Простите, не понял вашего вопроса.... Микросхема ADV7125 расчитана от 0.5Мгц до 140 Мгц. По идее, для того чтобы получить vga сигналы, необходимо: RGB сигналы, CLK, и data enable. В pdf сказано, что этого хватит, чтобы ЦАП сделал свое дело. Что в таком случае требуется от меня? RGB сигналы есть, там, что-то бегает, enable тоже дергается. Только проблемы с частотой. Которую я просто пытаюсь поменять, в настроенной уже системе. А может быть такое, что щуп у осцилографа вносит емкость и при этом происходит искажение сигнала??? Даже если щупом не лазить, то на выходе ADV пустота. Сигналы hsync и vsync формируются тоже автоматически в зависимости от задаваемого разрешения. Тут по идее все делается автоматически за исключением частоты DCLK. Да, кстати, у нас все напаянно проводками... Это может влиять на работоспособность?? Попытаюсь завтра сфоткать, как это выглядит.
|
|
|
|
|
Dec 21 2009, 17:02
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Viatcheslav_CPU @ Dec 21 2009, 19:40)  Простите, не понял вашего вопроса.... Какова полоса пропускания у вашего осциллографа? Есть подозрение, что он имеет параметры 50MHz и 100MSPS, что для наблюдения сигналов выше 18MHz явно недостаточно. Цитата(Viatcheslav_CPU @ Dec 21 2009, 19:40)  Да, кстати, у нас все напаянно проводками... Это может влиять на работоспособность?? Попытаюсь завтра сфоткать, как это выглядит. Может, конечно, но вряд ли фатально. Измерьте частоту сигналов VSYNC и HSYNC - они относительно низкочастотные. И приведите схему включения ADV7125.
|
|
|
|
|
Dec 21 2009, 21:29
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(aaarrr @ Dec 21 2009, 20:02)  И приведите схему включения ADV7125. собственно правильная схема включения есть для кита на авр32 я так понимаю что на SAM9261 отличий быть не должно... вот схема кита на AP7000(авр32): http://www.atmel.com/dyn/resources/prod_do..._schematics.pdfи я сам подключал через ADV7125 на NGW100(AP7000) используя схему от STK1000
|
|
|
|
|
Dec 22 2009, 06:14
|
Группа: Участник
Сообщений: 11
Регистрация: 20-12-09
Пользователь №: 54 366

|
Цитата(aaarrr @ Dec 21 2009, 22:02)  Какова полоса пропускания у вашего осциллографа? Есть подозрение, что он имеет параметры 50MHz и 100MSPS, что для наблюдения сигналов выше 18MHz явно недостаточно. Полоса пропускания ограничивается 20 Мвыборок в секунду. Т.е. скорее всего не может измерить. Пробывал другим осцилографом Tektronix TDS 2012. Вот осцилограммы DCLK 25Mhz:
По уровням напряжения ADV7125, по идее, должна проглотить это, т.к. уровень 0 - 0,7 В; 1 - 2В. Так же есть HSYNC:
VSYNC всегда в единице, из-за того что они не настраивавают. Сейчас поправим. Схема подключения ADV7125 :
Да, кстати, не пугайтесь от названия ног проца. Это от AT91SAM9G45. В любом случае идея та же. А отладится пытаемся на AT91SAM9261. Цитата(singlskv @ Dec 22 2009, 02:29)  собственно правильная схема включения есть для кита на авр32 я так понимаю что на SAM9261 отличий быть не должно... вот схема кита на AP7000(авр32): http://www.atmel.com/dyn/resources/prod_do..._schematics.pdfи я сам подключал через ADV7125 на NGW100(AP7000) используя схему от STK1000 По ней и делали все.... Резисторы 68 Ом стоят, т.к. не было 75. И на 430 Ом по этим же соображениям. Думаю это не критично. Согласен, схема подключения простая. Как уже говорил, для ADV7125 надо обеспечить RGB, DCLK и DATA ENABLE сигналы. Причем все они формируются автоматически. Мне лишь нужно задать параметры. Допустим я хочу частоту в 25 Мгц, тогда и RGB-шные сигналы и EN проц поторопит. Или я не прав??? Вот как это выглядит вживую :
Активировали VSYNC. Теперь монитор пытается словить аналоговый сигнал и как-бы "включается". Но потом пишет: "Частота превышена". Меняли все на базовые установки типа 240 на 320 при 5 Мгц. Все равно "частота превышена". ADV7125 что-то исполняет. Аналоговых сигналов RGB на выходе микросхемы нет.
Сообщение отредактировал Viatcheslav_CPU - Dec 22 2009, 06:09
|
|
|
|
|
Dec 22 2009, 09:37
|
Группа: Участник
Сообщений: 11
Регистрация: 20-12-09
Пользователь №: 54 366

|
Вот сам правленный код: файл : at91sam9261ek.c CODE vidinfo_t panel_info = {
vl_col: 640, vl_row: 480, vl_clk: 25175000, vl_bpix: 3, vl_tft: 1,
vl_hsync_len: 64, //HPW vl_left_margin: 48, //HBP vl_right_margin: 16, //HFP
vl_vsync_len: 2, //VPW vl_upper_margin: 33, //VBP vl_lower_margin: 2, //VFP
mmio: AT91SAM9261_LCDC_BASE, };
файл :atmel_lcdfb.c Тут я правлю регистр LCDCON2 и выставляю тайминги. CODE void lcd_ctrl_init(void *lcdbase) { unsigned long value;
.... /* Initialize control register 2 */ #ifdef CONFIG_AVR32 value = ATMEL_LCDC_MEMOR_BIG | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE; #else value = ATMEL_LCDC_MEMOR_LITTLE | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE; #endif /* if (panel_info.vl_tft) value |= ATMEL_LCDC_DISTYPE_TFT;
if (!(panel_info.vl_sync & ATMEL_LCDC_INVLINE_INVERTED)) value |= ATMEL_LCDC_INVLINE_INVERTED; if (!(panel_info.vl_sync & ATMEL_LCDC_INVFRAME_INVERTED)) value |= ATMEL_LCDC_INVFRAME_INVERTED; value |= (panel_info.vl_bpix << 5); lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDCON2, value); */ //------------ MY ------------------------------------------------- if (panel_info.vl_tft) value |= ATMEL_LCDC_DISTYPE_TFT;
value |= ATMEL_LCDC_INVVD_NORMAL; // write 0. not inverted value |= ATMEL_LCDC_INVFRAME_NORMAL; // write 0. not inverted value |= ATMEL_LCDC_INVLINE_NORMAL; // write 0. not inverted value |= ATMEL_LCDC_INVCLK_INVERTED; // write 1. inverted. value |= ATMEL_LCDC_INVDVAL_NORMAL; // write 0. not inverted
value |= (panel_info.vl_bpix << 5);
value |= ATMEL_LCDC_SCANMOD_SINGLE; // write 0. single scan.
value |= ATMEL_LCDC_IFWIDTH_4; // For TFT mode doesn't make any sense. Just in case write 0.
lcdc_writel(panel_info.mmio, ATMEL_LCDC_LCDCON2, value); //--------------------------------------------------------------------
/* Vertical timing */
value = panel_info.vl_lower_margin; value |= (panel_info.vl_upper_margin) << ATMEL_LCDC_VBP_OFFSET; value |= (panel_info.vl_vsync_len - 1) << ATMEL_LCDC_VPW_OFFSET; value |= 0 << ATMEL_LCDC_VHDLY_OFFSET; // MY lcdc_writel(panel_info.mmio, ATMEL_LCDC_TIM1, value);
/* Horizontal timing */ value = (panel_info.vl_right_margin) << ATMEL_LCDC_HFP_OFFSET; value |= (panel_info.vl_hsync_len - 1) << ATMEL_LCDC_HPW_OFFSET; value |= (panel_info.vl_left_margin); lcdc_writel(panel_info.mmio, ATMEL_LCDC_TIM2, value);
.... }
|
|
|
|
|
Dec 22 2009, 15:54
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Viatcheslav_CPU @ Dec 22 2009, 09:14)  Согласен, схема подключения простая. Схема простая, но на ней Вы допустили ошибку: MSB сигналы данных болтаются в воздухе. Данные нужно было подключать от старших к младшим (G5_CPU->G7_DAC, G4_CPU->G6_DAC и т.д.), а младшие два бита АЦП подключить к земле. Цитата(Viatcheslav_CPU @ Dec 22 2009, 09:14)  Как уже говорил, для ADV7125 надо обеспечить RGB, DCLK и DATA ENABLE сигналы. Причем все они формируются автоматически. Мне лишь нужно задать параметры. Допустим я хочу частоту в 25 Мгц, тогда и RGB-шные сигналы и EN проц поторопит. Или я не прав??? Да, все частоты генерируются из DCLK. Какие сейчас частоты на HSYNC и VSYNC?
|
|
|
|
|
Dec 23 2009, 08:41
|
Группа: Участник
Сообщений: 11
Регистрация: 20-12-09
Пользователь №: 54 366

|
Цитата(aaarrr @ Dec 22 2009, 21:54)  Схема простая, но на ней Вы допустили ошибку: MSB сигналы данных болтаются в воздухе. Данные нужно было подключать от старших к младшим (G5_CPU->G7_DAC, G4_CPU->G6_DAC и т.д.), а младшие два бита АЦП подключить к земле. Я перепоял полностью плату с ЦАП, до того как прочитал ваше сообщение. Следовательно оставил все без изменений. И монитор заработал!!!! Причина видимо кроется в том, что первый раз запаял что-то криво. Я очень долго возился с пайкой в первый раз. Ну и + надо VSYNC разрешить. И показывает картину от ATMEL(240x109) один в один в тех же цветах как и на ЖК. Т.е. с цветами путаницы нет, но при этом, плюсом, отображает в правом нижнем углу монитора часть той же картинки. Параметры сделали 640X480 @ 60 Hz. Частота DCLK = 25 Mhz. Почему так ??? Картинку с разрешением 640 на 480 вывести u-boot не может, не хватает памяти видимо..... Весит картинка около 300-400Кб. Так же пробовали частоту 1024 и 768. Частоту ставили 50 МГЦ. На мониторе видно, что разрешение поменялось, но картинки размножились =) Скорее всего, это от таймингов зависит для HSYNC и VSYNC. А почему надо делать : G5_CPU->G7_DAC, G4_CPU->G6_DAC??? Я сейчас в pdf посмотрю. Я считаю, что это должно сказаться на оттенке соответствующего сигнала. Так ли??? По ним кроме кода цвета ничего не передается ведь...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|