e2prom.c

来自「CS8955控制TV软件。用MCU做模拟电视的控制。」· C语言 代码 · 共 198 行

C
198
字号

/******************************************************************************\
     Project Version:   MTKCARDVD()
********************************************************************************
     Filename:          E2prom.c

     Author:            Alan Chan

     Company:           CoreTek/ACT Company

********************************************************************************
     File Version:      1.01
     File Created:      July 2007

     Compiled Using:    keil uVision2 Version 2.23 

********************************************************************************
     Files Required:

********************************************************************************
     File Description:

********************************************************************************
     File History:

--------------------------------------------------------------------------------
  Date         Name           Description
--------------------------------------------------------------------------------
  Mar. 2007    Alan Chan    File Created
  
\******************************************************************************/
#include "global.h"
#include "tv.h"

#include "e2prom.h"

extern void RadioLoadDefaultData(void);
extern void RadioStationSend2DVD(void);
#ifdef SUPPORT_UART_PRINTF  //martin 16Oct08
extern void DRS232LogS(char *pcStr);
#endif
/****************************************************************************/
void vInitialI2C(void)
{
       bNoAck = 0;
	EEP_Wait = 0;
	IIC_Stop(0);
	IIC_Stop(1);
}

/****************************************************************************/
void WriteE2prom(WORD addr,BYTE *databuf,WORD length)
{
	BYTE id,temp;
	union W_TEMP addr1;

	addr1.valW = addr;
	
	while( length > 0)
	{
		id = I2C_EEP_ADDR + (addr1.valB[0] << 1);
		temp = EEPROM_PBYTE -(addr1.valB[1]&(EEPROM_PBYTE-1));
		if( temp > length)
			temp = length;

		while(EEP_Wait > 0);

		IICSW_Write(0,id,1,addr1.valB[1],databuf,temp);
		EEP_Wait = EEPROM_PTIME;
	
		length -= temp;
		addr1.valW += temp;
		databuf += temp;
	}
	
}

/****************************************************************************/
void ReadE2prom(WORD addr,BYTE *databuf,WORD number)
{
	BYTE id;
	union W_TEMP addr1;

	addr1.valW = addr;
	id = I2C_EEP_ADDR + (addr1.valB[0] << 1);
	while(EEP_Wait > 0);
	IICSW_Read(0,id,1,addr1.valB[1],databuf,number);
}
/****************************************************************************/
BOOL fgEepromWriteByte(WORD wAddr,BYTE bData)
{
    WriteE2prom(wAddr, &bData, 1);
    return (TRUE);
}
BYTE bEepromReadByte(WORD wAddr)
{
    BYTE bData;

    ReadE2prom(wAddr, &bData,1);
    return (bData);
}

void PowerDownSaveToE2prom(void)
{
	WriteE2prom(SYSMODE_POS, &SysMode, 1);
	
	WriteE2prom(TV_LAST_CH_POS, &bTvCurrChIndex, 1);
	#ifdef MARTIN_SUPPORT_SHOW_TV_VERSION  //31Jul08
	WriteE2prom(TV_VERSION_POS, &fgTvVersion, 1);
	#else
	WriteE2prom(TV_LAST_CH_AUDIO_POS, &bTvCurrSound, 1);
	#endif
	WriteE2prom(TV_TOTAL_CH_POS, &bTvTotalCh, 1);	
}

/****************************************************************************/
void LoadE2promDefault(void)
{
	BYTE bTmp[6];
         #ifdef SUPPORT_UART_PRINTF
          DRS232LogS(" E2prom is New.\n"); 	
         #endif

       bTmp[0] = CORETEK_ID;
       WriteE2prom(CORETEK_ID_ADDR, &bTmp, 1);
       // system mode
       bTmp[0] = DVD_MODE;
       WriteE2prom(SYSMODE_POS, &bTmp, 1);

       // tv
       bTmp[0] = bTvTotalCh = 0;
       WriteE2prom(TV_TOTAL_CH_POS, &bTmp, 1);
        bTmp[0] = bTvCurrChIndex = 1; //01Sep09  0;
	WriteE2prom(TV_LAST_CH_POS, &bTmp, 1);
	 #ifdef MARTIN_SUPPORT_SHOW_TV_VERSION   //31Jul08
	  fgTvVersion= TV_VERSION_VALUE;   //31Jul08
	 _bSearchPercent=fgTvVersion;	 
	 bTmp[0] = fgTvVersion;
	WriteE2prom(TV_VERSION_POS, &bTmp, 1);
	// bTvCurrSound = TV_SOUND_DEFAULT;
	#else
       bTmp[0] = bTvCurrSound = TV_SOUND_DEFAULT;//TV_SOUND_BG; martin 14May08
       WriteE2prom(TV_LAST_CH_AUDIO_POS, &bTmp, 1);
	#endif
	#ifdef MARTIN_TUNER_TYPE_SELECT
	fgTunerType=TV_TYPE_DEFAULT;
	bTunerDeafultVal=(TV_TYPE_DEFAULT <<6)||(TV_SOUND_DEFAULT <<3) ||(TV_SYSTEM_DEFAULT);//0xd0;    //PAL I
        bTmp[0] = bTunerDeafultVal; // = bTunerVal;   //05Aug08
       WriteE2prom(TV_TUNER_TYPE_POS, &bTmp, 1);
	#endif
	       
           sTvCurrChannel.wFreq =VHF_LOW_BOT; //martin 16Oct08	
            sTvCurrChannel.bSystem=(0xc0 | bTunerDeafultVal);//bTunerVal;
             bTvCurrSound=(bTunerDeafultVal & 0x38 )>>3;
          #ifdef SUPPORT_UART_PRINTF
          DRS232LogS("New E2prom is ok.\n"); 	
         #endif

}

/****************************************************************************/
void vInitialE2prom(void)
{
	BYTE bTmp;//, page;
   #ifdef SUPPORT_UART_PRINTF
     DRS232LogS("Initial E2prom Start.\n"); 	
   #endif

       bTmp = 0;
       ReadE2prom(CORETEK_ID_ADDR, &bTmp, 1);
       if(bTmp!=CORETEK_ID)
       {
           LoadE2promDefault();
           return;		
	}

 /////////////// TV Software Version /////////////////////////////////////
 #if 0   // #ifdef MARTIN_SUPPORT_SHOW_TV_VERSION   //31Jul08
	bTmp=fgTvVersion;
	WriteE2prom(TV_VERSION_POS, &bTmp, 1);
	#endif
/////////////////////////////////////////////////////////////////////////
	  
/////////////////////////////////////////////////////////////////////////
       // Sysmode
/////////////////////////////////////////////////////////////////////////
       ReadE2prom(SYSMODE_POS, &bTmp, 1);
	SysMode = NextSysMode = bTmp;   

/////////////////////////////////////////////////////////////////////////
       // TV
/////////////////////////////////////////////////////////////////////////
       LoadTVData();

  return;
}

⌨️ 快捷键说明

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