📄 lcddriver.c
字号:
/******************************************************************************************
** Procedures for Embed_GUI
**
** (c) Copyright 2006-2010, czm
** All Rights Reserved
**
** V0.1
** 文件信息--------------------------------------------------------------------------------
** 文 件 名: lcddriver.c
** 作 者: czm
** 历史版本: 创建:2006年3.4
** 描 述:
** 注 意:
** 说 明: lcd 驱动初始化,画图
*******************************************************************************************/
#include "lcddriver.h"
#include "s3c2410.h"
//framebuffer 定义
unsigned int (*frameBuffer16BitTft640480)[SCR_XSIZE_TFT_640480/2];
/*******************************************************************************************
** 函数原型: void PutTft16Bit_640480(unsigned int x,unsigned int y,unsigned int c)
** 功能描述: 画点
** 参 数:
** 返 回 值:
** 说 明:
*******************************************************************************************/
void PutTft16Bit_640480(unsigned int x,unsigned int y,unsigned int c)
{
if(x<SCR_XSIZE_TFT_640480 && y<SCR_YSIZE_TFT_640480)
frameBuffer16BitTft640480[(y)][(x)/2]=( frameBuffer16BitTft640480[(y)]
[x/2]
& ~(0xffff0000>>((x)%2)*16) ) | ( (c&0x0000ffff)<<((2-1-((x)%2))*16) );
}
/*******************************************************************************************
** 函数原型: void Lcdinitialize(void)
** 功能描述: 初始化lcd控制器
** 参 数:
** 返 回 值:
** 说 明:
*******************************************************************************************/
void Lcdinitialize(void)
{
int i,j;
volatile IOPreg *s2410IOP_l = (IOPreg *)IOP_BASE;
volatile LCDreg *s2410LCDT_l = (LCDreg *)LCD_BASE;
//rGPCUP=0xffffffff; // Disable Pull-up register
//rGPCCON=0xaaaaaaaa; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND
//rGPDUP=0xffffffff; // Disable Pull-up register
//rGPDCON=0xaaaaaaaa; //Initialize VD[23:8]
s2410IOP_l->GPCUP=0xffffffff;
s2410IOP_l->GPCCON=0xaaaaaaaa;
s2410IOP_l->GPDUP=0xffffffff;
s2410IOP_l->GPDCON=0xaaaaaaaa;
frameBuffer16BitTft640480=(unsigned int (*)[SCR_XSIZE_TFT_640480/2])LCDFRAMEBUFFER;
//rLCDCON1=(CLKVAL_TFT_640480<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
s2410LCDT_l->LCDCON1=(CLKVAL_TFT_640480<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
// TFT LCD panel,16bpp TFT,ENVID=off
//rLCDCON2=(VBPD_640480<<24)|(LINEVAL_TFT_640480<<14)|(VFPD_640480<<6)|(VSPW_640480);
s2410LCDT_l->LCDCON2=(VBPD_640480<<24)|(LINEVAL_TFT_640480<<14)|(VFPD_640480<<6)|(VSPW_640480);
//rLCDCON3=(HBPD_640480<<19)|(HOZVAL_TFT_640480<<8)|(HFPD_640480);
s2410LCDT_l->LCDCON3=(HBPD_640480<<19)|(HOZVAL_TFT_640480<<8)|(HFPD_640480);
//rLCDCON4=(MVAL<<8)|(HSPW_640480);
s2410LCDT_l->LCDCON4=(MVAL<<8)|(HSPW_640480);
//rLCDCON5=(1<<11)|(1<<9)|(1<<8); //FRM5:6:5,HSYNC and VSYNC are inverted
s2410LCDT_l->LCDCON5=(1<<11)|(1<<9)|(1<<8);
//rLCDSADDR1=(((U32)frameBuffer16BitTft640480>>22)<<21)|M5D((U32)frameBuffer16BitTft640480>>1);
s2410LCDT_l->LCDSADDR1=(((unsigned int)frameBuffer16BitTft640480>>22)<<21)|M5D((unsigned int)frameBuffer16BitTft640480>>1);
//rLCDSADDR2=M5D( ((U32)frameBuffer16BitTft640480+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480*2))>>1 );
s2410LCDT_l->LCDSADDR2=M5D( ((unsigned int)frameBuffer16BitTft640480+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480*2))>>1 );
//rLCDSADDR3=(((SCR_XSIZE_TFT_640480-LCD_XSIZE_TFT_640480)/1)<<11)|(LCD_XSIZE_TFT_640480/1);
s2410LCDT_l->LCDSADDR3=(((SCR_XSIZE_TFT_640480-LCD_XSIZE_TFT_640480)/1)<<11)|(LCD_XSIZE_TFT_640480/1);
//rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
s2410LCDT_l->LCDINTMSK|=(3);
//rLPCSEL&=(~7); // Disable LPC3600
s2410LCDT_l->LPCSEL &=(~7);
//rTPAL=0; // Disable Temp Palette
s2410LCDT_l->TPAL=0;
//GPG4 is setted as LCD_PWREN
//rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
s2410IOP_l->GPGUP=s2410IOP_l->GPGUP&(~(1<<4))|(1<<4);
//rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN
s2410IOP_l->GPGCON=s2410IOP_l->GPGCON&(~(3<<8))|(3<<8);
//Enable LCD POWER ENABLE Function
//rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3); // PWREN
s2410LCDT_l->LCDCON5=s2410LCDT_l->LCDCON5&(~(1<<3))|(1<<3);
//rLCDCON5=rLCDCON5&(~(1<<5))|(0<<5); // INVPWREN
s2410LCDT_l->LCDCON5=s2410LCDT_l->LCDCON5&(~(1<<5))|(0<<5);
//rLCDCON1|=1; // ENVID=ON
s2410LCDT_l->LCDCON1|=1;
for(j=0;j<SCR_YSIZE_TFT_640480;j++)
for(i=0;i<SCR_XSIZE_TFT_640480;i++)
PutTft16Bit_640480(i,j,0);
/*
for (i=PIC_BASE_SECTOR;i<PIC_END_SECTOR;i++)
{
FMD_ReadSector(0+i, (LPBYTE)&Image_Buf, NULL , 1);
for (j=0;j<SECTOR_SIZE;j=j+2)
{
PutTft16Bit_640480(((((i-PIC_BASE_SECTOR)*512+j)%512)/2)+192,96-(((i-PIC_BASE_SECTOR)*512+j)/512)+192,(Image_Buf[j+1]*256+Image_Buf[j]));
}
}
*/
}
/*******************************************************************************************
** 函数原型: void disppic(unsigned char * str,unsigned long n)
** 功能描述: 显示一副图片
** 参 数:
** 返 回 值:
** 说 明:
*******************************************************************************************/
void disppic(unsigned char * str,unsigned long n)
{
unsigned int i=0;
unsigned int j=0;
for(j=0;(j*SCR_XSIZE_TFT_640480)<n;j++)
{
for(i=0;i<SCR_XSIZE_TFT_640480;i++)
{
PutTft16Bit_640480(i,j,*str);
str++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -