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

📄 i2c.lst

📁 使用于克隆器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   I2C                                                                   07/03/2006 14:17:07 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN ..\..\OUTPUT\NTSC_SOUTH\I2c.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\..\KERNEL\I2c.c OPTIMIZE(9,SIZE) BROWSE ORDER INCDIR(..\..\INC\;..\..\UI
                    -\NTSC_SOUTH\) DEFINE(PABLO,MCU_MTV412M,OLGA) DEBUG OBJECTEXTEND PRINT(..\..\OUTPUT\NTSC_SOUTH\I2c.lst) OBJECT(..\..\OUTP
                    -UT\NTSC_SOUTH\I2c.obj)

line level    source

   1          /******************************************************************************
   2           Copyright (c) 2003 MStar Semiconductor, Inc.
   3           All rights reserved.
   4          
   5           [Module Name]: I2c.c
   6           [Date]:        11-Nov-2003
   7           [Comment]:
   8             I2C subroutines.
   9           [Reversion History]:
  10          *******************************************************************************/
  11          
  12          #define _I2C_C_
  13          
  14          // System
  15          
  16          // Common
  17          #include "define.h"
  18          #include "mcu.h"
  19          
  20          #include "board.h"
  21          
  22          // External
  23          #include "common.h"
  24          
  25          // Internal
  26          #include "userpref.h"
  27          #include "i2c.h"
  28          #include "uart.h"
  29          #include "global.h"
  30          
  31          void i2cSetSCL(BYTE is_hl)
  32          {
  33   1          if (s_I2CSel)
  34   1          {
  35   2              i2cSCLRam_PIN = is_hl;//P7_5
  36   2          }
  37   1          else
  38   1          {
  39   2              i2cSCL_PIN = is_hl;//P7_7
  40   2          }
  41   1      }
  42          
  43          BIT i2cGetSCL(void)
  44          {
  45   1          BIT bSCL;
  46   1          if (s_I2CSel)
  47   1          {
  48   2              i2cSCLRam_PIN_IN();
  49   2              bSCL = i2cSCLRam_PIN_STATUS;//P7_5
  50   2              i2cSCLRam_PIN_OUT();
  51   2          }
  52   1          else
  53   1          {
C51 COMPILER V7.50   I2C                                                                   07/03/2006 14:17:07 PAGE 2   

  54   2              i2cSCL_PIN_IN();
  55   2              bSCL = i2cSCL_PIN_STATUS;//P7_7
  56   2              i2cSCL_PIN_OUT();
  57   2          }
  58   1          return bSCL;
  59   1      }
  60          
  61          void i2cSetSDA(BOOL is_hl)
  62          {
  63   1          if (s_I2CSel)
  64   1          {
  65   2              i2cSDARam_PIN = is_hl;//P7_6
  66   2          }
  67   1          else
  68   1          {
  69   2              i2cSDA_PIN = is_hl;//P3_4
  70   2          }
  71   1      }
  72          
  73          BIT i2cGetSDA(void)
  74          {
  75   1          BIT bSDA;
  76   1          if (s_I2CSel)
  77   1          {
  78   2              i2cSDARam_PIN_IN();
  79   2              bSDA = i2cSDARam_PIN_STATUS;//P7_6
  80   2              i2cSDARam_PIN_OUT();
  81   2          }
  82   1          else
  83   1          {
  84   2              bSDA = i2cSDA_PIN_STATUS;//P3_4
  85   2          }
  86   1          return bSDA;
  87   1      }
  88          
  89          //////////////////////////////////////////////////////////////
  90          // Delay 4us
  91          //////////////////////////////////////////////////////////////
  92          void i2c_Delay(void)
  93          {
  94   1          // MCU_Delay1us();
  95   1          // MCU_Delay1us();
  96   1          MCU_Delay1us();
  97   1          MCU_Delay1us();
  98   1      }
  99          
 100          
 101          /////////////////////////////////////////
 102          // Set I2C SCL pin high/low.
 103          //
 104          // Arguments: bSet - high/low bit
 105          /////////////////////////////////////////
 106          void i2cSetSCL_Chk(bit bSet)
 107          {
 108   1          BYTE ucDummy; // loop dummy
 109   1      
 110   1          i2cSetSCL(bSet); // set SCL pin
 111   1      
 112   1          if (bSet == _HIGH) // if set pin high
 113   1          {
 114   2              ucDummy = I2C_CHECK_PIN_DUMMY; // initialize dummy
 115   2              while ((i2cGetSCL() == _LOW) && (ucDummy--)) ; // check SCL pull high
C51 COMPILER V7.50   I2C                                                                   07/03/2006 14:17:07 PAGE 3   

 116   2          } // if
 117   1      }
 118          
 119          /////////////////////////////////////////
 120          // Set I2C SDA pin high/low
 121          //
 122          // Arguments: bSet - high/low bit
 123          /////////////////////////////////////////
 124          void i2cSetSDA_Chk(bit bSet)
 125          {
 126   1          BYTE ucDummy; // loop dummy
 127   1      
 128   1          i2cSetSDA(bSet); // set SDA pin
 129   1      
 130   1          if (bSet == _HIGH) // if set pin high
 131   1          {
 132   2              ucDummy = I2C_CHECK_PIN_DUMMY; // initialize dummy
 133   2              while ((i2cGetSDA() == _LOW) && (ucDummy--)); // check SDA pull high
 134   2          } // if
 135   1      }
 136          
 137          //////////////////////////////////////////////////////
 138          // I2C start signal.
 139          // <comment>
 140          //  SCL ________
 141          //              \_________
 142          //  SDA _____
 143          //           \____________
 144          //
 145          // Return value: None
 146          //////////////////////////////////////////////////////
 147          BOOL i2c_Start(void)
 148          {
 149   1          BOOL bStatus = TRUE; // success status
 150   1      
 151   1          EA = 1; // disable all interrupt
 152   1      
 153   1          i2cSetSDA_Chk(_HIGH);
 154   1          i2c_Delay();
 155   1          i2cSetSCL_Chk(_HIGH);
 156   1          i2c_Delay();
 157   1      
 158   1          // check pin error
 159   1          if ((i2cGetSCL() == _LOW) || (i2cGetSDA() == _LOW))
 160   1          {
 161   2              bStatus = FALSE;
 162   2          }
 163   1          else // success
 164   1          {
 165   2              i2cSetSDA(_LOW);
 166   2              i2c_Delay();
 167   2              i2cSetSCL(_LOW);
 168   2          }
 169   1      
 170   1          EA = 1; // release EA bit
 171   1      
 172   1          return bStatus;
 173   1      }
 174          
 175          /////////////////////////////////////////
 176          // I2C stop signal.
 177          // <comment>
C51 COMPILER V7.50   I2C                                                                   07/03/2006 14:17:07 PAGE 4   

 178          //              ____________
 179          //  SCL _______/
 180          //                 _________
 181          //  SDA __________/
 182          /////////////////////////////////////////
 183          void i2c_Stop(void)
 184          {
 185   1          EA = 1; // disable all interrupt
 186   1      
 187   1          i2cSetSCL(_LOW);
 188   1          i2c_Delay();
 189   1          i2cSetSDA(_LOW);
 190   1          i2c_Delay();
 191   1          i2cSetSCL_Chk(_HIGH);
 192   1          i2c_Delay();
 193   1          i2cSetSDA_Chk(_HIGH);
 194   1          i2c_Delay();
 195   1      
 196   1          EA = 1; // release EA bit
 197   1      }
 198          
 199          //////////////////////////////////////////////////////////////////////////
 200          // I2C receive byte from device.
 201          //
 202          // Return value: receive byte
 203          //////////////////////////////////////////////////////////////////////////
 204          BYTE i2c_ReceiveByte(BOOL bAck)
 205          {
 206   1          BYTE ucReceive = 0;
 207   1          BYTE ucMask = 0x80;
 208   1      
 209   1          EA = 1;
 210   1      
 211   1          while (ucMask)
 212   1          {
 213   2              i2cSetSDA(_HIGH);
 214   2              i2cSetSCL_Chk(_HIGH);
 215   2              i2c_Delay();
 216   2              if (i2cGetSDA() == _HIGH)
 217   2                  ucReceive |= ucMask;
 218   2              i2cSetSCL(_LOW);
 219   2              i2c_Delay();
 220   2      
 221   2              ucMask >>= 1; // next
 222   2          } // while
 223   1      
 224   1          if (bAck) // acknowledge
 225   1              i2cSetSDA_Chk(I2C_ACKNOWLEDGE);
 226   1          else // non-acknowledge
 227   1              i2cSetSDA_Chk(I2C_NON_ACKNOWLEDGE);
 228   1      
 229   1          i2c_Delay();
 230   1          i2cSetSCL_Chk(_HIGH);
 231   1          i2c_Delay();
 232   1          i2cSetSCL(_LOW);
 233   1          i2c_Delay();
 234   1      
 235   1          EA = 1;
 236   1      
 237   1          return ucReceive;
 238   1      }
 239          
C51 COMPILER V7.50   I2C                                                                   07/03/2006 14:17:07 PAGE 5   

 240          //////////////////////////////////////////////////////////////////////////
 241          // I2C send byte to device.
 242          //
 243          // Arguments: ucVal - send byte
 244          // Return value: I2C acknowledge bit
 245          //               I2C_ACKNOWLEDGE/I2C_NON_ACKNOWLEDGE
 246          //////////////////////////////////////////////////////////////////////////
 247          bit i2c_SendByte(BYTE ucVal)
 248          {
 249   1          BYTE ucMask = 0x80;
 250   1          bit bAck; // acknowledge bit
 251   1      
 252   1          EA = 1;
 253   1      
 254   1          while (ucMask)
 255   1          {
 256   2              if (ucVal & ucMask)
 257   2                  i2cSetSDA_Chk(_HIGH);
 258   2              else
 259   2                  i2cSetSDA_Chk(_LOW);
 260   2              i2c_Delay();
 261   2              i2cSetSCL_Chk(_HIGH); // clock
 262   2              i2c_Delay();
 263   2              i2cSetSCL(_LOW);
 264   2              i2c_Delay();
 265   2      
 266   2              ucMask >>= 1; // next
 267   2          } // while
 268   1      
 269   1          // recieve acknowledge
 270   1          i2cSetSDA(_HIGH);
 271   1          i2c_Delay();
 272   1          i2cSetSCL_Chk(_HIGH);
 273   1          i2c_Delay();
 274   1          bAck = i2cGetSDA(); // recieve acknowlege
 275   1          i2cSetSCL(_LOW);
 276   1          i2c_Delay();
 277   1      
 278   1          EA = 1;
 279   1      
 280   1          return (bAck);
 281   1      }
 282          
 283          //////////////////////////////////////////////////////////////////////////
 284          // I2C access start.
 285          //
 286          // Arguments: ucSlaveAdr - slave address
 287          //            trans_t - I2C_TRANS_WRITE/I2C_TRANS_READ
 288          //////////////////////////////////////////////////////////////////////////
 289          BOOL i2c_AccessStart(BYTE ucSlaveAdr, I2cIoTransType trans_t)
 290          {
 291   1          BYTE ucDummy; // loop dummy
 292   1      
 293   1          //if ((ucSlaveAdr & 0xf0) == 0xA0)//RM_DEVICE_ADR
 294   1          //    s_I2CSel = TV_RAM;
 295   1          //else
 296   1          //    s_I2CSel = MCU_RAM;//default
 297   1      
 298   1          if (trans_t == I2C_TRANS_READ) // check i2c read or write
 299   1              ucSlaveAdr = I2C_DEVICE_ADR_READ(ucSlaveAdr); // read
 300   1          else
 301   1              ucSlaveAdr = I2C_DEVICE_ADR_WRITE(ucSlaveAdr); // write
C51 COMPILER V7.50   I2C                                                                   07/03/2006 14:17:07 PAGE 6   

 302   1      
 303   1          ucDummy = I2C_ACCESS_DUMMY_TIME;
 304   1          while (ucDummy--)
 305   1          {
 306   2              if (i2c_Start() == FALSE)
 307   2                  continue;
 308   2      
 309   2              if (i2c_SendByte(ucSlaveAdr) == I2C_ACKNOWLEDGE) // check acknowledge
 310   2              {
 311   3                  //if(g_FacSetting.bFactoryMode)
 312   3                  //FacIICtestHandler(ucSlaveAdr,TRUE);
 313   3                  return TRUE;
 314   3              }
 315   2      
 316   2              //FacIICtestHandler(ucSlaveAdr,FALSE);
 317   2              i2c_Stop();
 318   2      
 319   2              Delay1ms(1);
 320   2          } // while
 321   1      
 322   1          return FALSE;
 323   1      }
 324          
 325          /////////////////////////////////////////////////////////////////
 326          // I2C read bytes from device.
 327          //
 328          // Arguments: ucSlaveAdr - slave address
 329          //            ucSubAdr - sub address
 330          //            pBuf - pointer of buffer
 331          //            ucBufLen - length of buffer

⌨️ 快捷键说明

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