📄 initial.c
字号:
#define __INITIAL__
#include "Header\INCLUDE.H"
void MCU_Init(void)
{
#if (MCU_TYPE == MCU_STD8051)
IE = 0x00; // Disable all interrupts
TMOD = 0x11; // Program Timer0 & Timer1 to Mode#1
TR0 = 0; // Stop Timer0
TF0 = 0; // Clear Timer0 Overflow Bit
TL0 = TIME0_COUNTER_LBYTE; // Load Timer0 low-byte (for 20ms)
TH0 = TIME0_COUNTER_HBYTE; // Load Timer0 high-byte (for 20ms)
TR1 = 0; // Stop Timer1
TF1 = 0; // Clear Timer1 Overflow Bit
TL1 = TIME1_COUNTER_LBYTE; // Load Timer1 low-byte (for 1ms)
TH1 = TIME1_COUNTER_HBYTE; // Load Timer1 hifh-byte (for 1ms)
IE = 0x8a; // Enable interrupts of Timer0 and Timer1
#else
IE = 0x00; // Disable all interrupts
TMOD = 0x11; // Program Timer0 & Timer1 to Mode#1
TR0 = 0; // Stop Timer0
TF0 = 0; // Clear Timer0 Overflow Bit
TL0 = TIME0_COUNTER_LBYTE; // Load Timer0 low-byte (for 20ms)
TH0 = TIME0_COUNTER_HBYTE; // Load Timer0 high-byte (for 20ms)
TR1 = 0; // Stop Timer1
TF1 = 0; // Clear Timer1 Overflow Bit
TL1 = TIME1_COUNTER_LBYTE; // Load Timer1 low-byte (for 1ms)
TH1 = TIME1_COUNTER_HBYTE; // Load Timer1 hifh-byte (for 1ms)
IE = 0x86; // Enable interrupts of Timer0 and Timer1
TR0 = 1;
M512_PadMode1=0xff;
M512_PadMode2=0x80;
M512_PadMode3=0x83;
M512_PadMode6=0x00;
M512_PadMode7=0x40;
M512_Port55=0;
#endif
}
void RTD_Init(void)
{
#if (MCU_TYPE == MCU_STD8051)
#if (RESET_TYPE == RESET_IN)
bRTD_RST = 0;
Delay_Xms(10);
do
{
// Wait for reset complete
bRTD_RST = 1;
Delay_Xms(2);
}
while (!bRTD_RST);
#else
RTDSetBit(HOSTCTRL_02, 0xff, 0x01); // Start RTD Software Reset
Delay_Xms(20);
RTDSetBit(HOSTCTRL_02, 0xfe, 0x00); // Stop RTD Software Reset
#endif
#else
#if (RESET_TYPE == RESET_IN)
MCU_WriteRtdReset(LOW);
Delay_Xms(10);
do
{
// Wait for reset complete
MCU_WriteRtdReset(HIGH);
Delay_Xms(10);
}
while (MCU_ReadRtdReset()!=HIGH);
#else
RTDSetBit(HOSTCTRL_02, 0xff, 0x01); // Start RTD Software Reset
Delay_Xms(20);
RTDSetBit(HOSTCTRL_02, 0xfe, 0x00); // Stop RTD Software Reset
#endif
#endif
RTDSetByte(HOSTCTRL_02, 0x02);
RTDCodeW(RTD_PWUP_INI);
#if (HDCP_ENABLE)
RTDCodeW(BKSV);
KEYCodeW(HDCP_KEY_A_Port);
#endif
// Issac :
// Code below is for previous IC(before RTD2523)
RTDSetByte(HOSTCTRL_02, 0x00); // Wake RTD up
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, 0x21); // DHS, DVS, DEN, DCLK and data are clamped to 0
RTDSetBit(DIS_TIMING0_3A, 0xff, 0x20); // Force display timing enable
RTDSetBit(DIS_TIMING0_3A, 0xdf, 0x00); // Stop forcing
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
RTDSetBit(VDIS_CTRL_20, 0xfe, 0x00); // Stop display timing
RTDSetByte(HOSTCTRL_02, 0x02); // Put RTD2020 back into power-saving mode
// Issac
// Code above is for previous IC(before RTD2523)
RTDCodeW(RTD_DDC_TABLE);
RTDCodeW(RTD_IO_INI);
#if (!SOURCE_AUTO_SCAN)
PowerDown_VDC();
#endif
PowerDown_TMDS();
PowerDown_LVDS();
Delay_Xms(20);
}
void RTD_Reset(void)
{
#if (MCU_TYPE == MCU_STD8051)
#if (RESET_TYPE == RESET_IN)
bRTD_RST = 0;
Delay_Xms(10);
do
{
// Wait for reset complete
bRTD_RST = 1;
Delay_Xms(6);
}
while (!bRTD_RST);
#else
RTDSetBit(HOSTCTRL_02, 0xff, 0x01); // Start RTD Software Reset
Delay_Xms(20);
RTDSetBit(HOSTCTRL_02, 0xfe, 0x00); // Stop RTD Software Reset
#endif
#else
#if(RESET_TYPE == RESET_IN)
MCU_WriteRtdReset(LOW);
Delay_Xms(10);
do
{
// Wait for reset complete
MCU_WriteRtdReset(HIGH);
Delay_Xms(6);
}
while (MCU_ReadRtdReset()!=HIGH);
#else
RTDSetBit(HOSTCTRL_02, 0xff, 0x01); // Start RTD Software Reset
Delay_Xms(20);
RTDSetBit(HOSTCTRL_02, 0xfe, 0x00); // Stop RTD Software Reset
#endif
#endif
// Initial scalar & free background display
RTDCodeW(RTD_PWUP_INI);
#if (HDCP_ENABLE)
RTDCodeW(BKSV);
KEYCodeW(HDCP_KEY_A_Port);
#endif
RTDCodeW(RTD_DDC_TABLE);
RTDCodeW(RTD_IO_INI);
// Wake RTD up
RTDSetByte(HOSTCTRL_02, 0x00);
RTDCodeW(FreeV);
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
// Initial OSD
RTDCodeW(OSD_PWUP_INI);
OSD_Dispatcher(NOTIFY_RESET_OSD);
// Initial OSD palette
RTDCodeW(Palette_Open);
RTDCodeW(Palette_7);
RTDCodeW(Palette_Close);
Set_Gamma();
Set_Dithering();
Set_Bright_Contrast();
}
void System_Init(void)
{
#if (MCU_TYPE == MCU_STD8051)
bLIGHT_PWR = LIGHT_OFF;
bPANEL_PWR = PANEL_OFF;
bPanel_Status = _OFF;
#else
MCU_WriteBacklightPower(LIGHT_OFF);
MCU_WritePanelPower(PANEL_OFF);
bPanel_Status = _OFF;
#endif
MCU_Init();
#if (USE_MCU_DDC)
{
unsigned char i, j;
for (j = 0; j < 8; j ++)
{
I2CRead(ADDR_EDID1, j * 16, 16);
for (i = 0; i < 16; i ++)
byMTV512_DDCRAMA[i + (j * 16)] = Data[i]; // prepare DDC_RAM_1
}
/*
Delay_Xms(250);
Delay_Xms(250);
Delay_Xms(250);
Delay_Xms(250);
*/
EDID_Process();
EnableDDC();
while (1)
{
// Issac :
// When using VGA 5V for MCU power to support EDDC feature,
// you must use one GPIO to detect PCB power, and stay here
// until PCB power is available.
break;
}
}
#endif
#if (RS232_DEBUG)
UART_Initialize();
#endif
RTD_Init();
// Check and initial EEPROM if necessary
Check_EEPROM();
Delay_Xms(10);
// Turn timer0 on. Let's go ~~~
TR0 = 1;
}
void Power_Status_Init(void)
{
#if (POWER_KEY_TYPE == TYPE_ONE_TOUCH)
#if (KEY_DISABLED == POWER_KEY_MASK)
// Force system to power up when no power-key
bPower_Status = 1;
Power_Up_Init();
bStable = 0; // Assume input signal is not stable when power up
bFrameSync = 0; // Not sync yet
ucModeCnt = MODE_DETECT_FREQ; // Reset Input Mode Detector
Measure_Mode(); // Measure mode-timing
#else
// Restore previous power status
if (0 == (stGUD1.FUNCTION & 0x08))
{
bPower_Status = 1;
Power_Up_Init();
bStable = 0; // Assume input signal is not stable when power up
bFrameSync = 0; // Not sync yet
ucModeCnt = MODE_DETECT_FREQ; // Reset Input Mode Detector
Measure_Mode(); // Measure mode-timing
}
else
{
bPower_Status = 0;
}
#endif
#else
// Do nothing when power-key is two-state type.
bPower_Status = 0;
#endif
#if (ISPACK)
RTDSetByte(DDC_SET_SLAVE_F0, 0x6a);
#endif
#if (RS232_DEBUG)
PutStringToScr("\nMain Loop..");
#endif
Delay_Xms(250);
Delay_Xms(250);
}
void Power_Up_Init(void) // Do once when power up
{
#if (MCU_TYPE == MCU_STD8051)
bLIGHT_PWR = LIGHT_OFF;
bPANEL_PWR = PANEL_OFF;
bPanel_Status = _OFF;
#else
MCU_WriteBacklightPower(LIGHT_OFF);
MCU_WritePanelPower(PANEL_OFF);
bPanel_Status = _OFF;
#endif
RTDSetBit(HOSTCTRL_02, 0xfb, 0x00); // RTD turn on
RTD_Reset();
#if (ADC_DEFFERENTIAL)
RTDSetBit(ADC_DIFF_MODE_EC, 0xff, 0x40); //Differential mode
#else
RTDSetBit(ADC_DIFF_MODE_EC, 0xbf, 0x00); //Single endded mode
#endif
#if (TUNE_APLL)
RTDSetByte(DV_TOTAL_STATUS_3D, 0x40); //clear PE Max value
#endif
#if (!SOURCE_AUTO_SCAN)
PowerDown_VDC();
#endif
PowerDown_LVDS();
#if (TMDS_ENABLE)
RTDSetByte(ANG_PERFORMANCE2_A3, 0x26); // Go about the TMDS impedence match
RTDSetByte(ANG_PERFORMANCE2_A3, 0x36);
#endif
RTDSetBit(OVL_CTRL_6D, 0xc7, (stGUD1.INPUT_SOURCE & 0xe0) >> 2);
#if (SPREAD_SPECTRUM)
RTDSetBit(DPLL_N_D2, 0xff, 0x20); // DPLL spread spectrum Enable
#endif
Init_Input_Source(); // Initial Mode & OSD
}
void Init_Input_Source(void)
{
Reset_Mode();
ucTMDS_SEARCH_COUNTER = 0;
// Unknown signal source
if (SOURCE_MAX < (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#if (TMDS_ENABLE == _FALSE)
if (SOURCE_DVI == (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
#if (TV_CHIP == TV_NONE)
if (SOURCE_TV == (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
#if (VIDEO_CHIP != VDC_SAA7118)
if (SOURCE_YUV == (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
#if (VIDEO_CHIP == VDC_NONE)
if (SOURCE_AV == (stGUD1.INPUT_SOURCE & 0x07) || SOURCE_SV == (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
// Because internal ADC power state will not affect VGA mode detection,
// we always turn off ADC when source changed, and turn it on again only
// when a valid VGA mode is going to display.
PowerDown_ADC();
#if (TMDS_ENABLE)
RTDSetBit(TMDS_CORRECTION_FF, 0xfc, 0x00);
#endif
#if (SOURCE_AUTO_SCAN)
ucSource_Times = 0;
PowerUp_TMDS();
PowerUp_VDC();
Delay_Xms(10);
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 || VIDEO_CHIP == VDC_SAA7118)
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
#endif
bSourceScanEnable = _TRUE;
#endif
switch (stGUD1.INPUT_SOURCE & 0x07)
{
case SOURCE_VGA:
#if (!SOURCE_AUTO_SCAN)
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 || VIDEO_CHIP == VDC_SAA7118)
I2CWrite(V_DISABLE); // VIDEO DISABLE
I2CWrite(V_NOWORK); // VIDEO No Work
#endif
PowerDown_VDC();
PowerDown_TMDS();
#endif
// Set user's ADC gain and offset settings
SetADC_GainOffset();
ucInputSrc = SOURCE_VGA;
ucSync_Type = SYNC_SS;
RTDCodeW(VGA_INI_SS);
break;
case SOURCE_DVI:
#if (!SOURCE_AUTO_SCAN)
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 || VIDEO_CHIP == VDC_SAA7118)
I2CWrite(V_DISABLE); // VIDEO DISABLE
I2CWrite(V_NOWORK); // VIDEO No Work
#endif
PowerDown_VDC();
#endif
PowerUp_TMDS();
ucInputSrc = SOURCE_DVI;
RTDCodeW(DVI_INI);
break;
case SOURCE_AV:
case SOURCE_TV:
#if (SOURCE_AUTO_SCAN)
if ((SOURCE_AV != MASTER_SOURCE) && (SOURCE_AV != SLAVE_SOURCE) && (SOURCE_AV != THIRD_SOURCE))
{
bSourceScanEnable = _FALSE;
}
#endif
PowerUp_VDC();
Delay_Xms(10);
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 || VIDEO_CHIP == VDC_SAA7118)
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(AV_DETECT); // VIDEO Detect(AV)
#endif
if (SOURCE_AV == (stGUD1.INPUT_SOURCE & 0x07))
{
ucInputSrc = SOURCE_AV;
}
else
{
ucInputSrc = SOURCE_TV;
#if (TV_CHIP != TV_NONE)
// Set TV channel
Set_TV_Channel();
// Select TV signal input pin and disable AGC of video decoder
I2CWrite(TV_SOURCE_SEL);
I2CWrite(TV_SCAN_GAIN);
#endif
}
RTDCodeW(VIDEO_INI);
I2CRead(ADDR_VIDEO, 0x1f, 0x01);
break;
case SOURCE_SV:
#if (SOURCE_AUTO_SCAN)
if ((SOURCE_SV != MASTER_SOURCE) && (SOURCE_SV != SLAVE_SOURCE) && (SOURCE_SV != THIRD_SOURCE))
{
bSourceScanEnable = _FALSE;
}
#endif
PowerUp_VDC();
Delay_Xms(10);
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 || VIDEO_CHIP == VDC_SAA7118)
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(SV_DETECT); // VIDEO Detect(SV)
#endif
ucInputSrc = SOURCE_SV;
RTDCodeW(VIDEO_INI);
I2CRead(ADDR_VIDEO, 0x1f, 0x01);
break;
case SOURCE_YUV:
#if (SOURCE_AUTO_SCAN)
if ((SOURCE_YUV != MASTER_SOURCE) && (SOURCE_YUV != SLAVE_SOURCE) && (SOURCE_YUV != THIRD_SOURCE))
{
bSourceScanEnable = _FALSE;
}
#endif
PowerUp_VDC();
Delay_Xms(10);
#if (VIDEO_CHIP == VDC_SAA7118)
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(VIDEO_YUV);
I2CWrite(YUV_DETECT); // VIDEO Detect(YUV)
#endif
ucInputSrc = SOURCE_YUV;
RTDCodeW(VIDEO_INI);
I2CRead(ADDR_VIDEO, 0x1f, 0x01);
break;
}
#if (AUDIO_TYPE != AUDIO_NONE)
SetVolume();
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -