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

📄 flash.lst

📁 c8051f310xmodembootloader.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
 177   2                      {
 178   3                              return 1;
 179   3                      }
C51 COMPILER V8.16   FLASH                                                                 12/09/2009 15:02:55 PAGE 4   

 180   2                      ++try;                  // 未擦空,重擦
 181   2              }
 182   1              return 0;
 183   1      }
 184          //=========================================
 185          // 字节编程
 186          // input:   addr=地址
 187          //          dat=数据
 188          // output:   ---
 189          //=========================================
 190          void eepProgramByte(unsigned int addr,unsigned char dat)
 191          {
 192   1              switch(FlashType)
 193   1              {
 194   2                      case SST28SF040A:
 195   2                              eeprom[addr] = 0x10;            // AUTO_PGRM
 196   2                              eeprom[addr] = dat;
 197   2                              Check_Toggle_Ready(addr);
 198   2                              break;
 199   2                      case SST29SF040:
 200   2                              eeprom[0x0555] = 0xAA;
 201   2                              eeprom[0x02AA] = 0x55;
 202   2                              eeprom[0x0555] = 0xA0;
 203   2                              eeprom[addr] = dat;
 204   2                              Check_Toggle_Ready(addr);
 205   2                              break;
 206   2                      default:
 207   2                              break;
 208   2              }
 209   1      }
 210          //=========================================
 211          //
 212          //=========================================
 213          unsigned char eepReadByte(unsigned long addr)
 214          {
 215   1              pageSel = (unsigned char)(addr>>13);
 216   1              return (eeprom[addr&0x1fff]);
 217   1      }
 218          
 219          //=========================================
 220          //
 221          //=========================================
 222          void eepWriteRam(unsigned long addr,unsigned char dat)
 223          {
 224   1              bit _ea_save;
 225   1              int block_size;
 226   1              _ea_save = EA;
 227   1      
 228   1              EA = 0;
 229   1              switch (FlashType)
 230   1              {
 231   2                      case SST28SF040A:
 232   2                              block_size=256;
 233   2                              break;
 234   2                      case SST29SF040:
 235   2                              block_size=128;
 236   2                              break;
 237   2                      default:
 238   2                              EA = _ea_save;
 239   2                              return;
 240   2              }
 241   1              pageSel = (unsigned char)(addr>>13);            // 页选
C51 COMPILER V8.16   FLASH                                                                 12/09/2009 15:02:55 PAGE 5   

 242   1      
 243   1              if (eeprom[addr&0x1fff] != 0xff)                // 数据不为空
 244   1              {
 245   2                      int data cnt;
 246   2                      unsigned char xdata tmpBuffer[256];
 247   2                      unsigned int mask;
 248   2      
 249   2                      if (FlashType == SST28SF040A)mask=0x1f00;
 250   2                      else mask=0x1f80;
 251   2      
 252   2                      for (cnt=0; cnt<block_size; cnt++)
 253   2                      {
 254   3                              tmpBuffer[cnt] = eeprom[ addr&mask + cnt];      // 读
 255   3                      }
 256   2      
 257   2                      eepEraseSector(addr);           // 擦除扇区
 258   2                      
 259   2      //              DOG = !DOG;
 260   2                      dog();
 261   2                      if (FlashType == SST28SF040A)tmpBuffer[addr&0x00ff] = dat;              // 改
 262   2                      else tmpBuffer[addr&0x007f] = dat;
 263   2      
 264   2                      for (cnt=0; cnt<block_size; cnt++)
 265   2                      {
 266   3                              eepProgramByte(addr&mask + cnt, tmpBuffer[cnt]);        // 写
 267   3                      }
 268   2              }
 269   1              else    // 直接写入
 270   1              {
 271   2                      eepProgramByte(addr & 0x1fff, dat);
 272   2              }
 273   1      
 274   1              EA = _ea_save;
 275   1      }
 276          
 277          //=========================================
 278          //
 279          //=========================================
 280          void eepWrite(unsigned long addr,unsigned char dat)
 281          {
 282   1              bit _ea_save;
 283   1              unsigned char mask;
 284   1              _ea_save = EA;
 285   1              EA = 0;
 286   1              pageSel = (unsigned char)(addr>>13);            // 页选
 287   1      
 288   1              if (FlashType==SST28SF040A)mask=0xff;
 289   1              else mask=0x7f;
 290   1              if ((addr&mask)==0)
 291   1              {
 292   2                      eepEraseSector(addr);           // 擦除扇区
 293   2              }
 294   1              dog();
 295   1              eepProgramByte(addr & 0x1fff, dat);
 296   1              EA = _ea_save;
 297   1      }
 298          
 299          int fopen(void)
 300          {
 301   1              fAddr = 0;
 302   1              if (FlashType != NONE_FLASH)
 303   1                      return 1;
C51 COMPILER V8.16   FLASH                                                                 12/09/2009 15:02:55 PAGE 6   

 304   1              return -1;
 305   1      }
 306          
 307          int fread(unsigned char *buff, int len)
 308          {
 309   1              int rlen;
 310   1              int cnt;
 311   1      
 312   1              if (fAddr>0x7ffff)return -1;
 313   1      
 314   1              rlen = 0;
 315   1              for (cnt=0; cnt<len; cnt++)
 316   1              {
 317   2                      ++rlen;
 318   2                      buff[cnt] = eepReadByte(fAddr++);
 319   2                      if (fAddr>0x7ffff)break;
 320   2              }
 321   1              return rlen;
 322   1      }
 323          
 324          int fwrite(unsigned char *buff, int len)
 325          {
 326   1              int wlen;
 327   1              int cnt;
 328   1              if (fAddr>0x7ffff)return -1;
 329   1              wlen = 0;
 330   1              for (cnt=0; cnt<len; cnt++)
 331   1              {
 332   2                      eepWrite(fAddr, buff[cnt]);
 333   2                      
 334   2                      ++wlen;
 335   2                      ++fAddr;
 336   2                      if (fAddr>0x7ffff)break;
 337   2              }
 338   1              return wlen;
 339   1      }
 340          void fclose(void)
 341          {
 342   1              fAddr=0;
 343   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1245    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----     256
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5      47
   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 + -