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

📄 fm_tea5767.lst

📁 智原mp3 SDK 开发包 与巨力 有mp3 wma ogg decoder
💻 LST
字号:
C51 COMPILER V7.09   FM_TEA5767                                                            05/22/2008 10:13:58 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE FM_TEA5767
OBJECT MODULE PLACED IN ..\output\fm_tea5767.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\src\fm_tea5767.c LARGE OPTIMIZE(9,SIZE) BROWSE INCDIR(..\..\..\bsp\inclu
                    -de;..\src\include;..\..\include) DEFINE(CONFIG_ASIC) DEBUG OBJECTEXTEND PRINT(.\fm_tea5767.lst) OBJECT(..\output\fm_tea5
                    -767.obj)

line level    source

   1          #include "api.h"
*** WARNING C318 IN LINE 1 OF ..\src\fm_tea5767.c: can't open file 'api.h'
   2          #include "fm_tea5767.h"
*** ERROR C129 IN LINE 61 OF ..\..\INCLUDE\FM_TEA5767.H: missing ';' before 'u8FMdata'
   3          #include "i2c.h"
   4          
   5          #define mCombinU16(u16, h1, h0)                 \
   6          {                                               \
   7                  ((UNION16 *)&(u16))->v8[1] = h0;        \
   8                  ((UNION16 *)&(u16))->v8[0] = h1;        \
   9          }
  10          
  11          extern INT8U _buf[64];
  12          
  13          extern void my_sprintf(char *buf, const char *fmt, ...);
  14          
  15          INT8U u8FMdata[5];
  16          INT16U u16RadioFrequency;
  17          code INT8U U8RadioSet[5] = {MUTE_TEA5767_ON,0x00,0x00,STANDBY_ON,0x00};
  18          //--------------------------------------------------------------------------
  19          static BOOLEAN bRadioSetCommand(INT8U *ptr)
  20          {       
  21                  register INT8U i;
  22                  vI2C_Start();
  23                  if(FALSE == bI2C_ByteOut(TEA5767_ADDR_W))
  24                          return FALSE;
  25                  for(i=0;i<5;i++)
  26                  {
  27                          if(FALSE == bI2C_ByteOut(ptr[i]))
  28                          return FALSE;   
  29                  }
  30                  vI2C_Stop();
  31                  return true;
  32          }
  33          
  34          BOOLEAN bRadioInit(void)
  35          { 
  36                  FM_BUSEN = 1;
  37            
  38                  u16RadioFrequency = FM_FREQ_MIN;
  39            
  40                  return(bRadioSetCommand(U8RadioSet));
  41          }
  42          
  43          //--------------------------------------------------------------------------
  44          BOOLEAN bRadioStop(void)
  45          {
  46                  if(bRadioSetCommand(U8RadioSet)==FALSE)
  47                          return FALSE;
  48                  
  49                  FM_BUSEN = 0;
  50                  
  51                  return TRUE;
C51 COMPILER V7.09   FM_TEA5767                                                            05/22/2008 10:13:58 PAGE 2   

  52          }
  53          
  54          //--------------------------------------------------------------------------
  55          static BOOLEAN bWrite_Command_To_TEA5767(void)
  56          {
  57                  return(bRadioSetCommand(u8FMdata));
  58          }
  59          
  60          //--------------------------------------------------------------------------
  61          static BOOLEAN bRead_Command_From_TDA5767(void)
  62          {
  63                  register INT8U i;
  64                  vI2C_Start();
  65          
  66                  if(FALSE == bI2C_ByteOut(TEA5767_ADDR_R))
  67                          return FALSE;
  68          
  69                  for(i=0;i<4;i++)
  70                          u8FMdata[i] = u8I2C_ByteIn(0);
  71            
  72                  u8FMdata[4] = u8I2C_ByteIn(1);
  73          
  74                  vI2C_Stop();
  75              
  76                  return TRUE;
  77          }
  78          
  79          
  80          //--------------------------------------------------------------------------
  81          static INT16U u16FreqToPLL(INT32U u16Freq)
  82          {     
  83                  INT32U u32Freq = u16Freq;       
  84                  return (((u32Freq*10000)-225000)/8192);     //for XTAL_32768K   // 4/32768 = 8192
  85          }
  86          
  87          //--------------------------------------------------------------------------
  88          static INT32U u16PLLToFreq(INT16U u16pll)
  89          {     
  90                  INT32U u32pll = u16pll;
  91                  INT16U r;
  92             
  93                  r = ((u32pll*8192)+225000)/10000;                       // 4/32768 = 8192
  94          
  95                  if((r%10) >= 5)
  96                          r = ((r/10)+1) * 10;
  97             
  98                  return r;
  99          }
 100          
 101          //--------------------------------------------------------------------------
 102          
 103          #if 0
              void vPrintFreq()
              {
                      INT16U freq1 = u16RadioFrequency/FM_FREQ_STEP;
              
                      my_sprintf(_buf, "%d.%d  ", freq1/10, freq1%10);
              
                      if(u8FMdata[2] & 0x80)
                              _buf[6] = 'S';
                 
                      vLcd_Disp_FMfreq(_buf);  
C51 COMPILER V7.09   FM_TEA5767                                                            05/22/2008 10:13:58 PAGE 3   

              }
              #endif
 116          
 117          //-------------------------------------------------------
 118          BOOLEAN bSetFmFrequency(INT16U freq)
 119          {
 120                  INT16U u16PLL;
 121                
 122                  u16RadioFrequency = freq;
 123          
 124                  u16PLL = u16FreqToPLL(u16RadioFrequency);
 125          
 126                  u8FMdata[0] = (INT8U)(u16PLL >> 8);  
 127                  u8FMdata[1] = (INT8U)(u16PLL & 0xFF); 
 128                  u8FMdata[2] = LOW_SIDE_INJECTION;
 129                  u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;
 130                  u8FMdata[4] = DTC_75us | PLLREF_ON;
 131          
 132                  if(FALSE == bWrite_Command_To_TEA5767())
 133                          return FALSE;
 134                  
 135                  if(FALSE == bRead_Command_From_TDA5767())
 136                          return FALSE;
 137          
 138                  return TRUE;     
 139          }
 140          
 141          void FmFrequencyUp()
 142          {
 143                  u16RadioFrequency += FM_FREQ_STEP;
 144                  if(u16RadioFrequency > FM_FREQ_MAX)
 145                          u16RadioFrequency = FM_FREQ_MIN;
 146          }
 147          void FmFrequencyDown()
 148          {
 149                  u16RadioFrequency -= FM_FREQ_STEP;
 150                  if(u16RadioFrequency < FM_FREQ_MIN)
 151                          u16RadioFrequency = FM_FREQ_MAX;
 152          }
 153          
 154          //-------------------------------------------------------
 155          BOOLEAN bFmFrequencyUp(void)
 156          {
 157                  FmFrequencyUp();
 158                  return bSetFmFrequency(u16RadioFrequency);     
 159          }
 160          
 161          
 162          //--------------------------------------------------------------------------
 163          BOOLEAN bFmFrequencyDown(void)
 164          {
 165                  FmFrequencyDown();
 166                  return bSetFmFrequency(u16RadioFrequency);
 167          }
 168          
 169          extern BOOLEAN init_volume(void);
 170          extern BOOLEAN close_volume(void);
 171          extern void delay(UINT16 n);
 172          //--------------------------------------------------------------------------
 173          BOOLEAN bFmAutoSearch(INT8U u8UpDown)
 174          {
 175                  
C51 COMPILER V7.09   FM_TEA5767                                                            05/22/2008 10:13:58 PAGE 4   

 176                  INT16U pll_dec;
 177                  INT16U u16PLL;
 178                  register INT8U ReadFlag=0;
 179                  register INT8U count;
 180          //      BOOLEAN bFM_STEREO;
 181          //      INT8U   u8FM_LEV;
 182          //      INT8U   u8FM_IF;
 183            
 184                  if(SEARCH_UP == u8UpDown)
 185                          FmFrequencyUp();
 186                  else
 187                          FmFrequencyDown();
 188          
 189                  u16PLL = u16FreqToPLL(u16RadioFrequency);
 190            
 191                  u8FMdata[0] = ((INT8U)(u16PLL >> 8)) | MUTE_TEA5767_ON | SEARCH_MODE_ON;
 192                  u8FMdata[1] = (INT8U)(u16PLL & 0xFF); 
 193                  u8FMdata[2] = u8UpDown | LOW_SIDE_INJECTION | SEARCH_STOP_LEVEL_LOW;
 194                  u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;
 195                  u8FMdata[4] = DTC_75us | PLLREF_ON;
 196            
 197                  if(FALSE == bWrite_Command_To_TEA5767())                        
 198                          return FALSE;
 199            
 200                  count = 0;
 201                  #if 1// marco modify for fm auto search 
 202                  while(!ReadFlag)  
 203                  {
 204                          if(FALSE == bRead_Command_From_TDA5767())
 205                                  return FALSE;
 206                          ReadFlag = u8FMdata[0] & 0x80;
 207                          if(u16RadioFrequency>FM_FREQ_MAX || u16RadioFrequency<FM_FREQ_MIN)
 208                                  break;
 209                          mCombinU16(pll_dec,u8FMdata[0]&0x3F, u8FMdata[1]);
 210                          u16RadioFrequency = u16PLLToFreq(pll_dec);
 211                  }
 212                  
 213                  bSetFmFrequency(u16RadioFrequency);
 214                  return TRUE;
 215                  #else
                      while(count++ < 10)
                      {
                              delay(5);
                              if(FALSE == bRead_Command_From_TDA5767())
                                      //return FALSE;
                                      continue;
                      
                              //ReadFlag = u8FMdata[0] & 0x80;
                              //if(ReadFlag)
                              bFM_STEREO = (u8FMdata[2] >> 7);
                              u8FM_IF = (u8FMdata[2] & 0x7F);
                              u8FM_LEV = (u8FMdata[3] >> 4);
                              if((u8FM_IF>0x31)&&(u8FM_IF<0x3e)&&(u8FM_LEV>=5)&&(bFM_STEREO))
                              {
                                      init_volume();
                                      bSetFmFrequency(u16RadioFrequency);
                                      delay(5000);
                                      close_volume();
                                      return TRUE;
                      }
                      else
                              return FALSE;
C51 COMPILER V7.09   FM_TEA5767                                                            05/22/2008 10:13:58 PAGE 5   

                      }
                      
              //      bSetFmFrequency(u16RadioFrequency);
                      return FALSE;
                      #endif
 243                  
 244          }

C51 COMPILATION COMPLETE.  1 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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