📄 lcd.c
字号:
LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix
#elif (LCD_MODULE_TYPE == LTV300GV_RGB)
oLcdc.m_uLcdHSz = 640;
oLcdc.m_uLcdVSz = 480;
oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
oLcdc.m_uDitherMode = RDITHPOS_5BIT|GDITHPOS_6BIT|BDITHPOS_5BIT;
oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;
LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT |IVDEN_NORMAL);
//LcdcOutp32(rVIDCON1, IHSYNC_NORMAL | IVSYNC_NORMAL |IVDEN_NORMAL);
LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTV300GV) | VBPD(VBPD_LTV300GV) | VFPD(VFPD_LTV300GV) | VSPW(VSPW_LTV300GV));
LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTV300GV) | HBPD(HBPD_LTV300GV) | HFPD(HFPD_LTV300GV) | HSPW(HSPW_LTV300GV));
LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix
#else
Assert(0); // Not yet implemented.
#endif
LCD_Stop();
//Check up LCD to turn off
while (1)
{
uLcdCon=Inp32(LCD_BASE+rVIDCON0);
if( (uLcdCon&0x03) == 0 ) // checking whether disable the video output and the Display control signal or not.
break;
}
LCD_GetClkValAndClkDir(oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, &uClkVal, &uClkDir, eVClkSrc);
uVidconReg =
PROGRESSIVE | oLcdc.m_uVidOutFormat | SUB_16_MODE | MAIN_16_MODE | PNRMODE_RGB_P | CLKVALUP_ALWAYS |
CLKVAL_F(uClkVal) | VCLKEN_DISABLE | CLKDIR_F(uClkDir) | oLcdc.m_uVideoClockSource |
ENVID_DISABLE | ENVID_F_DISABLE;
LcdcOutp32(rVIDCON0, uVidconReg);
uILcdIntCon =Inp32(LCD_BASE+rVIDINTCON0);
LcdcOutp32(rVIDINTCON0, uILcdIntCon | FRAMESEL0_BACK | FRAMESEL1_NONE | INTFRMEN_DISABLE |
FIFOSEL_WIN0 | FIFOLEVEL_25 | INTFIFOEN_DISABLE | INTEN_DISABLE);
LCD_SetAllWinOnOff(0); // Turn all windows off
LCD_SetAllWinColorMapOnOff(0); // Turn all windows color map off
LCD_SetAllWinColorKeyOnOff(0); // Turn all windows Color Key off
for (i=1; i<5; i++)
{
eWin =
(i == 1) ? WIN1 :
(i == 2) ? WIN2 :
(i == 3) ? WIN3 : WIN4;
LCD_SetAlpha(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, eWin);
}
}
void LCD_InitBase2(CLK_SRC eVclkSrc, PNR_MODE ePnrMode, CPU_OUTPUT_DATAFORMAT eCpuOutDataFormat)
{
u32 uLcdCon;
u32 uILcdIntCon;
u32 uClkVal, uClkDir;
u32 uVidconReg;
u32 i;
//CLK_SRC eVClkSrc;
LCD_WINDOW eWin;
oLcdc.m_bIsAutoBuf = false;
oLcdc.m_uScanMode = 0; // progressive mode
oLcdc.m_bIsLocalCalled[0] = false;
oLcdc.m_bIsLocalCalled[1] = false;
oLcdc.m_bIsLocalCalled[2] = false;
#if (LCD_CLOCK_SOURCE == LCLK_HCLK)
oLcdc.m_uVideoClockSource = CLKSEL_F_HCLK;
//eVClkSrc = SRC_HCLK;
#elif (LCD_CLOCK_SOURCE == LCLK_MOUT_EPLL)
oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON;
//eVClkSrc = SRC_MOUT_EPLL;
#elif (LCD_CLOCK_SOURCE == LCLK_DOUT_MPLL)
oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON;
//eVClkSrc = SRC_DOUT_MPLL;
#elif (LCD_CLOCK_SOURCE == LCLK_FIN_EPLL)
oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON;
//eVClkSrc = SRC_FIN_EPLL;
#elif (LCD_CLOCK_SOURCE == LCLK_27M)
oLcdc.m_uVideoClockSource = CLKSEL_F_EXTCLK;
//eVClkSrc = SRC_27M;
#endif
if(ePnrMode == PNR_Parallel_RGB) oLcdc.m_uPnrMode = PNRMODE_RGB_P;
else if(ePnrMode == PNR_Parallel_BGR) oLcdc.m_uPnrMode = PNRMODE_BGR_P;
else if(ePnrMode == PNR_Serial_RGB) oLcdc.m_uPnrMode = PNRMODE_RGB_S;
else if(ePnrMode == PNR_Serial_BGR) oLcdc.m_uPnrMode = PNRMODE_BGR_S;
if(eCpuOutDataFormat == CPU_16BIT)
{
oLcdc.m_uI80MainOutDataFormat = MAIN_16_MODE;
oLcdc.m_uI80SubOutDataFormat = SUB_16_MODE;
}
else if(eCpuOutDataFormat == CPU_16_2BIT)
{
oLcdc.m_uI80MainOutDataFormat = MAIN_16PLUS2_MODE ;
oLcdc.m_uI80SubOutDataFormat = SUB_16PLUS2_MODE ;
}
else if(eCpuOutDataFormat == CPU_9_9BIT)
{
oLcdc.m_uI80MainOutDataFormat = MAIN_9PLUS9_MODE ;
oLcdc.m_uI80SubOutDataFormat = SUB_9PLUS9_MODE ;
}
else if(eCpuOutDataFormat == CPU_16_8BIT)
{
oLcdc.m_uI80MainOutDataFormat = MAIN_16PLUS8_MODE;
oLcdc.m_uI80SubOutDataFormat = SUB_16PLUS8_MODE;
}
else if(eCpuOutDataFormat == CPU_18BIT)
{
oLcdc.m_uI80MainOutDataFormat = MAIN_18_MODE;
oLcdc.m_uI80SubOutDataFormat = SUB_18_MODE;
}
else if(eCpuOutDataFormat == CPU_8_8BIT)
{
oLcdc.m_uI80MainOutDataFormat = MAIN_8PLUS8_MODE;
oLcdc.m_uI80SubOutDataFormat = SUB_8PLUS8_MODE;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
#if (LCD_MODULE_TYPE == LTV350QV_RGB)
oLcdc.m_uLcdHSz = 320;
oLcdc.m_uLcdVSz = 240;
oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
//oLcdc.m_uVidOutFormat = VIDOUT_TV; //To Test Free-Run
oLcdc.m_uDitherMode = RDITHPOS_8BIT|GDITHPOS_8BIT|BDITHPOS_8BIT;
oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;
LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT | IVDEN_INVERT); //Check
LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTV350QV) | VBPD(VBPD_LTV350QV) | VFPD(VFPD_LTV350QV) | VSPW(VSPW_LTV350QV));
LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTV350QV) | HBPD(HBPD_LTV350QV) | HFPD(HFPD_LTV350QV) | HSPW(HSPW_LTV350QV));
LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix
#elif (LCD_MODULE_TYPE == LTS222QV_CPU)
oLcdc.m_uLcdHSz = 240;
oLcdc.m_uLcdVSz = 320;
oLcdc.m_uVidOutFormat =
(LCD_CPUIF_CS == MAIN) ? VIDOUT_I80IF0: VIDOUT_I80IF1;
LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
#elif (LCD_MODULE_TYPE == LTP700WV_RGB ||LCD_MODULE_TYPE ==LTE480WV_RGB)
oLcdc.m_uLcdHSz = 800;
oLcdc.m_uLcdVSz = 480;
oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
oLcdc.m_uDitherMode = RDITHPOS_8BIT|GDITHPOS_8BIT|BDITHPOS_8BIT;
oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;
LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT | IVDEN_NORMAL |IVCLK_RISE_EDGE); //Check
LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTP700WV) | VBPD(VBPD_LTP700WV) | VFPD(VFPD_LTP700WV) | VSPW(VSPW_LTP700WV));
LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTP700WV) | HBPD(HBPD_LTP700WV) | HFPD(HFPD_LTP700WV) | HSPW(HSPW_LTP700WV));
LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); //Fixed Dithering Matrix
#elif (LCD_MODULE_TYPE == LTS222QV_SRGB)
oLcdc.m_uLcdHSz = 240;
oLcdc.m_uLcdVSz = 320;
oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
oLcdc.m_uDitherMode = RDITHPOS_5BIT|GDITHPOS_6BIT|BDITHPOS_5BIT;
oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;
LcdcOutp32(rVIDCON1, IVCLK_FALL_EDGE | IHSYNC_INVERT | IVSYNC_INVERT | IVDEN_NORMAL);
LcdcOutp32(rVIDTCON0, VBPDE(0) | VBPD(VBPD_LTS222QV) | VFPD(VFPD_LTS222QV) | VSPW(VSPW_LTS222QV));
LcdcOutp32(rVIDTCON1, VFPDE(0) | HBPD(HBPD_LTS222QV) | HFPD(HFPD_LTS222QV) | HSPW(HSPW_LTS222QV));
LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix
#elif (LCD_MODULE_TYPE == LTV300GV_RGB)
oLcdc.m_uLcdHSz = 640;
oLcdc.m_uLcdVSz = 480;
oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
oLcdc.m_uDitherMode = RDITHPOS_5BIT|GDITHPOS_6BIT|BDITHPOS_5BIT;
oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;
LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT |IVDEN_NORMAL);
//LcdcOutp32(rVIDCON1, IHSYNC_NORMAL | IVSYNC_NORMAL |IVDEN_NORMAL);
LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTV300GV) | VBPD(VBPD_LTV300GV) | VFPD(VFPD_LTV300GV) | VSPW(VSPW_LTV300GV));
LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTV300GV) | HBPD(HBPD_LTV300GV) | HFPD(HFPD_LTV300GV) | HSPW(HSPW_LTV300GV));
LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix
#else
Assert(0); // Not yet implemented.
#endif
LCD_Stop();
//Check up LCD to turn off
while (1)
{
uLcdCon=Inp32(LCD_BASE+rVIDCON0);
if( (uLcdCon&0x03) == 0 ) // checking whether disable the video output and the Display control signal or not.
break;
}
LCD_GetClkValAndClkDir(oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, &uClkVal, &uClkDir, eVclkSrc);
uVidconReg =
PROGRESSIVE | oLcdc.m_uVidOutFormat | oLcdc.m_uI80SubOutDataFormat | oLcdc.m_uI80MainOutDataFormat | oLcdc.m_uPnrMode | CLKVALUP_ALWAYS |
CLKVAL_F(uClkVal) | VCLKEN_DISABLE | CLKDIR_F(uClkDir)| oLcdc.m_uVideoClockSource|
ENVID_DISABLE | ENVID_F_DISABLE ;
LcdcOutp32(rVIDCON0, uVidconReg);
uILcdIntCon =Inp32(LCD_BASE+rVIDINTCON0);
LcdcOutp32(rVIDINTCON0, uILcdIntCon | FRAMESEL0_BACK | FRAMESEL1_NONE | INTFRMEN_DISABLE |
FIFOSEL_WIN0 | FIFOLEVEL_25 | INTFIFOEN_DISABLE | INTEN_DISABLE);
LCD_SetAllWinOnOff(0); // Turn all windows off
LCD_SetAllWinColorMapOnOff(0); // Turn all windows color map off
LCD_SetAllWinColorKeyOnOff(0); // Turn all windows Color Key off
for (i=1; i<5; i++)
{
eWin =
(i == 1) ? WIN1 :
(i == 2) ? WIN2 :
(i == 3) ? WIN3 : WIN4;
LCD_SetAlpha(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, eWin);
}
}
//------------------------------------------------------------
// Function Name : LCD_InitWin
//
// Function Desctiption :
//
// Input : eBpp, background bpp
// uFrameH, horizontal size for each window
// uFrameV, vertical size for each window
// uX_Frame, frame buffer start x offset
// uY_Frame, frame buffer start y offset
// uViewH, horizontal view size for each window
// uViewV, vertical view size for each window
// uX_Lcd, view start x offset
// uY_Lcd, view start y offset
// uFbAddr, frame buffer start address
// eWin, window number
// bIsDoubleBuf, using double buffer or not ?
//
// Output :
//
// Version :
//------------------------------------------------------------
void LCD_InitWin(CSPACE eBpp,
u32 uFrameH,
u32 uFrameV,
u32 uX_Frame,
u32 uY_Frame,
u32 uViewH,
u32 uViewV,
u32 uX_Lcd,
u32 uY_Lcd,
u32 uFbAddr,
LCD_WINDOW eWin,
bool bIsDoubleBuf)
{
u32 uOffset;
//u32 uLineVal;
u32 uBurstSize;
if ( (eWin != WIN0 && eWin != WIN1) && bIsDoubleBuf == true )
Assert(0); // In WIN2, WIN3 or WIN4, Double buffering can't be supported
// Viewport size must be less than LCD size
Assert(uViewH <= oLcdc.m_uLcdHSz);
Assert(uViewV <= oLcdc.m_uLcdVSz);
// Check (X,Y) coordinate is valid in LCD and Frame?
Assert( ((uX_Frame + uViewH) <= uFrameH) && ((uY_Frame + uViewV) <= uFrameV) );
Assert( (uX_Lcd + uViewH <= oLcdc.m_uLcdHSz) && (uY_Lcd + uViewV <= oLcdc.m_uLcdVSz) );
// Double buffering is supported by only window 0 and window 1
if ( ((eWin != WIN0) && (eWin != WIN1)) && (bIsDoubleBuf == true) )
Assert(0);
oLcdc.m_uFrmHSz[eWin] = uFrameH;
oLcdc.m_uFrmVSz[eWin] = uFrameV;
oLcdc.m_uViewHSz[eWin] = uViewH;
oLcdc.m_uViewVSz[eWin] = uViewV;
oLcdc.m_uLcdStX = uX_Lcd;
oLcdc.m_uLcdStY = uY_Lcd;
uOffset = oLcdc.m_uFrmHSz[eWin] - oLcdc.m_uViewHSz[eWin];
oLcdc.m_uBytSwpMode = BYTSWP_DISABLE; // BYTE swap disable
oLcdc.m_uHawSwpMode = HAWSWP_DISABLE; // Half-Word swap disable
oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_16WORD; // DMA'burst max 16word burst
oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD; // DMA'burst min 16 word burst
//Setting BPP, HW Swap, and Byte Swap
if (eBpp == PAL1)
{
oLcdc.m_uBytes = 1;
oLcdc.m_uBits = 4;
Assert( !(uOffset%32) ); // Must keep to word-alignment
oLcdc.m_uBppMode = BPPMODE_F_1BPP;
oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_4WORD;
oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD;
}
else if (eBpp == PAL2)
{
oLcdc.m_uBytes = 1;
oLcdc.m_uBits = 4;
Assert( !(uOffset%16) ); // Must keep to word-alignment
oLcdc.m_uBppMode = BPPMODE_F_2BPP;
oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_4WORD;
oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD;
}
else if ( (eBpp == PAL4) && (eWin != WIN4) )
{
oLcdc.m_uBytes = 1;
oLcdc.m_uBits = 2;
Assert( !(uOffset%8) ); // Must keep to word-alignment
oLcdc.m_uBppMode = BPPMODE_F_4BPP;
oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_4WORD;
oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -