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

📄 i2c.lst

📁 MSTARXX.rar
💻 LST
字号:
C51 COMPILER V8.18   I2C                                                                   09/29/2009 23:58:02 PAGE 1   


C51 COMPILER V8.18, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN ..\..\1out\i2c.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\..\msFunc\i2c.c BROWSE INCDIR(..\..\inc) DEBUG OBJECTEXTEND PRINT(..\..\
                    -1out\i2c.lst) OBJECT(..\..\1out\i2c.obj)

line level    source

   1          #define _I2C_C_
   2          
   3          #include "types.h"
   4          #include "board.h"
   5          #include "global.h"
   6          #include "DEBUG.h"
   7          #include "misc.h"
   8          #include "i2c.h"
   9          
  10          /////////////////////////////////////////
  11          // Set I2C SCL pin high/low.
  12          //
  13          // Arguments: bSet - high/low bit
  14          /////////////////////////////////////////
  15          void i2cSetSCL_Chk(bit bSet)
  16          {
  17   1          BYTE ucDummy; // loop dummy
  18   1      
  19   1          i2cSetSCL(bSet); // set SCL pin
  20   1      
  21   1          if (bSet == _HIGH) // if set pin high
  22   1          {
  23   2              ucDummy = I2C_CHECK_PIN_DUMMY; // initialize dummy
  24   2              while ((i2cSCL_PIN_STATUS() == _LOW) && (ucDummy--)) ; // check SCL pull high
  25   2          }
  26   1      }
  27          
  28          /////////////////////////////////////////
  29          // Set I2C SDA pin high/low
  30          //
  31          // Arguments: bSet - high/low bit
  32          /////////////////////////////////////////
  33          void i2cSetSDA_Chk(bit bSet)
  34          {
  35   1          BYTE ucDummy; // loop dummy
  36   1      
  37   1          i2cSetSDA(bSet); // set SDA pin
  38   1      
  39   1          if (bSet == _HIGH) // if set pin high
  40   1          {
  41   2              ucDummy = I2C_CHECK_PIN_DUMMY; // initialize dummy
  42   2              while ((i2cSDA_PIN_STATUS() == _LOW) && (ucDummy--)) ; // check SDA pull high
  43   2          }
  44   1      }
  45          //////////////////////////////////////////////////////////////
  46          // Delay 4us
  47          //////////////////////////////////////////////////////////////
  48          void i2c_Delay(void)
  49          {
  50   1          _nop_();
  51   1          _nop_();
  52   1          _nop_();
  53   1          _nop_();
  54   1          _nop_();
C51 COMPILER V8.18   I2C                                                                   09/29/2009 23:58:02 PAGE 2   

  55   1          _nop_();
  56   1          _nop_();
  57   1          _nop_();
  58   1      }
  59          //////////////////////////////////////////////////////
  60          // I2C start signal.
  61          // <comment>
  62          //  SCL ________
  63          //              \_________
  64          //  SDA _____
  65          //           \____________
  66          //
  67          // Return value: None
  68          //////////////////////////////////////////////////////
  69          BOOL i2c_Start(void)
  70          {
  71   1          BOOL bStatus = TRUE; // success status
  72   1      
  73   1          i2cSetSDA_Chk(_HIGH);
  74   1          i2c_Delay();
  75   1          i2cSetSCL_Chk(_HIGH);
  76   1          i2c_Delay();
  77   1              
  78   1          if ((i2cSCL_PIN_STATUS() == _LOW) || (i2cSDA_PIN_STATUS() == _LOW))
  79   1          {
  80   2              bStatus = FALSE;
  81   2          }
  82   1          else
  83   1          {
  84   2              i2cSetSDA(_LOW);
  85   2              i2c_Delay();
  86   2              i2cSetSCL(_LOW);
  87   2          }
  88   1              
  89   1          return bStatus;
  90   1      }
  91          /////////////////////////////////////////
  92          // I2C stop signal.
  93          // <comment>
  94          //              ____________
  95          //  SCL _______/
  96          //                 _________
  97          //  SDA __________/
  98          /////////////////////////////////////////
  99          void i2c_Stop(void)
 100          {
 101   1          i2cSetSCL(_LOW);
 102   1          i2c_Delay();
 103   1          i2cSetSDA(_LOW);
 104   1          i2c_Delay();
 105   1          i2cSetSCL(_HIGH);
 106   1          i2c_Delay();
 107   1          i2cSetSDA(_HIGH);
 108   1          i2c_Delay();
 109   1      }
 110          
 111          //////////////////////////////////////////////////////////////////////////
 112          // I2C send byte to device.
 113          //
 114          // Arguments: ucVal - send byte
 115          // Return value: I2C acknowledge bit
 116          //               I2C_ACKNOWLEDGE/I2C_NON_ACKNOWLEDGE
C51 COMPILER V8.18   I2C                                                                   09/29/2009 23:58:02 PAGE 3   

 117          //////////////////////////////////////////////////////////////////////////
 118          BOOL i2c_SendByte(BYTE ucVal)
 119          {
 120   1          BYTE    ucMask = 0x80;
 121   1          BOOL     bAck; // acknowledge bit
 122   1      
 123   1          while(ucMask)
 124   1          {
 125   2              if (ucVal & ucMask)
 126   2                  i2cSetSDA_Chk(_HIGH);
 127   2              else
 128   2                  i2cSetSDA_Chk(_LOW);
 129   2              i2c_Delay();
 130   2              i2cSetSCL_Chk(_HIGH); // clock
 131   2              i2c_Delay();
 132   2              i2cSetSCL(_LOW);
 133   2              i2c_Delay();
 134   2      
 135   2              ucMask >>= 1; // next
 136   2          } // while
 137   1      
 138   1          // recieve acknowledge
 139   1          i2cSetSDA(_HIGH);
 140   1          i2c_Delay();
 141   1          i2cSetSCL(_HIGH);
 142   1          i2c_Delay();
 143   1          bAck = i2cSDA_PIN_STATUS(); // recieve acknowlege
 144   1          i2cSetSCL(_LOW);
 145   1              
 146   1          return (bAck);
 147   1      }
 148          //////////////////////////////////////////////////////////////////////////
 149          // I2C receive byte from device.
 150          //
 151          // Return value: receive byte
 152          //////////////////////////////////////////////////////////////////////////
 153          BYTE i2c_ReceiveByte(BOOL bAck)
 154          {
 155   1          BYTE    ucReceive = 0;
 156   1          BYTE    ucMask = 0x80;
 157   1      
 158   1          while(ucMask)
 159   1          {
 160   2                      i2cSetSDA(_HIGH);
 161   2                      i2cSetSCL(_HIGH);
 162   2                      
 163   2                      if(i2cSDA_PIN_STATUS() == _HIGH)
 164   2                              ucReceive |= ucMask;
 165   2      
 166   2                      i2cSetSCL(_LOW);
 167   2                      i2c_Delay();
 168   2      
 169   2              ucMask >>= 1;
 170   2          } // while
 171   1      
 172   1          if (bAck) // acknowledge
 173   1              i2cSetSDA_Chk(I2C_ACKNOWLEDGE);
 174   1          else // non-acknowledge
 175   1              i2cSetSDA_Chk(I2C_NON_ACKNOWLEDGE);
 176   1      
 177   1          i2c_Delay();
 178   1          i2cSetSCL(_HIGH);
C51 COMPILER V8.18   I2C                                                                   09/29/2009 23:58:02 PAGE 4   

 179   1          i2c_Delay();
 180   1          i2cSetSCL(_LOW);
 181   1      
 182   1          return ucReceive;
 183   1      }
 184          
 185          //////////////////////////////////////////////////////////////////////////
 186          // I2C access start.
 187          //
 188          // Arguments: ucSlaveAdr - slave address
 189          //            trans_t - I2C_TRANS_WRITE/I2C_TRANS_READ
 190          //////////////////////////////////////////////////////////////////////////
 191          BOOL i2c_AccessStart(BYTE ucSlaveAdr, I2C_Direction trans_t)
 192          {
 193   1          BYTE ucDummy; // loop dummy
 194   1      
 195   1          if (trans_t == I2C_READ) // check i2c read or write
 196   1              ucSlaveAdr = I2C_DEVICE_ADR_READ(ucSlaveAdr); // read
 197   1          else
 198   1              ucSlaveAdr = I2C_DEVICE_ADR_WRITE(ucSlaveAdr); // write
 199   1      
 200   1          ucDummy = I2C_ACCESS_DUMMY_TIME;
 201   1          while (ucDummy--)
 202   1          {    
 203   2              i2c_Delay();
 204   2              if (i2c_Start() == FALSE)
 205   2                  continue;
 206   2      
 207   2              if (i2c_SendByte(ucSlaveAdr) == I2C_ACKNOWLEDGE) // check acknowledge
 208   2                  return TRUE;
 209   2                      //printf("ucSlaveAdr====%x", ucSlaveAdr);
 210   2              i2c_Stop();
 211   2              Delay1ms(1);
 212   2          }
 213   1      
 214   1          return FALSE;
 215   1      }
 216          /////////////////////////////////////////////////////////////////
 217          // I2C write bytes to device.
 218          //
 219          // Arguments: ucSlaveAdr - slave address
 220          //            ucSubAdr - sub address
 221          //            pBuf - pointer of buffer
 222          //            ucBufLen - length of buffer
 223          /////////////////////////////////////////////////////////////////
 224          void i2cBurstWriteBytes(BYTE ucSlaveAdr, BYTE ucSubAdr, BYTE *pBuf, BYTE ucBufLen)
 225          {
 226   1          BYTE ucDummy; // loop dummy
 227   1      
 228   1          ucDummy = I2C_ACCESS_DUMMY_TIME;
 229   1          while(ucDummy--)
 230   1          {
 231   2              if (i2c_AccessStart(ucSlaveAdr, I2C_WRITE) == FALSE)
 232   2                  continue;
 233   2              if (i2c_SendByte(ucSubAdr) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
 234   2                  continue;
 235   2      
 236   2              while(ucBufLen--) // loop of writting data
 237   2              {
 238   3                  i2c_SendByte(*pBuf); // send byte
 239   3                  pBuf++; // next byte pointer
 240   3              } // while
C51 COMPILER V8.18   I2C                                                                   09/29/2009 23:58:02 PAGE 5   

 241   2      
 242   2              break;
 243   2          } // while
 244   1      
 245   1          i2c_Stop();
 246   1      }
 247          
 248          /////////////////////////////////////////////////////////////////
 249          // I2C read bytes from device.
 250          //
 251          // Arguments: ucSlaveAdr - slave address
 252          //            ucSubAdr - sub address
 253          //            pBuf - pointer of buffer
 254          //            ucBufLen - length of buffer
 255          /////////////////////////////////////////////////////////////////
 256          
 257          void i2cBurstReadBytes(BYTE ucSlaveAdr, BYTE ucSubAdr, BYTE *pBuf, BYTE ucBufLen)
 258          {
 259   1          BYTE ucDummy; // loop dummy
 260   1      
 261   1          ucDummy = I2C_ACCESS_DUMMY_TIME;
 262   1          while(ucDummy--)
 263   1          {
 264   2              if (i2c_AccessStart(ucSlaveAdr, I2C_WRITE) == FALSE)
 265   2                  continue;
 266   2      
 267   2              if (i2c_SendByte(ucSubAdr) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
 268   2                  continue;
 269   2      
 270   2              if (i2c_AccessStart(ucSlaveAdr, I2C_READ) == FALSE)
 271   2                  continue;
 272   2      
 273   2              while(ucBufLen--) // loop to burst read
 274   2              {
 275   3                  *pBuf = i2c_ReceiveByte(ucBufLen); // receive byte
 276   3      
 277   3                  pBuf++; // next byte pointer
 278   3              } // while
 279   2      
 280   2              break;
 281   2          } // while
 282   1      
 283   1          i2c_Stop();
 284   1      }
 285          
 286          void i2c_WriteTBL(BYTE deviceID, WORD addr, BYTE *buffer, BYTE count)
 287          { 
 288   1        i2cBurstWriteBytes( deviceID, addr,buffer, count);
 289   1      }
 290          
 291          #if 0
              void i2c_ReadTBL(BYTE deviceID, WORD addr, BYTE *buffer, BYTE count)
              { 
                i2cBurstReadBytes(deviceID, addr,buffer,count);
              }
              #endif
 297          
 298          #if TUNER_2IN1
 299          /////////////////////////////////////////////////////////////////
 300          // I2C read current bytes from device.
 301          //
 302          // Arguments: ucSlaveAdr - slave address
C51 COMPILER V8.18   I2C                                                                   09/29/2009 23:58:02 PAGE 6   

 303          //            pBuf - pointer of buffer
 304          //            ucBufLen - length of buffer
 305          /////////////////////////////////////////////////////////////////
 306          void i2cBurstCurrentBytes(BYTE ucSlaveAdr, BYTE *pBuf, BYTE ucBufLen)
 307          {
 308   1          BYTE ucDummy; // loop dummy
 309   1            
 310   1          ucDummy = I2C_ACCESS_DUMMY_TIME;
 311   1          while(ucDummy--)
 312   1          {
 313   2              if (i2c_AccessStart(ucSlaveAdr, I2C_READ) == FALSE)
 314   2                  continue;
 315   2      
 316   2              while(ucBufLen--) // loop to burst read
 317   2              {
 318   3                  *pBuf = i2c_ReceiveByte(ucBufLen); // receive byte
 319   3      
 320   3                  pBuf++; // next byte pointer
 321   3              } // while
 322   2      
 323   2              break;
 324   2          } // while
 325   1      
 326   1          i2c_Stop();
 327   1      }
 328          
 329          void i2cWriteByte(BYTE deviceID, BYTE addr, BYTE value)
 330          { 
 331   1        i2c_WriteTBL(deviceID, addr, &value, 1);
 332   1      }
 333          
 334          #endif


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


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

⌨️ 快捷键说明

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