微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2410之LCD

S3C2410之LCD

时间:11-11 来源:互联网 点击:

........
}
}

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 onoff)
{
if(onoff==1)
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< FONT>

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 onoff)
{
if(onoff==1)
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< FONT>

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top