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

📄 drvpower.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 3 页
字号:
    return FALSE;
}


//-------------------------------------------------------------------------------------------------
/// Power wakeup : Keypad Wakeup
/// @return None
//-------------------------------------------------------------------------------------------------
// see msKeypad.c: MDrv_Power_CheckPowerOnKeyPad


//-------------------------------------------------------------------------------------------------
/// Power wakeup : RTC Wakeup
/// @return None
//-------------------------------------------------------------------------------------------------
void MDrv_Power_RTCCallback()
{
    // MDrv_Power_SetMode(PM_MODE_ON);
    //gRTCWakeup = TRUE;
    //MDrv_RTC_ClearInterrupt();
}


//-------------------------------------------------------------------------------------------------
/// Reset and power up : used in MDrvPowerStandby mode
/// @param
/// @return
///
//-------------------------------------------------------------------------------------------------
void MDrv_Power_ResetAndPowerUp()
{
    DRVPOWER_DBG(printf("Reset and power up now!\r\n"));

    // Change power management status
    XBYTE[PM_OFF_FLAG] = (XBYTE[PM_OFF_FLAG] & ~PM_MODE_MASK) | PM_MODE_ON_EXEC;
    XBYTE[PM_OFF_FLAG] = XBYTE[PM_OFF_FLAG] & ~PM_P3_RESET_FLAG;

    // disable interrupt.
    MDrv_Sys_SetInterrupt( GLOBAL, DISABLE );

    MDrv_Sys_RunCodeInSPI();

    MDrv_Sys_Reboot();
}

// S2 do not need MCU reset to change code fetch path
// please call msAPI_Power_PowerDown_EXEC() directly
#if 0
//-------------------------------------------------------------------------------------------------
/// Reset and power down : used in MDrvPowerStandby mode
/// @param
/// @return
///
//-------------------------------------------------------------------------------------------------
void MDrv_Power_ResetAndPowerDown()
{
    DRVPOWER_DBG(printf("Reset and power down now!\r\n"));

    // Change power management status
    XBYTE[PM_OFF_FLAG] = (XBYTE[PM_OFF_FLAG] & ~PM_MODE_MASK) | PM_MODE_OFF_EXEC;
    XBYTE[PM_OFF_FLAG] = (XBYTE[PM_OFF_FLAG] | PM_P3_RESET_FLAG);

    // disable interrupt.
    MDrv_Sys_SetInterrupt( GLOBAL, DISABLE );

    // Disable XDATA Mapping
    XBYTE[0x2BC4] &= ~0x04;

    MDrv_Sys_RunCodeInSPI();

    XBYTE[VD_MCU_RESET] |= 0x01;

    // Switch MCU clock to XTAL
    XBYTE[0x1E22] = 0x00;

    MDrv_Sys_Reboot();

    // Note: The real power down sequence will be done in MDrv_Power_ExecutePowerDown().
}
#endif

//-------------------------------------------------------------------------------------------------
/// Execute power on initialization.
/// @param
/// @return TRUE- Success.
///         FALSE - Failure.
//-------------------------------------------------------------------------------------------------
BOOLEAN MDrv_Power_ExecutePowerUp()
{
    // Change power management status
    XBYTE[PM_OFF_FLAG] = (XBYTE[PM_OFF_FLAG] & ~PM_MODE_MASK) | PM_MODE_ON;
    XBYTE[PM_OFF_FLAG] = XBYTE[PM_OFF_FLAG] & ~PM_P3_RESET_FLAG;
#if ENABLE_POWER_SAVING_DPMS
    XBYTE[PM_OFF_FLAG] = XBYTE[PM_OFF_FLAG] & ~VGA_POWERSAVING;
#endif

    return TRUE;
}


//-------------------------------------------------------------------------------------------------
/// Power down procedure: after reboot, the main loop will execute power down procedure, and enter standby mode then
/// @param
/// @return
///
//-------------------------------------------------------------------------------------------------
void MDrv_Power_ExecutePowerDown()
{
    // disable interrupt.
    MDrv_Sys_SetInterrupt( GLOBAL, DISABLE );

    if( g_u32WakeupSystemTime < gSystemTimeCount )
    {
        g_u8WakeUpOnOffFlag = 0;
        g_u32WakeupSystemTime = 0xFFFFFF;
    }

    // Switch MCU clock to XTAL
    XBYTE[0x1E22] = 0x00;
    msIR_Initialize(MST_XTAL_CLOCK_MHZ);

    // Setting SPI clock
    XBYTE[0x3c4c]=(XBYTE[0x3c4c] & 0xe3);

    // Reset VDMCU
    XBYTE[VD_MCU_RESET] |= 0x01;

    MDrv_Sys_RunCodeInSPI();

    // Power down peripheral
    Peripheral_Device_Reset_OFF();
    Tuner_OFF();
    Demodulator_OFF();

    LED_RED_OFF();
    LED_GREEN_OFF();

    Power_Off();

    // Power down SAR
    XBYTE[REG_SAR_CTRL0] = 0x20;
    XBYTE[REG_SAR_CTRL1] = 0x00;
    XBYTE[REG_SAR_CTRL2] = 0x05;
    XBYTE[REG_SAR_CTRL3] = 0x00;
    XBYTE[REG_SAR_CTRL20] = 0xFF;
    XBYTE[REG_SAR_CTRL21] = 0x80;

    // Power down Scaler
    MDrv_Scaler_PowerOff();

    // power down all ADC
    XBYTE[BK_ADC_ATOP_04_L] = 0xFF;
    XBYTE[BK_ADC_ATOP_04_H] = 0xFF;

#if ENABLE_POWER_SAVING_DPMS
    if(XBYTE[PM_OFF_FLAG] & VGA_POWERSAVING)
    {
    	XBYTE[BK_ADC_ATOP_05_L] = 0x1F;
    }
    else
    {
    	XBYTE[BK_ADC_ATOP_05_L] = 0xFF;
    }
#else
    XBYTE[BK_ADC_ATOP_05_L] = 0xFF;
#endif

    // power down fast blanking ADC
    XBYTE[0x2580] |= 0x40;

    // power down DVI
    XBYTE[0x25C0] = 0xFF;
    XBYTE[0x25C1] = 0xFF;

    // Power down OTG
    XBYTE[0x2440] |=0x10;
    XBYTE[0x2434] &= 0xBF;

    // power down DAC
    XBYTE[0x3209] |= 0x02;

    // Disable DDR PAD
    XBYTE[0x1202] &= 0x3F;
    XBYTE[0x1203] |= 0xF0;

    // Power down DACA, DACR, DACG, DACB
    XBYTE[0x3206] |= 0x0F;

    // Power down VCOM
    XBYTE[0x3205] |= 0x02;

    // Disable HW clock
    MDrv_Power_Set_HwClock(E_HWCLK_GE_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_GOP0_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_GOP1_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_GOPD_ONOFF, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_MVD_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_MVDBOOT_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_M4V_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_DC0_ONOFF, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_MADSTC_ONOFF, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_TS0_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_TS2_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_TSOUT_ONOFF, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_FCLK_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_FMCLK_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_ODCLK_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_IDCLK2_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_FICLKF2_ONOFF, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_VEIN_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_VE_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_VEDAC_ONOFF, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_VD_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_VDMCU_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_VD200_ONOFF, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_DHCSBM_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_DHCDDR_GATING, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_DHCSYNTH_GATING, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_DHCMCU_GATING, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_DHCLIVE_GATING, POWER_DOWN);

    MDrv_Power_Set_HwClock(E_HWCLK_USB_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_FCIE_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_PCMCIA_ONOFF, POWER_DOWN);

    // Disable XDATA Mapping
    XBYTE[0x2BC4] &= ~0x04;

/* seven 070911_00
    // Power down PCMCIA
    XBYTE[0x1E0E] = 0xFF;
    XBYTE[0x1E0F] = 0xFF;
    XBYTE[0x1E10] = 0xFF;
    XBYTE[0x1E11] = 0xFF;
    XBYTE[0x1E12] = 0xFF;
    XBYTE[0x1E13] = 0xFF;
    XBYTE[0x1E14] = 0xFF;
    XBYTE[0x1E15] = 0xFF;
    XBYTE[0x1E16] = 0xFF;
    XBYTE[0x1E17] = 0xFF;
    XBYTE[0x1E18] = 0xFF;
    XBYTE[0x1E19] = 0xFF;
    XBYTE[0x1EE0] |= 0x08;
    XBYTE[0x1E96] = 0xFF;
end */

    // power down LPLL
    XBYTE[0x3106] |= 0x20;

    // Power down DDRPLL
    XBYTE[0x1225] |= 0x02;

    // Power down MIU & DDR
// seven 070911_00
    MDrv_Power_Set_HwClock(E_HWCLK_MIU_ONOFF, POWER_DOWN);
    MDrv_Power_Set_HwClock(E_HWCLK_TCK_ONOFF, POWER_DOWN);
//    XBYTE[BK_CHIPTOP_12_H] |= 0x11;
// end

    // Power down MPLL
    XBYTE[BK_ADC_ATOP_08_L] = 0x10;

    // Change power management status
    XBYTE[PM_OFF_FLAG] = (XBYTE[PM_OFF_FLAG] & ~PM_MODE_MASK) | PM_MODE_OFF;
    XBYTE[PM_OFF_FLAG] = XBYTE[PM_OFF_FLAG] & ~PM_P3_RESET_FLAG;
}


//-------------------------------------------------------------------------------------------------
/// Power standby: After execution MDrvPowerExecutePowerDown, the MDrvPowerStandby will be called
/// @param  u32StandbyS \b IN: Specify the standby time in seconds.
///                            If u32StandbyS is equal to zero, will enter standby mode forever.
/// @return
///
//-------------------------------------------------------------------------------------------------
U8 data KeypadCount, KeypadSamplePeriod;
void MDrv_Power_Standby()
{
#ifdef USE_TIMER0_FOR_SYSTEM_TIME
    MDrv_XC51_Timer2_Init();
#else
    MDrv_Write4Byte(REG_TIMER1_MAX, MST_XTAL_CLOCK_HZ);
    MDrv_WriteByte(REG_TIMER1_CTRL + 1, 0x03);
    MDrv_Sys_SetInterrupt( EX3, ENABLE );
#endif
    MDrv_Sys_SetInterrupt( GLOBAL, ENABLE );

    KeypadCount = 0;
    KeypadSamplePeriod = 0;
    #if( POWER_KEY_PAD_BY_INTERRUPT )
    MDrv_Sys_SetInterrupt( EX0, ENABLE );
    MDrv_Sys_SetInterrupt( EX0_INT_IN, ENABLE );
    u8PwrKeypadIntFlag = FALSE;
    #endif

    while(1)
    {

        #if ( WATCH_DOG == ENABLE )
        XBYTE[PIU_MISC_REG_BASE+0x66] |= 0x02;  //reset WDT timer
        #endif

        // IR Wakeup
        if (MDrv_Power_CheckPowerOnKey())
            MDrv_Power_ResetAndPowerUp();

        #if (IR_MODE_SEL == IR_TYPE_SWDECODE_MODE)
        if (MDrv_Power_CheckPowerOnSWIRKey())
            MDrv_Power_ResetAndPowerUp();
        #endif

        // Keypad Wakeup
        if (MDrv_Power_CheckPowerOnKeyPad())
            MDrv_Power_ResetAndPowerUp();

#if ENABLE_POWER_SAVING_DPMS
    	if(XBYTE[PM_OFF_FLAG] & VGA_POWERSAVING)
    	{
	    MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
	    if((MDrv_Read2Byte( BK_SC_IP1F2_20_L) & 0x1FFF )>10)
	    {
	    	if((MDrv_Read2Byte( BK_SC_IP1F2_20_L) & 0x1FFF )!=0x1FFF)
	    	{
	    		if((MDrv_Read2Byte( BK_SC_IP1F2_1F_L) & 0x07FF)>200)
	    		{
	    			if((MDrv_Read2Byte( BK_SC_IP1F2_1F_L) & 0x07FF)!=0x07FF)
	    			{
	    				MDrv_Power_ResetAndPowerUp();
	    			}
	    		}

⌨️ 快捷键说明

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