📄 power_ctrl.c
字号:
#define __POWERCTRL__
#include "Header\INCLUDE.H"
void PowerDown_ADC(void)
{
RTDSetByte(PLL1_CTRL_D6, 0xf2); // Power down PLL1
RTDSetByte(PLL2_CTRL_DA, 0x40); // Power down PLL2
RTDSetByte(ADC_CTRL_E6, 0x40); // Power down ADC
ucI_Code = 0;
}
void PowerUp_ADC(void)
{
RTDSetByte(PLL1_CTRL_D6, 0xf3); // Power up PLL1
RTDSetByte(PLL2_CTRL_DA, 0x41); // Power up PLL2
RTDSetByte(ADC_CTRL_E6, 0x47); // Power up ADC
RTDSetByte(PLL2_FILTER_DD, 0x5f);
}
void PowerDown_TMDS(void)
{
RTDSetByte(TMDS_OUTPUT_ENA_A0, 0x0F);
}
void PowerUp_TMDS(void)
{
RTDCodeW(TMDS_MANUAL_ON);
//RTDSetByte(TMDS_OUTPUT_ENA_A0, 0x8F);
}
void PowerDown_VDC(void)
{
#if (VIDEO_CHIP != VDC_NONE)
#if (MCU_TYPE == MCU_STD8051)
bVDC_PWR = VDC_OFF;
#else
MCU_WriteVideoPower(VDC_OFF);
#endif
#endif
}
void PowerUp_VDC(void)
{
#if (VIDEO_CHIP != VDC_NONE)
#if (MCU_TYPE == MCU_STD8051)
bVDC_PWR = VDC_ON;
#else
MCU_WriteVideoPower(VDC_ON);
#endif
#endif
}
void PowerDown_LVDS(void)
{
#if (OUTPUT_BUS == LVDS_TYPE)
RTDCodeW(LVDS_POWERDOWN);
#endif
}
void PowerUp_LVDS(void)
{
#if (OUTPUT_BUS == LVDS_TYPE)
RTDCodeW(LVDS_POWERUP);
#endif
}
void Set_Panel(unsigned char status)
{
if (status)
{
RTDSetByte(HOSTCTRL_02, 0x00);
PowerUp_LVDS();
Delay_Xms(10);
RTDSetByte(VDIS_SIGINV_21, 0x00 | DISP_EO_SWAP | DISP_RB_SWAP | DISP_ML_SWAP); // DHS, DVS, DEN, DCLK MUST NOT be inverted.
RTDSetBit(VDIS_CTRL_20, 0xfd, 0x01); // DHS, DVS, DEN, DCLK and data are clamped to 0
Delay_Xms(20);
RTDSetBit(VDIS_CTRL_20, 0xfe, 0x00); // Stop display timing
Delay_Xms(20);
#if (MCU_TYPE == MCU_STD8051)
bPANEL_PWR = PANEL_ON;
#else
MCU_WritePanelPower(PANEL_ON);
#endif
bPanel_Status = _ON;
Delay_Xms(40);
RTDSetByte(VDIS_SIGINV_21, DISP_INV | DISP_EO_SWAP | DISP_RB_SWAP | DISP_ML_SWAP); // DHS, DVS, DEN, DCLK MUST NOT be inverted.
RTDSetBit(VDIS_CTRL_20, 0xff, 0x03); // DHS, DVS, DEN, DCLK in normal operation
RTDSetBit(DIS_TIMING0_3A, 0xff, 0x20); // Force display timing enable
RTDSetBit(DIS_TIMING0_3A, 0xdf, 0x00); // Stop forcing
Delay_Xms(200);
RTDRead(VDIS_CTRL_20, 1, N_INC);
if ((Data[0] & 0x08)) RTDSetByte(VDIS_CTRL_20, Data[0] & 0xdf);
#if (MCU_TYPE == MCU_STD8051)
bLIGHT_PWR = LIGHT_ON;
#else
MCU_WriteBacklightPower(LIGHT_ON);
#endif
Delay_Xms(40);
RTDSetByte(STATUS0_01, 0x00); // Write once to clear status
RTDSetByte(STATUS1_1F, 0x00); // Write once to clear status
}
else
{
#if (MCU_TYPE == MCU_STD8051)
bLIGHT_PWR = LIGHT_OFF;
#else
MCU_WriteBacklightPower(LIGHT_OFF);
#endif
Delay_Xms(120);
OSD_Dispatcher(NOTIFY_CLEAR_OSD); // Clear OSD
RTDSetByte(VDIS_SIGINV_21, 0x00 | DISP_EO_SWAP | DISP_RB_SWAP | DISP_ML_SWAP); // DHS, DVS, DEN, DCLK MUST NOT be inverted.
RTDSetBit(VDIS_CTRL_20, 0xfd, 0x01); // DHS, DVS, DEN, DCLK and data are clamped to 0
Delay_Xms(20);
RTDSetBit(VDIS_CTRL_20, 0xfe, 0x00); // Stop display timing
Delay_Xms(20);
#if (MCU_TYPE == MCU_STD8051)
bPANEL_PWR = PANEL_OFF;
#else
MCU_WritePanelPower(PANEL_OFF);
#endif
bPanel_Status = _OFF;
Delay_Xms(40);
PowerDown_LVDS();
// The delay below is to prevent from short period between panel OFF and next ON
Delay_Xms(250);
Delay_Xms(250);
Delay_Xms(250);
Delay_Xms(250);
}
}
//////////////////////
// Power Controller //
//////////////////////
bit Power_Control(unsigned char Notify)
{
if (0 == bPower_Status)
{
if (NOTIFY_POWERUP == Notify)
{
bPower_Status = 1;
Power_Up_Init();
#if (ISPACK)
RTDSetByte(DDC_SET_SLAVE_F0, 0x6a);
#endif
OSD_Dispatcher(NOTIFY_RESET_OSD); // Reset OSD
ucModeCnt = MODE_DETECT_FREQ; // Reset Input Mode Detector
Measure_Mode(); // Measure mode-timing
#if (POWER_KEY_TYPE == TYPE_ONE_TOUCH)
// Save power status when power-key is one-touch type
stGUD1.FUNCTION &= 0xf7;
Save_GUD1();
Delay_Xms(10);
#endif
}
return _TRUE;
}
else if (NOTIFY_POWERDOWN == Notify)
{
#if (POWER_KEY_TYPE == TYPE_ONE_TOUCH)
// Save power status when power-key is one-touch type
stGUD1.FUNCTION |= 0x08;
Save_GUD1();
Delay_Xms(10);
#endif
bPower_Status = 0;
Set_Panel(0); // Turn off panel
OSD_Dispatcher(NOTIFY_RESET_OSD); // Reset OSD
RTDSetByte(HOSTCTRL_02, 0x02); // Set RTD to power-saving
#if (VIDEO_CHIP != VDC_NONE)
I2CWrite(V_DISABLE);
#endif
PowerDown_ADC();
PowerDown_VDC();
PowerDown_TMDS();
Delay_Xms(250);
Delay_Xms(250);
Delay_Xms(250);
Delay_Xms(250);
Delay_Xms(250);
return _TRUE;
}
return _FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -