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

📄 initial.c

📁 LCDTV的source code,含周邊ic的driver code ,scaler ,
💻 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 + -