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

📄 52xx-init.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		}
		gm_WriteRegByte(LVDS_CLK_DATA,   0x1e);
		gm_WriteRegByte(LVDS_PLL_CTRL,	0x30);
		gm_WriteRegByte(LVDS_MISC_CTRL,	0x40);
		gm_WriteRegByte(LVDS_P2S_CTRL0,	0x1e);
		gm_WriteRegByte(LVDS_P2S_CTRL1,	0x08);
		gm_WriteRegByte(LVDS_TEST_CTRL,	0);
		gm_WriteRegByte(LVDS_TEST_DATA,	0);
	}
#else
	#ifdef	LVDS_PANEL
		#if (PanelDepth == 8)
				gm_WriteRegByte(LVDS_POWER, TTL_LVDS_SEL | LVDS_BIAS_EN | LVDS_PLL_EN | LVDS_DRIVER_EVEN_EN | OddEn | LVDDS_CH3_EN);
				gm_WriteRegByte(LVDS_DIGITAL_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(LVDS_POWER, TTL_LVDS_SEL | LVDS_BIAS_EN | LVDS_PLL_EN | LVDS_DRIVER_EVEN_EN | OddEn);
				gm_WriteRegByte(LVDS_DIGITAL_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType <<DUAL_BUS_EN_SHIFT ));
		#endif
		gm_WriteRegByte(LVDS_CLK_DATA,   0x1e);
		gm_WriteRegByte(LVDS_PLL_CTRL,	0x30);
		gm_WriteRegByte(LVDS_MISC_CTRL,	0x40);
		gm_WriteRegByte(LVDS_P2S_CTRL0,	0x1e);
		gm_WriteRegByte(LVDS_P2S_CTRL1,	0x08);
		gm_WriteRegByte(LVDS_TEST_CTRL,	0);
		gm_WriteRegByte(LVDS_TEST_DATA,	0);
	#endif
#endif

	  // Move to here for panel check (fix panel array complie error issue). 0401 
	gmc_PanelDepth = PanelDepth;
	if(gmc_PanelDepth == 8)              
		gm_WriteRegByte(MULT_DITHER_CTRL, (MULT_DITH_TRUNC | MULT_DITH_1FRAME));
    	else
  		gm_WriteRegByte(MULT_DITHER_CTRL, MULT_DITH_SPATIAL);
	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.
	gm_WriteRegByte(DDDS_CONTROL, ( 4 << D_K_DIFF_SHIFT) | (4 <<D_K_MAIN_SHIFT) | (Panel_Spread_Spect_En << SPREAD_SP_EN_SHIFT));
	gm_WriteRegByte(DDDS_ESM_CTRL, PanelSpreadSpectrumCtrl);
	//DDDS_INIT	start ddds
	gm_WriteRegByte(DDDS_INIT,1);

}
//******************************************************************
// STRUCTURE    :   SystemInitBlock
// USAGE        :   Describes required initial register cotent
// DESCRIPTION  :   -Initializes system clocks
//                  -DDS's (digital PLL's)
//                  -type of update for the used registers
//                  -GPIO registers
//                  -ADC  registers
//                  -DVI registers
//                  -Display registers
//
//******************************************************************
gm_DefineRegBlock(SystemInitBlock)

	/********************************************************************/
	/*	Initialize:  GPIO                                    			*/
	/********************************************************************/
#if	PWM0_BRIGHTNESS==1
	// enable output and use TCLK/512 as clock
	RB_WriteByte( PWM0_CONFIG,		PWM0_GPIOn_EN | PWM0_CLKSEL | PWM0_TCLK_DIV),
	RB_WriteByte( PWM0_PERIOD,		0xFF), // set period to max ie. about 54.62 hz for 14.318 Mhz tclk
#else
	RB_WriteByte( PWM0_CONFIG, 		0x00), // configure pmw0 as gpio0, backlight
#endif
	RB_WriteByte( PWM1_CONFIG, 		0x00), // configure pmw1 as gpio1, led grn

#if ((BOARD == EV_BD) || (BOARD == RD1C_BD) || (BOARD == FPGA_BOARD) || (BOARD == RD5))
	RB_WriteByte(GPIO_DIRCTRL1, 		GPIO1_MASK),
	RB_WriteByte(GPIO_DIRCTRL2, 		0x00),	// used for panel
	RB_WriteByte(GPO_OPENDRAIN_EN1, 	GPIO1_ODEN),
	RB_WriteByte(GPO_OPENDRAIN_EN2, 	0x00),

#if (LED_POL == POS_POL)
	RB_WriteByte(GPOUTPUT1, 			GPIO1_MASK),
#else
   RB_WriteByte(GPOUTPUT1, 			0),
#endif

#endif

	/********************************************************************/
	/*	Initialize:  SYSMASKs						                    */
	/********************************************************************/
	//BYPASS	normal scaler operation	0
	RB_WriteByte(BYPASS, 0x00),
	//IRQ_CONFIG	Disable IRQ	0
	RB_WriteByte(IRQ_CONFIG, 0x00),
	//IFM_SYSMASK	set No Hsync/Vsync, Hs/Vs period err, Interlaced line counter err. 	0x8F
	RB_WriteByte(IFM_OCMMASK, (NO_HS | NO_VS | HS_PERIOD_ERR | VS_PERIOD_ERR | INTLC_ERR)),
	//INPUT_SYSMASK	set IP_VS and IP_OVERRUN	0x18
	//MISC_SYSMASK	set D_VS and CLK_EVENT	0x48
	RB_WriteByte(MISC_OCMMASK, (CLK_EVENT | D_VS_FLAG)),

	//Set Schmitt Trigger hysteresis for Set2 (0x82a1=4)
	#ifdef USE_HYSTERESIS_SEL
	RB_WriteByte(TEST_CTRL_1, HYSTERESIS_SEL),
	#endif
	/********************************************************************/
	/*	Initialize:  DDS                           						*/
	/********************************************************************/
	//DDS_CONTROL	Force SDDS and DDDS to Open Loop and enable SDDS, DDDS, FCLK, LCLK
	RB_WriteByte(DDS_CONTROL, (FORCE_SDDS_OPLOOP | FORCE_DDDS_OPLOOP | SDDS_ENABLE | DDDS_ENABLE | FCLK_ENABLE | ACLK2_ENABLE | LCLK_ENANLE)),

	/********************************************************************/
	/*	Initialize:  SDDS                          						*/
	/********************************************************************/
	//SDDS_CONTROL	For normal operation program the constant value 0x93. No Hsync Corr	0x92
	RB_WriteByte(SDDS_CONTROL,	(K_MAIN << K_MAIN_SHIFT) | (K_DIFF << K_DIFF_SHIFT)),
	//SDDS_INITIAL_FREQ	Set Initial Frequency of 80 MHz. (80/200) * 2**24 = 0x666666
	//RB_WriteTriBytes(SDDS_INITIAL_FREQ_HI,	0x666666),
	//SDDS_INITIAL_FREQ	Set Initial Frequency of 80 MHz. (80/214) * 2**24 = 0x5fb370
	RB_WriteDWord(SDDS_INITIAL_FREQ,	SDDS_INIT_FREQ_VAL),
	//SDDS_STEP_VAL	set sdds compare period step to ?? sclk period	0xC0
	RB_WriteByte(SDDS_STEP_VAL,INIT_SDDS_STEP_VAL),
	//SDDS_FREQ_THRESH	Write a value of "0"	0x00
	RB_WriteByte(SDDS_FREQUENCY_DELTA_THRESH, 0x00),
	//SDDS_INIT	start ddds
	RB_WriteByte(SDDS_INIT,1),
	// SDDS_TEST_CTRL1 set 6 for stable sclk in xga 85hz.
	RB_WriteByte(SDDS_TEST_CNTRL0, 0x00),
	RB_WriteByte(SDDS_TEST_CNTRL1, 10),

	/********************************************************************/
	/*	Initialize:  DDDS                          						*/
	/********************************************************************/
	//DDDS_CONTROL	For normal operation program the constant value 0x90.
	//	SPREAD_SP_EN bit set based on panel 	0x90, or 0x92
	// DDDS_CONTROL moved to System_Init since contains run time variable
	// PanelSpread_Spect_En.
	//	RB_WriteByte(DDDS_CONTROL, ( 4 << D_K_DIFF_SHIFT) | (4 <<D_K_MAIN_SHIFT) | (SPREAD_SP_EN & Panel_Spread_Spect_En)),
	//DDDS_INITIAL_FREQ	Initial Freq to typical panel:
	//	(65/200) * 2**24 = 0x533333
	//RB_WriteTriBytes(DDDS_INITIAL_FREQ_HI, 0x533333),
	//	(65/214) * 2**24 = 0x4dc1cb
	RB_WriteDWord(DDDS_INITIAL_FREQ, DDDS_INIT_FREQ_VAL),
	//DDDS_FREQ_THRESH	Write a value of "0"	0x0
	RB_WriteByte(DDDS_FREQUENCY_DELTA_THRESH, 0x00),
	//DDDS_ESM_CTRL	Spread spectrum based on panel
	// DDDS_ESM_CTRL moved to System_Init since contains run time variable
	// PanelSpreadSpectrumCtrl.
	//	RB_WriteByte(DDDS_ESM_CTRL, PanelSpreadSpectrumCtrl),
	//DDDS_INIT	start ddds
	RB_WriteByte(DDDS_INIT,1),

	/********************************************************************/
	/*	Initialize:  ADC                           						*/
	/********************************************************************/
	//ADC_CONTROL	Automatically Detected for each SYNC type (0x5D When HS is active low,  invert it in ADC)	0x59
	RB_WriteByte(ADC_CONTROL,	(ADC_ENABLE | CLAMP_EN |	AC_COUPLE_EN |  ( SOG_SENSITIVITY  << SOG_SENS_SHIFT))),
	//SYNC_TIP_CLAMP_END	Default for all modes is 0x08	0x08
	RB_WriteByte(SYNC_TIP_CLAMP_END, 0x00),
	//SYNC_TIP_CLAMP_TIME_OUT	1.2 * longest line length / (16 * tclk) = 1.2 * 63.5 / (16 * 0.07) = 68 = 0x44	0x44
	RB_WriteByte(SYNC_TIP_CLAMP_TIME_OUT, 0x44),
	//ADC_CLAMP_START	Clamp start is programmed to 1  	0X01
	RB_WriteByte(ADC_CLAMPSTART, 0x00), // 0x01
	//ADC_CLAMPWIDTH	Clam Width is programmed to 2. 	0X02
	RB_WriteByte(ADC_CLAMPWIDTH, 0x01), // 0x02
	//ADC_FAS_hi/lo	constant to 0x040C	0x040C
	RB_WriteByte(ADC_FAS1, MSB_CLMP),
	RB_WriteByte(ADC_FAS2, 0x03 << ADC_BW_SHIFT),
	//ADC_TEST_hi/lo	constant to 0x0010	0x0010
	RB_WriteByte(ADC_TEST1, 0x00),
	RB_WriteByte(ADC_TEST2, DIS_RACLK | I_BIAS),
	//ADC_MODULATION	set to 0 before it perform the adc linearity calibration	0x00
	//	RB_WriteByte(ADC_MODULATION, 0x00),

   // Set CDAC_GN before performing ADC Linearity.
	RB_WriteByte(MISSING_CODE_TEST, CDAC_GN),


	/********************************************************************/
	/*	Initialize:  DVI                           						*/
	/********************************************************************/
	RB_WriteByte(DVI_CTRL,          (RTERM_MAN |  ( RTERM_49Ohm << RTERM_SHIFT ))),
	RB_WriteByte(DVI_EQUALIZATION,  0x00 ), //set equalizer freq response to normal ( < 1m cable)
	RB_WriteByte(DVI_CONFIG,        PWRUP_STANDBY | MANPHASE_EN | RX_FREQ_HIGH ), //Stay in standby state
	RB_WriteByte(DVI_PLL,           DLPF | BW_4M | (0x02 << MS_SHIFT)),
	RB_WriteByte(DVI_DE, 	        DE_THRESHOLD_64  | DE_SEL_ALL), // | (3 << PHASE_SEL_SHIFT)
	RB_WriteByte(CLKMEAS_CONTROL,   CLKMEAS_WIDTH_256 | CLKMEAS_SRC_DVI),

	/********************************************************************/
	/*	Initialize:  IP and IFM                    						*/
	/********************************************************************/
	//IP_CONTROL	enable input capture 	0x04
	RB_WriteByte(IP_CONTROL, IP_RUN_EN | IP_SOURCE_RGB),
	//IPH_ACT_START	programmed with constant value 8
	RB_WriteWord(IPH_ACT_START, 		IPHS_ActiveStart),
	//IPV_ACT_START_ODD	constant to 10
	RB_WriteWord(IPV_ACT_START_ODD, 	IPVS_ActiveStart),
	//IPV_ACT_START_EVEN	constant to 10
	RB_WriteWord(IPV_ACT_START_EVEN, IPVS_ActiveStart),
	//SRC_VTOTAL	panel typical Vtotal	806
	RB_WriteWord(SRC_VTOTAL, 0),
	//IP_FLAGLINE	initial constant to 0x01	0x01
	RB_WriteWord(IP_FLAGLINE, 1),
	//CSYNC_CONTROL	Automatically Detected for each SYNC type	0x4E
	RB_WriteByte(CSYNC_CONTROL,	 HSRAW_DIS | CSYNC_SAMPLE4),

    RB_WriteByte(IFM_CTRL, INT_MODE_SEL | IFM_MEASEN | IFM_EN | INT_ODD_EN | IFM_HOFFSETEN),

	//IFM_WATCHDOG, program with large enough values to cover C-sync modes
	//which don't have Hsync pulses during the Vsync.
	RB_WriteByte(IFM_WATCHDOG, 	0x46),

	//IFM_FIELD_CONTROL	Fixed value. based on 14.3Mhz Tclk	0x20
	RB_WriteByte(IFM_FIELD_CONTROL, 	0x30),
	//IFM_HLINE	Fixed value to 0x0040	0x0040
	RB_WriteWord(IFM_HLINE, 		0x0040),
	//IFM_CHANGE	Fixed to Threshold of 8	0x24
	//RB_WriteByte(IFM_CHANGE, 	IFM_CHG_THRESH_8 | (IFM_CHG_THRESH_8 << V_CHG_THRESH_SHIFT)),
	// #PDR14327,  Add DVI DE change threshold level (DE_CHG_THRESH)  for DVI DE jitter issue (Default 0), Louis 010305
	RB_WriteByte(IFM_CHANGE, 	IFM_CHG_THRESH_8 | (IFM_CHG_THRESH_8 << V_CHG_THRESH_SHIFT) | (DE_CHG_THRESH_0 << DE_CHG_THRESH_SHIFT)),

    RB_WriteByte(IBD_CONTROL, 	(IBD_THRESH_32 << DET_THOLD_SHIFT) | (RGB_SEL_RGB << RGB_SEL_SHIFT)),
	//SUMDIFF_MINMAX	initially 0x07. Used for auto adjust	0x07
	RB_WriteByte(SUMDIFF_MINMAX, 	0x07),
	//SUMDIFF_THRESHOLD	Fixed to 0x02	0x02
	RB_WriteByte(SDIFF_THRESHOLD, 0x02),

	RB_WriteByte(ALT_DISP_ADJ_LINES, 32),//8),

	/********************************************************************/
	/*	Initialize:  FILTER                        						*/
	/********************************************************************/
    // set LCLK to 10% higher than maximum panal clock (dclk)
	 RB_WriteWord(LCLK_FREQ, ((LCLK_MHZ << 16) / RCLK_MHZ)),
	RB_WriteByte(FILTER_CONTROL, LCLK_SEL | FILTER_MODE),
	RB_WriteByte(HOR_INIT_PHASE, 0x10),
	RB_WriteByte(VERT_INIT_PHASE, 0x10),
	RB_WriteByte(HOR_ALT_PHASE, 0x10),
	RB_WriteByte(VERT_ALT_PHASE, 0x1F),

	RB_WriteByte(DP_SYNC_ADJUST_CTRL, DP_ADJ_AUTO_EN),

	RB_WriteByte(CCF_TESTREG, (OSD_4BPP_FIX_DISABLE | THRESH_OPT)),

   // 0401 Move to Panel segment
  // #if (PanelDepth == 8)
  //		RB_WriteByte(MULT_DITHER_CTRL, (MULT_DITH_TRUNC | MULT_DITH_1FRAME)),
   //#else
  //		RB_WriteByte(MULT_DITHER_CTRL, MULT_DITH_SPATIAL),
   //#endif

	// Panel parameter init has been moved to InitPanelParameters() above
	// since panel parameters are now run time variables, and can not be
	// initiaized with gm_WriteRegBlock routine.

RB_WriteByteEnd(HOST_CONTROL,	IPFORCE_UPDATE | DPFORCE_UPDATE)

//******************************************************************
// FUNCTION    :  gm_Print
// DESCRIPTION :	If debugging using JTAG, then we don't want any
//						UART activity since they share the same port pins.
//						if DEBUG_JTAG is enabled, then this gm_Print function
// 					will override the GSEL gm_Print function and effectively
//						stop all prints.
//******************************************************************
#if (DEBUG_JTAG == 1)
#pragma warn -par
void far gm_Print (const char far *Bp_Str, WORD W_Value)
{
	return;
}
#pragma warn +par
#endif

⌨️ 快捷键说明

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