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

📄 57xx-init.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
// PARAMETERS	:	none
// RETURN		:
//******************************************************************
static void _near InitPanelParameters(void)
{
	gmc_PanelWidth 				= PanelWidth;
	gmc_PanelHeight 				= PanelHeight;
	gmc_PanelVActiveStart     	= PanelVActiveStart;
	gmc_PanelVActiveEnd 			= PanelVActiveEnd;

#if USING_PANEL_ARRAY
	#ifdef PADDRIVE
		gm_WriteRegByte(TIMING_CONFIG,	PanelDClkDelay);
		gm_WriteRegDWord(PADDRIVE,	    	PanelPadDrive);
		gm_WriteRegByte(DP_POLARITY,		(Panel_Invert_DVS << DVS_INV_SHIFT) | (Panel_Invert_DHS << DHS_INV_SHIFT) | (Panel_Invert_DCLK << DCLK_INV_SHIFT) | (Panel_Invert_DEN << DEN_INV_SHIFT));
	#endif
	// Set up Display Registers
	// program panel power up/down register first before program OP_ENABLE register for powr up.
	// otherwise, there is the screen flashing problem
	gm_WriteRegWord(PANEL_PWR_UP_T1,	PowerUpPanelTiming);
	gm_WriteRegWord(PANEL_PWR_DN_T1,	PowerDownPanelTiming);
	#ifdef PHOENIX_U
//		gm_WriteRegByte(OP_ENABLE, 		POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2),
		gm_WriteRegByte(OP_ENABLE, 		DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2),
	#else
		gm_WriteRegByte(OP_ENABLE, 		POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN);
	#endif
	#ifdef D2PIXWIDE_SHIFT
		gm_WriteRegByte(DISPLAY_CONTROL, PanelTwoPixelPerClk << D2PIXWIDE_SHIFT );
	#endif
	gm_WriteRegWord(DH_TOTAL,		   PanelMinHTotal);
	gm_WriteRegByte(DH_HS_END,			PanelMinHSyncWidth / 4);

	gm_WriteRegWord(DH_BKGND_START,	PanelHActiveStart);
	gm_WriteRegWord(DH_BKGND_END, 	(PanelHActiveStart + PanelWidth - 1));
	gm_WriteRegWord(DH_ACTIV_START,	PanelHActiveStart);
	gm_WriteRegWord(DH_ACTIV_WIDTH,	PanelWidth);
	gm_WriteRegWord(SDDS_HTOTAL, 	   PanelMinHTotal - 1);

	gm_WriteRegByte(DV_VS_END,			PanelMinVSyncWidth);
	gm_WriteRegWord(DV_BKGND_START,	PanelVActiveStart);
	gm_WriteRegWord(DV_ACTIV_START,	PanelVActiveStart);
	gm_WriteRegWord(DV_ACTIV_LENGTH,	PanelHeight);
	gm_WriteRegWord(DP_FLAGLINE,	   PanelVActiveStart + PanelHeight);

	gm_WriteRegWord(DV_TOTAL, 		   PanelTypVTotal);

	gm_WriteRegWord(DV_BKGND_END,		(PanelVActiveStart + PanelHeight - 1));

	gm_WriteRegByte(HOST_CONTROL, 	0x1c);
	/********************************************************************/
	/*	Initialize:  LVDS                         						*/
	/********************************************************************/
	if(LVDS_PANEL)
	{
		if(PanelDepth == 8)
		{
//			gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_PLL_EN |OUTPUT_DRIVE_ODD_EN |OUTPUT_DRIVE_EVEN_EN | Panel_LVDS_BusType | LVDS_CH3_EN);
			gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN |OUTPUT_DRIVE_ODD_EN |OUTPUT_DRIVE_EVEN_EN | Panel_LVDS_BusType | LVDS_CH3_EN);			
			gm_WriteRegByte(RSDS_LVDS_DATA_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType << DUAL_BUS_EN_SHIFT) | EIGHT_BIT_MODE_SEL);
		}
		else
		{
			gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | OUTPUT_DRIVE_ODD_EN |OUTPUT_DRIVE_EVEN_EN | Panel_LVDS_BusType);
			gm_WriteRegByte(RSDS_LVDS_DATA_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType <<DUAL_BUS_EN_SHIFT ));
		}
		gm_WriteRegByte(LVDS_CLK_DATA,   0x1e);
		gm_WriteRegByte(LVDS_PLL_CTRL,	0x60); //0x30 0401
       	#ifdef LVDS_MISC_CTRL
		gm_WriteRegByte(LVDS_MISC_CTRL,	0x40);
		gm_WriteRegByte(LVDS_P2S_CTRL0,	0x1e);
		gm_WriteRegByte(LVDS_P2S_CTRL1,	0x08);
      	#endif
		gm_WriteRegByte(LVDS_TEST_CTRL,	0);
		gm_WriteRegByte(LVDS_TEST_DATA,	0);
		gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL,	0x40);   
      	gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL,	0x0);
      	gm_WriteRegByte(CLOCK_SIGNAL_DELAY,	0x0);
	}
	#if USE_TCON
	else
	{// RSDS
		gm_WriteRegByte(RSDS_LVDS_POWER,	RsdsLvdsPower);
		gm_WriteRegByte(RSDS_LVDS_DATA_CTRL,	RsdsLvdsDataCtrl);
		gm_WriteRegByte(LVDS_PLL_CTRL, LvdsPLLCtrl);
		gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL, RsdsLvdsMisc1Ctrl);
		gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL, RsdsLvdsMisc2Ctrl);
		gm_WriteRegByte(CLOCK_SIGNAL_DELAY, ClockSignalDelay);
		gm_WriteRegByte(RSDS_LVDS_TEST_CTRL, RsdsLvdsTestCtrl);
		gm_WriteRegByte(LVDS_TEST_DATA,	0);
		//TCON register programming
		gm_WriteRegByte(TCON_CONTROL1, TConCtrl1);
		gm_WriteRegByte(TCON_CONTROL2, TConCtrl2);
		gm_WriteRegWord(TCON_PANEL_WIDTH_0, TConPanelWidth);
		gm_WriteRegByte(0x184, 0x0), //reserved register
		gm_WriteRegByte(TCON_SIGNAL_DELAY, TConSignalDelay1);
		gm_WriteRegByte(TCON_SIGNAL_POLARITY, TConSignalPolarity);
		gm_WriteRegByte(TCON_SIGNAL_ENABLE, TConSignalEnable);
		gm_WriteRegByte(TCON_BLANKING_MASK, TConBlankingMask);
		gm_WriteRegByte(ROE_ACTIVE_DELAY, TConROEActiveDelay);
		gm_WriteRegWord(TCON_BLANKING_VSTART_0, TConBlankingVStart);
		gm_WriteRegWord(TCON_BLANKING_VEND_0, TConBlankingVEnd);
		gm_WriteRegWord(TCON_BLANKING_HOFFSET_0, TConBlankingHOffset);
		gm_WriteRegWord(LP_HSTART_0, TConLpHStart);
		gm_WriteRegWord(LP_HEND_0, TConLpHEnd);
		gm_WriteRegWord(ESP_HSTART_0, TConESPHStart);
		gm_WriteRegByte(ESP_WIDTH, TConESPWidth);
		gm_WriteRegWord(OSP_HSTART_0, TConOSPHStart);
		gm_WriteRegByte(OSP_WIDTH, TConOSPWidth);
		gm_WriteRegWord(POL_SWITCH_TIME_0, TConPolSwitchTime);
		gm_WriteRegWord(ROWCLK_HSTART_0, TConRowClkHStart);
		gm_WriteRegWord(ROWCLK_HEND_0, TConRowClkHEnd);
		gm_WriteRegWord(RSP1_VSTART_0, TConRSP1VStart);
		gm_WriteRegByte(RSP1_WIDTH, TConRSP1Width);
//		gm_WriteRegWord(RSP2_VSTART, TConRSP2VStart);
//		gm_WriteRegByte(RSP2_WIDTH, TConRSP2Width);
		gm_WriteRegWord(ROE1_HSTART_0, TConROE1HStart);
		gm_WriteRegWord(ROE1_HEND_0, TConROE1HEnd);
	}
	#endif //USE_TCON
#else //not USING_PANEL_ARRAY
	Write_PanelCommonBlock();
	Write_PanelInitBlock();
#endif

#if USE_TTL_PANEL
	gm_WriteRegByte(TEST_CTRL_0, PANEL_DATA_TTL_EN | SINGLE_CH_TTL_EN);
#endif   // USE_TTL_PANEL

	gm_WriteRegByte(HOST_CONTROL,		IPFORCE_UPDATE | DPFORCE_UPDATE);

// check the panel parameters and give compile error if necessary
#if USING_PANEL_ARRAY
	if((PanelHActiveStart+PanelWidth+PanelMinHSyncFrontPorch) > PanelMinHTotal)
	{
		msg("WARNING : Panel Horizontal Total value is too small!, %d", PanelMinHTotal);
		msg("B_PanelIndex %d", B_PanelIndex);
		msg("PanelHActiveStart, %d", PanelHActiveStart);
		msg("PanelWidth, %d", PanelWidth);
		msg("PanelMinHSyncFrontPorch, %d", PanelMinHSyncFrontPorch);
		gm_Delay100ms(100);
	}
	if((PanelVActiveStart+PanelHeight+PanelMinVSyncFrontPorch) > PanelMinVTotal)
	{
		msg("WARNING : Panel Vertical Total value is too small!, %d", PanelMinVTotal);
		msg("B_PanelIndex %d", B_PanelIndex);
		msg("PanelHActiveStart, %d", PanelVActiveStart);
		msg("PanelWidth, %d", PanelHeight);
		msg("PanelMinHSyncFrontPorch, %d", PanelMinVSyncFrontPorch);
		gm_Delay100ms(100);
	}
#else
	#if ((PanelHActiveStart+PanelWidth+PanelMinHSyncFrontPorch) > PanelMinHTotal)
		#error ( WARNING : Panel Horizontal Total value is too small!)
	#endif

	#if ((PanelVActiveStart+PanelHeight+PanelMinVSyncFrontPorch) > PanelMinVTotal)
		#error ( WARNING : Panel Vertical Total value is too small!)
	#endif
#endif // USING_PANEL_ARRAY

	// initialize registers based on panel array variables.  Run time variables
	// can not be initialized through gm_WriteRegBlock.
	#if IA_Phase
		gm_WriteRegByte(DDDS_CONTROL, ( 4 << D_K_DIFF_SHIFT) | (4 <<D_K_MAIN_SHIFT) | (Panel_Spread_Spect_En << SPREAD_SP_EN_SHIFT));
	#else
		gm_WriteRegByte(DDDS_CONTROL, ( 1 << D_K_DIFF_SHIFT) | (7 <<D_K_MAIN_SHIFT) | (Panel_Spread_Spect_En << SPREAD_SP_EN_SHIFT));
	#endif
	gm_WriteRegByte(DDDS_ESM_CTRL, PanelSpreadSpectrumCtrl);
	//DDDS_INIT	start ddds
	gm_WriteRegByte(DDDS_INIT,1);

}
//******************************************************************
// STRUCTURE    :   PanelInitBlocks
// USAGE        :   Describes required initial register cotent
// DESCRIPTION  :   -Initializes panel controller
//******************************************************************
#if !USING_PANEL_ARRAY	// Fix panel array complie error issue. 0401 
static void _near Write_PanelCommonBlock(void)
{
	#ifdef PADDRIVE
		gm_WriteRegByte(TIMING_CONFIG,	PanelDClkDelay);
		gm_WriteRegDWord(PADDRIVE,	    	PanelPadDrive);
		gm_WriteRegByte(DP_POLARITY,		(Panel_Invert_DVS << DVS_INV_SHIFT) | (Panel_Invert_DHS << DHS_INV_SHIFT) | (Panel_Invert_DCLK << DCLK_INV_SHIFT) | (Panel_Invert_DEN << DEN_INV_SHIFT));
	#endif //PADDRIVE
	// Set up Display Registers
	// program panel power up/down register first before program OP_ENABLE register for powr up.
	// otherwise, there is the screen flashing problem
	gm_WriteRegWord(PANEL_PWR_UP_T1,	PowerUpPanelTiming);
	gm_WriteRegWord(PANEL_PWR_DN_T1,	PowerDownPanelTiming);
	#ifdef PHOENIX_U
//		gm_WriteRegByte(OP_ENABLE, 		POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2);
		gm_WriteRegByte(OP_ENABLE, 		DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2);   
	#else
		gm_WriteRegByte(OP_ENABLE, 		POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN);
	#endif
	#ifdef D2PIXWIDE_SHIFT
		gm_WriteRegByte(DISPLAY_CONTROL, PanelTwoPixelPerClk << D2PIXWIDE_SHIFT );
	#endif
	gm_WriteRegWord(DH_TOTAL,		   PanelMinHTotal);
	gm_WriteRegByte(DH_HS_END,			PanelMinHSyncWidth / 4);

	gm_WriteRegWord(DH_BKGND_START,	PanelHActiveStart);
	gm_WriteRegWord(DH_BKGND_END, 	(PanelHActiveStart + PanelWidth - 1));
	gm_WriteRegWord(DH_ACTIV_START,	PanelHActiveStart);
	gm_WriteRegWord(DH_ACTIV_WIDTH,	PanelWidth);
	gm_WriteRegWord(SDDS_HTOTAL, 	   PanelMinHTotal - 1);

	gm_WriteRegByte(DV_VS_END,			PanelMinVSyncWidth);
	gm_WriteRegWord(DV_BKGND_START,	PanelVActiveStart);
	gm_WriteRegWord(DV_ACTIV_START,	PanelVActiveStart);
	gm_WriteRegWord(DV_ACTIV_LENGTH,	PanelHeight);
	// Louis 1110
	gm_WriteRegWord(DP_FLAGLINE,	   PanelVActiveStart + PanelHeight);
	//gm_WriteRegWord(DP_FLAGLINE,	   PanelVActiveStart + PanelHeight - Alt_DispLines);

	gm_WriteRegWord(DV_TOTAL, 		   PanelTypVTotal);

	gm_WriteRegWord(DV_BKGND_END,		(PanelVActiveStart + PanelHeight - 1));

	gm_WriteRegByte(HOST_CONTROL, 	0x1c);
}
#if defined(LVDS_PANEL)
static void _near Write_PanelInitBlock(void)	
{
		#if (PanelDepth == 8)
				//gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN | MLR_BIAS_EN);  
				gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN );	
	
            #if Panel_LVDSBus_EvenOddSwap
            	gm_WriteRegByte(LVDS_DIGITAL_CTRL, DUAL_BUS_EN | EVEN_ODD_SWAP | POS_NEG_SWAP | EIGHT_BIT_MODE_SEL);
            #else
	            gm_WriteRegByte(LVDS_DIGITAL_CTRL, POS_NEG_SWAP | EIGHT_BIT_MODE_SEL);
			#endif
  		#else
				//gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | MLR_BIAS_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN (Panel_LVDS_BusType << OUTPUT_DRIVE_ODD_EN_SHIFT));
            gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN);	
			//gm_WriteRegByte(LVDS_DIGITAL_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType <<DUAL_BUS_EN_SHIFT ));
            gm_WriteRegByte(LVDS_DIGITAL_CTRL, DUAL_BUS_EN | EVEN_ODD_SWAP | POS_NEG_SWAP | EIGHT_BIT_MODE_SEL);
		#endif //(PanelDepth == 8)

		#if LVDS_DATA_CLK_INVERT
			gm_WriteRegByte(LVDS_DIGITAL_CTRL, 0x2B);
			gm_WriteRegByte(LVDS_CLK_DATA,   0x1E);
		#else
			gm_WriteRegByte(LVDS_DIGITAL_CTRL, 0x23);
			gm_WriteRegByte(LVDS_CLK_DATA,   0x61);
		#endif

			gm_WriteRegByte(LVDS_PLL_CTRL,	0x60);
      
		#ifdef LVDS_MISC_CTRL
			gm_WriteRegByte(LVDS_MISC_CTRL,	0x40);
			gm_WriteRegByte(LVDS_P2S_CTRL0,	0x1e);
			gm_WriteRegByte(LVDS_P2S_CTRL1,	0x08);
		#endif //LVDS_MISC_CTRL
		gm_WriteRegByte(LVDS_TEST_CTRL,	0);
		gm_WriteRegByte(LVDS_TEST_DATA,	0);
      	gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL,	0xC1);   //0x40),
      	gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL,	0x0);
      	gm_WriteRegByte(CLOCK_SIGNAL_DELAY,	0x0);
//       	gm_WriteRegByte(RSDS_LVDS_DATA_CTRL,	DUAL_BUS_EN | POS_NEG_SWAP | LSB_MSB_SWAP);//TL060726 added
      	gm_WriteRegByte(HOST_CONTROL,	IPFORCE_UPDATE | DPFORCE_UPDATE);
}	  
#elif defined(RSDS_PANEL)
static void _near Write_PanelInitBlock(void)	
{
		gm_WriteRegByte(RSDS_LVDS_POWER,	RsdsLvdsPower);
		gm_WriteRegByte(RSDS_LVDS_DATA_CTRL,	DUAL_BUS_EN | POS_NEG_SWAP | LSB_MSB_SWAP);
		gm_WriteRegByte(LVDS_PLL_CTRL, LvdsPLLCtrl);
		gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL, RsdsLvdsMisc1Ctrl);
		gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL, RsdsLvdsMisc2Ctrl);
		gm_WriteRegByte(CLOCK_SIGNAL_DELAY, ClockSignalDelay);
		gm_WriteRegByte(RSDS_LVDS_TEST_CTRL, RsdsLvdsTestCtrl);
		gm_WriteRegByte(LVDS_CLK_DATA,   LvdsClkData);
		gm_WriteRegByte(LVDS_TEST_DATA,	0);

		//TCON register programming
		gm_WriteRegByte(TCON_CONTROL1, TConCtrl1);
		gm_WriteRegByte(TCON_CONTROL2, TConCtrl2);
		gm_WriteRegByte(TCON_PANEL_WIDTH_0, TConPanelWidth & 0xff);
		gm_WriteRegByte(TCON_PANEL_WIDTH_1, ((TConPanelWidth & 0xf00) >> 8));
		//RB_WriteByte(0x184, 0x0), //reserved register
		gm_WriteRegByte(TCON_SIGNAL_DELAY, TConSignalDelay1);
		//gm_WriteRegByte(TCON_SIGNAL_DELAY2, TConSignalDelay2);
		gm_WriteRegByte(TCON_SIGNAL_POLARITY, TConSignalPolarity);
		gm_WriteRegByte(TCON_SIGNAL_ENABLE, TConSignalEnable);
		gm_WriteRegByte(TCON_BLANKING_MASK, TConBlankingMask);
		gm_WriteRegByte(ROE_ACTIVE_DELAY, TConROEActiveDelay);
		gm_WriteRegByte(TCON_BLANKING_VSTART_0, TConBlankingVStart & 0xff);
		gm_WriteRegByte(TCON_BLANKING_VSTART_1, ((TConBlankingVStart & 0xf00) >> 8));
		gm_WriteRegByte(TCON_BLANKING_VEND_0, TConBlankingVEnd & 0xff);
		gm_WriteRegByte(TCON_BLANKING_VEND_1, ((TConBlankingVEnd & 0xf00) >> 8));
		gm_WriteRegByte(TCON_BLANKING_HOFFSET_0, TConBlankingHOffset & 0xff);

⌨️ 快捷键说明

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