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

📄 halkt0803.lst

📁 威望公司MP3 + USB MCU 的参考软件
💻 LST
字号:
C51 COMPILER V8.01   HALKT0803                                                             04/17/2008 09:54:58 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE HALKT0803
OBJECT MODULE PLACED IN .\Debug\halKT0803.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fmtx\halKT0803.c LARGE OPTIMIZE(9,SIZE) REGFILE(.\Debug\VA4010_SDK_V2.ORC) 
                    -BROWSE NOINTPROMOTE INCDIR(.\common;.\e2prom;.\file;.\fmtx;.\ir;.\keyboard;.\lcm;.\led;.\main;.\matrixkey;.\mp3ctrl;.\sd
                    -;.\usbhost;.\include;.\lib) DEBUG OBJECTEXTEND PRINT(.\Debug\halKT0803.lst) OBJECT(.\Debug\halKT0803.obj)

line level    source

   1          #include "utiltypedef.h"
   2          #include "va4010reg.h"
   3          #include "halKT0803.h"
   4          
   5          #if (FM_TRANS_MODULE == FM_TRANS_KT0803)
              
              /********** Function Definition 函数定义 ************/
              #define DELAY(x)    DelayUs(x)
              
              static void FMI2C_Start(void)
              {
                  /*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变*/
                  //Set SDA Direction 
                  FM_SCL_OUTPUT();
                  FM_SDA_OUTPUT();      
                  FM_SDA=1;
                  FM_SCL=1;
                  DELAY(WAIT_TIME);
                  FM_SDA=0;
                  DELAY(WAIT_TIME);
                  FM_SCL=0;
                  DELAY(WAIT_TIME);
              }
              
              static void FMI2C_Stop(void)
              {
                  /*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/
                  FM_SDA_OUTPUT();
                  FM_SCL_OUTPUT();
                  FM_SDA=0;
                  FM_SCL=1;
                  DELAY(WAIT_TIME);
                  FM_SDA=1;
                  DELAY(WAIT_TIME);
                  FM_SCL=0;
                  DELAY(WAIT_TIME);
              }
              
              static void FMSEND_0(void)   /* SEND ACK */
              {
                  /*发送0,在SCL为高电平时使SDA信号为低*/
                  FM_SDA_OUTPUT();    
                  FM_SDA=0;
                  FM_SCL=1;
                  DELAY(WAIT_TIME);
                  FM_SCL=0;
                  DELAY(WAIT_TIME);
              }
              
              static void FMSEND_1(void)
              {
                  /*发送1,在SCL为高电平时使SDA信号为高*/
                  FM_SDA_OUTPUT();    
C51 COMPILER V8.01   HALKT0803                                                             04/17/2008 09:54:58 PAGE 2   

                  FM_SDA=1;
                  FM_SCL=1;
                  DELAY(WAIT_TIME);
                  FM_SCL=0;
                  DELAY(WAIT_TIME);
              }
              
              #if 0
              static void FMSet_Ack(void)
              {
                      FMSEND_0();
              }
              
              void FMSet_Nak(void)
              {
                      FMSEND_1();
              }
              #endif
              
              static BOOL FMCheck_Acknowledge(void)
              {
                      BOOL bRet = FALSE;      
              
                      FM_SDA_INPUT();
                      /*发送完一个字节后检验设备的应答信号*/
                      FM_SCL=1; // the ninth cycle, check SDA
                      DELAY(WAIT_TIME>>1);
              //      tmp = FM_SDA; //get response from slave device
                      if(FM_SDA == I2C_ACK)
                              bRet = TRUE;
                      DELAY(WAIT_TIME>>1);
                      FM_SCL=0;
                      DELAY(WAIT_TIME);
              
                      return bRet;
              }
              
              static void FMWriteI2CByte(BYTE b)//reentrant
              {
                  /*向I2C总线写一个字节*/
                  BYTE i;
                  FM_SCL_OUTPUT();
                  //SDA_OUTPUT();             
                  for(i=0;i<8;i++)
                      if((b<<i)&0x80)
                          FMSEND_1();
                      else
                          FMSEND_0();
              }
              
              #if 0
              static BYTE FMReadI2CByte(void)//reentrant
              {
                  /*从I2C总线读一个字节*/
                  BYTE b=0,i;
                  FM_SCL_OUTPUT();
                  FM_SDA_INPUT();     
                  //Here master should generate 8 cycle on SCL        
                  for(i=0;i<8;i++)
                  {
                      FM_SCL=1;    /*接受数据*/
                      DELAY(WAIT_TIME>>1);
C51 COMPILER V8.01   HALKT0803                                                             04/17/2008 09:54:58 PAGE 3   

                      //F0=SDA;  //Receive data from device
                      b <<= 1;
                      if(FM_SDA==1)        
                          b |= 0x01;
                      else
                          b &= 0xFE;
              
                      DELAY(WAIT_TIME>>1);
                      FM_SCL=0;
                       DELAY(WAIT_TIME);      
                  }
                  return b;
              }
              #endif
              
              static BYTE halSetFMReg(BYTE byReg, BYTE byValue)
              {
              //      BYTE byRet = TRUE;
              
                      FMI2C_Start();
                      
                      FMWriteI2CByte(KT_DEVADDR_WR);//device address
                      if(!FMCheck_Acknowledge())
                      {
                              UartOutText("Write == Write dev address fail\r\n");
                              FMI2C_Stop();
                              return FALSE;
                      }
                      
                      FMWriteI2CByte(byReg);// register 1
                      if(!FMCheck_Acknowledge())
                      {
                              UartOutText("Write == Write reg fail\r\n");
                              FMI2C_Stop();
                              return FALSE;
                      }
                      
                      FMWriteI2CByte(byValue);
                      if(!FMCheck_Acknowledge())
                      {
                              UartOutText("Write == Write value fail\r\n");
                              FMI2C_Stop();
                              return FALSE;
                      }
                      
                      FMI2C_Stop();
              
                      DelayMs(20);
                      
                      return TRUE;
              }
              
              #if 0
              static BYTE halFMGetReg(BYTE byReg)
              {
                      BYTE byData;
                      FMI2C_Start();
                      
                      FMWriteI2CByte(KT_DEVADDR_WR);
                      if(!FMCheck_Acknowledge())
                      {
                              UartOutText("Read == Write dev address fail\r\n");
C51 COMPILER V8.01   HALKT0803                                                             04/17/2008 09:54:58 PAGE 4   

                              FMI2C_Stop();
                              return 0xFF;
                      }
              
                      FMWriteI2CByte(byReg);
                      if(!FMCheck_Acknowledge())
                      {
                              UartOutText("Read == Write reg fail\r\n");
                              FMI2C_Stop();
                              return 0xFF;
                      }
              
                      FMI2C_Start();
                      FMWriteI2CByte(KT_DEVADDR_RD);
                      if(!FMCheck_Acknowledge())
                      {
                              UartOutText("Read == Write dev address fail\r\n");
                              FMI2C_Stop();
                              return 0xFF;
                      }
                      
                      byData = FMReadI2CByte();
                      FMSet_Nak();
                      
                      FMI2C_Stop();
                      DelayMs(10);
                      return byData;
                      
              }
              #endif
              
              static BYTE data s_FMIdx;
              void halFMSet(BYTE byChIdx)
              {
                      BYTE byLow, byHi, byTryCnt;
                      WORD wFMValue = FM_FREQ_BASE+byChIdx;
                      byHi = (BYTE)(wFMValue >> 8);
                      byLow = (BYTE)wFMValue;
              
              //      WDT = 0x1F;
                      UartOutText("Set CH_SEL0 "); UartOutValue(byLow, 2);
                      byTryCnt = 0;
                      while(halSetFMReg(CH_SEL0, byLow) == FALSE){
                              if(byTryCnt > 7) break;
                              DelayMs(50);
                              byTryCnt++;
                      }
                      
                      UartOutText("Set CH_SEL1 "); UartOutValue(byHi, 2);
                      byTryCnt = 0;
                      while(halSetFMReg(CH_SEL1, byHi) == FALSE){
                              if(byTryCnt > 7) break;
                              DelayMs(50);
                              byTryCnt++;
                      }
              
                      s_FMIdx = byChIdx;
              
                      return;
              }
              
              #if 0
C51 COMPILER V8.01   HALKT0803                                                             04/17/2008 09:54:58 PAGE 5   

              BYTE halFMGet(void)
              {       
                      BYTE byLow, byHi;
                      WORD wFMValue = 0;
                      byLow = halFMGetReg(CH_SEL0);
                      byHi = halFMGetReg(CH_SEL1);
                      wFMValue = byHi;
                      wFMValue <<= 8;
                      wFMValue |= byLow;
                      UartOutText("Read FM value: "); UartOutValue(wFMValue, 4);
                      return (BYTE)(wFMValue - FM_FREQ_BASE);
              }
              #endif
              
              void halFMUp(void)      //byChIdx: 0-> 203
              {
                      s_FMIdx++;
                      if(s_FMIdx >=FM_CHIDX_MAX){//Over Max
                              s_FMIdx = 0;            
                      }       
              
                      halFMSet(s_FMIdx);      
                      
                      return;
              }
              
              void halFMDown(void)    //byChIdx: 0-> 203
              {
                      if(s_FMIdx == 0){//Minmal
                              s_FMIdx = FM_CHIDX_MAX;//turn around            
                      }else
                              s_FMIdx--;
              
                      halFMSet(s_FMIdx);      
                      
                      return;
              }
              
              WORD halFMGetFreq(void)
              {
              //      FMDigital = FM_FREQ_BASE+FMLevel;
                      WORD wTmp = FM_FREQ_BASE + (WORD)s_FMIdx;
              
                      UartOutText("-I-: halFMGetFreq 0x");UartOutValue(wTmp, 4);
                      return wTmp;
              }
              
              BYTE halFMGetIdx(void)
              {
              //      FMDigital = FM_FREQ_BASE+FMLevel;
                      //WORD wTmp = FM_FREQ_BASE + s_FMIdx;
              
                      return s_FMIdx;
              }
              
              BYTE halFMFreq2Idx(WORD wFreq)
              {
                      WORD wTmp = wFreq;
              
                      //Checking parameter validation
                      if((wFreq>=FM_FREQ_BASE) && (wFreq<=FM_FREQ_MAX)){
                              wTmp = wTmp - FM_FREQ_BASE; 
C51 COMPILER V8.01   HALKT0803                                                             04/17/2008 09:54:58 PAGE 6   

                      }else{
                              wTmp = FM_CHIDX_INVALID;
                      }               
                      
                      return (BYTE)wTmp;
              }
              
              #endif
 310          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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