📄 lcd.c
字号:
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 + -