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

📄 flash.lst

📁 c8051f310xmodembootloader.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.16   FLASH                                                                 12/09/2009 15:02:55 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE FLASH
OBJECT MODULE PLACED IN flash.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE flash.c BROWSE

line level    source

   1          /*****************************************
   2          *
   3          *
   4          *****************************************/
   5          #include <reg52.h>
   6          #include <string.h>
   7          #include <intrins.h>
   8          #include <stdio.h>
   9          #include <absacc.h>
  10          #include "FlashRam.h"
  11          
  12          unsigned char xdata eeprom[0x2000]  _at_ 0x0000;
  13          unsigned char xdata pageSel         _at_ 0x6000;
  14          
  15          unsigned char data FlashType;   // Flash型号
  16          unsigned long fAddr = 0;
  17          
  18          extern void dog();
  19          //=========================================
  20          //
  21          //=========================================
  22          void Check_Toggle_Ready(unsigned int addr)
  23          {
  24   1              unsigned char data preTmp;
  25   1              unsigned char data currTmp;
  26   1              preTmp = eeprom[addr] & 0x40;
  27   1              while(1)
  28   1              {
  29   2                      currTmp = eeprom[addr] & 0x40;
  30   2                      if (preTmp == currTmp)
  31   2                      {
  32   3                              break;
  33   3                      }
  34   2                      preTmp = currTmp;
  35   2              }
  36   1      }
  37          
  38          //=========================================
  39          // 解锁SST28SF040A
  40          //=========================================
  41          void eepUnlock(void)
  42          {
  43   1              unsigned char data tmp;
  44   1              tmp = eeprom[0x1823];
  45   1              tmp = eeprom[0x1820];
  46   1              tmp = eeprom[0x1822];
  47   1              tmp = eeprom[0x0418];
  48   1              tmp = eeprom[0x041B];
  49   1              tmp = eeprom[0x0419];
  50   1              tmp = eeprom[0x041A];
  51   1      }
  52          
  53          //=========================================
  54          // 读取器件ID
  55          // 成功: 返回1,否则返回0
C51 COMPILER V8.16   FLASH                                                                 12/09/2009 15:02:55 PAGE 2   

  56          //=========================================
  57          char eepGetChipId(void)
  58          {
  59   1              unsigned char data cId[2];
  60   1              pageSel = 0x00;         // 页址
  61   1      
  62   1              eeprom[0] = 0xff;       // reset command
  63   1              _nop_();
  64   1              eeprom[0] = 0x90;       // read id
  65   1              _nop_();
  66   1              cId[0] = eeprom[0];
  67   1              cId[1] = eeprom[1];
  68   1              eeprom[0] = 0xff;
  69   1              if ((cId[0] == 0xbf) && (cId[1] == 0x04))
  70   1              {
  71   2                      eepUnlock();
  72   2                      FlashType = cId[1];
  73   2                      return 1;
  74   2              }
  75   1      
  76   1              eeprom[0] = 0xf0;       // 取消所有操作
  77   1              _nop_();
  78   1              _nop_();
  79   1              eeprom[0x0555] = 0xAA;
  80   1              eeprom[0x02AA] = 0x55;
  81   1              eeprom[0x0555] = 0x90;          // Software ID Entry Command
  82   1              _nop_();                        // Wait TIDA
  83   1              _nop_();
  84   1              cId[0] = eeprom[0x0000];                // Manufacturer’s ID = BFH
  85   1              cId[1] = eeprom[0x0001];        // SST29SF040 Device ID = 13H
  86   1      
  87   1              eeprom[0x0555] = 0xAA;
  88   1              eeprom[0x02AA] = 0x55;
  89   1              eeprom[0x0555] = 0xF0;          // Software ID Entry Command
  90   1              _nop_();                        // Wait TIDA
  91   1              if (cId[0] == 0xbf)
  92   1              {
  93   2                      FlashType = cId[1];
  94   2                      return 1;
  95   2              }
  96   1              FlashType = NONE_FLASH;
  97   1              return 0;
  98   1      }
  99          //=========================================
 100          //
 101          //=========================================
 102          void eepEraseChip(void)
 103          {
 104   1              pageSel = 0;
 105   1              switch(FlashType)
 106   1              {
 107   2                      case SST28SF040A:
 108   2                              eeprom[0] = 0x30;
 109   2                              eeprom[0] = 0x30;
 110   2                              Check_Toggle_Ready(0);
 111   2                              break;
 112   2                      case SST29SF040:
 113   2                              eeprom[0x0555] = 0xAA;
 114   2                              eeprom[0x02AA] = 0x55;
 115   2                              eeprom[0x0555] = 0x80;
 116   2                              eeprom[0x0555] = 0xAA;
 117   2                              eeprom[0x02AA] = 0x55;
C51 COMPILER V8.16   FLASH                                                                 12/09/2009 15:02:55 PAGE 3   

 118   2                              eeprom[0x0555] = 0x10;
 119   2                              Check_Toggle_Ready(0);
 120   2                              break;
 121   2                      default:
 122   2                              break;
 123   2              }
 124   1              
 125   1      }
 126          
 127          //==================================================
 128          // 擦除扇区
 129          // input:   扇区起始地址
 130          // output: 1=成功
 131          //==================================================
 132          char eepEraseSector(unsigned int addr)
 133          {
 134   1              unsigned char data try;
 135   1              int data cnt, block_size;
 136   1              unsigned data addr_mask;
 137   1              try = 0;
 138   1              while (try<3)
 139   1              {
 140   2                      switch(FlashType)
 141   2                      {
 142   3                              case SST28SF040A:
 143   3                                      addr_mask=0x1f00;
 144   3                                      addr=addr&0x1f00;
 145   3                                      block_size = 256;
 146   3      
 147   3                                      eeprom[addr] = 0x20;
 148   3                                      eeprom[addr] = 0xD0;
 149   3                                      Check_Toggle_Ready(addr);
 150   3                                      break;
 151   3      
 152   3                              case SST29SF040:
 153   3                                      addr_mask=0x1f80;
 154   3                                      addr=addr&0x1f80;
 155   3                                      block_size=128;
 156   3      
 157   3                                      eeprom[0x0555] = 0xAA;
 158   3                                      eeprom[0x02AA] = 0x55;
 159   3                                      eeprom[0x0555] = 0x80;
 160   3                                      eeprom[0x0555] = 0xAA;
 161   3                                      eeprom[0x02AA] = 0x55;
 162   3                                      eeprom[addr] = 0x20;
 163   3                                      Check_Toggle_Ready(addr);
 164   3                                      break;
 165   3                              default:
 166   3                                      return 0;  // 失败
 167   3                      }
 168   2      
 169   2                      for (cnt=0; cnt<block_size; cnt++)
 170   2                      {
 171   3                              if (eeprom[addr&addr_mask + cnt] != 0xff)               // 检查扇区是否全部擦空
 172   3                              {
 173   4                                      break;
 174   4                              }
 175   3                      }
 176   2                      if ( cnt > block_size-1)

⌨️ 快捷键说明

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