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

📄 msp.c

📁 LCDTV的source code,含周邊ic的driver code ,scaler ,
💻 C
字号:
/*******************************************************************************
  MSP.C
  Copyright (c) SmartASIC, Inc. All rights reserved.
*******************************************************************************/
#include <MTV230.H>
#include <DEFINE.H>
#define MSP345G 0x80
/*==============================================================================

==============================================================================*/
void MSP_IIC_Start(void) {

  MSP_SDA=1;
  MSP_SCL=1;
  MSP_SDA=0;
  MSP_SCL=0;

  }


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

==============================================================================*/
void MSP_IIC_Stop(void) {

  MSP_SDA=0;
  MSP_SCL=1;
  MSP_SDA=1;

  }


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

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

  unsigned char i;
  bit ack;
  
  for(i=0; i<8; i++) {
    MSP_SDA=bytedata&0x80;
    MSP_SCL=1;
    bytedata<<=1;
    MSP_SCL=0;
    }
  MSP_SDA=1;
  do{//wait CLK release
    MSP_SCL=1;
    }while(!MSP_SCL);
  ack=MSP_SDA;
  MSP_SCL=0;
  MSP_SDA=0;

  return ack;

  }


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

==============================================================================*/
unsigned char MSP_IIC_Data_Out(void) {

  unsigned char i, bytedata=0;

  MSP_SDA=1;
  for(i=0; i<8; i++) {
    MSP_SCL=1;
    bytedata<<=1;
    bytedata|=MSP_SDA;
    MSP_SCL=0;
    }

  return bytedata;

  }


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

==============================================================================*/
void MSP_Send_Acknowledge(bit ack) {

  MSP_SDA=ack;
  MSP_SCL=1;
  MSP_SCL=0;

  }


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

==============================================================================*/
/*unsigned int MSP_Read_Control(void) {

  unsigned char hbyte, lbyte;

Again:
  MSP_IIC_Start();
  if(MSP_IIC_Data_In(MSP345G))
    goto Again;  
  if(MSP_IIC_Data_In(CONTROL))
    goto Again;
  MSP_IIC_Start();
  if(MSP_IIC_Data_In(MSP345G|1))
    goto Again;
  hbyte=MSP_IIC_Data_Out();
  MSP_Send_Acknowledge(1);
  lbyte=MSP_IIC_Data_Out();
  MSP_Send_Acknowledge(1);
  MSP_IIC_Stop();

  return (unsigned int)hbyte*0x100+(unsigned int)lbyte;

  }*/


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

==============================================================================*/
void MSP_Write_Control(unsigned int intdata) {

  unsigned char hbyte, lbyte;

  hbyte=intdata/0x100;
  lbyte=intdata%0x100;

Again:
  MSP_IIC_Start();
  if(MSP_IIC_Data_In(MSP345G))
    goto Again;  
  if(MSP_IIC_Data_In(CONTROL))
    goto Again;
  if(MSP_IIC_Data_In(hbyte))
    goto Again;
  if(MSP_IIC_Data_In(lbyte))
    goto Again;
  MSP_IIC_Stop();

  }


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

==============================================================================*/
unsigned int MSP_Read_Address(unsigned char subaddress, unsigned int address) {

  unsigned char haddress, laddress, hbyte, lbyte;

  haddress=address/0x100;
  laddress=address%0x100;

Again:
  MSP_IIC_Start();
  if(MSP_IIC_Data_In(MSP345G))
    goto Again;  
  if(MSP_IIC_Data_In(subaddress))
    goto Again;
  if(MSP_IIC_Data_In(haddress))
    goto Again;
  if(MSP_IIC_Data_In(laddress))
    goto Again;
  MSP_IIC_Start();
  if(MSP_IIC_Data_In(MSP345G|1))
    goto Again;
  hbyte=MSP_IIC_Data_Out();
  MSP_Send_Acknowledge(0);
  lbyte=MSP_IIC_Data_Out();
  MSP_Send_Acknowledge(1);
  MSP_IIC_Stop();

  return (unsigned int)hbyte*0x100+(unsigned int)lbyte;

  }


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

==============================================================================*/
void MSP_Write_Address(unsigned char subaddress, unsigned int address, unsigned int intdata) {

  unsigned char haddress, laddress, hbyte, lbyte;

  haddress=address/0x100;
  laddress=address%0x100;
  hbyte=intdata/0x100;
  lbyte=intdata%0x100;

Again:
  MSP_IIC_Start();
  if(MSP_IIC_Data_In(MSP345G))
    goto Again;  
  if(MSP_IIC_Data_In(subaddress))
    goto Again;
  if(MSP_IIC_Data_In(haddress))
    goto Again;
  if(MSP_IIC_Data_In(laddress))
    goto Again;
    if(MSP_IIC_Data_In(hbyte))
    goto Again;
  if(MSP_IIC_Data_In(lbyte))
    goto Again;
  MSP_IIC_Stop();

  }


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

==============================================================================*/
void MSP_Source_Select(unsigned int outport_addr,
                       unsigned int in_source,
                       unsigned int out_matrix) {

  MSP_Write_Address(WR_DSP, outport_addr, in_source*0x100+out_matrix);

  }


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

==============================================================================*/
void MSP_SCART1_Source_Select(unsigned char scart_src) {
   
  if(scart_src==1)
    MSP_Write_Address(WR_DSP, 0x0013, 0x0000+0x0c00);//SCART1_IN->SCART ADC...SCART DAC-->SCART1_OUT
  else
    MSP_Write_Address(WR_DSP, 0x0013, 0x0000+0x0e00);//SCART2_IN->SCART ADC...SCART DAC-->SCART1_OUT

  }

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

==============================================================================*/
unsigned char Get_MTS_Mode(void) {

  unsigned int mts;
  unsigned char ret;

  MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
  MSP_Write_Address(WR_DEM, 0x0030, 0x2003);//enable automatic detect

  do{
    mts=MSP_Read_Address(RD_DEM, 0x007e);
    }while(mts>=0x7ff);

  ret=0;
  mts=MSP_Read_Address(RD_DEM, 0x0200);
  if((mts&0x0100)==0x0100)
    ret+=1;//SAP
  if((mts&0x0040)==0x0040)
    ret+=2;//STEREO
        
  return ret;//0:MONO 1:MONO+SAP 2:MONO+STEREO 3:MONO+SAP+STEREO

  }


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

==============================================================================*/
void Set_MTS_Mode(unsigned char mts) {

  MSP_Write_Address(WR_DEM, 0x0030, 0x2002);//disable automatic detect
  
  //Real_MTS ==> 0:MONO 1:MONO+SAP 2:MONO+STEREO 3:MONO+SAP+STEREO
  switch(mts) {
    case(0)://MONO
      if((Real_MTS==2)||(Real_MTS==3)) {
        MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
        MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
        }
      else {
        MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
        MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
        }
    break;
    case(1)://SAP
      if((Real_MTS==1)||(Real_MTS==3)) {
        MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
        MSP_Write_Address(WR_DSP, 0x000e, 0x2404);//sound B mono
        }
      else {
        if(Real_MTS==2)
          MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
        else
          MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
        MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
        }
    break;
    case(2)://STEREO
      if((Real_MTS==2)||(Real_MTS==3)) {
        MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
        MSP_Write_Address(WR_DSP, 0x000e, 0x2402);//Korean (BTSC Stereo)
        }
      else {
        MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
        MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
        }
    break;
    }
  
  }

⌨️ 快捷键说明

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