📄 57xx-init.c
字号:
/*
$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 + -