Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SAM9g45 проблема с LCD
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Rattle_the_Snake
Добрый день всем!

Есть у меня плата SK-9g45-oem и дисплей Nec NL10260BC19

Пишу программу на С (компилятор IAR).
Дошел до стадии инициализации дисплея.
Вроде бы запустил, однако есть маленькая проблема - картинка сдвинута вправо на 8 пикселей. Не могу понять, куда копать.

Код
void configure_lcd(void)
{
// Enable peripheral clock
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_LCDC;

AT91C_BASE_LCDC->LCDC_LCDCON1 = 1 << 12; //LCDOTCLK is 50 MHz
AT91C_BASE_LCDC->LCDC_LCDCON2 = AT91C_LCDC_DISTYPE_TFT | AT91C_LCDC_SCANMOD_SINGLESCAN |
AT91C_LCDC_IFWIDTH_SIXTEENBITSWIDTH | AT91C_LCDC_PIXELSIZE_SIXTEENBITSPERPIXEL |
AT91C_LCDC_INVVD_NORMALPOL | AT91C_LCDC_INVFRAME_INVERTEDPOL |
AT91C_LCDC_INVLINE_INVERTEDPOL | AT91C_LCDC_INVCLK_NORMALPOL |
AT91C_LCDC_INVDVAL_NORMALPOL | AT91C_LCDC_CLKMOD_ALWAYSACTIVE |
AT91C_LCDC_MEMOR_LITTLEIND;

AT91C_BASE_LCDC->LCDC_TIM1 = (0 << 0) | (25 << 8) | (1 << 16) | (0 << 24) | (0<<31); // vfp,vbp,vpw,vhdly
AT91C_BASE_LCDC->LCDC_TIM2 = (0 << 0) | (0 << 8) | (215 << 21); // hbp,hpw,hfp
AT91C_BASE_LCDC->LCDC_LCDFRCFG = (599 << 0) | (1023 << 21); // 1024x600
AT91C_BASE_LCDC->LCDC_FIFO = 501;
AT91C_BASE_LCDC->LCDC_BA1 = (unsigned int)lcdbuffer; // Display buffer adress
AT91C_BASE_LCDC->LCDC_FRMCFG = (307200 << 0) | (3 << 24); // Size 307200 burst 4 words
AT91C_BASE_LCDC->LCDC_DMACON = AT91C_LCDC_DMAEN;
AT91C_BASE_LCDC->LCDC_PWRCON = AT91C_LCDC_PWR;
}


Хочу сразу сказать, что дисплей не реагирует на сигналы Hsync и Vsync, их там нет в принципе, он работает только лишь с DE сигналом.

Подскажите, в каком направлении мне дальше двигаться?

P.S. Вроде в документации где то проскакивала errata по сдвинутому дисплею, однако на sam9g45 никаких упоминаний на этот счет нет
aaarrr
Цитата(Rattle_the_Snake @ Apr 28 2012, 15:06) *
Подскажите, в каком направлении мне дальше двигаться?

Было такое на SAM9261, но, к сожалению, уже запамятовал причину. Попробуйте поставить ненулевое значение GUARD_TIME в PWRCON.
Rattle_the_Snake
Цитата(aaarrr @ Apr 28 2012, 14:24) *
Было такое на SAM9261, но, к сожалению, уже запамятовал причину. Попробуйте поставить ненулевое значение GUARD_TIME в PWRCON.

Нашел в errata на SAM9261 - несколько причин:

1.
The LCD DMA burst size in 32-bit words is programmed by BRSTLN field in DMAFRMCFG
register.
The LCD DMA Base Address is programmed in DMABADDR1 register.
The LCD DMA Base Address must be programmed with a value aligned onto LCD DMA burst
size, e.g.:

BRSTLN = 15
For a 16-word burst, the LCD DMA Base Address must start on a 16-word offset: 0x0, 0x40,
0x80 or 0xc0.
BRSTLN = 3
For a 4-word burst, the LCD DMA Base Address offset must start on a 4-word offset: 0x0, 0x10,
..., 0xf0.

То есть как я понял, необходимо адрес выровнять по необходимому размеру DMA Burst.
Но он у меня вроде бы совпадает...

2. неправильный сброс буфера
When a FIFO underflow occurs, a reset of the LCD DMA and FIFO pointers is necessary.
If only LCD DMA pointers are reset (FIFO pointers not reset), the displayed image is shifted.
Problem Fix/Workaround
Apply the following sequence to correctly reset LCD DMA and FIFO pointers:
• LCD power off
• DMA disable
• Wait for DMABUSY
• DMA reset
• LCD power on
• DMA enable.
Powering LCD off, then powering LCD on, resets the FIFO pointers.
Disabling DMA, then enabling DMA, resets the DMA pointers.

Буду пробовать, отпишусь о результатах...
Rattle_the_Snake
Цитата(Rattle_the_Snake @ Apr 28 2012, 15:21) *
Нашел в errata на SAM9261 - несколько причин:

Буду пробовать, отпишусь о результатах...


Оказалось, что проблема именно в неправильном сбросе буфера. Странно, что в еррате на SAM9G45 об этом ничего не пишут...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.