Цитата(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 - это адрес, по которому находится выводимая на экран картинка??
Спасибо, сорри за обилие вопросов)