📄 initial.c
字号:
/*******************************************************************************
INITIAL.C
Copyright (c) SmartASIC, Inc. All rights reserved.
*******************************************************************************/
#include <MTV230.H>
#include <DEFINE.H>
#include <FONT.H>
#define VGA 0
#define XGA 1
#define OUTPUT VGA
/*==============================================================================
==============================================================================*/
void Initial(void) {
unsigned char Factory;
Factory=0;
//---I/O---//
P1=0xb0;
P2=P3=0xff;
PSC0=PSC1=BL=HIGH;
STV_RESET=LOW;
LVDS_EN=LOW;
MUTE=HIGH;
AV_PD=HIGH;
LED_GREEN=LED_AMBER=OFF;
//---Power Up Detecting---//
do{
Get_Key();
if(bkey_code_now==(KEY_MENU+KEY_CH_PLUS)) {
bfactory=1;
break;
}
}while(bkey_code_now!=KEY_POWER);
//---Power ON---//
PSC0=ON;
LED_AMBER=OFF;
LED_GREEN=ON;
DelayX10ms(1);
//---Read Parameters from MCU_EEPROM---//
Initial_Parameters();
#if POWER_MEM
EE_MCU_Byte_Write(EE_POWER_STATUS, 0x01);
#else
EE_MCU_Byte_Write(EE_POWER_STATUS, 0x00);
#endif
//---Initial SA7114---//
STV_RESET=HIGH;
Initial_SA7114();
DelayX10ms(1);
//---Initial STV102---//
Initial_STV102();
STV_Byte_Write(0x09, STV_Byte_Read(0x09)&0xdf);
//---Initial TV---//
Initial_Tuner();
Set_Channel(Channel);
//---Initial OSD---//
Initial_OSD();
//---FreeRun Clock Enable---//
STV_Byte_Write(0xff, 0x03);
//---Initial MSP---//
Initial_MSP();
//---Initial Z86129---//
Z86_Reset();
}
/*==============================================================================
==============================================================================*/
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-----//
Source=EE_MCU_Byte_Read(EE_SOURCE);
Language=EE_MCU_Byte_Read(EE_LANGUAGE);
Color_Temp=EE_MCU_Byte_Read(EE_COLOR_TEMP);
Caption=EE_MCU_Byte_Read(EE_CAPTION);
VChip=EE_MCU_Byte_Read(EE_VCHIP);
OSD_Disp=EE_MCU_Byte_Read(EE_OSD_DISP);
EE_MCU_Byte_Write(EE_SLEEP, 0);
Sleep=EE_MCU_Byte_Read(EE_SLEEP);
SleepCountDown=MinuteCounter=0;
Password=EE_MCU_Byte_Read(EE_PASSWORD+0)*256+EE_MCU_Byte_Read(EE_PASSWORD+1);
//-----Audio-----//
Volume=EE_MCU_Byte_Read(EE_VOLUME);
Treble=EE_MCU_Byte_Read(EE_TREBLE);
Bass=EE_MCU_Byte_Read(EE_BASS);
Balance=EE_MCU_Byte_Read(EE_BALANCE);
Mute=EE_MCU_Byte_Read(EE_MUTE);
//-----TV-----//
TV_Mode=EE_MCU_Byte_Read(EE_TV_MODE);
MTS_Mode=EE_MCU_Byte_Read(EE_MTS_MODE);
Channel=EE_MCU_Byte_Read(Channel_EEPROM_Address());
//-----OSD-----//
OSD_HPosition=EE_MCU_Byte_Read(EE_OSD_HPOS);
OSD_VPosition=EE_MCU_Byte_Read(EE_OSD_VPOS);
}
/*===========================================================================
===========================================================================*/
void Initial_SA7114(void) {
code unsigned char T7114[67][2]={
{0x01,0x08},{0x02,0xc0},{0x03,0x0c},{0x06,0xeb},{0x07,0xe0},{0x08,0xf8},
{0x09,0x40},{0x0a,0x80},{0x0b,0x44},{0x0c,0x40},{0x0e,0x89},{0x0f,0x2a},
{0x10,0x0e},{0x11,0x08},{0x12,0xdf},{0x14,0x0b},{0x15,0x11},{0x16,0x01},
{0x17,0x02},{0x18,0x40},{0x19,0x80},{0x40,0x00},{0x5a,0x00},{0x61,0x00},
{0x62,0x00},{0x80,0x16},{0x83,0x01},{0x84,0x45},{0x86,0x40},{0x87,0x01},
{0x88,0xf8},{0x8f,0x00},{0x91,0x08},{0x92,0x10},{0x93,0x40},{0x96,0xd0},
{0x97,0x02},{0x9a,0x04},{0x9b,0x01},{0x9c,0xd0},{0x9d,0x02},{0x9e,0x04},
{0x9f,0x01},{0xa0,0x01},{0xa4,0x80},{0xa5,0x40},{0xa6,0x40},{0xa9,0x04},
{0xaa,0x20},{0xad,0x02},{0xae,0x10},{0xb1,0x04},{0xb3,0x04},{0xc1,0x08},
{0xc2,0x10},{0xc3,0x40},{0xc6,0xd0},{0xc7,0x02},{0xca,0xf0},{0xcc,0xd0},
{0xcd,0x02},{0xce,0xf0},{0xd9,0x04},{0xdd,0x02},{0xe1,0x04},{0xe3,0x04},
{0xe4,0x01}};
unsigned char i;
for(i=0; i<67; i++)
SA7114_Byte_Write(T7114[i][0],T7114[i][1]);
}
/*==============================================================================
==============================================================================*/
void Initial_STV102(void) {
code unsigned char StvScaler[129][4]={
{0x07,0xf0,0x00,0x10},{0x07,0xf0,0x00,0x10},{0x07,0xf0,0x00,0x10},
{0x07,0xe0,0x00,0x20},{0x07,0xe0,0x00,0x20},{0x07,0xd0,0x00,0x30},
{0x07,0xd0,0x00,0x30},{0x07,0xc0,0x00,0x40},{0x07,0xc0,0x00,0x40},
{0x07,0xb0,0x00,0x50},{0x07,0xb0,0x00,0x50},{0x07,0xa0,0x00,0x60},
{0x07,0xa0,0x00,0x60},{0x07,0x90,0x00,0x70},{0x07,0x90,0x00,0x70},
{0x07,0x80,0x00,0x80},{0x07,0x80,0x00,0x80},{0x07,0x70,0x00,0x90},
{0x07,0x70,0x00,0x90},{0x07,0x60,0x00,0xa0},{0x07,0x60,0x00,0xa0},
{0x07,0x50,0x00,0xb0},{0x07,0x50,0x00,0xb0},{0x07,0x40,0x00,0xc0},
{0x07,0x40,0x00,0xc0},{0x07,0x30,0x00,0xd0},{0x07,0x30,0x00,0xd0},
{0x07,0x20,0x00,0xe0},{0x07,0x20,0x00,0xe0},{0x07,0x10,0x00,0xf0},
{0x07,0x10,0x00,0xf0},{0x07,0x00,0x01,0x00},{0x07,0x00,0x01,0x00},
{0x06,0xf0,0x01,0x10},{0x06,0xf0,0x01,0x10},{0x06,0xe0,0x01,0x20},
{0x06,0xe0,0x01,0x20},{0x06,0xd0,0x01,0x30},{0x06,0xd0,0x01,0x30},
{0x06,0xc0,0x01,0x40},{0x06,0xc0,0x01,0x40},{0x06,0xb0,0x01,0x50},
{0x06,0xb0,0x01,0x50},{0x06,0xa0,0x01,0x60},{0x06,0xa0,0x01,0x60},
{0x06,0x90,0x01,0x70},{0x06,0x90,0x01,0x70},{0x06,0x80,0x01,0x80},
{0x06,0x80,0x01,0x80},{0x06,0x70,0x01,0x90},{0x06,0x70,0x01,0x90},
{0x06,0x60,0x01,0xa0},{0x06,0x60,0x01,0xa0},{0x06,0x50,0x01,0xb0},
{0x06,0x50,0x01,0xb0},{0x06,0x40,0x01,0xc0},{0x06,0x40,0x01,0xc0},
{0x06,0x30,0x01,0xd0},{0x06,0x30,0x01,0xd0},{0x06,0x20,0x01,0xe0},
{0x06,0x20,0x01,0xe0},{0x06,0x10,0x01,0xf0},{0x06,0x10,0x01,0xf0},
{0x06,0x00,0x02,0x00},{0x06,0x00,0x02,0x00},{0x05,0xf0,0x02,0x10},
{0x05,0xf0,0x02,0x10},{0x05,0xe0,0x02,0x20},{0x05,0xe0,0x02,0x20},
{0x05,0xd0,0x02,0x30},{0x05,0xd0,0x02,0x30},{0x05,0xc0,0x02,0x40},
{0x05,0xc0,0x02,0x40},{0x05,0xb0,0x02,0x50},{0x05,0xb0,0x02,0x50},
{0x05,0xa0,0x02,0x60},{0x05,0xa0,0x02,0x60},{0x05,0x90,0x02,0x70},
{0x05,0x90,0x02,0x70},{0x05,0x80,0x02,0x80},{0x05,0x80,0x02,0x80},
{0x05,0x70,0x02,0x90},{0x05,0x70,0x02,0x90},{0x05,0x60,0x02,0xa0},
{0x05,0x60,0x02,0xa0},{0x05,0x50,0x02,0xb0},{0x05,0x50,0x02,0xb0},
{0x05,0x40,0x02,0xc0},{0x05,0x40,0x02,0xc0},{0x05,0x30,0x02,0xd0},
{0x05,0x30,0x02,0xd0},{0x05,0x20,0x02,0xe0},{0x05,0x20,0x02,0xe0},
{0x05,0x10,0x02,0xf0},{0x05,0x10,0x02,0xf0},{0x05,0x00,0x03,0x00},
{0x05,0x00,0x03,0x00},{0x04,0xf0,0x03,0x10},{0x04,0xf0,0x03,0x10},
{0x04,0xe0,0x03,0x20},{0x04,0xe0,0x03,0x20},{0x04,0xd0,0x03,0x30},
{0x04,0xd0,0x03,0x30},{0x04,0xc0,0x03,0x40},{0x04,0xc0,0x03,0x40},
{0x04,0xb0,0x03,0x50},{0x04,0xb0,0x03,0x50},{0x04,0xa0,0x03,0x60},
{0x04,0xa0,0x03,0x60},{0x04,0x90,0x03,0x70},{0x04,0x90,0x03,0x70},
{0x04,0x80,0x03,0x80},{0x04,0x80,0x03,0x80},{0x04,0x70,0x03,0x90},
{0x04,0x70,0x03,0x90},{0x04,0x60,0x03,0xa0},{0x04,0x60,0x03,0xa0},
{0x04,0x50,0x03,0xb0},{0x04,0x50,0x03,0xb0},{0x04,0x40,0x03,0xc0},
{0x04,0x40,0x03,0xc0},{0x04,0x30,0x03,0xd0},{0x04,0x30,0x03,0xd0},
{0x04,0x20,0x03,0xe0},{0x04,0x20,0x03,0xe0},{0x04,0x10,0x03,0xf0},
{0x04,0x10,0x03,0xf0},{0x04,0x00,0x04,0x00},{0x04,0x00,0x04,0x00}};
#if (OUTPUT==XGA)
code unsigned char Stv102[220]={//1024X768
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x09,0xd0,0x02,0xe4,0x01,0xcf,0x02,0xe3,0x01,0x04,0x67,0x15,0x00,0x14,0x00,0x00,//0//internal de format1
0x00,0x00,0x00,0x8c,0x00,0x58,0x00,0xd0,0x02,0xe4,0x01,0xcf,0x02,0xe3,0x01,0x04,//1
0x67,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x01,0x03,0x10,0x00,0x00,//2
0x00,0x00,0x00,0xf0,0x02,0x00,0x02,0x00,0x6c,0x01,0x68,0x01,0x79,0x00,0x79,0x00,//3
0x00,0x00,0x00,0x00,0x10,0x14,0x03,0x03,0x08,0x00,0x04,0x00,0x00,0x00,0x31,0x00,//4
0x14,0x08,0x00,0x24,0x08,0x01,0x00,0x00,0x53,0x08,0x20,0x20,0x20,0xa0,0x40,0x12,//5
0x03,0x0e,0x20,0x46,0x96,0x96,0x96,0xc3,0x79,0x31,0x11,0x0b,0x95,0x00,0x16,0x2d,//6
0x41,0x56,0x81,0x81,0x81,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,//7
0x02,0x00,0x20,0x82,0x7f,0x40,0x40,0x3f,0x68,0xff,0x03,0x1c,0x03,0x3f,0x06,0x00,//8 1024x768
0xf4,0x01,0x3f,0x01,0x5e,0x00,0x26,0x03,0x2c,0x05,0x81,0xa0,0xba,0x02,0x00,0x03,//9 1024x768
0x0c,0x00,0xd2,0x02,0x9b,0x02,0x0b,0x03,0x6e,0x01,0x0b,0x03,0x0c,0x90,0x01,0x66,//a
0x01,0x90,0x01,0x66,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x03,0x00,0x03,0x00,//b
0xe7,0x01,0xe7,0x01,0x6b,0x00,0x00,0x00,0x82,0x92,0xd9,0x08,0x60,0x00,0x00,0x00,//c 1024x768
0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x00,0x00,0x9d}; //d 1024x768 linear
#endif
#if (OUTPUT==VGA)
code unsigned char Stv102[220]={//800X600
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x09,0xd0,0x02,0xe4,0x01,0xcf,0x02,0xe3,0x01,0x04,0x67,0x15,0x00,0x14,0x00,0x00,//0//internal de format1
0x00,0x00,0x00,0x33,0x00,0x31,0x00,0xd0,0x02,0xe4,0x01,0xcf,0x02,0xe3,0x01,0x04,//1
0x67,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x01,0x03,0x10,0x00,0x00,//2
0x00,0x00,0x00,0xf0,0x02,0x00,0x02,0x00,0x6c,0x01,0x68,0x01,0x79,0x00,0x79,0x00,//3
0x00,0x00,0x00,0x00,0x10,0x14,0x03,0x03,0x08,0x00,0x04,0x00,0x00,0x00,0x31,0x00,//4
0x14,0x08,0x00,0x24,0x08,0x01,0x00,0x00,0x53,0x08,0x20,0x20,0x20,0xa0,0x40,0x12,//5
0x03,0x0e,0x20,0x46,0x96,0x96,0x96,0xc3,0x79,0x31,0x11,0x0b,0x95,0x00,0x16,0x2d,//6
0x41,0x56,0x81,0x81,0x81,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,//7
0x02,0x00,0x20,0x82,0x7f,0x40,0x40,0x3f,0x68,0x23,0x03,0x57,0x02,0x1e,0x06,0x00,//8 1024x768
0xf4,0x01,0x3f,0x01,0x5e,0x00,0x7c,0x02,0x2f,0x04,0x80,0xa0,0x10,0x00,0xb0,0x03,//9 1024x768
0x0c,0x00,0xd2,0x02,0xe4,0x01,0x0b,0x03,0x6e,0x01,0x0b,0x03,0x04,0x90,0x01,0x66,//a
0x01,0x90,0x01,0x66,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x04,0x00,0x06,0x00,//b
0xe7,0x01,0xe7,0x01,0x6b,0x00,0x00,0x00,0x82,0x92,0xd9,0x08,0x60,0x00,0x00,0x00,//c 1024x768
0x80,0xdd,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x00,0xb0,0xc9}; //d 1024x768 linear
#endif
unsigned char i;
for(i=0; i<0xdc; i++)
STV_Byte_Write(i, Stv102[i]);
for(i=0; i<129; i++) {
STV_Byte_Write(0xdc, 0x00);
STV_Byte_Write(0xdc, 0x00);
STV_Byte_Write(0xdc, StvScaler[i][0]);
STV_Byte_Write(0xdc, StvScaler[i][1]);
STV_Byte_Write(0xdc, StvScaler[i][2]);
STV_Byte_Write(0xdc, StvScaler[i][3]);
STV_Byte_Write(0xdc, 0x00);
STV_Byte_Write(0xdc, 0x00);
}
#if (OUTPUT==XGA)
STV_Byte_Write(0xf0, 0x00);//1024x768
STV_Byte_Write(0xf1, 0x78);
STV_Byte_Write(0xf2, 0x75);
STV_Byte_Write(0xf3, 0xb4);
STV_Byte_Write(0xf4, 0x0f);
STV_Byte_Write(0xfd, 0xff);
STV_Byte_Write(0xfe, 0xff);
#endif
#if (OUTPUT==VGA)
STV_Byte_Write(0xf0, 0x00);//800X600
STV_Byte_Write(0xf1, 0x3a);
STV_Byte_Write(0xf2, 0x52);
STV_Byte_Write(0xf3, 0x15);
STV_Byte_Write(0xf4, 0x5f);
STV_Byte_Write(0xfd, 0xff);
STV_Byte_Write(0xfe, 0xff);
#endif
STV_Byte_Write(0x2d, 0x00);
STV_Byte_Write(0xdd, 0x02);
STV_Byte_Write(0x1f, 0x24);
STV_Byte_Write(0x34, 0x02);
STV_Byte_Write(0x35, 0x00);
STV_Byte_Write(0x36, 0x02);
STV_Byte_Write(0x37, 0x00);
STV_Byte_Write(0x38, 0x00);
STV_Byte_Write(0x39, 0x00);
STV_Byte_Write(0x3a, 0xb7);
STV_Byte_Write(0x3b, 0x02);
STV_Byte_Write(0x3c, 0x00);
STV_Byte_Write(0x3d, 0x00);
STV_Byte_Write(0x3e, 0xef);
STV_Byte_Write(0x3f, 0x00);
STV_Byte_Write(0x4e, 0x31);
STV_Byte_Write(0x13, 0x3f);
}
/*==============================================================================
==============================================================================*/
void Initial_OSD(void) {
XDEL=4;
RSPACE=0;
CH=0;
OSDCON[1]=0x0c;
WINSW=0x55;
WINSH=0x55;
WINSC[0]=0x00;
WINSC[1]=0x00;
OSD_Show(0,0,0,0,0);
Clear_Screen();
}
/*==============================================================================
==============================================================================*/
void Initial_MSP(void) {
//Reset
MSP_Write_Control(0x8000);
MSP_Write_Control(0x0000);
//ANA
MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
MSP_Write_Address(WR_DEM, 0x0030, 0x2003);//MODUS automatic=on
MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//FM/AM Prescale 100kHz sound A mono
MSP_Write_Address(WR_DSP, 0x0010, 0x2000);//NICAM Prescale 0dB gain
//SCART
MSP_Write_Address(WR_DSP, 0x000d, 0x6000);//SCART Prescale 0dB gain
MSP_Write_Address(WR_DSP, 0x0007, 0x7301);//Scart Volume 0dB+0dB
//Audio Initial
Set_Mute(1);
Set_Treble(Treble);
Set_Bass(Bass);
Set_Balance(Balance);
}
/*==============================================================================
==============================================================================*/
void Burning_EEPROM(void) {
unsigned int address;
LED_GREEN=OFF;
LED_AMBER=OFF;
for(address=0; address<0x400; address++) {
if((address%256)==0x00)
LED_AMBER=OFF;
if((address%256)==0x80)
LED_AMBER=ON;
EE_MCU_Byte_Write(address, EEPROM[address/16][address%16]);
}
LED_GREEN=OFF;
LED_AMBER=OFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -