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

📄 nvram.lst

📁 Maria2 CarTV 20060707 Tony
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.01   NVRAM                                                                 11/28/2006 08:08:10 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE NVRAM
OBJECT MODULE PLACED IN ..\..\1out\NVRam.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\msFunc\NVRam.c BROWSE INCDIR(..\..\inc;..\..\mslib;..\..\Device;..\..
                    -\kernal;..\..\msFunc;..\..\pc;..\..\tv) DEBUG OBJECTEXTEND PRINT(..\..\1out\NVRam.lst) OBJECT(..\..\1out\NVRam.obj)

line level    source

   1          #define _NVRAM_C_
   2          
   3          #include "types.h"
   4          #include "i2c.h"
   5          #include "board.h"
   6          #include "misc.h"
   7          #include "global.h"
   8          #include "Reg52.h"
   9          #include "debug.h"
  10          
  11          #define NVRAM_DEVICE    0xA0
  12          
  13          #define rmCalDeviceAdr(wIndex)    NVRAM_DEVICE|((HIBYTE(wIndex)&0x07)<<1)
  14          #define HIBYTE(value)             ((BYTE)((value) / 0x100))
  15          #define LOBYTE(value)             ((BYTE)(value))
  16          
  17          #if RM_EEPROM_TYPE<RM_TYPE_SST512
  18          
  19          #if (RM_EEPROM_TYPE == RM_TYPE_24C16)
  20          #define RM_PAGE_WRITE_LEN    16
  21          #elif (RM_EEPROM_TYPE == RM_TYPE_24C32)
              #define RM_PAGE_WRITE_LEN    32
              #endif
  24          
  25          ///////////////////////////////////////////////////////////////////////////////
  26          // <Function>: rmBurstReadBytes
  27          //
  28          // <Description>: EEPROM burst read bytes
  29          //
  30          // <Parameter>:  -  <Flow>  -  <Description>
  31          //   wIndex      -    In    -   index
  32          //   pBuf        -    Out   -   buffer pointer
  33          //   ucBufLen    -    In    -   buffer length
  34          //-----------------------------------------------------------------------------
  35          //
  36          ///////////////////////////////////////////////////////////////////////////////
  37          void rmBurstReadBytes(WORD wIndex, BYTE *pBuf, WORD ucBufLen)
  38          {
  39   1      #if (RM_EEPROM_TYPE == RM_TYPE_24C16)
  40   1          i2cBurstReadBytes(rmCalDeviceAdr(wIndex), LOBYTE(wIndex), pBuf, ucBufLen);
  41   1      #elif (RM_EEPROM_TYPE == RM_TYPE_24C32)
                  BYTE ucDummy; // loop dummy
              
                  ucDummy = I2C_ACCESS_DUMMY_TIME;
                  while(ucDummy--)
                  {
                      if (i2c_AccessStart(NVRAM_DEVICE, I2C_WRITE) == FALSE)
                          continue;
              
                      if (i2c_SendByte(HIBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
                          continue;
              
                      if (i2c_SendByte(LOBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
                          continue;
C51 COMPILER V8.01   NVRAM                                                                 11/28/2006 08:08:10 PAGE 2   

              
                      if (i2c_AccessStart(NVRAM_DEVICE, I2C_READ) == FALSE)
                          continue;
              
                      while(ucBufLen--) // loop to burst read
                      {
                          *pBuf = i2c_ReceiveByte(ucBufLen); // receive byte
              
                          pBuf++; // next byte pointer
                      } // while
              
                      break;
                  } // while
              
                  i2c_Stop();
              #endif
  71   1      }
  72          ///////////////////////////////////////////////////////////////////////////////
  73          // <Function>: rmPageWrite
  74          //
  75          // <Description>: EEPROM page write
  76          
  77          // <Parameter>:  -  <Flow>  -  <Description>
  78          //   wIndex      -    In    -   index
  79          //   pBuf        -    Out   -   buffer pointer
  80          //   ucBufLen    -    In    -   buffer length
  81          //-----------------------------------------------------------------------------
  82          //
  83          ///////////////////////////////////////////////////////////////////////////////
  84          #if (RM_EEPROM_TYPE == RM_TYPE_24C32)
              void rmPageWrite(WORD wIndex, BYTE *pBuf, BYTE ucBufLen)
              {
                  BYTE ucDummy; // loop dummy
              
                  ucDummy = I2C_ACCESS_DUMMY_TIME;
                  while(ucDummy--)
                  {
                      if (i2c_AccessStart(NVRAM_DEVICE, I2C_WRITE) == FALSE)
                          continue;
              
                      if (i2c_SendByte(HIBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
                          continue;
              
                      if (i2c_SendByte(LOBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
                          continue;
              
                      while(ucBufLen--) // loop of writting data
                      {
                          i2c_SendByte(*pBuf); // send byte
              
                          pBuf++; // next byte pointer
                      } // while
              
                      break;
                  } // while
              
                  i2c_Stop();
              }
              #endif
 114          ///////////////////////////////////////////////////////////////////////////////
 115          // <Function>: rmBurstWriteBytes
 116          //
C51 COMPILER V8.01   NVRAM                                                                 11/28/2006 08:08:10 PAGE 3   

 117          // <Description>: EEPROM burst write bytes
 118          //
 119          // <Parameter>:  -  <Flow>  -  <Description>
 120          //   wIndex      -    In    -   index
 121          //   pBuf        -    Out   -   buffer pointer
 122          //   ucBufLen    -    In    -   buffer length
 123          //-----------------------------------------------------------------------------
 124          //
 125          ///////////////////////////////////////////////////////////////////////////////
 126          void rmBurstWriteBytes(WORD wIndex, BYTE *pBuf, WORD ucBufLen)
 127          {
 128   1          BYTE ucWriteCount; // write counter
 129   1          BYTE ucRemainLen; // i2c word address
 130   1      
 131   1          while(1)
 132   1          {
 133   2              // check page write roll over
 134   2              if (ucBufLen > RM_PAGE_WRITE_LEN)
 135   2                  ucWriteCount = RM_PAGE_WRITE_LEN;
 136   2              else
 137   2                  ucWriteCount = ucBufLen;
 138   2      
 139   2              // check word address higher than page write bits
 140   2              ucRemainLen = LOBYTE(wIndex) % RM_PAGE_WRITE_LEN;
 141   2              if (ucRemainLen) // check ramain
 142   2              {
 143   3                  ucRemainLen = RM_PAGE_WRITE_LEN - ucRemainLen;
 144   3                  if (ucWriteCount > ucRemainLen) // check not roll over
 145   3                      ucWriteCount = ucRemainLen;
 146   3              }
 147   2      
 148   2              // EEPROM page write
 149   2      #if (RM_EEPROM_TYPE == RM_TYPE_24C16)
 150   2              i2cBurstWriteBytes(rmCalDeviceAdr(wIndex), LOBYTE(wIndex), pBuf, ucWriteCount);
 151   2      #elif (RM_EEPROM_TYPE == RM_TYPE_24C32)
                      rmPageWrite(wIndex, pBuf, ucWriteCount);
              #endif
 154   2              // check end of buffer
 155   2              ucBufLen -= ucWriteCount;
 156   2              if (ucBufLen == 0)
 157   2                  break;
 158   2      
 159   2              wIndex += ucWriteCount; // next word address
 160   2              pBuf += ucWriteCount; // next buffer pointer
 161   2      
 162   2              Delay1ms(1);
 163   2          } // while
 164   1      
 165   1      }
 166          
 167          void NVRam_WriteByte(WORD addr, BYTE value)
 168          {
 169   1              rmBurstWriteBytes(addr, &value, 1);
 170   1      }
 171          void NVRam_ReadByte(WORD addr, BYTE *value)
 172          {
 173   1              rmBurstReadBytes(addr, value, 1);
 174   1      }
 175          void NVRam_WriteTbl(WORD addr, BYTE *buffer, WORD count)
 176          {
 177   1              rmBurstWriteBytes(addr, buffer, count);
 178   1      }
C51 COMPILER V8.01   NVRAM                                                                 11/28/2006 08:08:10 PAGE 4   

 179          void NVRam_ReadTbl(WORD addr, BYTE *buffer, WORD count)
 180          {
 181   1              rmBurstReadBytes(addr, buffer, count);
 182   1      }
 183          
 184          #else
              void mstSaveDisplayDataBanked(WORD address)
              {
                      BYTE i;
              
                      //printf("\r\nRW<%x>",address);
              
                      // get flash Manufacture ID

⌨️ 快捷键说明

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