📄 main.c
字号:
/*********************************************************************
COPYRIGHT (C) Himax Technologies, Inc.
File name : main.c
Description : Main Programm
Author : Taylor
Create date : 2005/06/10
Modifications :
*********************************************************************/
#define _MAIN_C
/********************** Include Section *****************************/
#include "main.h"
#include "mcu_io.h"
#include "i2c_control.h"
#include "common.h"
#include "hx8824.h"
#include "rs232.h"
#include "Key.h"
#include "OSD.h"
idata unsigned char Osd_Status, Item, bOSDPOS, bVideo, Mode, b60hz, bBurnInMode,
bVideo_Status, Status_Change, New_Status = 0x02, Old_Status,bDithering,
bPanel_Change, Panel_Type, bVGA, bSwitchInput, border_flag,
bVGA_Status = 0x01, bSource, pre_status = 0x00, now_status = 0x02, TV_Mode, Channel,
bNo_Signal, logo_fg, Pre_Channel;
idata unsigned char timer_cnt = 100;
idata unsigned int ParaAddress;
void Initial_Parameters(void);
/********************* Main Program Section *************************/
void main(void)
{
Byte Bypass = 0, temp;
if(Bypass) // Bypass for compile warning 2004/8/26 05:30pm
{
Init_OSD();
//OsdSetPallete();
I2CWrtCNByte(0x0,0x0,0x0,0x0);
HexTobyStr(0x0);
temp = ReadWord();
temp = Get_UART();
Init_HX8824();
Init_SAA7111();
Init_SAA7114();
DelayX10ms(1);
Select_Video_Input(0x0);
Contrast_Adj(0);
Print_String(2, 2, 0x00, 0x07, "ABCDEFGH");
test();
Switch_Input(0);
Initial_Tuner();
Set_Channel(0);
Auto_Scan();
Initial_Parameters();
}
sInitSys(); // Initial System
while(1)
{
Get_Key();
Key_Proc();
//Signal_Detect();
}
}
/******************* Main Relative Function Implement *****************/
/* -------------------------------------------------------------------
Name : sInitSys
Purpose : Initial system
Passed :
Returns :
Notes :
------------------------------------------------------------------- */
void sInitSys(void)
{
LED1 = 0;
LED2 = 1;
BL_CTRL = 1; // turn back light ON; 1: for old inverter/ 0: for new inverter
ResetN = 0; // HX8824 Reset Active Low
DelayX1ms(5); // Delay A While
ResetN = 1; // PA8824 Reset OK
P1 = 0x9F; // input pin setting
LEDG = 1; // turn on green LED
LEDR = 0;
S1 = 0; // switch to CCIR
S2 = 1;
//S1 = 1; // switch to VGA
//S2 = 0;
Osd_Status = Item = bBurnInMode = Second = bVGA = border_flag = bNo_Signal = logo_fg = 0;
Status_Change = bVideo = Panel_Type = bDithering = 1;
Mode = 0;
Init_UART(); // Initial UART, Timer 1 was used
EX0 = 1; // int0 interrupt enable
IT0 = 1; // set INT0 : falling edge trigger, remote controller
EA = 1; // Enable interrupt ALL
Init_I2C(); // Initial I2C Bus
//Puts_UART("[1]MPC Reset OK!\r\n"); // Intialization MPU
DelayX1ms(5); // Delay A While
#if EEPROM
Check_EEPROM(); // check if new EEPROM
#endif
DelayX1ms(5);
Init_PLL(); // Initial PLL
DelayX1ms(5); // Delay A While
//Init_SAA7111();
Init_SAA7114();
DelayX1ms(5);
Init_HX8824(); //Initial HX8824
DelayX1ms(5);
Init_OSD();
DelayX1ms(5);
Gamma_Adj();
DelayX1ms(5);
DelayX1ms(5);
#if TV
//TV_Mode = TV_AIR;
TV_Mode = CATV_STD;
//Channel = 0;
Initial_Tuner();
DelayX1ms(5);
Set_Channel(Channel);
#endif
#if EEPROM
Initial_Parameters();
#endif
Puts_UART("Initial OK!\r\n");
BL_CTRL = 0; // turn back light ON; 1: for old inverter/ 0: for new inverter
LED1 = 1;
LED2 = 0;
// for pattern gen
Get_Key();
if(bBurnInMode == 1)
{
Stand_alone_mode();
LEDG = 0;
LEDR = 1;
// I2CWriteByte(HX8824_ADDR, 0x80, 0x00); // for 1st version CF design error,
I2CWriteByte(HX8824_ADDR, HX8824_TEST_PATTERN, 0x40);
Puts_UART("BurnInMode in initial\r\n");
}
}
/* -------------------------------------------------------------------
Name : Signal_Detect
Purpose : Detect the video & VGA signal
Passed :
Returns :
Notes :
------------------------------------------------------------------- */
void Signal_Detect()
{
if(bVideo)
{
//Puts_UART("enter if(bVideo)!\r\n");
Video_Detect(); // detect if video signal exist?
if(bVideo_Status)
{
//Puts_UART("bVideo_Status = 1!\r\n");
if(Status_Change || bPanel_Change) //if(Status_Change)
{
//Puts_UART("Status Change!\r\n");
//Puts_UART("Panel Change!\r\n");
switch (b60hz)
{
case 0: // PAL
if(Panel_Type == 0x0) // 800x600 panel
{
Mode = 8;
// I2CWriteByte(HX8824_ADDR, 0x81, 0x3C);
// I2CWriteByte(HX8824_ADDR, 0x80, 0x02);
}
else if(Panel_Type == 0x01) // 800x480 panel
Mode = 9;
else if(Panel_Type == 0x02) // 640x480 panel
Mode = 10;
else if(Panel_Type == 0x03) // 620x240 panel
Mode = 11;
//Puts_UART("PAL!\r\n");
// I2CWriteByte(HX8824_ADDR, 0x80, 0x09); // for 1st version CF design error,
break;
case 1: // NTSC
if(Panel_Type == 0x0) // 800x600 panel
Mode = 4;
else if(Panel_Type == 0x01) // 800x480 panel
Mode = 5;
else if(Panel_Type == 0x02) // 640x480 panel
Mode = 6;
else if(Panel_Type == 0x03) // 320x240 panel
Mode = 7;
//Puts_UART("NTSC!\r\n");
// I2CWriteByte(HX8824_ADDR, 0x80, 0x00); // for 1st version CF design error,
break;
default:
break;
}
Change_Video_Frequency(); // set SAA7114
Display();
BlueScreen_OFF();
OSD_OFF();
Item = 0;
Osd_Status = 0; // 1: OSD_ON ; 0: OSD_OFF
//OsdDrawing();
//Puts_UART("OSD OFF!\r\n");
//Puts_UART("Video Normal Display!\r\n");
}
bPanel_Change = 0;
//Puts_UART("bPanel_change = 0!\r\n");
// Status_Change = 0;
}
else
{
if(Status_Change || bPanel_Change) //if(Status_Change)
{
if(bSource < 0x03)
{
// New_Status = 0x02;
//Puts_UART("No Video!\r\n");
No_Signal();
//Puts_UART("OSD ON!\r\n");
//Puts_UART("No Video Signal!\r\n");
}
else
{
OSD_OFF();
Item = 0;
Osd_Status = 0; // 1: OSD_ON ; 0: OSD_OFF
//OsdDrawing();
}
}
}
}
else if(bVGA)
{
//Puts_UART("enter if(bVGA)!\r\n");
VGA_Detect();
if(bVGA_Status)
{
//Puts_UART("bVGA status!\r\n");
if(bPanel_Change || Status_Change)
{
Puts_UART("VGA status change!\r\n");
if(Panel_Type == 0x0)
Mode = 0x0;
if(Panel_Type == 0x01)
Mode = 0x01;
if(Panel_Type == 0x02)
Mode = 0x02;
if(Panel_Type == 0x03)
Mode = 0x03;
BlueScreen_OFF();
Display();
OSD_OFF();
Item = 0;
Osd_Status = 0; // 1: OSD_ON ; 0: OSD_OFF
//OsdDrawing();
//OSD_OFF();
//Osd_Status = 0; // 1: OSD_ON ; 0: OSD_OFF
Puts_UART("VGA Normal Display!\r\n");
}
bPanel_Change = 0;
}
else
{
if(bPanel_Change || Status_Change)
{
//Puts_UART("No VGA!\r\n");
No_Signal();
//Puts_UART("OSD ON!\r\n");
Puts_UART("No VGA Signal!\r\n");
}
}
// bPanel_Change = 0;
// Status_Change = 0;
}
}
/* -------------------------------------------------------------------
Name : Initial_Parameters
Purpose : read parameter from EEPROM and write them to other IC
Passed :
Returns :
Notes :
------------------------------------------------------------------- */
void Initial_Parameters(void)
{
//---Check wrong eeprom for MCU---//
/*
if((EE_MCU_Byte_Read(EE_BURN1)!=EEPROM[EE_BURN1/16][EE_BURN1%16])||
(EE_MCU_Byte_Read(EE_BURN2)!=EEPROM[EE_BURN2/16][EE_BURN2%16])||
(EE_MCU_Byte_Read(EE_BURN3)!=EEPROM[EE_BURN3/16][EE_BURN3%16])) {
Burning_EEPROM();
}
*/
//-----System-----//
//Byte I2CReadByte(Byte device, Byte subaddress)
/*
bSource = I2CReadByte(EEPROM_MCU | ((EE_SOURCE/256)*2), (EE_SOURCE%256));
Switch_Input(bSource); // switch to input source last time saved in EEPROM
*/
//Language=I2CReadByte((EEPROM_MCU | (EE_LANGUAGE/256)*2), (EE_LANGUAGE%256));
//-----Audio-----//
//Volume=I2CReadByte((EEPROM_MCU | (EE_VOLUME/256)*2), (EE_VOLUME%256));
//Treble=I2CReadByte((EEPROM_MCU | (EE_TREBLE/256)*2), (EE_TREBLE%256));
//Bass=I2CReadByte((EEPROM_MCU | (EE_BASS/256)*2), (EE_BASS%256));
//Balance=I2CReadByte((EEPROM_MCU | (EE_BALANCE/256)*2), (EE_BALANCE%256));
//Mute=I2CReadByte((EEPROM_MCU | (EE_MUTE/256)*2), (EE_MUTE%256));
//-----TV-----//
//TV_Mode=I2CReadByte((EEPROM_MCU | (EE_TV_MODE/256)*2), (EE_TV_MODE%256));
Channel = I2CReadByte(EEPROM_MCU | ((Channel_EEPROM_Address()/256)*2), Channel_EEPROM_Address());
//Puts_UART("Read from EEPROM device addr ");HexTobyStr(EEPROM_MCU | (Channel_EEPROM_Address()/256)*2);Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Read from EEPROM address");HexTobyStr(Channel_EEPROM_Address());Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Read from EEPROM value");HexTobyStr(Channel);Puts_UART(byStr);Puts_UART("\r\n");
//-----OSD-----//
//OSD_HPosition=I2CReadByte((EEPROM_MCU | (EE_OSD_HPOS/256)*2), (EE_OSD_HPOS%256));
//OSD_VPosition=I2CReadByte((EEPROM_MCU | (EE_OSD_VPOS/256)*2), (EE_OSD_VPOS%256));
//----VIDEO---//
I2CWriteByte(HX8824_ADDR, HX8824_BRIGHTNESS, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_BRIGHTNESS)/256)*2), (ParaAddress + EE_BRIGHTNESS)));
I2CWriteByte(HX8824_ADDR, HX8824_CONTRAST, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_CONTRAST)/256)*2), (ParaAddress + EE_CONTRAST)));
//Puts_UART("Read from EEPROM device addr ");HexTobyStr(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2));Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Read from EEPROM address");HexTobyStr(ParaAddress + EE_SHARPNESS);Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Read from EEPROM value");HexTobyStr(I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2), (ParaAddress + EE_SHARPNESS)));Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Read from EEPROM value");HexTobyStr(temp);Puts_UART(byStr);Puts_UART("\r\n");
I2CWriteByte(HX8824_ADDR, HX8824_SHARPNESS, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2), (ParaAddress + EE_SHARPNESS)));
//Puts_UART("Write to HX8824 device addr ");HexTobyStr(HX8824_ADDR);Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Write to HX8824 address");HexTobyStr(HX8824_SHARPNESS);Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Write to HX8824 value");HexTobyStr(I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SHARPNESS)/256)*2), (ParaAddress + EE_SHARPNESS)));Puts_UART(byStr);Puts_UART("\r\n");
I2CWriteByte(HX8824_ADDR, HX8824_SATSINHUE, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_SIN_HUE)/256)*2), (ParaAddress + EE_SAT_SIN_HUE)));
I2CWriteByte(HX8824_ADDR, HX8824_SATSINHUE + 1, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_SIN_HUE)/256)*2), (ParaAddress + EE_SAT_SIN_HUE + 1)));
I2CWriteByte(HX8824_ADDR, HX8824_SATCOSHUE, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_COS_HUE)/256)*2), (ParaAddress + EE_SAT_COS_HUE)));
I2CWriteByte(HX8824_ADDR, HX8824_SATCOSHUE + 1, I2CReadByte(EEPROM_MCU | (((ParaAddress + EE_SAT_COS_HUE)/256)*2), (ParaAddress + EE_SAT_COS_HUE + 1)));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -