FmTEA5767.c
资源名称:SDK_M5661.rar [点击查看]
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:19k
源码类别:
压缩解压
开发平台:
C++ Builder
- /*==========================================================================
- Copyright (c) 2004 ALi Corporation. All Rights Reserved
- File: Fm.c
- content:
- History: Created by David Chiu 2004/4/27
- ==========================================================================*/
- #define _FM_TEA5767_H_
- #include "TypeDef.h"
- #include "Const.h"
- #include "Reg5661.h"
- #if(FM_MODULE==0) //Walace060126#2
- #include "Common.h"
- #include "UiFm.h" //just for UiDisplayCtrl
- #include "I2C.h"
- #include "FmTEA5767.h"
- //Ren050312#1
- #include "ExtCodec.h"
- #include "IntCodec.h"
- //Walace060126#2 start
- #define FM_GET_ADC_LEVEL 0xF0
- #define FM_GET_IF 0x7F
- #define FM_SEARCH_FINISH 0x80
- #define FM_SEARCH_BAND 0x40
- #define FM_CMD_MUTE_EN 0x80
- #define FM_CMD_MUTE_DIS 0x7F
- #define FM_CMD_SEARCH_EN 0x40
- #define FM_CMD_SEARCH_DIS 0xBF
- #define FM_CMD_STANDBY_EN 0x40
- #define FM_CMD_STANDBY_DIS 0xBF
- #define FM_CMD_STOP_HIGH 0x60
- #define FM_CMD_STOP_MID 0x40
- #define FM_CMD_STOP_LOW 0x20
- #define FM_HI_INJECTION_EN 0x10
- #define FM_LO_INJECTION_ENJ 0xEF
- #define FM_FORCE_MONO 0x08 //Walace060217#1
- #define FM_NEXT_STOP_LEVEL 0x20
- #define FM_STERO_EN 0x80
- //Walace060126#2 end
- BOOL gfHILOInjection;
- XBYTE gxbFmWriteData[5];
- XBYTE gxbFmReadData[5];
- //Walace060126#2 end
- BOOL TEA5767Write(void);
- BOOL TEA5767Read(void);
- WORD CalculatePLL(WORD wfrequency);
- WORD ConvertPLL(WORD wPll);
- BOOL IsValidStop(void)large;
- //Dennis Shih 20060309
- //Dino050812
- void FMHiLoCheck(void) large;
- /*
- EXTERN API BOOL gfStereoSet; //Walace060217#1
- EXTERN API BOOL gfRealStereo;
- */
- /*
- *--------------------------------------------------------------------------
- Desciption:
- Initial setting of FM Module
- Arguments:
- void
- Global arguments:
- gxwFmFreq=Default FM Freq
- Returns:
- void
- --------------------------------------------------------------------------*/
- #if (_PM_FM_|_PM_MPTEST_)
- API bit TEA5767_FmInit(void)
- {
- //David 041106#2
- /*
- obDCVARRD=0x0A; //DCV Addr 0x0A
- obDCVWRDATA=0x72; //Set 0x72
- obDCVARRD=0x09; //DCV Addr 0x09
- obDCVWRDATA=0x74; //Set 0x74
- */
- obGPIOEDAT &=0xBF; //Power on FM //David 041106#1
- // Data Init...
- //FmDataInit(); //Vicky050311#3 //Walace060126#2
- TEA5767_FmDataInit(); //Vicky050311#3 //Walace060126#2
- I2cInit();
- obI2CCLKDIV = 7; // Set I2C Serial Port Clock for FM
- I2cWaitBusy();
- //return FmSetFreq(); //Walace060126#2
- return TEA5767_FmSetFreq();
- }
- //Vicky050311#3
- API void TEA5767_FmDataInit(void)
- {
- BYTE bI;
- for(bI=0;bI<5;bI++)
- {
- gxbFmReadData[bI]=0;
- gxbFmWriteData[bI]=0;
- }
- gfHILOInjection=FM_LO_INJEC;
- gxbFmWriteData[2]=0x00;//low injection ,stereo on,left not muted,right not muted,SW port1 low
- gxbFmWriteData[3]=0x1e;//SW port2 low,standby off,US/Europe FM band limit,xtal=32.768kHz,Soft-mute on,HCC on,SNC on,pin 14 is SW port1;
- gxbFmWriteData[4]=0x80;//6.5kHz reference for PLL enable,Deemphasis time const is 50us
- }
- #endif
- #if (_PM_FM_|_PM_MPTEST_)
- /*--------------------------------------------------------------------------
- Desciption:
- Write 5 bytes to TEA5767HN chip ,no subaddress byte is needed
- Arguments:
- void
- Global arguments:
- xbFmWriteData[]: Data write to TEA5767 chip
- Returns:
- TRUE or FALSE
- --------------------------------------------------------------------------*/
- BOOL TEA5767Write(void)
- {
- BYTE bI;
- obCLKI2CMCTRL |= 0x80; //clock Enable //Renshuo050322#A
- obMODSEL2 |= 0x08; //I2CM Enable
- obI2CMAADDR = FM_TEA5767;
- obI2CSLADDR = gxbFmWriteData[0];
- for(bI=1;bI<5;bI++)
- obI2CFIFO = gxbFmWriteData[bI];
- obI2CMACMD = (I2C_CMD_SINGLE | I2C_CMD_CURRENT | I2C_CMD_WRITE_MODE | I2C_CMD_DATA_LEN(4));
- //Renshuo050322#A
- bI = I2cWaitBusy();
- obMODSEL2 &= 0xF7; //I2CM Disable
- obCLKI2CMCTRL &= 0x7F; //clock Disable
- return bI;
- }
- #endif // (_PM_FM_|_PM_MPTEST_)
- #if (_PM_FM_|_PM_MPTEST_)
- /*--------------------------------------------------------------------------
- Desciption:
- Read 5 bytes from TEA5767HN chip ,no subaddress byte is needed
- Arguments:
- void
- Global arguments:
- void
- Returns:
- TRUE or FALSE
- --------------------------------------------------------------------------*/
- BOOL TEA5767Read(void)
- {
- BYTE bI;
- //Renshuo050322#A
- obCLKI2CMCTRL |= 0x80; //clock Enable
- obMODSEL2 |= 0x08; //I2CM Enable
- obI2CMAADDR = FM_TEA5767;
- obI2CMACMD = ( I2C_CMD_SINGLE | I2C_CMD_CURRENT | I2C_CMD_READ_MODE | I2C_CMD_DATA_LEN(5));
- if(I2cWaitBusy())
- {
- for(bI=0;bI<5;bI++)
- gxbFmReadData[bI]=obI2CFIFO;
- //Renshuo050322#A
- obCLKI2CMCTRL |= 0x80; //clock Enable
- obMODSEL2 |= 0x08; //I2CM Enable
- return TRUE;
- }
- else
- {
- obCLKI2CMCTRL |= 0x80; //clock Enable
- obMODSEL2 |= 0x08; //I2CM Enable
- return FALSE;
- }
- }
- #endif // (_PM_FM_|_PM_MPTEST_)
- #if (_PM_FM_|_PM_MPTEST_)
- /*--------------------------------------------------------------------------
- Desciption:
- Converts frequency to PLL value in condition of "HILO injection" = 1
- Arguments:
- xwfrequency: the frequency based on 100KHz (ex: 963 = 96.3 MHz)
- Global arguments:
- void
- Returns:
- The value of PLL
- --------------------------------------------------------------------------*/
- WORD CalculatePLL(WORD wfrequency)
- {
- #if(FM_STEP_100K) //Dennis060517#1 start
- if (gfHILOInjection)
- return (WORD)( (( (DWORD)wfrequency*100000)+225000)>>13);//HILO injection=1
- else
- return (WORD)( (( (DWORD)wfrequency*100000)-225000)>>13);//HILO injection=0
- #else
- if (gfHILOInjection)
- return (WORD)( (( (DWORD)wfrequency*10000)+225000)>>13);//HILO injection=1
- else
- return (WORD)( (( (DWORD)wfrequency*10000)-225000)>>13);//HILO injection=0
- #endif //Dennis060517#1 end
- }
- #endif
- #if (_PM_FM_)
- /*--------------------------------------------------------------------------
- Desciption:
- Converts PLL value to frequency in condition of "HILO injection" = 1
- Arguments:
- wPll: The PLL value
- Global arguments:
- void
- Returns:
- The frequency
- --------------------------------------------------------------------------*/
- WORD ConvertPLL(WORD wPll)
- {
- #if(FM_STEP_100K) //Dennis060517#1 start
- if(gfHILOInjection)
- return (((((DWORD)wPll<<13)-225000)/100000)+1); // HILo injection=1;
- else
- return (((((DWORD)wPll<<13)+225000)/100000)+1);// HILo injection=0;
- #else
- if(gfHILOInjection)
- return (((((DWORD)wPll<<13)-225000)/10000)+10); // HILo injection=1;
- else
- return (((((DWORD)wPll<<13)+225000)/10000)+10);// HILo injection=0;
- #endif //Dennis060517#1 end
- }
- #endif // (_PM_FM_)
- #if (_PM_FM_|_PM_MPTEST_)
- /*--------------------------------------------------------------------------
- Desciption:
- Set FM IC's PLL by "gxwFmFreq"
- Arguments:
- void
- Global arguments:
- gxwFmFreq : FM frequency based on 100KHz
- Returns:
- TRUE: Set Freq successful
- FALSE: Busy time out or Nack error
- --------------------------------------------------------------------------*/
- API bit TEA5767_FmSetFreq(void)
- {
- XWORD xwPLL;
- xwPLL=CalculatePLL(gxwFmFreq);
- if (gfHILOInjection)
- gxbFmWriteData[2] |= FM_HI_INJECTION_EN;
- else
- gxbFmWriteData[2] &= FM_LO_INJECTION_ENJ;
- gxbFmWriteData[0]=((xwPLL>>8) & FM_CMD_MUTE_DIS) & FM_CMD_SEARCH_DIS; //not mute and not in search mode
- gxbFmWriteData[1]=xwPLL ;
- TEA5767Write();
- return TRUE;
- }
- #endif //_PM_FM_|_PM_MPTEST_
- #if (_PM_FM_)
- /*--------------------------------------------------------------------------
- Desciption:
- Set FM in mute mode, this function will set frequ, too.
- If You want to unmute, just call FmSetFreq
- Arguments:
- void
- Global arguments:
- gxwFmFreq : FM frequency based on 100KHz
- Returns:
- void
- --------------------------------------------------------------------------*/
- API void TEA5767_FmSetMute(void)
- {
- XWORD xwPLL;
- xwPLL=CalculatePLL(gxwFmFreq);
- if (gfHILOInjection)
- gxbFmWriteData[2] |= FM_HI_INJECTION_EN;
- else
- gxbFmWriteData[2] &= FM_LO_INJECTION_ENJ;
- gxbFmWriteData[0]=((xwPLL>>8) | FM_CMD_MUTE_EN) & FM_CMD_SEARCH_DIS; //mute and not in search mode
- gxbFmWriteData[1]=xwPLL ;
- TEA5767Write();
- }
- #endif // (_PM_FM_)
- #if (_PM_FM_)
- /*--------------------------------------------------------------------------
- Desciption:
- Stop FM Module, set IC mute and standby
- Arguments:
- void
- Global arguments:
- void
- Returns:
- void
- --------------------------------------------------------------------------*/
- API void TEA5767_FmEnd(void)
- {
- gxbFmWriteData[0] |= FM_CMD_MUTE_EN;
- gxbFmWriteData[3] |= FM_CMD_STANDBY_EN;
- TEA5767Write();
- ClkI2CmDis();
- ClkCdcEn(); //2004.11.16 Renshuo
- //obALGPAREG |= 0x04; //power down PDY
- //obALGPAREG |= 0x01; //power down PD
- //obALGPAREG |= 0x02; //power down PDX
- #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
- //Renshuo050322#A
- IntCdcPowerDownPa(); //Renshuo041207#A //Ren050312#1
- #endif
- ClkCdcDis();
- gfCdcAlreadyInit = FALSE; /*2004.11.17 Renshuo add*/
- obGPIOEDAT |=0x40; //Power down FM //David 041106#1
- //David 041106#2
- /*
- // restore dvc value
- obDCVARRD=0x0A; //DCV Addr 0x0A
- obDCVWRDATA=0x42; //Set 0x42
- obDCVARRD=0x09; //DCV Addr 0x09
- obDCVWRDATA=0x07; //Set 0x07
- */
- }
- #endif // (_PM_FM_)
- API void TEA5767_FmSetStereo(BOOL fStereo) //Walace060217#1
- {
- if(fStereo) //Dennis060309#1
- gxbFmWriteData[2] &=(~FM_FORCE_MONO); //Dennis Shih 2006/03/10
- else
- gxbFmWriteData[2] |=FM_FORCE_MONO; //Dennis Shih 2006/03/10
- TEA5767Write();
- }
- #if (_PM_FM_)
- /*--------------------------------------------------------------------------
- Desciption:
- check Fm is stereo or mono
- Arguments:
- void
- Global arguments:
- void
- Returns:
- TRUE:Stereo
- FALSE:MONO
- --------------------------------------------------------------------------*/
- API bit TEA5767_FmCheckStereo(void)
- {
- TEA5767Read();
- if(gxbFmReadData[2]&FM_STERO_EN)
- return TRUE;
- else
- return FALSE;
- }
- #endif //(_PM_FM_)
- #if (_PM_FM_)
- /*--------------------------------------------------------------------------
- Desciption:
- Search Up/Down from currently frequency
- Arguments:
- fSearchUp 1: Up 0: Down
- bStopLevel
- Global arguments:
- void
- Returns:
- TRUE: A station is found
- FALSE:Reach the band limit
- --------------------------------------------------------------------------*/
- //BOOL TEA5767_FmSearch(BOOL fSearchUp)
- #if(USE_CHIP_AUTO_SEARCH) //Walace060829#4
- BOOL TEA5767_FmSearch(BYTE fSearchUp) reentrant //Tne051228#reentrant
- {
- //-----------------------For TEA5767--------------------------
- BYTE xbLevelHigh,xbLevelLow;
- WORD xwPLL,xwPreFreq,xwTimeOut2;
- DWORD xdwTimeOut1;
- WORD xwDifFreq;
- BYTE xbNowStopLevel;
- BYTE xbRetry=0;
- xbNowStopLevel=FM_CMD_STOP_LOW; // Use Low Level for search default
- xdwTimeOut1=0x7FFFFFFF;
- while(1)
- {
- xwPreFreq = gxwFmFreq;
- xwPLL = CalculatePLL(gxwFmFreq);
- gxbFmWriteData[0] = ((BYTE)(xwPLL>>8) | FM_CMD_SEARCH_EN | FM_CMD_MUTE_EN);
- gxbFmWriteData[1] = (BYTE)xwPLL;
- gxbFmWriteData[2] = (((BYTE)fSearchUp)<<7) | xbNowStopLevel;
- TEA5767Write(); //Start Search
- xdwTimeOut1--;
- if(xdwTimeOut1==0)
- return FALSE; // TimeOut
- xwTimeOut2=0xFFFF;
- do
- {
- UiDispCtrl(UI_FM_SEARCHING); //show searching message
- if(!TEA5767Read()) return FALSE;
- xwTimeOut2--;
- if(xwTimeOut2==0) return FALSE; //Time Out
- }
- while((gxbFmReadData[0]&FM_SEARCH_FINISH)==FALSE); //wait search finish
- if(gxbFmReadData[0]&FM_SEARCH_BAND) //Reach the band limit
- return (FALSE);
- //applying searching algorithm here
- xwPLL=((WORD)(gxbFmReadData[0] & 0x3f))<<8;
- xwPLL|=gxbFmReadData[1];
- gxwFmFreq=ConvertPLL(xwPLL);
- if( (xwPreFreq==gxwFmFreq ) )
- {
- if(fSearchUp)
- gxwFmFreq++;
- else
- gxwFmFreq--;
- }
- else
- {
- if(xbNowStopLevel==FM_CMD_STOP_HIGH) // STOP Level High...No more high
- {
- if (IsValidStop())
- break;
- }
- else
- {
- if(fSearchUp)
- xwDifFreq=(gxwFmFreq-xwPreFreq);
- else
- xwDifFreq=(xwPreFreq-gxwFmFreq);
- if(xwDifFreq==1)
- {
- xbRetry++;
- if(xbRetry>=3)
- {
- xbNowStopLevel += FM_NEXT_STOP_LEVEL; // Try Next stop Level
- xbRetry=0;
- }
- }
- else
- {
- if (IsValidStop())
- break;
- }
- }
- }
- }//while loop
- if(gfHILOInjection)
- xwPLL+=0x3d;
- else
- xwPLL+=0x30;
- //starting to set HILO to optimal level
- gxbFmWriteData[0]=(xwPLL>>8) & FM_CMD_SEARCH_DIS; //stop search mode
- gxbFmWriteData[1]=xwPLL ;
- TEA5767Write();
- TEA5767Read();
- xbLevelHigh=(gxbFmReadData[3] & FM_GET_ADC_LEVEL);
- if(gfHILOInjection)
- xwPLL-=0x7a;
- else
- xwPLL-=0x60;
- gxbFmWriteData[0]=(xwPLL>>8) & FM_CMD_SEARCH_DIS;
- gxbFmWriteData[1]=xwPLL ;
- TEA5767Write();
- TEA5767Read();
- xbLevelLow=(gxbFmReadData[3] & FM_GET_ADC_LEVEL);
- if (xbLevelHigh<xbLevelLow)
- gfHILOInjection=TRUE; //high injection
- else
- gfHILOInjection=FALSE; //low injection
- //FmSetFreq();
- return TRUE;
- }
- #else //Walace060829#4 start
- API BYTE FmCheckLevel(void)
- {
- TEA5767Read();
- return (gxbFmReadData[3] & FM_GET_ADC_LEVEL)>>4;
- }
- BOOL TEA5767_FmSearch(BYTE fSearchUp) reentrant //Tne051228#reentrant
- {
- WORD wDelay,xwPLL;
- BYTE xbIFCounter;
- BYTE xbStreo;
- BYTE bI;
- BYTE bKey;
- BYTE bTemp,bLevel;
- while(1)
- {
- bTemp=0;
- //KeyGet(bKey); //Walace060829#4
- //if((bKey == KEY_LEFT_BREAK)||(bKey == KEY_RIGHT_BREAK))
- // return FALSE;
- if(fSearchUp)
- {
- gxwFmFreq++;
- if(gxwFmFreq>FM_FREQ_MAX)
- {
- gxwFmFreq=FM_FREQ_MAX;
- return FALSE;
- }
- }
- else
- {
- gxwFmFreq--;
- if(gxwFmFreq<FM_FREQ_MIN)
- {
- gxwFmFreq=FM_FREQ_MIN;
- return FALSE;
- }
- }
- //UiShowFreq();
- //UiShowScrollPreset();
- UiDispCtrl(UI_FM_SEARCHING); //Walace060829#4
- xwPLL=CalculatePLL(gxwFmFreq);
- if (gfHILOInjection)
- gxbFmWriteData[2] |= FM_HI_INJECTION_EN;
- else
- gxbFmWriteData[2] &= FM_LO_INJECTION_ENJ;
- gxbFmWriteData[0]=((xwPLL>>8) & FM_CMD_MUTE_DIS) & FM_CMD_SEARCH_DIS; //not mute and not in search mode
- gxbFmWriteData[1]=xwPLL ;
- TEA5767Write();
- wDelay=0;
- while(++wDelay<30000);
- wDelay=0;
- while(++wDelay<30000);
- bLevel = FmCheckLevel();
- for(bI=0;bI<15;bI++)
- {
- TEA5767Read();
- xbIFCounter = gxbFmReadData[2] & FM_GET_IF;
- xbStreo=gxbFmReadData[2]&FM_STERO_EN;
- if(xbStreo)
- {
- bTemp++;
- if((xbIFCounter>=0x35)&(xbIFCounter<0x3e)&(bTemp>10)&(bLevel>=2))
- //if((xbIFCounter>=0x37)&(xbIFCounter<0x3e)&(bTemp>12)&(bLevel>=4))
- {
- bTemp=0;
- TEA5767Write();
- return TRUE;
- }
- }
- wDelay=0;
- while(++wDelay<800);
- }
- }
- }
- #endif //#if(USE_CHIP_AUTO_SEARCH)
- //Walace060829#4 end
- #endif // (_PM_FM_)
- #if (_PM_FM_|_PM_MPTEST_)
- /*--------------------------------------------------------------------------
- Desciption:
- Checking frequency searching stopped value is valid or not
- Arguments:
- void
- Global arguments:
- void
- Returns:
- TRUE: Valid
- FALSE:Invalid
- --------------------------------------------------------------------------*/
- BOOL IsValidStop(void) large
- {
- //Dennis Shih 20060309 start
- XBYTE xbLevel1,xbIFCounter;
- TEA5767Read();
- xbLevel1 = (gxbFmReadData[3] & FM_GET_ADC_LEVEL)>>4;
- xbIFCounter = gxbFmReadData[2] & FM_GET_IF;
- //if (!( (xbLevel1>5) & (0x30<xbIFCounter) & (xbIFCounter<0x5f)))
- if (!( (xbLevel1>3) & (0x32<xbIFCounter) & (xbIFCounter<0x3b)))
- return (FALSE);
- else
- return TRUE;
- /*
- XBYTE xbLevel1,xbLevel2,xbIFCounter;
- #define xbLevelDiff xbLevel2
- if (!( (xbLevel1>5) & (0x31<xbIFCounter) & (xbIFCounter<0x3a) ))
- return (FALSE);
- else
- return TRUE;
- if (gfHILOInjection)
- gxbFmWriteData[2] &= FM_LO_INJECTION_ENJ; //hi toggle to lo
- else
- gxbFmWriteData[2] |= FM_HI_INJECTION_EN; //lo toggle to high
- TEA5767Write();
- TEA5767Read();
- xbLevel2 = (gxbFmReadData[3] & FM_GET_ADC_LEVEL)>>4; //measure level2
- xbIFCounter = gxbFmReadData[2] & FM_GET_IF;
- if (gfHILOInjection)
- gxbFmWriteData[2] |= FM_HI_INJECTION_EN; //high injection
- else
- gxbFmWriteData[2] &= FM_LO_INJECTION_ENJ; //low injection
- TEA5767Write();
- if(xbLevel1>=xbLevel2)
- xbLevelDiff=xbLevel1-xbLevel2;
- else
- xbLevelDiff=xbLevel2-xbLevel1;
- if (xbLevel1>10)
- {
- if (!( (xbLevelDiff<3) & (0x31<xbIFCounter) & (xbIFCounter<0x3e) ))
- return (FALSE);
- }
- else
- {
- if (!( (xbLevelDiff<2) & (0x31<xbIFCounter) & (xbIFCounter<0x3e)))
- return (FALSE);
- }
- return (TRUE);
- #undef xbLevelDiff
- */
- //Dennis Shih 20060309 end
- }
- #endif // (_PM_FM_)
- /*--------------------------------------------------------------------------
- Desciption:
- Search Up/Down from currently frequency and select stop level
- Arguments:
- 1: Up
- 0: Down
- Global arguments:
- void
- Returns:
- TRUE: A station is found
- FALSE:Reach the band limit
- --------------------------------------------------------------------------*/
- /*
- API BOOL FmSearchFreq(BOOL fSearchUp)
- {
- XWORD xwPreFreq,xwDifFreq;
- XBYTE xbNowStopLevel,xbRetry=0;
- xbNowStopLevel=FM_CMD_STOP_LOW; // Use Low Level for search default
- //xbNowStopLevel=FM_CMD_STOP_HIGH;
- while(1)
- {
- xwPreFreq=gxwFmFreq;
- if(FmSearch(fSearchUp,xbNowStopLevel)==FALSE)
- return FALSE;
- if(xbNowStopLevel==FM_CMD_STOP_HIGH)
- return TRUE; // STOP Level High...No more high
- if(fSearchUp)
- xwDifFreq=(gxwFmFreq-xwPreFreq);
- else
- xwDifFreq=(xwPreFreq-gxwFmFreq);
- if(xwDifFreq==1)
- {
- xbRetry++;
- if(xbRetry>3)
- {
- xbNowStopLevel += FM_NEXT_STOP_LEVEL; // Try Next stop Level
- xbRetry=0;
- }
- }
- else
- return TRUE;
- }
- }
- */
- //Dennis Shih 20060309
- //Dino050812
- //check the whether the FM freq level ADC and IF counter
- #if (_PM_FM_|_PM_MPTEST_)
- API bit TEA5767_FmFreqCheck(void)
- {
- XWORD xwPLL;
- XWORD Temp;
- //gfHILOInjection=0;
- FMHiLoCheck();
- xwPLL=CalculatePLL(gxwFmFreq);
- gxbFmWriteData[1]=xwPLL ;
- if(!TEA5767Write())
- return FALSE;
- Temp=0x100;
- do
- {
- Temp--;
- TEA5767Read();
- if(gxbFmReadData[0] &0x80)
- goto CHECKFREQ;
- }while(Temp>0);
- return FALSE;
- CHECKFREQ:
- if(IsValidStop())
- return TRUE;
- else
- return FALSE;
- }
- //Dennis Shih 20060309
- //Dino050812
- //Check the HILO inject value
- void FMHiLoCheck(void) large
- {
- XBYTE xbLevelHigh,xbLevelLow;
- XWORD xwPLL;
- xwPLL = CalculatePLL(gxwFmFreq);
- if(gfHILOInjection)
- xwPLL+=0x3d;
- else
- xwPLL+=0x30;
- //starting to set HILO to optimal level
- gxbFmWriteData[0]=(xwPLL>>8) & FM_CMD_SEARCH_DIS; //stop search mode
- gxbFmWriteData[1]=xwPLL ;
- TEA5767Write();
- TEA5767Read();
- xbLevelHigh=(gxbFmReadData[3] & FM_GET_ADC_LEVEL);
- if(gfHILOInjection)
- xwPLL-=0x7a;
- else
- xwPLL-=0x60;
- gxbFmWriteData[0]=(xwPLL>>8) & FM_CMD_SEARCH_DIS;
- gxbFmWriteData[1]=xwPLL ;
- TEA5767Write();
- TEA5767Read();
- xbLevelLow=(gxbFmReadData[3] & FM_GET_ADC_LEVEL);
- if (xbLevelHigh<xbLevelLow)
- gfHILOInjection=TRUE; //high injection
- else
- gfHILOInjection=FALSE; //low injection
- }
- #endif
- #endif //#if(FM_MODULE==1) //Walace060126#2
English
