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

📄 fm_tea5767.lst

📁 智原mp3 SDK 开发包 与巨力 有mp3 wma ogg decoder
💻 LST
字号:
C51 COMPILER V7.50   FM_TEA5767                                                            08/18/2008 13:49:44 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FM_TEA5767
OBJECT MODULE PLACED IN ..\output\output_bin\output_fm\fm_tea5767.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\code\ap_fm\src\fm_tea5767.c LARGE OPTIMIZE(9,SIZE) BROWSE INCDIR(..\.
                    -.\..\bsp\include;..\..\code\ap_fm\src\include;..\..\code\global;..\..\code\include) DEFINE(CONFIG_ASIC,dynamic_load) DEB
                    -UG OBJECTEXTEND PRINT(..\output\output_bin\output_fm\fm_tea5767.lst) OBJECT(..\output\output_bin\output_fm\fm_tea5767.ob
                    -j)

line level    source

   1          #include "api.h"
   2          #include "fm_tea5767.h"
   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          {       register INT8U i;
  21   1              vI2C_Start();
  22   1              if(FALSE == bI2C_ByteOut(TEA5767_ADDR_W))
  23   1                      return FALSE;
  24   1              for(i=0;i<5;i++)
  25   1              {
  26   2                      if(FALSE == bI2C_ByteOut(ptr[i]))
  27   2                              return FALSE;   
  28   2              }
  29   1              vI2C_Stop();
  30   1              return true;
  31   1      }
  32          
  33          BOOLEAN bRadioInit(void)
  34          { 
  35   1              FM_BUSEN = 1;
  36   1        
  37   1              u16RadioFrequency = FM_FREQ_MIN; 
  38   1              return(bRadioSetCommand(U8RadioSet));
  39   1      }
  40          
  41          //--------------------------------------------------------------------------
  42          BOOLEAN bRadioStop(void)
  43          {
  44   1              if(bRadioSetCommand(U8RadioSet)==FALSE)
  45   1                      return FALSE;
  46   1              FM_BUSEN = 0;
  47   1              return TRUE;
  48   1      }
  49          
  50          //--------------------------------------------------------------------------
  51          static BOOLEAN bWrite_Command_To_TEA5767(void)
  52          {
C51 COMPILER V7.50   FM_TEA5767                                                            08/18/2008 13:49:44 PAGE 2   

  53   1              return(bRadioSetCommand(u8FMdata));
  54   1      }
  55          
  56          //--------------------------------------------------------------------------
  57          static BOOLEAN bRead_Command_From_TDA5767(void)
  58          {
  59   1              register INT8U i;
  60   1              
  61   1              vI2C_Start();
  62   1      
  63   1              if(FALSE == bI2C_ByteOut(TEA5767_ADDR_R))
  64   1                      return FALSE;
  65   1      
  66   1              for(i=0;i<4;i++)
  67   1                      u8FMdata[i] = u8I2C_ByteIn(0);
  68   1        
  69   1              u8FMdata[4] = u8I2C_ByteIn(1);
  70   1      
  71   1              vI2C_Stop();
  72   1          
  73   1              return TRUE;
  74   1      }
  75          
  76          
  77          //--------------------------------------------------------------------------
  78          static INT16U u16FreqToPLL(INT32U u16Freq)
  79          {     
  80   1              INT32U u32Freq = u16Freq;       
  81   1              return (((u32Freq*10000)-225000)/8192);     //for XTAL_32768K   // 4/32768 = 8192
  82   1      }
  83          
  84          //--------------------------------------------------------------------------
  85          static INT32U u16PLLToFreq(INT16U u16pll)
  86          {     
  87   1              INT32U u32pll = u16pll;
  88   1              INT16U r;
  89   1         
  90   1              r = ((u32pll*8192)+225000)/10000;                       // 4/32768 = 8192
  91   1      
  92   1              if((r%10) >= 5)
  93   1                      r = ((r/10)+1) * 10;
  94   1         
  95   1              return r;
  96   1      }
  97          
  98          //--------------------------------------------------------------------------
  99          
 100          #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);  
              }
              #endif
 112          
 113          //-------------------------------------------------------
 114          BOOLEAN bSetFmFrequency(INT16U freq)
C51 COMPILER V7.50   FM_TEA5767                                                            08/18/2008 13:49:44 PAGE 3   

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

                      //BOOLEAN       bFM_STEREO;
                      //INT8U u8FM_LEV;
                      //INT8U u8FM_IF;
                
                      if(SEARCH_UP == u8UpDown)
                              FmFrequencyUp();
                      else
                              FmFrequencyDown();
              
                      u16PLL = u16FreqToPLL(u16RadioFrequency);
                
                      u8FMdata[0] = ((INT8U)(u16PLL >> 8)) | MUTE_TEA5767_ON | SEARCH_MODE_ON;
                      u8FMdata[1] = (INT8U)(u16PLL & 0xFF); 
                      u8FMdata[2] = u8UpDown | LOW_SIDE_INJECTION | SEARCH_STOP_LEVEL_LOW;
                      u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;
                      u8FMdata[4] = DTC_75us | PLLREF_ON;
                
                      if(FALSE == bWrite_Command_To_TEA5767())                        
                              return FALSE;
                
                      count = 0;
                      #if 1// marco modify for fm auto search 
                      while(!ReadFlag)  
                      {
                              if(FALSE == bRead_Command_From_TDA5767())
                                      return FALSE;
                              ReadFlag = u8FMdata[0] & 0x80;
                              if(u16RadioFrequency>FM_FREQ_MAX || u16RadioFrequency<FM_FREQ_MIN)
                                      break;
                              mCombinU16(pll_dec,u8FMdata[0]&0x3F, u8FMdata[1]);
                              u16RadioFrequency = u16PLLToFreq(pll_dec);
                      }
                      
                      bSetFmFrequency(u16RadioFrequency);
                      return TRUE;
                      #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;
                      }
                      
              //      bSetFmFrequency(u16RadioFrequency);
                      return FALSE;
C51 COMPILER V7.50   FM_TEA5767                                                            08/18/2008 13:49:44 PAGE 5   

                      #endif
              
              #else
 242   1              u8UpDown = u8UpDown;
 243   1              return FALSE;
 244   1      #endif
 245   1              
 246   1      }
 247          
 248          
 249          //-----------------------------------------------------------------------------------------------------
 250          BOOLEAN bFmSearchRead(void)
 251          {// marco new add
 252   1      #if 1
 253   1              
 254   1              INT16U u16PLL;
 255   1      
 256   1              BOOLEAN bFM_STEREO;
 257   1              INT8U   u8FM_LEV;
 258   1              INT8U   u8FM_IF;
 259   1              register INT8U count;  
 260   1      
 261   1              u16PLL = u16FreqToPLL(u16RadioFrequency);
 262   1              
 263   1              u8FMdata[0] = ((INT8U)(u16PLL >> 8)) | MUTE_TEA5767_ON/* | SEARCH_MODE_ON*/;
 264   1              u8FMdata[1] = (INT8U)(u16PLL & 0xFF); 
 265   1              u8FMdata[2] = /*u8UpDown |*/ LOW_SIDE_INJECTION /*| SEARCH_STOP_LEVEL_LOW*/;
 266   1              u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;
 267   1              u8FMdata[4] = DTC_75us | PLLREF_ON;
 268   1        
 269   1              if(FALSE == bWrite_Command_To_TEA5767())
 270   1                      return FALSE;
 271   1        
 272   1              count = 0;
 273   1        
 274   1              //while((!ReadFlag)&&(count++ < 50))
 275   1              while(count++ < 10)
 276   1              {
 277   2                      delay(5);
 278   2                      if(FALSE == bRead_Command_From_TDA5767())
 279   2                              //return FALSE;
 280   2                              continue;
 281   2              
 282   2                      //ReadFlag = u8FMdata[0] & 0x80;
 283   2                      //if(ReadFlag)
 284   2                      bFM_STEREO = (u8FMdata[2] >> 7);
 285   2                      u8FM_IF = (u8FMdata[2] & 0x7F);
 286   2                      u8FM_LEV = (u8FMdata[3] >> 4);
 287   2                      if((u8FM_IF>0x31)&&(u8FM_IF<0x3e)&&(u8FM_LEV>=5)&&(bFM_STEREO))
 288   2                      {
 289   3                              init_volume();
 290   3                              bSetFmFrequency(u16RadioFrequency);
 291   3                              delay(5000);
 292   3                              close_volume();
 293   3                              return TRUE;
 294   3              }
 295   2              else
 296   2                      return FALSE;
 297   2              }
 298   1              
 299   1      //      bSetFmFrequency(u16RadioFrequency);
 300   1              return FALSE;
C51 COMPILER V7.50   FM_TEA5767                                                            08/18/2008 13:49:44 PAGE 6   

 301   1      #else
                      return FALSE;
              #endif
 304   1      }
 305          
 306          
 307          
 308          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    591    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =      7      11
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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