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

📄 b_lcddriver.c

📁 一种被手机厂商广泛应用的26万色176*220TFT液晶的说明文档及我写的初始化源代码。
💻 C
字号:
#include "OMAP_MPU_Addr.h"
#include "pccdef.h"
 

#define FPGA_ADDRL		*((volatile unsigned short *)(0x0E000000))
#define FPGA_ADDRH		*((volatile unsigned short *)(0x0E000002))
#define FPGA_RDATAL	    *((volatile unsigned short *)(0x0E000008))
#define FPGA_RDATAH	    *((volatile unsigned short *)(0x0E00000A))
#define FPGA_CONF		*((volatile unsigned char  *)(0x0E00000C))
#define FPGA_CMD		*((volatile unsigned short *)(0x0E000010))
#define FPGA_STATUS	    *((volatile unsigned char  *)(0x0E000014))
#define FPGA_WDATAL	    *((volatile unsigned short *)(0x0E000020))
#define FPGA_WDATAH	    *((volatile unsigned short *)(0x0E000022))

#define FPGA_ADDR		*((volatile unsigned long *)(0x0E000000))
#define FPGA_WDATA		*((volatile unsigned long *)(0x0E000020))
#define FPGA_RDATA   	*((volatile unsigned long *)(0x0E000008))

#define CMD_WRITE   1
#define CMD_READ    2
#define CMD_CLEAR   3
#define CMD_Z1IRQ   4
#define CMD_Z2IRQ   5
#define CMD_AWKIRQ  6
#define CMD_DBRIRQ  7
#define CMD_DBTIRQ  8

void lcdwrite(unsigned long addr,unsigned short data)
{
	FPGA_CONF=0x01;                    //16bit write;
	FPGA_ADDR=addr;
	FPGA_WDATAL=data;
	FPGA_CMD=CMD_WRITE;
	while(!(FPGA_STATUS&0x10));
}
 

void LCD_initialization()
{
	int i;
	
	
	lcdwrite(0xFFFE2008,0302);       //Set EMIF CS2 
	
	lcdwrite(0xFFFF0000,0x0);        //Clear MPUIO dir
	lcdwrite(0xFFFF0004,0x2000);     //Set MPUI013 as Reset
	
	//Power ON Reset & Display OFF
	lcdwrite(0x04000000,0x07);       //Set DTE=0,D1-0=00,GON=0
	lcdwrite(0x04000002,0x0);
	
	lcdwrite(0x04000000,0x12);       //Set PON=0
	lcdwrite(0x04000002,0x0);
	
	lcdwrite(0x04000000,0x13);       //Set VCOMG=0
	lcdwrite(0x04000002,0x0);
	
	for(i=0;i<5000;i++);             //wait for 10ms
	
	//Instruction for setting before driving power supply 
	lcdwrite(0x04000000,0x11);       //Set VC2-0=100
	lcdwrite(0x04000002,0x04);
	
	lcdwrite(0x04000000,0x12);       //Set VRH3-0=1000
	lcdwrite(0x04000002,0x08);
	
	lcdwrite(0x04000000,0x13);       //Set VCM4-0=10000,VDV4-0=10000
	lcdwrite(0x04000002,0x1010);
	
	//lcdwrite(0x04000000,0x10);       //Set DK=1
	//lcdwrite(0x04000002,0x04);
	
	//Power supply instruction issue(1)
	lcdwrite(0x04000000,0x11);       //Set DC12-10=100,DC02-00=100
	lcdwrite(0x04000002,0x0444);
	
	lcdwrite(0x04000000,0x10);       //Set AP2-0=100
	lcdwrite(0x04000002,0x44);
	
	lcdwrite(0x04000000,0x12);       //Set PON=1 
	lcdwrite(0x04000002,0x18);
	
	//wait for 40ms
	for(i=0;i<20000;i++);             //500 instuctions consume 1ms
	
	//Power supply instruction issue(2)
    lcdwrite(0x04000000,0x13);       //Set VCOMG=1 
	lcdwrite(0x04000002,0x2010);
	
	lcdwrite(0x04000000,0x10);       //Set BT2-0=100,DK=0
	lcdwrite(0x04000002,0x0440);
	
	
	//Other mode setting instruction issue
	
    //wait for 60ms
    for(i=0;i<30000;i++);             //500 instuctions consume 1ms  
    
   
     //The following setting are Display ON Sequence				
	
	lcdwrite(0x04000000,0x10);       //Power control setting ,set SAP2-0=100
	lcdwrite(0x04000002,0x4440);
	
	lcdwrite(0x04000000,0x07);       //Display on :GON=0,DTE=0,D1-0=01
	lcdwrite(0x04000002,0x01);
	
	for(i=0;i<25000;i++);              //Wait for 3 frames=50ms(FLM=60HZ),500 instuctions consume 1ms
	
	lcdwrite(0x04000000,0x07);       //Display on :GON=1,DTE=0,D1-0=01
	lcdwrite(0x04000002,0x21);
	
	lcdwrite(0x04000000,0x07);       //Display on :GON=1,DTE=0,D1-0=11
	lcdwrite(0x04000002,0x23);
	
	for(i=0;i<25000;i++);             //Wait for 3 frames=50ms(FLM=60HZ),500 instuctions consume 1ms
	
	lcdwrite(0x04000000,0x07);       //Display on :GON=1,DTE=1,D1-0=11
	lcdwrite(0x04000002,0x33);
	
    for(i=0;i<25000;i++);
    
    lcdwrite(0x04000000,0x01);       //Set SS=1
	lcdwrite(0x04000002,0x011D);
	
	lcdwrite(0x04000000,0x03);       //Set BGR=1
	lcdwrite(0x04000002,0x1030);
	
	lcdwrite(0x04000000,0x07);       //Set REV=1
	lcdwrite(0x04000002,0x37);
}

void LCD_Disp(u16 *lcdbuffer)
{
	unsigned short i,j,temp,row;
	u16 *p;

	p=lcdbuffer;
	for(i=0;i<0xDC;i++)
	{
		temp=i;
		row=temp<<8;
		
		lcdwrite(0x04000000,0x21);       //Set the start address
		lcdwrite(0x04000002,row);
	
		lcdwrite(0x04000000,0x22);       //write data to GRAM(96 pixels),from 0x2000-0x2060
		
		FPGA_CONF=0x21;                   //16bit write;
		FPGA_ADDR=0x04000002;
		for(j=0;j<0xB0;j++)
		{
			//lcdwrite(0x04000002,lcdbuffer[i][j]); //the data indicates "red"
		                       
			
			FPGA_WDATAL=*(p++);
		 
			//while(!(FPGA_STATUS&0x10));
		}
	}
}	

void LCD_Dispbmp(u16 *lcdbuffer)
{
	unsigned short i,j,temp,row;
	u16 *p;

	p=lcdbuffer;
	
	for(i=0;i<0xDC;i++)
	{
		temp=i;
		row=temp<<8;
		
		lcdwrite(0x04000000,0x21);       //Set the start address
		lcdwrite(0x04000002,row);
	
		lcdwrite(0x04000000,0x22);       //write data to GRAM(96 pixels),from 0x2000-0x2060
		
		FPGA_CONF=0x21;                   //16bit write;
		FPGA_ADDR=0x04000002;
		for(j=0;j<0xB0;j++)
		{
			//lcdwrite(0x04000002,lcdbuffer[i][j]); //the data indicates "red"
		                       
			
			FPGA_WDATAL=*(p++);
		 
			//while(!(FPGA_STATUS&0x10));
		}
	}
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -