#include "LCD_C035QAN02.h" volatile LCDPanelUpdtCtrlStruct LCDPanelUpdtCtrl; uint32_t* LCDPanelGraphicRAM = (uint32_t*)VRAM_BUF[ 0 ]; void LCD_Panel_Start_Up(void) { uint8_t Para[4]; LCDPanelGraphicRAM = (uint32_t*)VRAM_BUF[ 0 ]; LCDPanelUpdtCtrl.Request = 0; LCDPanelUpdtCtrl.Cmd = 1; LCDPanelUpdtCtrl.StartPage = 0; LCDPanelUpdtCtrl.Len = 0; LCDPanelUpdtCtrl.pData = (uint32_t*)LCDPanelGraphicRAM; //Reset Panel LCD_BUS_Panel_Reset_Ctrl(0); bsp_IIC_DelayUs(2000); LCD_BUS_Panel_Reset_Ctrl(1); bsp_IIC_DelayUs(2000); //Panel Init Para[0] = 0xa5; LCD_BUS_Write_Cmd(0x5e, Para, 1); //SWreset Para[0] = 0x0e; Para[1] = 0x00; Para[2] = 0x00; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x49, Para, 4); //VCMDAT Para[0] = 0x8f; Para[1] = 0x44; Para[2] = 0x02; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x61, Para, 4); //PWRCTL bsp_IIC_DelayUs(20); Para[0] = 0x20; Para[1] = 0x71; Para[2] = 0xa5; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x5a, Para, 4); //CPSET ԭ��Ҫ�� �����ϵ�ʱ�� Para[0] = 0x3d; Para[1] = 0x0b; Para[2] = 0x0b; Para[3] = 0xA5; LCD_BUS_Write_Cmd(0x71, Para, 4); //Electronic Volume Set 1 Para[0] = 0x19; Para[1] = 0x19; Para[2] = 0xa5; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x72, Para, 4); //Electronic Volume Set 2 Para[0] = 0x01; Para[1] = 0x3F; Para[2] = 0x00; Para[3] = 0xEF; LCD_BUS_Write_Cmd(0x91, Para, 4); //DISAR Para[0] = 0x32; Para[1] = 0x02; Para[2] = 0x00; Para[3] = 0x01; LCD_BUS_Write_Cmd(0x92, Para, 4); //DISAR Para[0] = 0x02; Para[1] = 0xa5; Para[2] = 0xa5; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x21, Para, 4); //MADCTL Para[0] = 0x00; Para[1] = 0xa5; Para[2] = 0xa5; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x24, Para, 4); //STFRAME Para[0] = 0x03; Para[1] = 0xa5; Para[2] = 0xa5; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x25, Para, 4); //BPPSEL Para[0] = 0x00; Para[1] = 0x00; Para[2] = 0x00; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x26, Para, 4); //MDCTL Para[0] = 0x00; Para[1] = 0xa5; Para[2] = 0xa5; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0xA2, Para, 4); //GATSET Para[0] = 0x00; Para[1] = 0xa5; Para[2] = 0xa5; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x69, Para, 4); //ACSET Para[0] = 0x00; Para[1] = 0x1A; Para[2] = 0x1B; Para[3] = 0x1D; LCD_BUS_Write_Cmd(0x81, Para, 4); // Set Gamma Positive1 Para[0] = 0x1D; Para[1] = 0x1E; Para[2] = 0x1F; Para[3] = 0x20; LCD_BUS_Write_Cmd(0x82, Para, 4); // Set Gamma Positive2 Para[0] = 0x21; Para[1] = 0x23; Para[2] = 0x24; Para[3] = 0x26; LCD_BUS_Write_Cmd(0x83, Para, 4); // Set Gamma Positive3 Para[0] = 0x28; Para[1] = 0x2A; Para[2] = 0x2F; Para[3] = 0x3F; LCD_BUS_Write_Cmd(0x84, Para, 4); // Set Gamma Positive4 Para[0] = 0x00; Para[1] = 0x1B; Para[2] = 0x1C; Para[3] = 0x1D; LCD_BUS_Write_Cmd(0x89, Para, 4); // Set Gamma Negative1 Para[0] = 0x1E; Para[1] = 0x1F; Para[2] = 0x20; Para[3] = 0x21; LCD_BUS_Write_Cmd(0x8A, Para, 4); // Set Gamma Negative2 Para[0] = 0x22; Para[1] = 0x23; Para[2] = 0x25; Para[3] = 0x26; LCD_BUS_Write_Cmd(0x8B, Para, 4); // Set Gamma Negative3 Para[0] = 0x28; Para[1] = 0x2B; Para[2] = 0x2F; Para[3] = 0x3F; LCD_BUS_Write_Cmd(0x8C, Para, 4); // Set Gamma Negative4 Para[0] = 0xa5; LCD_BUS_Write_Cmd(0x16, Para, 1); bsp_IIC_DelayUs(500); Para[0] = 0xa5; LCD_BUS_Write_Cmd(0x13, Para, 1); bsp_IIC_DelayUs(500); Para[0] = 0xa5; LCD_BUS_Write_Cmd(0x12, Para, 1); } /*------------------------------------------------------------------------- * Function Name : LCD_ClearFullScreen * Description : �����ʾ�� * Input : * Output : None * Return : None * onther : --------------------------------------------------------------------------*/ void LCD_ClearFullScreen(uint8_t FullPixel) { uint16_t i; uint16_t j; uint16_t count = 0; uint8_t Para[4]; Para[0] = 0; Para[1] = 159; Para[2] = 0x00; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x22, Para, 4); Para[0] = 0; Para[1] = 0; Para[2] = (uint8_t)(239 >> 8); Para[3] = (uint8_t)239; LCD_BUS_Write_Cmd(0x23, Para, 4); Para[0] = 0xa5; LCD_BUS_Write_Cmd(0x3A, Para, 1); LCD_BUS_Write_Bus_Fifo(LCD_BUS_CMD_WR_PIXEL | 0x00200000 | (38400 - 1)); for (i = 0; i < LCD_PANEL_WIDTH * LCD_PANEL_HEIGHT / 256; i++) { count = 0; while (LCD_BUS_Get_Status()) { count ++; if(count > 38400) { break; } } for (j = 0; j < 32; j++) { LCD_BUS_Write_Bus_Fifo(0x00000000); } } } void LCD_Panel_Shut_Down(void) { LCDPanelUpdtCtrl.Request = 0; LCD_ClearFullScreen(0xFF); LCD_BUS_Write_Cmd(LCD_CMD_DISPOFF, NULL, 0); bsp_IIC_DelayUs(1); LCD_BUS_Write_Cmd(LCD_CMD_SLPIN, NULL, 0); bsp_IIC_DelayUs(150); Eic_Disable((stc_eic00_t *) &EIC00, 23); //Disable VSYNC } void LCD_Panel_Update_Req(uint16_t starPage,uint16_t endPage) { uint16_t wTemp = 0; uint8_t Para[4]; if(LcdBusState) { return; } if((LCDPanelGraphicRAM != (uint32_t*)VRAM_BUF[ 0 ]) && (LCDPanelGraphicRAM != (uint32_t*)VRAM_BUF[ 1 ])) { LCDPanelGraphicRAM = (uint32_t*)VRAM_BUF[ 0 ]; } Para[0] = starPage; Para[1] = endPage-1; Para[2] = 0x00; Para[3] = 0xa5; LCD_BUS_Write_Cmd(0x22, Para, 4); Para[0] = 0; Para[1] = 0; Para[2] = (uint8_t)(239 >> 8); Para[3] = (uint8_t)239; LCD_BUS_Write_Cmd(0x23, Para, 4); Para[0] = 0xa5; LCD_BUS_Write_Cmd(0x3A, Para, 1); wTemp = (endPage - starPage) * 240; LCD_BUS_Write_Bus_Fifo(LCD_BUS_CMD_WR_PIXEL | 0x00200000 | (wTemp - 1)); LCDPanelUpdtCtrl.pData = (uint32_t*)((uint8_t*)LCDPanelGraphicRAM + starPage * 240); LCDPanelUpdtCtrl.Len = wTemp >> 2; LCDPanelUpdtCtrl.Request = 1; } uint8_t LCD_Panel_Get_Update_Enable(void) { return !LCDPanelUpdtCtrl.Request; } void LCD_Panel_Update_ISR(uint8_t step) { if (LCDPanelUpdtCtrl.Request) { if (!LCD_BUS_Get_Status()) //Transfer data when bus is idle { if (LCDPanelUpdtCtrl.Len > 32) { LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 0 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 1 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 2 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 3 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 4 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 5 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 6 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 7 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 8 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 9 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 10 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 11 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 12 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 13 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 14 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 15 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 16 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 17 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 18 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 19 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 20 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 21 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 22 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 23 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 24 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 25 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 26 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 27 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 28 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 29 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 30 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 31 ]; LCDPanelUpdtCtrl.pData += 32; LCDPanelUpdtCtrl.Len -= 32; } else { LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 0 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 1 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 2 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 3 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 4 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 5 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 6 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 7 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 8 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 9 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 10 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 11 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 12 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 13 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 14 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 15 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 16 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 17 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 18 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 19 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 20 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 21 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 22 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 23 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 24 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 25 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 26 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 27 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 28 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 29 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 30 ]; LCDB_InstructionFifo0 = LCDPanelUpdtCtrl.pData[ 31 ]; LCDPanelUpdtCtrl.Len = 0; LCDPanelUpdtCtrl.Request = 0; LCDB_InstructionFifo0 = LCD_BUS_CMD_END; if(UpScreenStep == 9) { UpScreenStep = 10; UP_VSYNC = 0; //qitiancun 2018-6-21 g_DrawInfo.VramCalOverFlag[ memoryVramSel ] = 0; } } } } }