在研究了NBoot2nd之后,看到显示部分是在LCD.c里面!再参照了S3C2440的LCDCONROLLER部分后,我针对24BPP对regeister做了些修改!哪想却死活不行啊!老是黑屏!屏幕还有些闪动!哪位做过的兄弟帮忙看下到底是怎么回事了??
下面是一段LCD的INIT段
// == Params == //
#define CLKVAL_TFT_240320 (4)
#define MVAL (13)
#define MVAL_USED (0)
//Timing parameter for LTS350Q1(SAMSUNG)
#define VBPD_240320 ((2-1)&0xff)
#define VFPD_240320 ((3)&0xff)
#define VSPW_240320 ((2) &0x3f)
#define HBPD_240320 ((12)&0x7f)
#define HFPD_240320 ((12)&0xff)
#define HSPW_240320 ((30)&0xff)
#define M5D(n) ((n) & 0x1fffff) // To get lower 21bits
//TFT240320
#define HOZVAL_TFT_240320 (LCD_XSIZE_TFT_240320-1)
#define LINEVAL_TFT_240320 (LCD_YSIZE_TFT_240320-1)
//TFT 240320
#define LCD_XSIZE_TFT_240320 (240)
#define LCD_YSIZE_TFT_240320 (320)
//===========Lcd init==========//
//LCDCON1设置,参照datasheet,我只修改bppmode,修改为24bpp, 所以设置为13<<1,其他都用default值
rLCDCON1=(CLKVAL_TFT_240320<<8)|(MVAL_USED<<7)|(3<<5)|(13<<1)|0;
//LCDCON2,我不做修改,都用开始提供的初始值
rLCDCON2=(VBPD_240320<<24)|(LINEVAL_TFT_240320<<14)|(VFPD_240320<<6)|(VSPW_240320);
//LCDCON3,我不做修改,都用开始提供的初始值
rLCDCON3=(HBPD_240320<<19)|(HOZVAL_TFT_240320<<8)|(HFPD_240320);
//LCDCON4,我不做修改,都用开始提供的初始值
rLCDCON4=(MVAL<<8)|(HSPW_240320);
//LCDCON5设置,参照datasheet,我只设置bpp24BL,设置为LSB, 所以设置为0<<12,其他都用default值
rLCDCON5=(0<<12)|(1<<9)|(1<<8);
//LCDSADDR1,我不做修改,都用开始提供的初始值,我U32 *frameBuffer8BitTft240320 = 0x33800000
rLCDSADDR1=(((U32)frameBuffer8BitTft240320>>22)<<21)|M5D((U32)frameBuffer8BitTft240320>>1);
//LCDSADDR2,因为是24bpp以一个4个字节来存储,所以我在下面pagewidth乘了个4
rLCDSADDR2=M5D( ((U32)frameBuffer8BitTft240320+(LCD_XSIZE_TFT_240320*4*LCD_YSIZE_TFT_240320/1))>>1 ) ;
//LCDSADDR3,因为我不准备使用虚屏,所以offset设置为0<<11;而pagewidth应该也就是LCD_XSIZE_TFT_240320*4/2
rLCDSADDR3=(0<<11)|(LCD_XSIZE_TFT_240320*4/2);
//其他中断设置都不做修改,直接使用初始值
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rLPCSEL&=(~7); // Disable LPC3600
//rTPAL=0; // Disable Temp Palette
//rTPAL = (1<<24)|((0xff)<<0); // Enable Temporary Palette : blue
//*****************************************************************************************************************************************
我24bpp的象素填充函数为
void PutPixel32(U32 x,U32 c)
{
//if(x<SCR_XSIZE_TFT_240320 && y<SCR_YSIZE_TFT_240320)
frameBuffer8BitTft240320[x/3]=(frameBuffer8BitTft240320[x/3]
& ~(0xff000000>>((x)%3)*8) ) | ( (c&0x000000ff)<<((3-1-((x)%3))*8) );
}
for(k=0;k<240*320*3;k++)
PutPixel32(k,gImage_beauty[k]) ;