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

📄 tuner.c

📁 LCDTV的source code,含周邊ic的driver code ,scaler ,
💻 C
字号:
/*******************************************************************************
  TUNER.C
  Copyright (c) SmartASIC, Inc. All rights reserved.
*******************************************************************************/
#include <MTV230.H>
#include <DEFINE.H>
#include <INTRINS.H>
#define PHILIPS_TUNER     0xC6
#define PHILIPS_CONTROL   0xCE
#define TUNER 1
#if (TUNER==0)//Long
  #define PHILIPS_LOW_BAND  0xA0//Philips Tuner Low Bank Byte
  #define PHILIPS_MID_BAND  0x90//Philips Tuner Middle Bank Byte
  #define PHILIPS_HIGH_BAND 0x30//Philips Tuner High Bank Byte
  #define PHILIPS_DIV_ML    0x0CDC//Philips Tuner division between Low Bank and Middle Bank
  #define PHILIPS_DIV_HM    0x1F3C//Philips Tuner division between Middle Bank and High Bank
#endif
#if (TUNER==1)//Short
  #define PHILIPS_LOW_BAND  0x01//Philips Tuner Low Bank Byte
  #define PHILIPS_MID_BAND  0x02//Philips Tuner Middle Bank Byte
  #define PHILIPS_HIGH_BAND 0x04//Philips Tuner High Bank Byte
  #define PHILIPS_DIV_ML    0x0D0E //Philips Tuner division between Low Bank and Middle Bank
  #define PHILIPS_DIV_HM    0x1E7C//Philips Tuner division between Middle Bank and High Bank
#endif
/*==============================================================================

==============================================================================*/
  code unsigned int NTSC_J_CATV[126]={
  0x0650,0x06b0,0x0710,0x0770,0x07b0,0x0810,0x0890,0x08f0,0x0950,0x09b0,
  0x0a10,0x0a70,0x0ad0,0x0b30,0x0b90,0x0bf0,0x0c50,0x0cb0,0x0d10,0x0d70,
  0x0dd0,0x0e30,0x0e90,0x0ef0,0x0f50,0x0fb0,0x1010,0x1070,0x10d0,0x1130,
  0x1190,0x11f0,0x1250,0x12b0,0x1310,0x1370,0x13d0,0x1430,0x1490,0x14f0,
  0x1550,0x15b0,0x1610,0x1670,0x16d0,0x1730,0x1790,0x17f0,0x1850,0x18b0,
  0x1910,0x1970,0x19d0,0x1a30,0x1a90,0x1af0,0x1b50,0x1bb0,0x1c10,0x1c70,
  0x1cd0,0x1d30,0x1d90,0x1df0,0x1e50,0x1eb0,0x1f10,0x1f70,0x1fd0,0x2030,
  0x2050,0x20b0,0x2110,0x2170,0x21d0,0x2230,0x2290,0x22f0,0x2350,0x23b0,
  0x2410,0x2470,0x24d0,0x2530,0x2590,0x25f0,0x2650,0x26b0,0x2710,0x2770,
  0x27d0,0x2830,0x2890,0x28f0,0x2950,0x29b0,0x2a10,0x2a70,0x2ad0,0x2b30,
  0x2b90,0x2bf0,0x2c50,0x2cb0,0x2d10,0x2d70,0x2dd0,0x2e30,0x2e90,0x2ef0,
  0x2f50,0x2fb0,0x3010,0x3070,0x30d0,0x3130,0x3190,0x31f0,0x3250,0x32b0,
  0x3310,0x3370,0x33d0,0x3430,0x3490,0x34f0};

  code unsigned int NTSC_J_AIRTV[60]={
  0x0650,0x06b0,0x0710,0x07b0,0x0810,0x0dd0,0x0e30,0x0e90,0x0ef0,0x0f50,
  0x0fb0,0x1010,0x2050,0x20b0,0x2110,0x2170,0x21d0,0x2230,0x2290,0x22f0,
  0x2350,0x23b0,0x2410,0x2470,0x24d0,0x2530,0x2590,0x25f0,0x2650,0x26b0,
  0x2710,0x2770,0x27d0,0x2830,0x2890,0x28f0,0x2950,0x29b0,0x2a10,0x2a70,
  0x2ad0,0x2b30,0x2b90,0x2bf0,0x2c50,0x2cb0,0x2d10,0x2d70,0x2dd0,0x2e30,
  0x2e90,0x2ef0,0x2f50,0x2fb0,0x3010,0x3070,0x30d0,0x3130,0x3190,0x31f0};

  code unsigned int NTSC_M_CATV[125]={
  0x0770,0x0650,0x06B0,0x0710,0x07B0,0x0810,0x0DD0,0x0E30,0x0E90,0x0EF0,
  0x0F50,0x0FB0,0x1010,0x0A70,0x0AD0,0x0B30,0x0B90,0x0BF0,0x0C50,0x0CB0,
  0x0D10,0x0D70,0x1070,0x10D0,0x1130,0x1190,0x11F0,0x1250,0x12B0,0x1310,
  0x1370,0x13D0,0x1430,0x1490,0x14F0,0x1550,0x15B0,0x1610,0x1670,0x16D0,
  0x1730,0x1790,0x17F0,0x1850,0x18B0,0x1910,0x1970,0x19D0,0x1A30,0x1A90,
  0x1AF0,0x1B50,0x1BB0,0x1C10,0x1C70,0x1CD0,0x1D30,0x1D90,0x1DF0,0x1E50,
  0x1EB0,0x1F10,0x1F70,0x1FD0,0x2030,0x2090,0x20F0,0x2150,0x21B0,0x2210,
  0x2270,0x22D0,0x2330,0x2390,0x23F0,0x2450,0x24B0,0x2510,0x2570,0x25D0,
  0x2630,0x2690,0x26F0,0x2750,0x27B0,0x2810,0x2870,0x28D0,0x2930,0x2990,
  0x29F0,0x2A50,0x2AB0,0x2B10,0x0890,0x08F0,0x0950,0x09B0,0x0A10,0x2B70,
  0x2BD0,0x2C30,0x2C90,0x2CF0,0x2D50,0x2DB0,0x2E10,0x2E70,0x2ED0,0x2F30,
  0x2F90,0x2FF0,0x3050,0x30B0,0x3110,0x3170,0x31D0,0x3230,0x3290,0x32F0,
  0x3350,0x33B0,0x3410,0x3470,0x34D0};

  code unsigned int NTSC_M_AIRTV[69]={
  0x0770,0x0650,0x06B0,0x0710,0x07B0,0x0810,0x0DD0,0x0E30,0x0E90,0x0EF0,
  0x0F50,0x0FB0,0x1010,0x2050,0x20B0,0x2110,0x2170,0x21D0,0x2230,0x2290,
  0x22F0,0x2350,0x23B0,0x2410,0x2470,0x24D0,0x2530,0x2590,0x25F0,0x2650,
  0x26B0,0x2710,0x2770,0x27D0,0x2830,0x2890,0x28F0,0x2950,0x29B0,0x2A10,
  0x2A70,0x2AD0,0x2B30,0x2B90,0x2BF0,0x2C50,0x2CB0,0x2D10,0x2D70,0x2DD0,
  0x2E30,0x2E90,0x2EF0,0x2F50,0x2F50,0x3010,0x3070,0x30D0,0x3130,0x3190,
  0x31F0,0x3250,0x32B0,0x3310,0x3370,0x33D0,0x3430,0x3490,0x34f0};

/*==============================================================================

==============================================================================*/
void Tuner_Start(void) {

  TUNER_SDA=1;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SCL=1;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SDA=0;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SCL=0;
  _nop_();  _nop_();  _nop_();  _nop_();

  }


/*==============================================================================

==============================================================================*/
void Tuner_Stop(void) {

  TUNER_SCL=0;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SDA=0;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SCL=1;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SDA=1;
  _nop_();  _nop_();  _nop_();  _nop_();

  }


/*==============================================================================

==============================================================================*/
bit Tuner_Data_In(unsigned char bytedata) {

  unsigned char i;
  bit ack;
  
  for(i=0; i<8; i++) {
    TUNER_SDA=bytedata&0x80;
    _nop_();  _nop_();  _nop_();  _nop_();
    TUNER_SCL=1;         
    bytedata<<=1;
    _nop_();  _nop_();  _nop_();  _nop_();
    TUNER_SCL=0;
    _nop_();  _nop_();  _nop_();  _nop_();
    }
  
  TUNER_SDA=1;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SCL=1;
  _nop_();  _nop_();  _nop_();  _nop_();
  ack=TUNER_SDA;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SCL=0;
  _nop_();  _nop_();  _nop_();  _nop_();
  TUNER_SDA=0;
  _nop_();  _nop_();  _nop_();  _nop_();

  return ack;

  }


/*==============================================================================

==============================================================================*/
void Initial_Tuner(void) {

#if (TUNER==1)    
  TunerError:
    Tuner_Start();
    if(Tuner_Data_In(0x86))
      goto TunerError;
    if(Tuner_Data_In(0x00))
      goto TunerError;
    if(Tuner_Data_In(0x16))
      goto TunerError;
    if(Tuner_Data_In(0x30))
      goto TunerError;
    if(Tuner_Data_In(0x44))
      goto TunerError;
    Tuner_Stop();
#endif
  
  }


/*==============================================================================

==============================================================================*/
void Set_Channel(unsigned char Channel_Number) {

  unsigned char BandSwitch;
  unsigned int Devider;

  switch(TV_Mode) {
    case(TV_AIR):
      Devider=NTSC_M_AIRTV[Channel_Number]; 
    break;
    case(CATV_STD):  
      Devider=NTSC_M_CATV[Channel_Number];  
    break;
    case(CATV_IRC):  
      Devider=NTSC_M_CATV[Channel_Number]; 
      if((Channel_Number==4)||(Channel_Number==5))
	    Devider+=0x20;
    break;
    case(CATV_HRC):
      Devider=NTSC_M_CATV[Channel_Number]; 
      if((Channel_Number==4)||(Channel_Number==5))
	    Devider+=0x0c;
      else
        Devider-=0x14;
    break;
    }

  if(Devider<PHILIPS_DIV_ML)
    BandSwitch=PHILIPS_LOW_BAND;
  else if(Devider<PHILIPS_DIV_HM)
         BandSwitch=PHILIPS_MID_BAND;
       else
         BandSwitch=PHILIPS_HIGH_BAND;

TunerError:
  Tuner_Start();
  if(Tuner_Data_In(PHILIPS_TUNER))
    goto TunerError;
  if(Tuner_Data_In(Devider/256))
    goto TunerError;
  if(Tuner_Data_In(Devider%256))
    goto TunerError;
  if(Tuner_Data_In(PHILIPS_CONTROL))
    goto TunerError;
  if(Tuner_Data_In(BandSwitch))
    goto TunerError;
#if (TUNER==1)
  if(Tuner_Data_In(0x80))
    goto TunerError;
#endif
  Tuner_Stop();

  }


/*==============================================================================

==============================================================================*/
void Auto_Scan(void) {

  unsigned char i, ch, lock, locktime, pre_channel;
  unsigned char min_channel, max_channel;

  pre_channel=Channel;
  
  if(TV_Mode==TV_AIR) {
    min_channel=CHANNEL_AIR_MIN;
    max_channel=CHANNEL_AIR_MAX;
    }
  else {
    min_channel=CHANNEL_MIN;
    max_channel=CHANNEL_MAX;
    }

  for(i=min_channel; i<max_channel; i++) {
    Set_Channel(i);
    Print_Char(1, 13, i+1, WHITE);
    ch=EE_MCU_Byte_Read(ChannelTable_EEPROM_Address()+i/8);        
    lock=locktime=0;        
    do{
      DelayX10ms(5);    
      if((SA7114_Byte_Read(0x1f)&0x01)==0x01)
        lock++;
      locktime++;
      }while((lock<2)&&(locktime<5));
    
    if(lock<2)
      ch=Set_Bit(ch, i%8, 0);
    else
      ch=Set_Bit(ch, i%8, 1);
    EE_MCU_Byte_Write(ChannelTable_EEPROM_Address()+i/8, ch);
    }

  for(i=min_channel; i<max_channel; i++) {
    ch=EE_MCU_Byte_Read(ChannelTable_EEPROM_Address()+((pre_channel+i)%max_channel)/8); 
    if(Get_Bit(ch, i%8))
      break;
    }

  Channel=(pre_channel+i)%max_channel;
  EE_MCU_Byte_Write(Channel_EEPROM_Address(), Channel);
  Set_Channel(Channel);  

  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -