S3C2410之LCD
........
}
}
Glib_Init(MODE_TFT_8BIT_640480);//设置各像素点bpp的格式
void Glib_Init(int type)
{
switch(type)
{
case MODE_STN_1BIT:
...................
case MODE_TFT_8BIT_640480://#define MODE_TFT_8BIT_640480
PutPixel=_PutTft8Bit_640480;
break;
..................
}
void _PutTft8Bit_640480(U32 x,U32 y,U32 c)
{
if(x
frameBuffer8BitTft640480[(y)][(x)/4]=( frameBuffer8BitTft640480[(y)][x/4]
& ~(0xff000000>>((x)%4)*8) ) | ( (c&0x000000ff)<((4-1-((x)%4))*8) );
}
/*
U32 (*frameBuffer8BitTft640480)[SCR_XSIZE_TFT_640480/4];//定义一行数组指针,具有SCR_XSIZE_TFT_640480/4=320个U32类型的元素
frameBuffer8BitTft640480=(U32 (*)[SCR_XSIZE_TFT_640480/4])LCDFRAMEBUFFER;//将LCDFRAMEBUFFER强制转换为数组指针类型后赋给frameBuffer8BitTft640480 //#define LCDFRAMEBUFFER 0x33800000
rLCDSADDR1=(((U32)frameBuffer8BitTft640480>>22)<21)|M5D((U32)frameBuffer8BitTft640480>>1);rLCDSADDR2=M5D( ((U32)frameBuffer8BitTft640480+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480/1))>>1 );
frameBuffer8BitTft640480[(y)][(x)/4]=( frameBuffer8BitTft640480[(y)][x/4]
& ~(0xff000000>>((x)%4)*8) ) | ( (c&0x000000ff)<((4-1-((x)%4))*8) );
//extern U32 (*frameBuffer8BitTft640480)[SCR_XSIZE_TFT_640480/4];共包括行单元为320的U32行数组指针
//由于一个像素只占8个BIT,故一个U32单元存放了四个像素,对于一个X,需要先找到其所在的字:X/4,然后找到它所在该字中的位置:(x)%4),将其清0后再赋上相应的颜色值即: & ~(0xff000000>>((x)%4)*8) ) | ( (c&0x000000ff)<((4-1-((x)%4))*8) :BSWP = 0//字节不可交抑郁, HWSWP = 0半字不可交换(1:可交换);P1在[31:24],P1在[23;16]....
*/
Lcd_PowerEnable(0, 1);//关掉电源
void Lcd_PowerEnable(int invpwren,int pwren)
{
//GPG4 is setted as LCD_PWREN定义引脚为第四功能即LCD_PWREN
rGPGUP=rGPGUP&(~(1<4))|(1<4); // Pull-up disable
rGPGCON=rGPGCON&(~(3<8))|(3<8); //GPG4=LCD_PWREN
//Enable LCD POWER ENABLE Function
rLCDCON5=rLCDCON5&(~(1<3))|(pwren<3); // PWREN
rLCDCON5=rLCDCON5&(~(1<5))|(invpwren<5); // INVPWREN
}
Lcd_EnvidOnOff(1);//允许LCD视频数据及LCD控制信号
void Lcd_EnvidOnOff(int on
{
if(on
rLCDCON1|=1; // ENVID=ON
else
rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
}
Uart_Printf("[TFT 256 COLOR(8bit/1pixel) LCD TEST] ");
Glib_ClearScr(0, MODE_TFT_8BIT_640480);//清除屏幕
void Glib_ClearScr(U32 c, int type)
{
//Very inefficient function.
int i,j;
//if((type==MODE_TFT_1BIT_800600)|(type==MODE_TFT_8BIT_800600) |//(type==MODE_TFT_16BIT_800600))
if((type&0x4000)&&(type&0x400))
for(j=0;j
for(i=0;i
PutPixel(i,j,c);
//else if((type==MODE_TFT_1BIT_640480)|(type==MODE_TFT_8BIT_640480)|(type==MODE_TFT_16BIT_640480))
else if((type&0x4000)&&(type&0x200))
for(j=0;j
for(i=0;i
PutPixel(i,j,c); //在前面函数指针已赋值PutPixel=_PutTft8Bit_640480
............
}
rTPAL = (1<24)|((0xff)<0); // Enable Temporary Palette : Blue
Uart_Printf("TFT 256 color mode test 1. Press any key! ");
Uart_Getch();
k=0;
for(i=0;i<640;i+=40)
for(j=0;j<480;j+=30)
{
Glib_FilledRectangle(i,j,i+39,j+29,(k%256));
k++;
}
rTPAL = 0;
Uart_Printf("TFT 256 color mode test 2. Press any key! ");
Uart_Getch();
......
}
frameBuffer8BitTft640480=(U32 (*)[SCR_XSIZE_TFT_640480/4])LCDFRAMEBUFFER;//将LCDFRAMEBUFFER强制转换为数组指针类型后赋给frameBuffer8BitTft640480 //#define LCDFRAMEBUFFER 0x33800000
rLCDSADDR1=(((U32)frameBuffer8BitTft640480>>22)<21)|M5D((U32)frameBuffer8BitTft640480>>1);rLCDSADDR2=M5D( ((U32)frameBuffer8BitTft640480+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480/1))>>1 );
frameBuffer8BitTft640480[(y)][(x)/4]=( frameBuffer8BitTft640480[(y)][x/4]
& ~(0xff000000>>((x)%4)*8) ) | ( (c&0x000000ff)<((4-1-((x)%4))*8) );
*/
Lcd_PowerEnable(0, 1);//关掉电源
void Lcd_PowerEnable(int invpwren,int pwren)
{
//GPG4 is setted as LCD_PWREN定义引脚为第四功能即LCD_PWREN
rGPGUP=rGPGUP&(~(1<4))|(1<4); // Pull-up disable
rGPGCON=rGPGCON&(~(3<8))|(3<8); //GPG4=LCD_PWREN
//Enable LCD POWER ENABLE Function
rLCDCON5=rLCDCON5&(~(1<3))|(pwren<3); // PWREN
rLCDCON5=rLCDCON5&(~(1<5))|(invpwren<5); // INVPWREN
}
Lcd_EnvidOnOff(1);//允许LCD视频数据及LCD控制信号
void Lcd_EnvidOnOff(int on
{
if(on
rLCDCON1|=1; // ENVID=ON
else
rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
}
Uart_Printf("[TFT 256 COLOR(8bit/1pixel) LCD TEST] ");
Glib_ClearScr(0, MODE_TFT_8BIT_640480);//清除屏幕
void Glib_ClearScr(U32 c, int type)
{
//Very inefficient function.
int i,j;
//if((type==MODE_TFT_1BIT_800600)|(type==MODE_TFT_8BIT_800600) |//(type==MODE_TFT_16BIT_800600))
if((type&0x4000)&&(type&0x400))
for(j=0;j
for(i=0;i
S3C2410LC 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)