📄 lcd.c
字号:
else if ( (eBpp == PAL8) && ((eWin == WIN0) || (eWin == WIN1)) )
{
oLcdc.m_uBytes = 1;
oLcdc.m_uBits = 1;
Assert( !(uOffset%4) ); // Must keep to word-alignment
oLcdc.m_uBppMode = BPPMODE_F_8BPP_PAL;
oLcdc.m_uBytSwpMode = BYTSWP_ENABLE;
}
else if ( (eBpp == RGB8) && ((eWin == WIN1) || (eWin == WIN2)) )
{
oLcdc.m_uBytes = 1;
oLcdc.m_uBits = 1;
Assert( !(uOffset%4) ); // Must keep to word-alignment
oLcdc.m_uBppMode = BPPMODE_F_8BPP_NOPAL;
oLcdc.m_uBytSwpMode = BYTSWP_ENABLE;
}
else if (eBpp == RGB16)
{
oLcdc.m_uBytes = 2;
oLcdc.m_uBits = 1;
Assert( !(uOffset%2) ); // Must keep to word-alignment
oLcdc.m_uBppMode = BPPMODE_F_16BPP_565;
oLcdc.m_uHawSwpMode = HAWSWP_ENABLE;
}
else if (eBpp == ARGB16)
{
oLcdc.m_uBytes = 2;
oLcdc.m_uBits = 1;
Assert( !(uOffset%2) ); // Must keep to word-alignment
oLcdc.m_uBppMode = BPPMODE_F_16BPP_A555;
oLcdc.m_uHawSwpMode = HAWSWP_ENABLE;
}
else if (eBpp == RGB18)
{
oLcdc.m_uBytes = 4;
oLcdc.m_uBits = 1;
oLcdc.m_uBppMode = BPPMODE_F_18BPP_666;
}
else if (eBpp == RGB24)
{
oLcdc.m_uBytes = 4;
oLcdc.m_uBits = 1;
oLcdc.m_uBppMode = BPPMODE_F_24BPP_888;
}
else if (eBpp == ARGB24)
{
oLcdc.m_uBytes = 4;
oLcdc.m_uBits = 1;
oLcdc.m_uBppMode = BPPMODE_F_24BPP_A887;
}
else
{
Assert(0);
}
// Get offsetsize, pagewidth and lineVal
if (oLcdc.m_uFrmHSz[eWin] >= oLcdc.m_uViewHSz[eWin])
{
oLcdc.m_uOffsetSz[eWin] = uOffset*oLcdc.m_uBytes/oLcdc.m_uBits;
oLcdc.m_uPageWidth[eWin] = oLcdc.m_uViewHSz[eWin]*oLcdc.m_uBytes/oLcdc.m_uBits;
// Offset size must be more than the burst size
uBurstSize =
(oLcdc.m_uMaxBurstLen == MAX_BURSTLEN_16WORD) ? 16*4 :
(oLcdc.m_uMaxBurstLen == MAX_BURSTLEN_8WORD) ? 8*4 : 4*4;
// Offset size must be more than the burst size
Assert( oLcdc.m_uOffsetSz[eWin] == 0 || !(oLcdc.m_uOffsetSz[eWin]%4) );
Assert(oLcdc.m_uPageWidth[eWin] > uBurstSize); // Page width must be more than burst size and be word-aligned
//uLineVal = oLcdc.m_uViewVSz[eWin] - 1;
}
else
{
Assert(0);
}
oLcdc.m_uImgStAddr[eWin] = uFbAddr;
oLcdc.m_uFbStAddr[eWin] = uFbAddr + (oLcdc.m_uFrmHSz[eWin]*uY_Frame + uX_Frame)*oLcdc.m_uBytes/oLcdc.m_uBits;
oLcdc.m_uFbEndAddr[eWin] = oLcdc.m_uFbStAddr[eWin] + (oLcdc.m_uOffsetSz[eWin]+oLcdc.m_uPageWidth[eWin])*(uFrameV);
if ( (bIsDoubleBuf == true) && ((eWin == WIN0) || (eWin == WIN1)) )
{
oLcdc.m_uDoubleBufImgStAddr[eWin] = oLcdc.m_uImgStAddr[eWin] + oLcdc.m_uFrmHSz[eWin]*oLcdc.m_uFrmVSz[eWin]*oLcdc.m_uBytes/oLcdc.m_uBits;
oLcdc.m_uDoubleBufStAddr[eWin] = oLcdc.m_uFbStAddr[eWin] + oLcdc.m_uFrmHSz[eWin]*oLcdc.m_uFrmVSz[eWin]*oLcdc.m_uBytes/oLcdc.m_uBits;
oLcdc.m_uDoubleBufEndAddr[eWin] = oLcdc.m_uDoubleBufStAddr[eWin] + (oLcdc.m_uOffsetSz[eWin]+oLcdc.m_uPageWidth[eWin])*(uFrameV);
}
else if ( (bIsDoubleBuf == false) && ((eWin == WIN0) || (eWin == WIN1)) )
{
oLcdc.m_uDoubleBufStAddr[eWin] = oLcdc.m_uFbStAddr[eWin];
oLcdc.m_uDoubleBufEndAddr[eWin] = oLcdc.m_uFbEndAddr[eWin];
}
LCD_InitWinRegs(eWin);
// For back-ward compatibility LCDC V2.0
if(eWin == WIN0)
LCD_SetWinOnOff(1, WIN0); // first arguement == 1 -> turn on window
}
void LCD_InitDISPCForFifoIn(LCD_LOCAL_INPUT eInLocal, LCD_WINDOW eWin)
{
LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT);
LCD_InitWinForFifoIn(eInLocal, eWin);
}
//-----------------------------------------------------------
// Function Name : LCD_InitLTV350QV
//
// Function Desctiption :
//
// Input :
//
// Output :
//
// Version :
//------------------------------------------------------------
void LCD_InitLTV350QV_RGB(void)
{
//Reset LCD Module
//GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low
//Delay(100); //Delay about 10ms
//GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
/*
//Config SPI GPIO Port
GPIO_SetFunctionEach(eGPIO_C, eGPIO_5, 1); //GPC[5]:SPI_SCLK -> Output
GPIO_SetFunctionEach(eGPIO_C, eGPIO_6, 1); //GPC[6]:SPI_MOSI -> Output
GPIO_SetFunctionEach(eGPIO_C, eGPIO_7, 1); //GPC[7]:SPI_CS -> Output
GPIO_SetPullUpDownEach(eGPIO_C, eGPIO_5, 0); //GPC[5]:SPI_SCLK -> Pull-up/down Disable
GPIO_SetPullUpDownEach(eGPIO_C, eGPIO_6, 0); //GPC[6]:SPI_MOSI -> Pull-up/down Disable
GPIO_SetPullUpDownEach(eGPIO_C, eGPIO_7, 0); //GPC[7]:SPI_CS -> Pull-up/down Disable
Delay(50); //Delay about 5ms
*/
//Set DEN, DCLK, and DSERI to High
LCD_DEN_Hi;
LCD_DCLK_Hi;
LCD_DSERI_Hi;
///////////////////////////////////////////////////////////////////
// Init_Lcd_Function
//////////////////////////////////////////////////////////////////
LCD_PutCmdtoLTV350QV(0x01,0x001d);
LCD_PutCmdtoLTV350QV(0x02,0x0000);
LCD_PutCmdtoLTV350QV(0x03,0x0000);
LCD_PutCmdtoLTV350QV(0x04,0x0000);
LCD_PutCmdtoLTV350QV(0x05,0x50a3);
LCD_PutCmdtoLTV350QV(0x06,0x0000);
LCD_PutCmdtoLTV350QV(0x07,0x0000);
LCD_PutCmdtoLTV350QV(0x08,0x0000);
LCD_PutCmdtoLTV350QV(0x09,0x0000);
LCD_PutCmdtoLTV350QV(0x0a,0x0000);
LCD_PutCmdtoLTV350QV(0x10,0x0000);
LCD_PutCmdtoLTV350QV(0x11,0x0000);
LCD_PutCmdtoLTV350QV(0x12,0x0000);
LCD_PutCmdtoLTV350QV(0x13,0x0000);
LCD_PutCmdtoLTV350QV(0x14,0x0000);
LCD_PutCmdtoLTV350QV(0x15,0x0000);
LCD_PutCmdtoLTV350QV(0x16,0x0000);
LCD_PutCmdtoLTV350QV(0x17,0x0000);
LCD_PutCmdtoLTV350QV(0x18,0x0000);
LCD_PutCmdtoLTV350QV(0x19,0x0000);
// Delay about 10ms
Delay(100);
///////////////////////////////////////////////////////////////////
// Power Setting Function 1
//////////////////////////////////////////////////////////////////
LCD_PutCmdtoLTV350QV(0x09,0x4055);
LCD_PutCmdtoLTV350QV(0x0a,0x0000);
// Delay about 10ms
Delay(100);
/////////////////////////////////////////////////////////////////////
// Power Setting 2
/////////////////////////////////////////////////////////////////////
LCD_PutCmdtoLTV350QV(0x0a,0x2000);
// Delay about 50ms
Delay(500);
///////////////////////////////////////////////////////////////////
// Instruction Setting
///////////////////////////////////////////////////////////////////
LCD_PutCmdtoLTV350QV(0x01,0x409d);
LCD_PutCmdtoLTV350QV(0x02,0x0204);
LCD_PutCmdtoLTV350QV(0x03,0x2100);
LCD_PutCmdtoLTV350QV(0x04,0x1000);
LCD_PutCmdtoLTV350QV(0x05,0x5003);
LCD_PutCmdtoLTV350QV(0x06,0x0009); //vbp
LCD_PutCmdtoLTV350QV(0x07,0x000f); //hbp
LCD_PutCmdtoLTV350QV(0x08,0x0800);
LCD_PutCmdtoLTV350QV(0x10,0x0000);
LCD_PutCmdtoLTV350QV(0x11,0x0000);
LCD_PutCmdtoLTV350QV(0x12,0x000f);
LCD_PutCmdtoLTV350QV(0x13,0x1f00);
LCD_PutCmdtoLTV350QV(0x14,0x0000);
LCD_PutCmdtoLTV350QV(0x15,0x0000);
LCD_PutCmdtoLTV350QV(0x16,0x0000);
LCD_PutCmdtoLTV350QV(0x17,0x0000);
LCD_PutCmdtoLTV350QV(0x18,0x0000);
LCD_PutCmdtoLTV350QV(0x19,0x0000);
// Delay about 50 ms
Delay(500);
LCD_Start();
///////////////////////////////////////////////////////////////////
// Display On Sequence
///////////////////////////////////////////////////////////////////
LCD_PutCmdtoLTV350QV(0x09,0x4a55);
LCD_PutCmdtoLTV350QV(0x0a,0x2000);
}
void LCD_InitLTP700WV_RGB(void)
{
u32 uHSz, uVSz;
LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT);
LCD_InitWin(RGB24, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, LCD_FRAMEBUFFER_ST, WIN0, false);
LCD_SetWinOnOff(1, WIN0);
LCD_GetFrmSz(&uHSz, &uVSz, WIN0);
GLIB_InitInstance(LCD_FRAMEBUFFER_ST, uHSz, uVSz, RGB24);
GLIB_DrawPattern(uHSz, uVSz);
INTC_SetVectAddr(NUM_LCD1, Isr_LCD_FrameCount);
LCD_InitInt(LCD_FRAME_INT, LCD_SYSMAIN_INT, FIFO_25, FIFO_INT_WIN0, FINT_VSYNC);
LCD_EnableInt();
INTC_Enable(NUM_LCD1);
LCD_Start();
uFrameCount=0;
while(1)
{
if(uFrameCount == 3)
break;
}
GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
//LCD_SetAllWinOnOff(0);
//LCD_Stop();
}
void LCD_ExitLTP700WV_RGB(void)
{
u32 uHSz, uVSz;
LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT);
LCD_InitWin(RGB24, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, LCD_FRAMEBUFFER_ST, WIN0, false);
LCD_SetWinOnOff(1, WIN0);
LCD_GetFrmSz(&uHSz, &uVSz, WIN0);
GLIB_InitInstance(LCD_FRAMEBUFFER_ST, uHSz, uVSz, RGB24);
GLIB_DrawPattern(uHSz, uVSz);
INTC_SetVectAddr(NUM_LCD1, Isr_LCD_FrameCount);
LCD_InitInt(LCD_FRAME_INT, LCD_SYSMAIN_INT, FIFO_25, FIFO_INT_WIN0, FINT_VSYNC);
LCD_EnableInt();
INTC_Enable(NUM_LCD1);
GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low
LCD_Start();
uFrameCount=0;
while(1)
{
if(uFrameCount == 4)
break;
}
LCD_SetAllWinOnOff(0);
LCD_Stop();
}
//------------------------------------------------------------
// Function Name : LCD_SetI80Timing
//
// Function Desctiption :
//
//
// Input :
//
// Output :
//
// Version :
//------------------------------------------------------------
void LCD_SetI80Timing(
u8 ucCsSetupTime, u8 ucWrSetupTime, u8 ucWrActTime, u8 ucWrHoldTime,
CPUIF_LDI eLdi)
{
u32 uI80TimeReg, uI80TimeVal;
LCD_SetClkSrc(SRC_HCLK);
LCD_SetClkDirOrDiv(CLK_DIRECT);
uI80TimeReg = (eLdi == MAIN) ? rI80IFCONA0 : rI80IFCONA1;
uI80TimeVal=Inp32(LCD_BASE+uI80TimeReg);
uI80TimeVal =
LCD_CS_SETUP((u32)ucCsSetupTime) |
LCD_WR_SETUP((u32)ucWrSetupTime) |
LCD_WR_ACT((u32)ucWrActTime) |
LCD_WR_HOLD((u32)ucWrHoldTime) |
RSPOL_HIGH | SUCCEUP_TRIGGERED | SYSIFEN_ENABLE; //Check the Bit1
LcdcOutp32(uI80TimeReg, uI80TimeVal);
}
//------------------------------------------------------------
// Function Name : LCD_SetAutoCmdRate
//
// Function Desctiption :
//
//
// Input :
//
// Output :
//
// Version :
//------------------------------------------------------------
void LCD_SetAutoCmdRate(CPU_AUTO_CMD_RATE eCmdRate, CPUIF_LDI eLdi)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -