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

📄 power.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*	$Workfile:   power.c  $	$Revision:   1.76  $	$Date:   Aug 23 2006 23:04:06  $*///******************************************************************////		Copyright (C) 2003.  GENESIS MICROCHIP INC.// All rights reserved.  No part of this program may be reproduced////	Genesis Microchip Inc., 165 Commerce Valley Dr. West//		Thornhill, Ontario, Canada, L3T 7V8////================================================================//// MODULE:      power.c////******************************************************************#include ".\inc\all.h"#include "system\mcu186.h"//******************************************************************//             Local Equates and Enums//******************************************************************#define DEBUG_PH 0#if DEBUG_PH && DEBUG_MSG	 #define	msg(a,b)	gm_Print((const char far *)a,b)#else	 #define msg(a,b)#endif#define  PWRDWN_OSDACK_TIMEOUT            100    // * 10ms = 1 Sec#if defined(PHOENIX_U) && ((defined(EV_BD_B_57XX) && ( BOARD == EV_BD_B_57XX )) || (defined(RD3_57XX) && ( BOARD == RD3_57XX )))#define	PWRDWN_NOTICE_WAIT               900    // * 10ms = Five Seconds#else#define	PWRDWN_NOTICE_WAIT               500    // * 10ms = Five Seconds#endif// Total Powerdown wait timeout = 6 seconds#define	POWER_DOWN_WAIT_TIMEOUT     PWRDWN_NOTICE_WAIT+PWRDWN_OSDACK_TIMEOUTtypedef enum PwrHandlerStatesEnum{   PWR_KEY_OFF_STATE = 1,   PWR_ON_STATE,   PWR_STANDBY_STATE,   PWR_SUSPEND_STATE,   PWR_DOWN_WAIT_STATE,   PWR_DOWN_STATE,   PWR_INVALID_STATE = 0xFF} PwrHandlerStates;//******************************************************************//					LOCAL variables//******************************************************************static BYTE Msg, OsdNoticed = gmd_FALSE;static BYTE PowerHandlerState = PWR_ON_STATE;/*PWR_KEY_OFF_STATE; *///******************************************************************//					LOCAL function prototypes//******************************************************************static void __near PowerUp(void);static void __near PowerDown(void);static PwrHandlerStates __near DetNewPwrState( BYTE SyncState );//******************************************************************//******************************************************************//					External interfaces//******************************************************************extern BYTE XROM_StateMachine_Settle_Count;extern BYTE InputCableDetect(void);	// 1124extern BOOL FirstPowerUp;#if !defined(TUCSON) && HDCP_ENABLE_4TH    extern void Hdcp_DVIPowerON(void);extern void Hdcp_DVIPowerOFF(void);#endif// Stub Function.BYTE usrsync = gmd_HONVON;extern BYTE SoftPowerReInitforTestPattern;BYTE gm_GetSyncStateStub( void ) { return usrsync; }#define  gm_GetSyncStateMain    gm_GetSyncStateStub//*****************************************************************// FUNCTION     :   SleepMode// DESCRIPTION  :   Based on input parameter, sets up ADC/DVI/IFM for//                  working in sleep mode.  For sleep mode, ADC is off but//						  synctip is enabled.  DVI is in standby mode, and IFM//                  is on.// INPUT        :   TRUE/FALSE// OUTPUT       :   None// GLOBALS      :   None// USED_REGS    :   None directly//******************************************************************void SleepMode(BYTE enable){	if(enable)	{	#ifdef VPORT_CTRL		gm_PowerDown(gmd_VPORT_BLK);	#endif		// Powering down DVI_BLK will actually put DVI into STANDBY.		gm_PowerDown(gmd_DVI_BLK);		#if !defined(TUCSON) && HDCP_ENABLE_4TH		Hdcp_DVIPowerOFF();		#endif						// synctip enabled automatically enabled when ADC powered down		gm_PowerDown(gmd_ADC_BLK);		gm_PowerDown(gmd_SDDS_BLK);		gm_PowerDown(gmd_RCLK_BLK);		gm_PowerUp(gmd_IFM_BLK);	}	else	{		PowerUpDevice(InputPortArray[gmvb_CurrentPortMain].PowerDev);	}}//******************************************************************// FUNCTION     :   PowerUpDevice// USAGE        :   Power up device and associated input blocks.// DESCRIPTION  :   Function powers up device and any associated//                  input blocks like SDDS or LCLK etc.//// INPUT        :   PowerControlDeviceType, device to power up.// OUTPUT       :   None// GLOBALS      :   None// USED_REGS    :   None directly//******************************************************************void PowerUpDevice(PowerControlDeviceType dev){#ifdef PHOENIX_U   // Add for DVI DPMS issue	if (SystemFlags.DVI_Sleep)	{		gm_SetRegBitsByte(BYPASS,  POWER_DOWN);		gm_ClearAndSetBitsByte(DDS_CONTROL, (SDDS_ENABLE | DDDS_ENABLE), ( FORCE_SDDS_OPLOOP | FORCE_DDDS_OPLOOP));		gm_WriteRegByte(RCLK_CONFIG,  RCLK_POWER_DN | RCLK_RESET );		SystemFlags.DVI_Sleep = gmd_FALSE;	}#endif	gm_PowerUp(gmd_RCLK_BLK);	gm_PowerUp(gmd_IFM_BLK);	gm_PowerUp(gmd_IP_BLK);	SystemFlags.MH_SleepMode = gmd_FALSE;   switch(dev)   {		case gmd_PCD_NONE :			return; //no device top power up.		case gmd_PCD_RGB :			msg("PowerUpDevice: RGB",0);			gm_PowerUp( gmd_ADC_BLK);			gm_PowerUp( gmd_SDDS_BLK );			break;		case gmd_PCD_DVI :			msg("PowerUpDevice: DVI",0);			#if !defined(TUCSON) && HDCP_ENABLE_4TH			Hdcp_DVIPowerON();			#endif									gm_PowerUp(gmd_DVI_BLK);			gm_PowerDown( gmd_SDDS_BLK );			break;		case gmd_PCD_VIDEO :			msg("PowerUpDevice: Video",0);      #ifdef VPORT_CTRL			gm_PowerUp(gmd_VPORT_BLK);      #endif			gm_PowerDown( gmd_SDDS_BLK );			// initialize video decoder.      #if USE_GSEL_DRVR_MODEL         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);      #endif // USE_GSEL_DRVR_MODEL			break;      default :         msg("PowerUpDevice: Unknown device!! %x",dev);         return;   }// switch dev}//******************************************************************// FUNCTION     :   PowerDownDevice// USAGE        :   Power down device and associated input blocks.// DESCRIPTION  :   Function powers down device and any associated//                  input blocks like SDDS or LCLK etc.//// INPUT        :   PowerControlDeviceType, device to power down.// OUTPUT       :   None// GLOBALS      :   None// USED_REGS    :   None directly//******************************************************************void PowerDownDevice(PowerControlDeviceType dev){	gm_PowerDown( gmd_IFM_BLK );	gm_PowerDown( gmd_IP_BLK );   switch(dev)	{		case gmd_PCD_NONE :         return; //no device top power down.		case gmd_PCD_RGB :         msg("PowerDownDevice: RGB",0);			gm_PowerDown(gmd_ADC_BLK);			gm_PowerDown( gmd_SDDS_BLK );			break;		case gmd_PCD_DVI :         msg("PowerDownDevice: DVI",0);			#if !defined(TUCSON) && HDCP_ENABLE_4TH			Hdcp_DVIPowerOFF();			#endif		 			gm_PowerDown(gmd_DVI_BLK);			break;		case gmd_PCD_VIDEO :         msg("PowerDownDevice: Video",0);#ifdef VPORT_CTRL		gm_PowerDown(gmd_VPORT_BLK);#endif#if USE_GSEL_DRVR_MODEL		gm_CallDriver(DEV_VIDEO_DECODER, gmd_VID_PWR_DOWN, NULL_PTR, NULL_PTR);#endif					break;      default :         msg("PowerDownDevice: Unknown device!! %x",dev);         return;   }// switch dev}//******************************************************************// FUNCTION     :   PowerUp// USAGE        :   Restore system from low power state.// DESCRIPTION  :   This function brings up the system from low//                  mode waits for 200 msec and signalizes that//                  system is active.//// INPUT        :   None// OUTPUT       :   None// GLOBALS      :   PowerUpFlag// USED_REGS    :   None directly//******************************************************************static void __near PowerUp(void){	if (PowerUpFlag.PowerOnState == gmd_TRUE )	{   	msg("Already Power is ON",0);   	return;	}#ifdef PHOENIX_U   // Add for DVI DPMS issue	if (SystemFlags.DVI_Sleep)	{		gm_SetRegBitsByte(BYPASS,  POWER_DOWN);		gm_ClearAndSetBitsByte(DDS_CONTROL, (SDDS_ENABLE | DDDS_ENABLE), ( FORCE_SDDS_OPLOOP | FORCE_DDDS_OPLOOP));		gm_WriteRegByte(RCLK_CONFIG,  RCLK_POWER_DN | RCLK_RESET );		SystemFlags.DVI_Sleep = gmd_FALSE;	}#endif	msg("PowerUp",0);#if DEBUG_PH && DEBUG_MSG	if ( gmc_SerialBaudRate == 115200UL )	{		msg("Restoring baud rate to 115200", 0);	}	else	{		msg("Restoring baud rate to %d", (WORD)(gmc_SerialBaudRate));	}#endif#if !defined(TUCSON) && HDCP_ENABLE_4TH	Hdcp_DVIPowerON();#endif   // power up GM chip	gm_PowerUp(gmd_ALL_BLKS); 	// Restore gm chip from low power state. #ifdef PHOENIX_U   //gm_PowerUpPanel();          // Test 1112#else   gm_PowerUpPanel();#endif	// Reinitialize timers, since CPU is running at full speed.	gm_TimerInit( gmc_CPU_CLK_KHZ * 1000UL, &UserTimers[0],			Num10mstimers, Num100mstimers);	// Reinitialize serial port for new CPU clock frequency and higher baud rate.   gm_UartInit(gmc_CPU_CLK_KHZ * 1000UL, gmc_SerialBaudRate);	// Reinitialize IR with new CPU frequency.    #ifdef PORT_IR_USED	    IRInit(gmc_CPU_CLK_KHZ * 1000UL);    #endif#if USE_AUDIO && USE_GSEL_DRVR_MODEL    gm_CallDriver(DEV_AUDIO_DECODER, gmd_AUD_SET_STANDBY_ON, AUDIO_STANDBY_OFF, NULL_PTR);#endif	// set flag for power ON	PowerUpFlag.PowerOnState = gmd_TRUE;	// Run keypad scanning from ISR   StartGetKeyISR();	// Speed up the detection time and reduce more power consumption.	gm_Delay1ms(10);}//******************************************************************// FUNCTION     :   PowerDown// USAGE        :   Put system in low power state.// DESCRIPTION  :   This function puts the system in low power mode//                  waits for 200 msec and signalizes that system//                  is in low power mode.//// INPUT        :   None// OUTPUT       :   None// GLOBALS      :   PowerUpFlag// USED_REGS    :   None directly//******************************************************************static void __near PowerDown(void){	BYTE B_TclkDivisor = 0;#ifdef PHOENIX_U     // Add for DVI DPMS issue	if ((PowerUpFlag.PowerOnState == gmd_FALSE) && (SystemFlags.PowerSaving != gmd_TRUE))	{		msg("Already Power is DOWN",0);		return;	}	else if (SystemFlags.DVI_Sleep)	{		SystemFlags.DVI_Sleep = gmd_FALSE;	}#else	if (PowerUpFlag.PowerOnState == gmd_FALSE)	{		msg("Already Power is DOWN",0);		return;	}#endif	//Osd_Hide();	msg("Power Down",0);#if USE_AUDIO && USE_GSEL_DRVR_MODEL    gm_CallDriver(DEV_AUDIO_DECODER, gmd_AUD_SET_STANDBY_ON, AUDIO_STANDBY_ON, NULL_PTR);#endif	// Compute the TCLK divisor based on the OCM frequency in low power.	if(gmc_OCM_CLK_POWERDOWN != 0)	{		B_TclkDivisor = (BYTE)(((gmc_T_CLK_KHZ * 10) / gmc_OCM_CLK_POWERDOWN) + 5) / 10;	}#if DEBUG_PH && DEBUG_MSG	if ( B_TclkDivisor >= 1 )	{	#if SBAUD_IN_LOW_POWER == 115200UL		msg("Changing baud rate to 115200", 0);	#else		msg("Changing baud rate to %d", (WORD)SBAUD_IN_LOW_POWER);	#endif	}#endif	#if !defined(TUCSON) && HDCP_ENABLE_4TH	Hdcp_DVIPowerOFF();	#endif	// power down GM chip	gm_PowerDown(gmd_ALL_BLKS); 	// Put gm52xx in low power state.	// Reinitialize the timers with the lower clock frequency. If a TCLK	// divisor is programmed, adjust the CPU frequency accordingly. Also,	// reinitialize the serial and IR drivers with new CPU frequency.	if ( B_TclkDivisor >= 1 )	{		gm_TimerInit( (gmc_T_CLK_KHZ * 1000UL / (DWORD)(B_TclkDivisor)),				&UserTimers[0], Num10mstimers, Num100mstimers );		gm_UartInit( (gmc_T_CLK_KHZ * 1000UL / (DWORD)(B_TclkDivisor)),				SBAUD_IN_LOW_POWER );	#ifdef PORT_IR_USED	    IRInit(gmc_T_CLK_KHZ * 1000UL / (DWORD)(B_TclkDivisor));	#endif	}	else	{		gm_TimerInit( gmc_T_CLK_KHZ * 1000UL, &UserTimers[0],				Num10mstimers, Num100mstimers);		gm_UartInit(gmc_T_CLK_KHZ * 1000UL, gmc_SerialBaudRate);

⌨️ 快捷键说明

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