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

📄 copyer.lst

📁 SST39VFXXX系列闪存拷贝机
💻 LST
📖 第 1 页 / 共 2 页
字号:
 187           {
 188   1         unsigned char Loop = TRUE;
 189   1         unsigned char PreData;
 190   1         unsigned char CurrData;
 191   1         unsigned long TimeOut = 0;
 192   1      
 193   1         PAGE0;
 194   1         PreData = XBYTE[Dst];
 195   1         PreData = PreData & 0x40;
 196   1         while ((TimeOut< 0x07FFFFFF) && (Loop))
 197   1           {
 198   2             CurrData = XBYTE[Dst];
 199   2             CurrData = CurrData & 0x40;
 200   2             if (PreData == CurrData)
 201   2                     Loop = FALSE;   //ready to exit the while loop
 202   2             PreData = CurrData;
 203   2      //       WDT_CONTR = 0x34;
 204   2             TimeOut++;
 205   2           }
 206   1       }
 207          
 208          /*================================================================
 209           * 函 数 名:  Program_One_Byte
 210           * 参    数:  SrcByte: 数据 hadr:地址16-18 Dst: 地址A0-A15 
 211           * 功能描述:
 212           *            往FLASH写入一个字节
 213           * 返 回 值:  none
 214           * 作    者:  uCore
 215           * 修改日期:  2008-10-21 00:26
 216          ===================================================================*/
 217          void Program_One_Byte(unsigned char SrcByte,unsigned char hadr,unsigned int Dst)
 218          {
 219   1         PAGE0;
 220   1         XBYTE[0x5555]=0xaa;
 221   1         XBYTE[0x2aaa]=0x55;
 222   1         XBYTE[0x5555]=0xa0;
 223   1      
 224   1         TurnChipAdr(hadr);
 225   1      
 226   1         XBYTE[Dst] = SrcByte;             // transfer the byte to destination
 227   1         Check_Toggle_Ready(Dst);    //wait for TOGGLE bit to get ready
 228   1      }
 229          
 230          /*================================================================
 231           * 函 数 名:  Erase_One_Sector
 232           * 参    数:  e_adr: 扇区地址 (39SF040:128,39SF020:64)
 233           * 功能描述:
 234           *            擦除一个扇区
 235           * 返 回 值:  none
 236           * 作    者:  uCore
 237           * 修改日期:  2008-10-21 00:22
C51 COMPILER V7.50   COPYER                                                                10/21/2008 00:32:54 PAGE 5   

 238          ===================================================================*/
 239          int Erase_One_Sector(unsigned char e_adr)
 240          {
 241   1              unsigned int  tmp;
 242   1              /*  Issue the Sector Erase command to 39VF040   */
 243   1              PAGE0;
 244   1              tmp=(e_adr%16)*0x1000;
 245   1              TurnChipAdr(e_adr/16);
 246   1              XBYTE[0x5555]=0xaa;
 247   1              XBYTE[0x2aaa]=0x55;
 248   1              XBYTE[0x5555]=0x80;
 249   1              XBYTE[0x5555]=0xaa;
 250   1              XBYTE[0x2aaa]=0x55;
 251   1              XBYTE[tmp] =0x30;                   /* write data 0x30 to the address       */
 252   1      
 253   1              Delay_10_Milli_Seconds();       /* check DATABOOK for the most  */
 254   1              Delay_10_Milli_Seconds();       /* check DATABOOK for the most  */
 255   1              Delay_10_Milli_Seconds();       /* check DATABOOK for the most  */
 256   1                                              /* accurate value -- Tse        */
 257   1      }
 258          
 259          /*================================================================
 260           * 函 数 名:  main
 261           * 参    数:  none
 262           * 功能描述:
 263           *            主函数
 264           * 返 回 值:  none
 265           * 作    者:  uCore
 266           * 修改日期:  2008-10-21 00:15
 267          ===================================================================*/
 268          void main(void)
 269           {
 270   1         unsigned char sectors; 
 271   1         unsigned int raddr,waddr;
 272   1         unsigned char idata datbuf[128];
 273   1         unsigned char i,j;
 274   1         unsigned char pages;
 275   1      
 276   1         inichip();
 277   1         if(CHIP)                  //FLASH型号查询
 278   1           sectors = 64;           //256K,64扇区
 279   1           else
 280   1             sectors = 128;        //512K
 281   1      
 282   1         BUZ = 1;
 283   1         while(1)
 284   1           {
 285   2             STAR = 1;
 286   2             if(!STAR)            //启动
 287   2               {    
 288   3                 ledon = 1;       //点亮LED,
 289   3                 ledfls = 20;     //每秒开关一次
 290   3                 SendPackageToCom(EraseChip,18);
 291   3                 for(i=0; i<sectors; ++i)  //擦除
 292   3                   {
 293   4                     Erase_One_Sector(i);
 294   4                     SendPackageToCom(Dot,1);
 295   4                   }
 296   3                 
 297   3                 SendPackageToCom(StartProgrammer,21);
 298   3                 pages = sectors/16;
 299   3                 for(i=0; i<pages; ++i)                     //写入
C51 COMPILER V7.50   COPYER                                                                10/21/2008 00:32:54 PAGE 6   

 300   3                   {
 301   4                     raddr = 0;
 302   4                     waddr = 0;
 303   4                     do{
 304   5                         //read;
 305   5                         TurnChipAdr(i);
 306   5                         S_HZK;                       //选择源
 307   5                         j = 0;
 308   5                         while(j<128)                         //读128byte
 309   5                           {
 310   6                             datbuf[j] = XBYTE[raddr+j];
 311   6                             ++j;
 312   6                           }
 313   5                         raddr = raddr + 128;
 314   5                         
 315   5                         //write
 316   5                         S_SAV;                    //选中目标
 317   5                         j = 0;
 318   5                         while(j<128)                         //读128byte
 319   5                           {
 320   6                             Program_One_Byte(datbuf[j],i,waddr+j);
 321   6                             ++j;
 322   6                           }
 323   5                         waddr = waddr + 128;
 324   5                         if(raddr%4096==0)
 325   5                           SendPackageToCom(Dot,1);
 326   5                       }while(raddr != 0);
 327   4                   }
 328   3                 SendPackageToCom(VerifyChip,19);
 329   3                 pages = sectors/16;
 330   3                 for(i=0; i<pages; ++i)               //校验
 331   3                   {
 332   4                     raddr = 0;
 333   4                     TurnChipAdr(i);
 334   4                     do{
 335   5                         //read;
 336   5                         S_HZK;
 337   5                         j = 0;
 338   5                         while(j<128)                         //读128byte
 339   5                           {
 340   6                             datbuf[j] = XBYTE[raddr+j];
 341   6                             ++j;
 342   6                           }
 343   5                         
 344   5                         //write
 345   5                         S_SAV;
 346   5                         j = 0;
 347   5                         while(j<128)                         //读128byte
 348   5                           {
 349   6                             if(datbuf[j] != XBYTE[raddr+j])goto FAIL;           //校验失败,退出
 350   6                             ++j;
 351   6                           }
 352   5                         raddr = raddr + 128;
 353   5                         if(raddr%4096==0)
 354   5                           SendPackageToCom(Dot,1);
 355   5                       }while(raddr != 0);
 356   4                   }
 357   3      FAIL:
 358   3                 if((i == pages) && (raddr == 0))               //成功
 359   3                   {
 360   4                     SendPackageToCom(ProSuc,22);               
 361   4                     ledon = 0;                                  //关闭LED
C51 COMPILER V7.50   COPYER                                                                10/21/2008 00:32:54 PAGE 7   

 362   4                   }
 363   3                   else
 364   3                     {
 365   4                       SendPackageToCom(ProFail,16);
 366   4                       ledfls = 10;                              //出错,LED闪烁速度加快
 367   4                     }
 368   3               }
 369   2           }
 370   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    830    ----
   CONSTANT SIZE    =     97    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3      20
   IDATA SIZE       =   ----     128
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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