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

📄 57xx-init.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
	$Workfile:   57xx-init.c  $
	$Revision:   1.18  $
	$Date:   Aug 23 2006 23:19:06  $
*/

//******************************************************************
//
//          Copyright (C) 2002. GENESIS MICROCHIP INC.
//  All rights reserved.  No part of this program may be reproduced.
//
//	Genesis Microchip Corp., 2150 Gold Street
//			Alviso, CA 95002	USA
//  Genesis Microchip Inc., 165 Commerce Valley Dr. West
//          Thornhill, Ontario, Canada, L3T 7V8
//
//================================================================
//
//  MODULE: 52xx_init.c
//
//************************************************************************
#include "..\inc\all.h"

BYTE	ROM  FirmwareVersion[] = "57xx F/W V1.7 RC2"; // firmware version string

void InitGM(void);
void InitGamma(void);
void NativeModeTest( void );
static void _near Write_PanelCommonBlock(void);
static void _near Write_PanelInitBlock(void);
static void _near Write_SystemInitBlock(void);
extern void far gmi_SetVEDIDHandler(void);
#if USE_FLASHSPEED_AUTODETECT
extern gmt_RET_STAT AutoDetectAndSetSpiClock(void);
#endif
//extern gmt_REG_BLOCK ROM SystemInitBlock[];
//extern gmt_REG_BLOCK ROM PanelInitBlock[];
//extern gmt_REG_BLOCK ROM PanelCommonBlock[];

#define DEBUG_INIT				1
#define DEBUG_INIT_EXTENDED	0

#if	DEBUG_MSG && DEBUG_INIT
	#define	msg(a,b)	gm_Print((const char far *)a,b)
#else
	#define	msg(a,b)
#endif

#if DEBUG_MSG && DEBUG_INIT_EXTENDED
	#define	msgx(a,b)	gm_Print((const char far *)a,b)
#else
	#define msgx(a,b)
#endif

//***************************************************************
// GSEL Constant definitions:
//***************************************************************
DWORD ROM gmc_SerialBaudRate			= SERIAL_BAUD_RATE;
DWORD ROM gmc_T_CLK_KHZ 				= T_CLK_KHZ;
DWORD ROM gmc_CPU_CLK_KHZ 				= CPU_CLK_KHZ;
BYTE  ROM gmc_CPU_SPEED					= CPU_SPEED;
BYTE  ROM gmc_CPU_WaitStates_NS 		= FLASH_SPEED_NS;
WORD  ROM gmc_I2cSclk_Khz          		= I2C_SPEED;
DWORD ROM gmc_OCM_CLK_POWERDOWN     	= OCM_CLK_PWRDOWN_KHZ;
WORD  ROM gmc_BrightnessPWMPort 		= BRIGHTNESS_PWM_PORT;
//BYTE  ROM gmc_SPI_Clock_Sel			= (SPI_DEFAULT_CLOCK_SEL << 4);
BYTE  gmc_SPI_Clock_Sel					= (SPI_DEFAULT_CLOCK_SEL << 4);
BYTE  ROM gmc_ADC_OFFSET2_YUV_MIN_VALUE = 16;
BYTE  ROM gmc_ADC_OFFSET2_Y_MAX_VALUE 	= 235;
BYTE  ROM gmc_ADC_OFFSET2_UV_MAX_VALUE 	= 240;


WORD  gmc_PanelWidth;
WORD  gmc_PanelHeight;
WORD  gmc_PanelVActiveStart;
WORD  gmc_PanelVActiveEnd;
BYTE   gmc_PanelDepth;		// Add for panel array 0401

BYTE  ROM gmc_IPHS_ActiveStart			= IPHS_ActiveStart;
BYTE  ROM gmc_IPVS_ActiveStart			= IPVS_ActiveStart;

BYTE  gmvb_CurrentPortMain 				= 0x00;


#ifdef ZERO_K_MAIN									// gives cleaner display sometimes
	WORD  ROM gmc_EnableKMainOfZero 	= 1000;		// min sclk freq to use ZERO_K_MAIN (units 100KHz) 0=disable feature
#endif

#if USE_ACM_3D
//starting address of ACM3D zone1
	WORD	ROM gmc_ACM_ZONE1_START 	= ACM_ZONE1_START;
#endif

static void _near InitPanelParameters(void);

//***************************************************************
// Application Function.
// Prints the software revision and chip ID
//***************************************************************
void PrintVersion(void)
{
	msg((const char *)FirmwareVersion,0);
	msg(__TIME__"  "__DATE__,0);
	msg(PanelName,0);
	msg("TCLK = %dMHz", T_CLK_MHZ);
	msgx("IROM major: %d",gm_ISPGetParameter(gmd_IROM_MAJ_VERSION, NULL_PTR));
	msgx("IROM minor: %d",gm_ISPGetParameter(gmd_IROM_MINOR_VERSION, NULL_PTR));
	msgx("IROM build: %d",gm_ISPGetParameter(gmd_IROM_BUILDNO, NULL_PTR));

}

void ext_InitDdc2BiIrq(void);

//***************************************************************
// Application Function.
// Initializes System Parameters calling Driver functions.
//***************************************************************
void System_Init(void)
{
   DWORD ddsInitFreqValue;
   BYTE B_IsIntegrityCheckPassed = gmd_TRUE;

#if Support_UXGA
   gm_WriteRegByte(RCLK_FREQUENCY, RCLK_PLL_VAL),
   gm_Delay1ms(2);
   gm_WriteRegWord(FCLK_FREQ,FCLK_FREQ_VAL);
#endif

   // For lower power consumption, oscillator AGC loop on.
   gm_SetRegBitsByte(RCLK_PLL, AGCON);
   gm_WriteRegByte(POWER_STATUS, BrownOutLevel);

   // Initialize SPI clock to correct frequency

#if USE_FLASHSPEED_AUTODETECT	
	if(!AutoDetectAndSetSpiClock())
		gm_WriteRegByte( SPI_CONTROL, gmc_SPI_Clock_Sel );  //Auto Detect Failed. Set default SPI clock	
#else
   gm_WriteRegByte( SPI_CONTROL, gmc_SPI_Clock_Sel );
#endif
   msg("Set SPI Clock= %d Mhz", (WORD)(CPU_CLK_KHZ/1000)/(((gm_ReadRegByte(SPI_CONTROL)&SPI_CLK_SEL)>>4)+2));

#if 0 //(NVRAM_USE_FLASH == 0)   // Do not enable SPI cache anytime. Bug in Rev AA silicon
   gm_WriteRegByte(SPI_CACHE_CTRL, SPI_CACHE_EN);
#endif

   InitNVRAM();
   Write_SystemInitBlock();

#if (NVRAM_USE_FLASH == 0)
   // Using I2C NVRAM device
	#if 0   
	//If connect NVRAM_GPIO_SCL/SDA to GPIO8/9, Set GSEL_USE_I2C_SW57 = 0 
	//then, use this initial function to initial I-ROM S/W I2C Function
   	gm_I2cInitSW(5, NVRAM_GPIO_SCL, NVRAM_GPIO_SDA);		
	#else
	//If connect NVRAM_GPIO_SCL/SDA to GPIO30/31, Set GSEL_USE_I2C_SW57 = 1 
	//then, use this to initial patch S/W I2C Function
  	gm_I2cInit_SW(0, NVRAM_GPIO_SCL, NVRAM_GPIO_SDA);
	#endif
#endif

#if USE_VPORT
	//Must Set GSEL_USE_I2C_SW57 = 1 when this is used.
   gm_I2cInit_SW(0, DEV_GPIO_SCL, DEV_GPIO_SDA);
#endif

   InitPanelParameters();

   //Init DDDS_INITIAL_FREQ according to panel resolution
   ddsInitFreqValue = (((DWORD)PanelMinHTotal*(DWORD)PanelTypVTotal)*60UL)/1000000UL;  //in MHz
   ddsInitFreqValue = (ddsInitFreqValue*4096*4096)/RCLK_MHZ;
   gm_WriteRegDWord(DDDS_INITIAL_FREQ, ddsInitFreqValue);

   gm_SetDisplayFreeRunMode();// quickly put display in free run.


   // moved CLOCK_CONFIG out of SystemInitBlock so we can set individual bits
   // in CLOCK_CONFIG, leaving OCM_CLKSEL undisturbed.
   gm_SetRegBitsByte(CLOCK_CONFIG, IP_CLK_RGB | DP_CLK_DCLK);

   //Set to maximum ADC sampling BW initially to prevent image is darker after AC power on issue.
   gmvw_InputFilter[DEF_CHANNEL] = DEFAULT_FILTER;

   // Need to replace to Calibrate ADC
   // initialize chip ADC block
#if !(USE_ADC_CALIBRATION_ISR)
   gm_AutoADCInitMain();
#endif

#if USE_VPORT
   // Install the functions that powers Up/Down external devices(except panel)
   gm_SetExtDevicesPowerUpMain(ExtPowerUp);
   gm_SetExtDevicesPowerDownMain(ExtPowerDown);
#endif

   // ACC - 3-bin
#if USE_ACC_ACM
   gm_InitACC(&ACCData_Vivid);
#endif

#if USE_GAMMA
   // initialize RGB output gamma table
   InitGamma();
#endif

#if !defined(TUCSON) && HDCP_ENABLE_4TH
   HDCP_Init();
#endif

#if defined(NVRAM_BLOCK_IntegrityCheck_WB_Used)
	#if USE_NVRAM_INTEGRITY_CHECK
	   B_IsIntegrityCheckPassed = GetIntegrityCheckSettings();

	   if(B_IsIntegrityCheckPassed)
	      msgx("NVRAM integrity check passed", 0);
	   else
	   {
	      msg("NVRAM integrity check not passed", 0);
	      SaveIntegrityCheckSettings();
	   }
	#else
	    msg("NVRAM integrity check disabled", 0);
	#endif
#endif

#ifdef NVRAM_BLOCK_ColorTemp_WB_Used
   InitColorTempSettings(B_IsIntegrityCheckPassed);
#endif

#ifdef UserPrefPowerOnTimes
   ReadFactoryDependentSettings();
   UserPrefPowerOnTimes++;    // to increase time of powered-on
   SaveFactoryDependentSettings();
   msgx("Factory: MonitorOnTime_offset = %d", MonitorOnTime_offset);
   msgx("Factory: BacklightOnTime = 0x%x hours", UserPrefBacklightOnTime);
   msgx("Factory: MonitorOnTime = 0x%x hours", UserPrefMonitorOnTime);
   msgx("Factory: UserPrefPowerOnTimes = %d time", UserPrefPowerOnTimes);
#endif

   InitModeIndependentSettings(B_IsIntegrityCheckPassed);

   AdjustAllModeIndependentSettings();

   RestoreSystemInfoFromNVRAM(B_IsIntegrityCheckPassed);

   InitializePresetModes(B_IsIntegrityCheckPassed);

   InitADCCalibrationISR(B_IsIntegrityCheckPassed);

   InitModeHandler();

#if USE_VPORT && USE_GSEL_DRVR_MODEL
   gm_AddDriver(DEV_VID_FUNC_ENTRY, DEV_VIDEO_DECODER);
   // gm_CallDriver(DEV_VIDEO_DECODER, gmd_VID_PWR_UP,            NULL_PTR,        NULL_PTR);
   // gm_CallDriver(DEV_VIDEO_DECODER, gmd_VID_SET_MODE,          VDD_MODE_INIT,   NULL_PTR);
   // gm_CallDriver(DEV_VIDEO_DECODER, gmd_VID_SET_OUTPUT_FORMAT, VDD_OUTTYPE_656, NULL_PTR);
   // gm_CallDriver(DEV_VIDEO_DECODER, gmd_VID_SET_MODE,          VDD_MODE_NTSC,   NULL_PTR);   //set default as NTSC
#endif

#if USE_AUDIO && USE_GSEL_DRVR_MODEL
   gm_AddDriver(DEV_AUD_FUNC_ENTRY, DEV_AUDIO_DECODER);
   gm_CallDriver(DEV_AUDIO_DECODER, gmd_AUD_SET_CONFIG, AUDIO_INIT, NULL_PTR);
#endif

#if USE_DDC2BiPrint
   // Enable the clock stretch to make DDC2Bi prints more reliable.
   gm_SetRegBitsByte(DDC2B_CTRL2, CLOCK_STRETCH_EN);
#endif

#if DDCCI_CUSTOM_SUPPORT
   //  customers using non-compliant protocols may write their own
   //  "ddc2bi" interrupt handler which may be installed by defining
   //  DDCCI_SUPPORT (see inc\options.h)
   ext_InitDdc2BiIrq();
#endif

#if THEFT_DETERRENCE_SUPPORT
   DDC2Bi_IsTheftDeterrenceEnable();
#endif

#if USE_VEDID
   gmi_SetVEDIDHandler();
#endif // USE_VEDID

   // Run keypad scanning from ISR
   StartGetKeyISR();
}

//******************************************************************
// FUNCTION    :  InitPanelParameters
// DESCRIPTION :	Panel parameters below have been moved out of SystemInitBlock
// 		since panel parameters are now run time variables, and can not be
// 		initiaized with gm_WriteRegBlock routine.
// SYNTEX		:	void InitPanelParameters(void)

⌨️ 快捷键说明

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