亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lcd_9320.c

?? 當前流行的屏驅動
?? C
字號:
/****************************************************************************
*
* Copyright (c) 2005 , Shanghai Jiao Da HISYS Technology Co.,Ltd.
* All rights reserved.
* 
* ProjectName:  Nightingale
* FileName:       lcd_truly24.c
* Description:    The  LCD Driver of Nightingale
*                     
*
* Current Version:      0.1
* Authors:              Keying Fang
* Date:                 20/11/2006
*
*
* Previous Version:     
* Authors:               
* Date:                      
*
*
******************************************************************************/

//#include "lcd_kgm.h"
#include "dma.h"
#include "timer.h"
#include "gpio.h"
#include "pwm.h"
/**************************************************************************************/
/************************      Global Varible         *********************************/
/**************************************************************************************/
static INT32 BACK_LIGHT_VALUE = 0xCCCC;
static INT32 FLAG_LCD = 0;

static TEIM_Reg* regEMI = EIM_Reg_Address;

 UINT8 chip_id=0x89;
/**************************************************************************************/
/************************      Internal function      *********************************/
/**************************************************************************************/
/*----  set EMI  ----*/
void InitCS0()
{
	//CS0 control register configuration// 
	regEMI->CS0U = 0x0000d200;
	regEMI->CS0L = 0x28280D01;  
}

void  Delay(unsigned int t)
{
	unsigned int n,m;
	for(n=0;n<t;n++)
	for(m=0;m<1000;m++);
}

void WriteCommand( UINT16 command)
{	 
	GPIO_SetOutput(LCD_RS_PORT, 0, 1<<LCD_RS_BIT);
	(*EXT_CHIP_CMD_ADDR) = command;
	
}

void WriteData( UINT16 command)
{	
	GPIO_SetOutput(LCD_RS_PORT, 1<<LCD_RS_BIT, 0);
	
	(*EXT_CHIP_DATA_ADDR) = command;		
}

/*----  set LCD reg  ----*/
INT32 WriteReg( UINT16 command, UINT16 value)
{	
	
	GPIO_SetOutput(LCD_RS_PORT, 0, 1<<LCD_RS_BIT);
	
	(*EXT_CHIP_CMD_ADDR) = command;
	
		
	GPIO_SetOutput(LCD_RS_PORT, 1<<LCD_RS_BIT, 0);
	
	(*EXT_CHIP_DATA_ADDR) = value;
	
	return 0;
}
/*----  read LCD reg  ----*/
void ReadCommand( UINT16 *command)
{	

//	GPIO_SetOutput(GPIO_PORTB, BIT3, 0);//set 1 for PB3(RS =1) in order to read cmd
	GPIO_SetOutput(LCD_RS_PORT, 1<<LCD_RS_BIT, 0);

	*command = (*EXT_CHIP_DATA_ADDR);		
}

void SetLCDWindows(UINT16 xstart,UINT16 xend,UINT16 ystart,UINT16 yend )
{	
	// 將counter init...
	WriteReg(0x0020,xstart);   	//x start command	   
	WriteReg(0x0021,ystart);   	//y start command
	
	//  確定范圍
	WriteReg(0x0050,xstart);   	//x	
	WriteReg(0x0051,xend);   	//x	    
	WriteReg(0x0052,ystart);   	//y
	WriteReg(0x0053,yend);   	//y   

	WriteCommand(0x0022);   	//yend	
}

/******* enable_back_light ***********/ 
void pwm_enable_backlight(void)
{	
	PWMCTL pwmctl;
	
	/*config PA01 for LCD blacklight*/
	GPIO_SetPeriA(LCD_BACKLIGHT_PORT,1<<LCD_BACKLIGHT_BIT,1);
	
	pwmctl.value_period = 0xFFFE;
	pwmctl.value_sample = BACK_LIGHT_VALUE;
		
	PWM_Start(&pwmctl);

}

/********** modify back light *********/
void pwm_set_backlight(UINT16 value)
{
	PWMCTL pwmctl;
	pwmctl.value_sample = value;
	PWM_Ioctl(SET_PWM_SAMPLE, &pwmctl);
}


/*---- LCD Initial ----*/
void LcdInit(void)
{
	UINT16 a;
	
	int i;
	for(i=0; i<0xFF; i++);//delay 	
	
	/*open back light*/
//	pwm_enable_backlight();

	GPIO_SetOutput(LCD_RESET_PORT, 1<<LCD_RESET_BIT, 0);//1	
	Delay(50);	                       

	//************* Start Initial Sequence ********//
	WriteReg(0x0000, 0x0001); 	   	// Start internal OSC.
	Delay(50);	                       
	ReadCommand(&a);	                 
	WriteReg(0x0001, 0x0100);	   	// set SS and SM bit
	WriteReg(0x0002, 0x0700);	   	// set 1 line inversion
	WriteReg(0x0003, 0x1028);	   	// set GRAM write direction and BGR=1.
	WriteReg(0x0004, 0x0000);	   	// Resize register
	WriteReg(0x0007, 0x0000); //chg	   	// Resize register	
	WriteReg(0x0008, 0x0202);	   	// set the back porch and front porch
	WriteReg(0x0009, 0x0100); //chg	   	// set non-display area refresh cycle ISC[3:0]
	WriteReg(0x000A, 0x0008); //chg	   	// FMARK function
	WriteReg(0x000C, 0x0000);         	// RGB interface setting
	WriteReg(0x000D, 0x0000); //chg	   	// Frame marker Position
	WriteReg(0x000F, 0x0000);         	// RGB interface polarity
	//*************Power On sequence ***************//
	WriteReg(0x0010, 0x0000);         	// SAP, BT[3:0], AP, DSTB, SLP, STB
	WriteReg(0x0011, 0x0007);         	// DC1[2:0], DC0[2:0], VC[2:0]
	WriteReg(0x0012, 0x0000);         	// VREG1OUT voltage
	WriteReg(0x0013, 0x0000);         	// VDV[4:0] for VCOM amplitude
	Delay(200);                           // Dis-charge capacitor power voltage
	WriteReg(0x0010, 0x1090);   //17b0      	// SAP, BT[3:0], AP, DSTB, SLP, STB
	WriteReg(0x0011, 0x0010);         	// DC1[2:0], DC0[2:0], VC[2:0]
	Delay(50);			        // Delay 50ms
	WriteReg(0x0012, 0x0111);  //13a       	// VREG1OUT voltage
	Delay(50);			        // Delay 50ms
	WriteReg(0x0013, 0x1800);   //1a00     	// VDV[4:0] for VCOM amplitude
	WriteReg(0x0029, 0x000C);         	// VCM[4:0] for VCOMH
	Delay(50);
	WriteReg(0x0020, 0x0000);         	// GRAM horizontal Address
	WriteReg(0x0021, 0x0000);         	// GRAM Vertical Address
	// ---- Adjust the Gamma  Curve ------- //
	WriteReg(0x0030, 0x0000);
	WriteReg(0x0031, 0x0505);
	WriteReg(0x0032, 0x0004);
	WriteReg(0x0035, 0x0006);
	WriteReg(0x0036, 0x0707);
	WriteReg(0x0037, 0x0105);
	WriteReg(0x0038, 0x0002);
	WriteReg(0x0039, 0x0707);
	WriteReg(0x003C, 0x0704);
	WriteReg(0x003D, 0x0807);
	//------------------ Set GRAM area -------------//
	WriteReg(0x0050, 0x0000);	    	// Horizontal GRAM Start Address
	WriteReg(0x0051, 0x00EF);	    	// Horizontal GRAM End Address
	WriteReg(0x0052, 0x0000);	    	// Vertical GRAM Start Address
	WriteReg(0x0053, 0x013F);	    	// Vertical GRAM Start Address
	
	WriteReg(0x0060, 0x2700);	    	// Gate Scan Line
	WriteReg(0x0061, 0x0001);	    	// NDL,VLE, REV
	WriteReg(0x006A, 0x0000);	    	// set scrolling line
	//-------------- Partial Display Control -------//
	WriteReg(0x0080, 0x0000);
	WriteReg(0x0081, 0x0000);
	WriteReg(0x0082, 0x0000);
	WriteReg(0x0083, 0x0000);
	WriteReg(0x0084, 0x0000);
	WriteReg(0x0085, 0x0000);
	//-------------- Panel Control -----------------//
	WriteReg(0x0090, 0x0010);
	WriteReg(0x0092, 0x0000);
	WriteReg(0x0093, 0x0003);
	WriteReg(0x0095, 0x0110);
	WriteReg(0x0097, 0x0000);
	WriteReg(0x0098, 0x0000);
	WriteReg(0x0007, 0x0173);	    	// 65K color and display ON
}

/*---- LCD final ----*/ 
INT32 LcdFina()
{
	// Step1: nPWDN = 0

	// Step2: VDD2.8 Power OFF
	//config PA1 for LED_ON  
	GPIO_SetOutput(GPIO_PORTA, 0, BIT1); 
	

	return 0;
}

/**************************************************************************************/
/************************      LCD APP function      **********************************/
/**************************************************************************************/ 
//open the LCD      
INT32 lcd_Open(BOOL enableIrq) //need modify
{
	if(FLAG_LCD == 0)
	{
		DMACTL dmactl;
		volatile UINT32 *pBUCR4 = (volatile UINT32 *)0x00209198;
		dmactl.channel = CHANNEL4_LCD_TX;
		dmactl.priority = PRIORITY;
	    if(enableIrq == TRUE)
		{
			dmactl.isintenable = INTENABLE;
		}
		else
		{
			dmactl.isintenable = INTDISABLE;
		}

		dmactl.ischptr = 0;
		dmactl.mdir = INCREASE;
		dmactl.srcmode = LINEAR;
		dmactl.dstmode = LINEAR;
		dmactl.srcsize = D32;
		dmactl.dstsize = D32;
		dmactl.burstlen = 32;  //change by huangwei
		dmactl.reqsrc = REQ_EXDMA;	
		*pBUCR4 = 120;

	 	InitCS0();
	 	LcdInit();
	 	Delay(600);   //313 9320屏驅動所加delay	
	 	DMA_Open();
	 	DMAChannel_Open(&dmactl);  
	}

	FLAG_LCD++;	  

	return 0;   
}




/************************************************************
Parameter :	topLeftX : the coordinate of x 
						 
			topLeftY : the coordinate of y
			
			width: the width of picture window
			height: the height of picture window
			
			*picBuf: the point of picture
			
	note:  topLeftX+width<=320
		   topLeftY+height<=240

************************************************************/

INT32 lcd_Write(INT16 topLeftX, INT16 topLeftY, INT16 width, INT16 height, UINT16 *picBuf)
{
	int i;
	int lcdInterface;
	int len;
	UINT16 * temp_picBuf;
//	UINT16 tmp0,tmp1,tmp2,tmp3;
	DMACTL dmactl;

 		  
	regEMI->CS0U = 0x00000800;//0x00000800;0x00000600
	regEMI->CS0L = 0x11110D01;//0x11110D01; 0x44441d01 	
	SetLCDWindows(topLeftY,topLeftY+height-1,topLeftX,topLeftX+width-1);	
	

	
	GPIO_SetOutput(LCD_RS_PORT, 1<<LCD_RS_BIT, 0);
	lcdInterface = (int)0x10000000;

	temp_picBuf = picBuf + width * (height-1);
	
	for(i=0;i<width;i++)
	{
		(*EXT_CHIP_DATA_ADDR) = 0;
	}
		

#if 0
	len = width ;
	i = len;// - len%16;

	//zzy add on 20060605當顯示的行數(shù)為0時程序會執(zhí)行相當多次
	if(i<=0)
	{
		return 0;
	}
		 
	temp_picBuf = picBuf + width * (height-1);
	
	__asm
	{
		loop_lwrite:
		  	ldrh tmp0, [temp_picBuf], #2
			ldrh tmp1, [temp_picBuf], #2
			strh tmp0, [lcdInterface, #4]
			ldrh tmp2, [temp_picBuf], #2
			strh tmp1, [lcdInterface, #4]
			ldrh tmp3, [temp_picBuf], #2	
			strh tmp2, [lcdInterface, #4]
			  	
			ldrh tmp0, [temp_picBuf], #2
			strh tmp3, [lcdInterface, #4]
			ldrh tmp1, [temp_picBuf], #2
			strh tmp0, [lcdInterface, #4]
			ldrh tmp2, [temp_picBuf], #2
			strh tmp1, [lcdInterface, #4]
			ldrh tmp3, [temp_picBuf], #2
			strh tmp2, [lcdInterface, #4]
			  	
			ldrh tmp0, [temp_picBuf], #2
			strh tmp3, [lcdInterface, #4]
			ldrh tmp1, [temp_picBuf], #2
			strh tmp0, [lcdInterface, #4]
			ldrh tmp2, [temp_picBuf], #2
			strh tmp1, [lcdInterface, #4]
			ldrh tmp3, [temp_picBuf], #2
			strh tmp2, [lcdInterface, #4]
			  	
			ldrh tmp0, [temp_picBuf], #2
			strh tmp3, [lcdInterface, #4]
			ldrh tmp1, [temp_picBuf], #2
			strh tmp0, [lcdInterface, #4]
			ldrh tmp2, [temp_picBuf], #2
			strh tmp1, [lcdInterface, #4]
			ldrh tmp3, [temp_picBuf], #2
			strh tmp2, [lcdInterface, #4]
			  	
			subs i, i, 16
			strh tmp3, [lcdInterface, #4]
			bne	loop_lwrite
	}
#endif		  
		  
		  		  
	len=width*(height-1)*2;
	dmactl.channel = CHANNEL4_LCD_TX;
	dmactl.srcaddr = (UINT32)picBuf;
	dmactl.dstaddr = (UINT32)EXT_CHIP_DATA_ADDR;
	dmactl.len= len;
		  
	if(len <= LCD_BUFFER_MAXSIZE)
	{
		MMU_CleanDCacheMVA((UINT32)picBuf,(UINT32)(picBuf+76800-320));
		if(DMA_Start(&dmactl))
			return 1;
	}
	return 0;

}


INT32 LCD_Clean(VOID)
{
	INT32 i;
	UINT16 Clean_Buf[76800];
 	for(i=0;i<76800;i++)
 	{
  		Clean_Buf[i] = 0x0000;
 	}
	LCD_Write(0,0,320,240,Clean_Buf);
	return 0;
}

/************************************************************
Parameter :	topLeftX : the coordinate of x 
						 
			topLeftY : the coordinate of y
			
			width: the width of window you want to clear
			height: the height of window you want to clear
			
			ColorValue: the color you want to set in the claer window
 note:  topLeftX+width<=320
		topLeftY+height<=240
************************************************************/
INT32 WindowScreenClear(INT16 topLeftX, INT16 topLeftY, INT16 width, INT16 height, UINT16 ColorValue)
{
	int i,j;
	int len=width*height;
	
    /* CS1 repair*/
	regEMI->CS0U = 0x00000500;
	regEMI->CS0L = 0x44442D01;
	
    SetLCDWindows(topLeftY,topLeftY+height-1,topLeftX,topLeftX+width-1);
	
	
	GPIO_SetOutput(LCD_RS_PORT, 1<<LCD_RS_BIT, 0);

	
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{
			(*EXT_CHIP_DATA_ADDR) = ColorValue;
		}
	}
	
	return len;
	
}


/****************************************************************
Parameter:     None
****************************************************************/
INT32 LCD_Close(void)
{	
	FLAG_LCD--;
	if(FLAG_LCD == 0)
	{
		DMACTL dmactl;
		dmactl.channel = CHANNEL4_LCD_TX;
		WindowScreenClear(0, 0, 320, 240, 0xffff);		
 		LcdFina();
 		DMA_Stop(&dmactl);
 		DMAChannel_Close(&dmactl);
 	}
	return 0; 
}


/*********** lcd IO control ******************/

INT32 LCD_Ioctl(INT32 cmd, INT32 para, void *buf)
{	
	switch(cmd)
	{
		case GET_LCD_INFO:
		{
			LCD_INFO *lcd_info = (LCD_INFO *)buf;
			lcd_info->LCD_WIDTH = LCD_PHY_PIXEL_CX;
			lcd_info->LCD_HEIGHT = LCD_PHY_PIXEL_CY;
			lcd_info->LCD_BITS_PER_PIXEL = LCD_PIXEL_BITS;
			lcd_info->LCD_PIXEL_PALETTE = LCD_PIXEL_RGB;
			break;
		}
		
		case LCD_BACKLIGHT_DOWN:
		{
			if(BACK_LIGHT_VALUE <= 0)
			{
				BACK_LIGHT_VALUE = 0;
			}
			else
			{
				BACK_LIGHT_VALUE -= BACK_LIGHT_UNIT;	
			}
			pwm_set_backlight(BACK_LIGHT_VALUE);
			break;
		}
		
		case LCD_BACKLIGHT_UP:
		{
			if(BACK_LIGHT_VALUE >= BACK_LIGHT_MAX_VALUE)
				BACK_LIGHT_VALUE = BACK_LIGHT_MAX_VALUE;
			else
				BACK_LIGHT_VALUE += BACK_LIGHT_UNIT;
					
			pwm_set_backlight(BACK_LIGHT_VALUE);
			break;
		
		}
		
		case LCD_BACKLIGHT_ENABLE:
		{
            pwm_set_backlight(BACK_LIGHT_VALUE);
			break;
		}
		
		case LCD_BACKLIGHT_DISABLE:
		{
			pwm_set_backlight(0);
			break;
		}
		
		case CLEAN_SCREEN:
		{
			LCD_Clean();
			break;
		}
		
		default:
			return -1;
	}


  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品视频第一区| 国产成人自拍网| 国产成人av一区二区| 欧美在线综合视频| 国产女人18水真多18精品一级做| 婷婷综合在线观看| 色综合 综合色| 国产欧美日韩视频一区二区| 日本sm残虐另类| 欧美三级电影网站| 亚洲精品国产一区二区三区四区在线 | 99精品桃花视频在线观看| 精品日韩欧美在线| 国产成人免费视频网站 | 免费在线观看一区| 欧美色欧美亚洲另类二区| 国产精品久久久久aaaa樱花 | 日韩精品色哟哟| 欧洲国内综合视频| 一区二区视频在线| 99久久免费国产| 国产精品午夜春色av| 九九**精品视频免费播放| 91精品国产综合久久精品| 亚洲国产日韩a在线播放| 一本到高清视频免费精品| 日韩理论在线观看| 一本久道中文字幕精品亚洲嫩| 国产精品青草久久| 91小视频在线观看| 一区二区三区四区视频精品免费 | 亚洲色图清纯唯美| 色婷婷综合久久久中文一区二区| 专区另类欧美日韩| 欧洲色大大久久| 五月婷婷欧美视频| 欧美一级黄色片| 久久精品国产99| 精品国产凹凸成av人导航| 国产一区二区免费在线| 国产拍揄自揄精品视频麻豆| 国产高清无密码一区二区三区| 中文字幕巨乱亚洲| 一本高清dvd不卡在线观看| 亚洲自拍偷拍网站| 欧美日韩成人在线| 蜜桃av噜噜一区| 久久久久久久久99精品| 国产河南妇女毛片精品久久久| 亚洲国产高清不卡| 欧美制服丝袜第一页| 免费不卡在线观看| 久久久亚洲午夜电影| 97se狠狠狠综合亚洲狠狠| 亚洲一区二区3| 日韩精品一区二区三区在线观看 | 亚洲另类色综合网站| 欧美日韩一区高清| 国内一区二区视频| 一区免费观看视频| 在线不卡一区二区| 国产盗摄视频一区二区三区| 亚洲色图一区二区三区| 91精品国产免费久久综合| 国产精品一卡二| 艳妇臀荡乳欲伦亚洲一区| 欧美一区二区三区小说| 国产 日韩 欧美大片| 亚洲国产wwwccc36天堂| 国产性天天综合网| 欧美日韩在线电影| 国产·精品毛片| 亚洲第一福利一区| 国产欧美日韩不卡| 欧美一卡二卡三卡| 在线一区二区三区做爰视频网站| 久久国产精品99久久久久久老狼| 国产精品理论在线观看| 宅男在线国产精品| 91色porny在线视频| 精品一区二区三区久久| 一区二区三区在线视频观看58| 亚洲欧洲制服丝袜| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 美女精品自拍一二三四| 亚洲精品网站在线观看| www国产精品av| 欧美美女bb生活片| 欧美午夜一区二区| 成人av网站免费观看| 极品少妇一区二区| 免费成人av资源网| 日韩av一级片| 亚洲午夜羞羞片| 亚洲日本va在线观看| 国产日韩精品一区二区三区| 日韩一级免费观看| 欧美老女人第四色| 欧美日韩三级一区| 欧美色老头old∨ideo| 色综合天天综合色综合av| 国产成人精品亚洲777人妖| 亚洲国产成人高清精品| 亚洲欧美另类久久久精品| 欧美极品美女视频| 久久久久久麻豆| 久久综合色8888| 欧美va亚洲va在线观看蝴蝶网| 欧美精品久久99| 欧美电影一区二区三区| 欧美日韩一级片在线观看| 欧美中文字幕一区二区三区亚洲| 色综合一个色综合| 在线视频欧美精品| 欧美日韩一区视频| 91麻豆精品国产91久久久资源速度| 欧美三级韩国三级日本一级| 欧美日韩国产在线观看| 欧美日韩三级视频| 日韩午夜在线观看| 精品成a人在线观看| 久久蜜桃av一区二区天堂| 国产亚洲视频系列| 国产精品久久久99| 亚洲欧美日韩国产成人精品影院| 亚洲三级电影全部在线观看高清| 亚洲精选视频在线| 亚洲va欧美va人人爽| 天天色 色综合| 国产乱一区二区| 成人一级黄色片| 91老师国产黑色丝袜在线| 欧洲国内综合视频| 日韩一区二区三区四区五区六区| 日韩欧美成人午夜| 欧美激情自拍偷拍| 国产超碰在线一区| 亚洲成av人片| 婷婷国产v国产偷v亚洲高清| 午夜一区二区三区视频| 日韩av一二三| 久久99久久精品| 99久久精品费精品国产一区二区| 在线看国产日韩| 精品国产第一区二区三区观看体验 | 国产成人综合网站| 色综合久久88色综合天天免费| 欧美日韩国产综合一区二区三区| 日韩欧美中文一区二区| 国产精品麻豆网站| 日本视频在线一区| 成人免费看黄yyy456| 欧美日韩免费高清一区色橹橹 | 蜜臀av一区二区在线免费观看| 国产欧美精品一区二区色综合| 亚洲欧美偷拍另类a∨色屁股| 亚洲视频狠狠干| 日韩电影在线一区| 高清免费成人av| 欧美精品丝袜久久久中文字幕| 久久婷婷一区二区三区| 亚洲午夜视频在线| 成人午夜免费电影| 日韩欧美亚洲一区二区| 最近中文字幕一区二区三区| 美女网站色91| 欧美自拍偷拍午夜视频| 国产三级一区二区三区| 日韩高清中文字幕一区| 91亚洲精品乱码久久久久久蜜桃| 精品久久久三级丝袜| 亚洲亚洲人成综合网络| www.久久精品| 国产视频亚洲色图| 奇米色777欧美一区二区| 日本韩国视频一区二区| 亚洲国产精品99久久久久久久久| 奇米影视一区二区三区| 欧美在线观看一区| 日韩美女视频一区| 亚洲欧美电影一区二区| 91久久精品网| 久久亚洲私人国产精品va媚药| 一区二区三区欧美久久| 成人视屏免费看| 久久婷婷久久一区二区三区| 日本在线观看不卡视频| 欧美精品粉嫩高潮一区二区| 亚洲女与黑人做爰| 99视频有精品| 国产精品电影一区二区三区| 99久久精品国产毛片| 欧美国产精品劲爆| 国产宾馆实践打屁股91| 久久夜色精品一区| 国产一区二区导航在线播放| 日韩美女一区二区三区四区| 日本aⅴ亚洲精品中文乱码| 欧美久久久久中文字幕| 五月天国产精品|