Доброго времени суток, господа!
Вывожу изображение на экран TFT-матрицы MTF-TQ57SN721-AV (RGB 5:6:5 = 16 битов на пиксель) с помощью встроенного в LPC2478 контроллера LCD. Если картинка имеет цветность 16 цветов, то она на экране отображается корректно. Если же выводить какую-нибудь фотографию с полной
16-тибитной цветностью, то на вертикальной границе некоторых оттенков появляются ярко-окрашенные непрописанные пиксели (ярко- красного, голубого, желтого, зеленого и других цветов). Если кто-то сталкивался с подобной проблемой, помогите пожалуйста.
Привожу здесь функцию инициализации встроенного LCD-контроллера:
CODE
void InitPanel(void)
{
int i;
PCONP |= 1<<20;
PINSEL11 = ( (5<<1) | 1); // RGB 5:6:5 , LCD port enable
PINSEL4 &= ~(3<<4); // P2[2] LCDDCLK
PINSEL4 &= ~(3<<6); // P2[3] LCDFP
PINSEL4 &= ~(3<<8); // P2[4] LCDENAB/LCDM
PINSEL4 &= ~(3<<10); // P2[5] LCDLP
PINSEL4 |= ((3<<4) | (3<<6) | (3<<8) | (3<<10)); // 1111 1111 0000
PINSEL3 &= ~(3<<8); // P1[20] LCDVD[6]/LCDVD[10] G0 LCDVD[10]
PINSEL3 &= ~(3<<10); // P1[21] LCDVD[7]/LCDVD[11] G1 ..11
PINSEL3 &= ~(3<<12); // P1[22] LCDVD[8]/LCDVD[12] G2 ..12
PINSEL3 &= ~(3<<14); // P1[23] LCDVD[9]/LCDVD[13] G3 ..13
PINSEL3 &= ~(3<<16); // P1[24] LCDVD[10]/LCDVD[14] G4 ..14
PINSEL3 &= ~(3<<18); // P1[25] LCDVD[11]/LCDVD[15] G5 LCDVD[15]
PINSEL3 &= ~(3<<20); // P1[26] LCDVD[12]/LCDVD[20] B1 LCDVD[20]
PINSEL3 &= ~(3<<22); // P1[27] LCDVD[13]/LCDVD[21] B2 ..21
PINSEL3 &= ~(3<<24); // P1[28] LCDVD[14]/LCDVD[22] B3 ..22
PINSEL3 &= ~(3<<26); // P1[29] LCDVD[15]/LCDVD[23] B4 LCDVD[23]
PINSEL3 |= ( (1<<8) | (1<<10) | (1<<12) | (1<<14) | (1<<16) | (1<<18) | (1<<20) | (1<<22) | (1<<24) | (1<<26) );
// 0101 0101 0101 0101 0101 0000 0000
PINSEL4 &= ~(3<<12); // P2[6] LCDVD[0]/LCDVD[4] R1 LCDVD[4]
PINSEL4 &= ~(3<<14); // P2[7] LCDVD[1]/LCDVD[5] R2 ..5
PINSEL4 &= ~(3<<16); // P2[8] LCDVD[2]/LCDVD[6] R3 ..6
PINSEL4 &= ~(3<<18); // P2[9] LCDVD[3]/LCDVD[7] R4 LCDVD[7]
PINSEL4 &= ~(3<<24); // P2[12] LCDVD[4]/LCDVD[3]/LCDVD[8]/LCDVD[18] R0 LCDVD[3]
PINSEL4 &= ~(3<<26); // P2[13] LCDVD[5]/LCDVD[9]/LCDVD[19] B0 LCDVD[19]
PINSEL4 |= ((3<<12) | (3<<14) | (3<<16) | (3<<18) | (1<<24) | (1<<26)); // 0101 0101 0000 1111 1111 1111 1111 0000
LCD_CFG_REG = 2; // LCD panel clock prescaler selection.
LCD_TIMH_REG = ( (1<<24) | (1<<16) | (50<<8) | (((320/16)-1)<<2));
LCD_TIMV_REG = ( (1<<24) | (1<<16) | (1<<10) | (240) );
LCD_POL_REG = ( (0<<26) | (((320/1)-1)<<16) | (1<<12) | (0<<5));
LCD_CTRL_REG = ((1<<5) | (6<<1) | (1<<8));
// LCD is a TFT display.
// 16 bpp, 5:6:5 mode.
// BGR: red and blue swapped.
LCD_UPBASE_REG = BUFFER_ADDR; // из SD-RAM !
LCD_LPBASE_REG = BUFFER_ADDR; // из SD-RAM !
for(i=0;i<50000;i++);
LCD_CTRL_REG |= 1; // LCD enabled. Signals LCDLP, LCDDCLK, LCDFP,LCDENAB, and LCDLE are high.
for(i=0;i<50000;i++);
LCD_CTRL_REG |= 1<<11; // power gated through to LCD panel and LCDV[23:0] signals enabled, (active).
}
Сообщение отредактировал IgorKossak - May 25 2011, 20:19