⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcddriver.c

📁 2410的LCD驱动
💻 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 + -