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

📄 lcd.c

📁 2440 CPU 的boot loader 引导代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		LCD_SPI_Write(0x0B,0x33E0);
		LCD_SPI_Write(0x76,0x0000);
		LCD_SPI_Write(0x07,0x0103);
	}
	else{	
    //Power setting sequence
    LCD_SPI_Write(0x09,0x0000);
    DM_WaitMs(4*15); //delay 10ms
    LCD_SPI_Write(0x09,0x4000);
    LCD_SPI_Write(0x0A,0x2000);//0x2000
    
    LCD_SPI_Write(0x09,0x4055);
    DM_WaitMs(4*60); //delay 50ms
    LCD_SPI_Write(0x01,0x409D);//409d:SYNC mode ; 609d:DE mode ;401d:SYNC mode & Rev
    LCD_SPI_Write(0x02,0x0204);//0204:BGR ; 0200:RGB ; 0208:GRB ; 020c:RBG
    LCD_SPI_Write(0x03,0x0100);//old:2100;new:0100
    LCD_SPI_Write(0x04,0x3000);
    LCD_SPI_Write(0x05,0x4003);//0x4003
    LCD_SPI_Write(0x06,0x000A);//VBP 0x000A
    LCD_SPI_Write(0x07,0x0021);//HBP 0x0021
    LCD_SPI_Write(0x08,0x0C00);
    //GAMMA CONTROL
    LCD_SPI_Write(0x10,0x0103);//0x0103
    LCD_SPI_Write(0x11,0x0301);//0x0301
    
//Jason_00_021_20070314    SPI_Write(0x12,0x1F0F);//0x1F0F
//Jason_00_021_20070314    SPI_Write(0x13,0x1F0F);//0x1F0F
    LCD_SPI_Write(0x12,0x1A0F);//0x1F0F//Jason_00_021_20070314
    LCD_SPI_Write(0x13,0x1A0F);//0x1F0F//Jason_00_021_20070314
    
    LCD_SPI_Write(0x14,0x0707);//0x0707
//Jason_00_021_20070314    SPI_Write(0x15,0x0307);//0x0307
	LCD_SPI_Write(0x15,0x0007);//0x0307//Jason_00_021_20070314
	
    LCD_SPI_Write(0x16,0x0707);//0x0707
    LCD_SPI_Write(0x17,0x0000);//0x0000
    LCD_SPI_Write(0x18,0x0004);//0x0004
    LCD_SPI_Write(0x19,0x0000);//0x0000

    DM_WaitMs(4*60); //wait more than 2 Frames
    LCD_SPI_Write(0x09,0x4A55);
    LCD_SPI_Write(0x05,0x5003);//0x5003
    Uart_Printf("LCD_Power on spi end\r\n");
}
////////////////handy0718 end
}
static
void initDisplay(void)
{
	//unsigned char*        gFrameBuffer;
	//gFrameBuffer = (unsigned char*)FRAMEBUF_VBASE;
///handy 0718 read adc	 start
	int k=0;
	DWORD count = 0;
	
	for (k=0; k<10; k++){
			count += ReadADC();
		}
	count = count / k;
	if (count > 100){
		Panel_Used = Onechip_SamsungPanel; //new panel
		DM_SerialPrintf("Panel_Used ==Onechip_SamsungPanel");
		}
	else{
		Panel_Used = Twochip_SamsungPanel;
		DM_SerialPrintf("Panel_Used ==Twochip_SamsungPanel");
		}
	
///handy 0718 read adc	 end
	// LCD port initialize.

	// Disable Pull Up register
	GpioPullupEnable(GPIO_LCD_PCLK, FALSE);
	GpioPullupEnable(GPIO_LCD_LCLK, FALSE);
	GpioPullupEnable(GPIO_LCD_FCLK, FALSE);
	//GpioPullupEnable(GPIO_LCD_OE, FALSE); handy0117

	GpioPullupEnable(GPIO_LCD_B0, FALSE);
	GpioPullupEnable(GPIO_LCD_B1, FALSE);
	GpioPullupEnable(GPIO_LCD_B2, FALSE);
	GpioPullupEnable(GPIO_LCD_B3, FALSE);
	GpioPullupEnable(GPIO_LCD_B4, FALSE);
    GpioPullupEnable(GPIO_LCD_B5, FALSE);
	GpioPullupEnable(GPIO_LCD_B6, FALSE);
	GpioPullupEnable(GPIO_LCD_B7, FALSE);

	GpioPullupEnable(GPIO_LCD_G0, FALSE);
	GpioPullupEnable(GPIO_LCD_G1, FALSE);
	GpioPullupEnable(GPIO_LCD_G2, FALSE);
	GpioPullupEnable(GPIO_LCD_G3, FALSE);
	GpioPullupEnable(GPIO_LCD_G4, FALSE);
	GpioPullupEnable(GPIO_LCD_G5, FALSE);
	GpioPullupEnable(GPIO_LCD_G6, FALSE);
	GpioPullupEnable(GPIO_LCD_G7, FALSE);

	GpioPullupEnable(GPIO_LCD_R0, FALSE);
	GpioPullupEnable(GPIO_LCD_R1, FALSE);
	GpioPullupEnable(GPIO_LCD_R2, FALSE);
	GpioPullupEnable(GPIO_LCD_R3, FALSE);
	GpioPullupEnable(GPIO_LCD_R4, FALSE);
	GpioPullupEnable(GPIO_LCD_R5, FALSE);
	GpioPullupEnable(GPIO_LCD_R6, FALSE);
	GpioPullupEnable(GPIO_LCD_R7, FALSE);

	// Set to output
	GpioSetUsage(GPIO_LCD_PCLK, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_LCLK, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_FCLK, GPIO_ALTERNATE);
//	GpioSetUsage(GPIO_LCD_OE, GPIO_ALTERNATE); handy0117

	GpioSetUsage(GPIO_LCD_B0, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_B1, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_B2, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_B3, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_B4, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_B5, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_B6, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_B7, GPIO_ALTERNATE);
	
	GpioSetUsage(GPIO_LCD_G0, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_G1, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_G2, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_G3, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_G4, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_G5, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_G6, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_G7, GPIO_ALTERNATE);
	
	GpioSetUsage(GPIO_LCD_R0, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_R1, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_R2, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_R3, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_R4, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_R5, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_R6, GPIO_ALTERNATE);
	GpioSetUsage(GPIO_LCD_R7, GPIO_ALTERNATE);
//disable  handy 0429 start /////////////////////////////
	GpioSetLevel(GPIO_LCD_RESET, GPIO_LOW);
	GpioSetLevel(GPIO_LCD_PWR_ON,GPIO_LOW); 
	GpioSetLevel(GPIO_LCD_ON,    GPIO_LOW);
	GpioSetLevel(GPIO_LCD_VGH_ON,GPIO_LOW);
	GpioSetLevel(GPIO_LCD_VGL_ON,GPIO_LOW);

	
	GpioPullupEnable(GPIO_LCD_RESET, FALSE);
	GpioPullupEnable(GPIO_LCD_PWR_ON, FALSE);
	GpioPullupEnable(GPIO_LCD_VGH_ON, FALSE);
	GpioPullupEnable(GPIO_LCD_AVDD_ON, FALSE);
	GpioPullupEnable(GPIO_LCD_ON, FALSE);
	GpioPullupEnable(GPIO_LCD_VGL_ON, FALSE);
	GpioPullupEnable(GPIO_BL_SET, FALSE);
	GpioPullupEnable(GPIO_BL_EN, FALSE);	

	GpioSetUsage(GPIO_LCD_RESET, GPIO_OUTPUT);
	GpioSetUsage(GPIO_LCD_PWR_ON, GPIO_OUTPUT);
	GpioSetUsage(GPIO_LCD_ON, GPIO_OUTPUT);
	GpioSetUsage(GPIO_LCD_VGH_ON, GPIO_OUTPUT);
	GpioSetUsage(GPIO_LCD_VGL_ON, GPIO_OUTPUT);
	
    DM_WaitMs(100*4);

////////////	power on start--------------------------
if(Panel_Used == Twochip_SamsungPanel){	//old panel
    GpioSetLevel(GPIO_LCD_RESET, GPIO_HIGH);
    }
   	
	GpioSetLevel(GPIO_LCD_PWR_ON, GPIO_LOW);
	
	DM_WaitMs(5*4);  
   GpioSetLevel(GPIO_LCD_ON, GPIO_HIGH);
	DM_WaitMs(4*1);  

	GpioSetLevel(GPIO_LCD_VGL_ON, GPIO_HIGH);
	DM_WaitMs(4*1);  
	GpioSetLevel(GPIO_LCD_VGH_ON, GPIO_HIGH);
	DM_WaitMs(4*3);  
	
if(Panel_Used == Twochip_SamsungPanel){	//old panel
	GpioSetLevel(GPIO_LCD_RESET, GPIO_LOW);
	DM_WaitMs(4*1);  // 1ms	
	GpioSetLevel(GPIO_LCD_RESET, GPIO_HIGH);
	DM_WaitMs(4*20);  // 
    }

	// Backlight
	GpioSetLevel(GPIO_BL_EN, GPIO_LOW);
/////////Backlight config
	//prescaler value=255+1
	rTCFG0 &= ~(0xFF);//(SYS_TIMER_PRESCALER);
	rTCFG0 |= (24);
	//MUX0 is 1/2, divider value is 2
	rTCFG1 &= ~(0x0f);
	//PWM 5L brightness output
	rTCNTB0 = 1000;//(S2440PCLK / (SYS_TIMER_PRESCALER+1) / SYS_TIMER_DIVIDER)/1000;//0x02FF;			///////////////////
	rTCMPB0 = 700;//(S2440PCLK / (SYS_TIMER_PRESCALER+1) / SYS_TIMER_DIVIDER) / 1000 * 4 / 10;//0x01A0;			//////////////////
	//config TCON for PWM timer0(update,reload,enable)
	rTCON &= ~0x0F;				//clear
	rTCON |= 0x02;
	rTCON &= ~0x0F;				//clear
	rTCON |= 0x09;

if(Panel_Used == Onechip_SamsungPanel){	
    rLCDCON1 = (11<< 8) | (MVAL_USED << 7) | (3 << 5) | (12 << 1) | 0;
	// TFT LCD panel,16bpp TFT,ENVID=off
	rLCDCON2 = (VBPD << 24) | (LINEVAL_TFT << 14) | (VFPD << 6) | (VSPW);
	rLCDCON3 = (HBPD << 19) | (HOZVAL_TFT << 8) | (HFPD);
	rLCDCON4 = (MVAL << 8) | (HSPW);
	rLCDCON5 = 	(0                 << 12) |   /* BPP24BL       : LSB valid                        */
	         	(1                 << 11) |   /* FRM565 MODE   : 5:6:5 Format                     */
	       	 	(0                 << 10) |   /* INVVCLK       : VCLK rising Edge                 */
	        	(1                 <<  9) |   /* INVVLINE      : Inverted                 */
	         	(1                 <<  8) |   /* INVVFRAME     : Inverted                 */
	         	(0                 <<  7) |   /* INVVD         : Normal                           */
	         	(0                 <<  6) |   /* INVVDEN       : Inverted                         */
	         	(0                 <<  5) |   /* INVPWREN      : Normal                           */
             	(0                 <<  4) |   /* INVENDLINE    : Normal                           */
             	(0                 <<  3) |   /* PWREN         : Disable PWREN                    */
             	(0                 <<  2) |   /* ENLEND        : Disable LEND signal              */
             	(0                 <<  1) |   /* BSWP          : Swap Disable                     */
             	(1                 <<  0) ;   /* HWSWP         : Swap Enable                      */
    
	rLCDSADDR1 = ((FRAMEBUF_PBASE >> 22) << 21) | M5D(FRAMEBUF_PBASE >> 1);
	rLCDSADDR2 =
		M5D((FRAMEBUF_PBASE + (LCD_XSIZE_TFT * LCD_YSIZE_TFT * 2)) >> 1);
	rLCDSADDR3 =
		(((LCD_XSIZE_TFT -
		   LCD_XSIZE_TFT) / 1) << 11) | (LCD_XSIZE_TFT / 1);

	rTPAL = 0x0;
	}
	
else{ //onchip new panel
	//LCD controller parameter
	rLCDCON1 = (CLKVAL<< 8) | (MVAL_USED << 7) | (3 << 5) | (12 << 1) | 0;
	// TFT LCD panel,16bpp TFT,ENVID=off
	rLCDCON2 = (VBPD << 24) | (LINEVAL_TFT << 14) | (VFPD << 6) | (VSPW);
	rLCDCON3 = (HBPD << 19) | (HOZVAL_TFT << 8) | (HFPD);
	rLCDCON4 = (MVAL << 8) | (HSPW);
	rLCDCON5 = 	(0                 << 12) |   /* BPP24BL       : LSB valid                        */
	         	(1                 << 11) |   /* FRM565 MODE   : 5:6:5 Format                     */
	       	 	(1                 << 10) |   /* INVVCLK       : VCLK rising Edge                 */
	        	(1                 <<  9) |   /* INVVLINE      : Inverted                 */
	         	(1                 <<  8) |   /* INVVFRAME     : Inverted                 */
	         	(0                 <<  7) |   /* INVVD         : Normal                           */
	         	(0                 <<  6) |   /* INVVDEN       : Inverted                         */
	         	(0                 <<  5) |   /* INVPWREN      : Normal                           */
             	(0                 <<  4) |   /* INVENDLINE    : Normal                           */
             	(0                 <<  3) |   /* PWREN         : Disable PWREN                    */
             	(0                 <<  2) |   /* ENLEND        : Disable LEND signal              */
             	(0                 <<  1) |   /* BSWP          : Swap Disable                     */
             	(1                 <<  0) ;   /* HWSWP         : Swap Enable                      */
    
	rLCDSADDR1 = ((FRAMEBUF_PBASE >> 22) << 21) | M5D(FRAMEBUF_PBASE >> 1);
	rLCDSADDR2 =
		M5D((FRAMEBUF_PBASE + (LCD_XSIZE_TFT * LCD_YSIZE_TFT * 2)) >> 1);
	rLCDSADDR3 =
		(((LCD_XSIZE_TFT -
		   LCD_XSIZE_TFT) / 1) << 11) | (LCD_XSIZE_TFT / 1);

	rTPAL = 0x0;
	}

//handy 0718 start	
   rGPCUP     |= 0xFFFF0FFF;
	rGPCCON    &= ~0xFFFF03FC; 
	rGPCCON    |= 0xAA9502A8;
	rGPCDAT    = rGPCDAT | ((1<<8)|(1<<9)|(1<<10));

	rGPDUP     = 0xFFFFFFFF;
	rGPDCON    &= ~0xFFFFFFFF; 
	rGPDCON    |= 0xAA95AAA5; 
	rGPDDAT 	= rGPDDAT |((1)|(1<<1)|(1<<8)|(1<<9)|(1<<10));
//handy 0718 end	

	rLCDCON1 |= 1;				// ENVID=ON   
 // ernie070227, add delay to prevent the bottom line problem
	DM_WaitMs(20*4);  // 1ms
	//SPI initial panel	   
	LCD_PowerOnSPI(); 
	
	DM_WaitMs(4*80);
	
	GpioSetLevel(GPIO_BL_EN, GPIO_HIGH);

}


static
void lcdHWSetup(LcdContextT * ctxP, int vStandard, int cs)
{
	//unsigned long screenStride;

	off(ctxP);

	// Init from function parameters
	displayType = vStandard;
	colorSpace = cs;

	// Init from default values
	horizPixel = LCD_WIDTH;
	vertPixel = LCD_HEIGHT;
	colorDepth = LCD_BPP;
	extraLines = 0;
	fieldOffset = 0;

	//screenStride = (horizPixel  * colorDepth / 8 + 7) & 0xfffffff8;

	// Grab a frame buffer and set it up for our current color depth. If
	// there already is a frame buffer make sure we can use it (just kill it
	// and start over for now).
	defaultFbP = allocateFrameBuffer(colorDepth, horizPixel,
									 vertPixel, extraLines);

	curFbP = defaultFbP;

	initDisplay();

	// Enable the LCD Controller.
	on(ctxP);
}

// Initialize the display function
LcdContextT *getLCDctx(void)
{
	// Initialize LCD Context structure
	LcdContextT *ctxP = &Lcd;

	ctxP->setupFnP = lcdHWSetup;	//  DM_Setup_T
	ctxP->onFnP = on;			// DM_On_T
	ctxP->offFnP = off;			// DM_Off_T
	ctxP->setFrameBufferFnP = setFrameBuffer;	//  DM_SetFrameBuffer_T
	ctxP->getFrameBufferFnP = getFrameBuffer;	//  DM_GetFrameBuffer_T
	ctxP->newFrameBufferFnP = newFrameBuffer;	// DM_NewFrameBuffer_T
	ctxP->getGeometryFnP = getGeometry;	// DM_GetGeometry_T
	ctxP->getColorSpaceFnP = getColorSpace;	// DM_GetColorSpace_T
	ctxP->getColorDepthFnP = getColorDepth;	// DM_GetColorDepth_T
	ctxP->getDisplayFormatFnP = getDisplayType;	// DM_GetDisplayFormat_T
	ctxP->getOffsetsFnP = getOffsets;	// DM_GetOffsets_T

	return ctxP;
}

⌨️ 快捷键说明

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