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

📄 flash.lst

📁 这个是一个完整的MP3项目
💻 LST
字号:
C51 COMPILER V7.50   FLASH                                                                 03/16/2006 09:11:13 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FLASH
OBJECT MODULE PLACED IN FLASH.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE FLASH.C LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          * Copyright (c) 2004,北京博创兴业科技有限公司
   3          * All rights reserved.
   4          * 
   5          * 文件名称:flash.c
   6          * 文件标识:flash
   7          * 摘    要:flash读写函数的实现
   8          * 
   9          * 当前版本:2.0
  10          * 作    者:Kent
  11          * 完成日期:2004年5月20日
  12          *
  13          * 取代版本:1.1 
  14          * 原作者  :Frank
  15          * 完成日期:2003年8月10日
  16          */
  17          
  18          #include <stdio.h>
  19          #include <stdlib.h>
  20          #include <string.h>
  21          
  22          
  23          #include <REGSND1.H>
  24          #include <string.h>
  25          #include "flash.h"
  26          #include "uart.h"
  27          
  28          xdata BYTE rKM29UXDATA          _at_    0x4000;
  29          
  30          
  31          
  32          unsigned int Check_Flash_Id(void)
  33          {
  34   1              int i;
  35   1              unsigned int id;
  36   1      
  37   1              FC_CMD;
  38   1              rKM29UXDATA = 0x90;
  39   1      
  40   1              FC_ADDR;
  41   1              rKM29UXDATA = 0;
  42   1              FC_DATA;
  43   1      
  44   1              for (i=0; i<5; i++);    //wait 100ns
  45   1              id = rKM29UXDATA << 8;
  46   1      
  47   1              for (i=0; i<5; i++);    //wait 100ns
  48   1              id += rKM29UXDATA;
  49   1              FC_INACTIVE;
  50   1              return id;
  51   1      }
  52          
  53          void Flash_Reset()              //flash reset
  54          { 
  55   1              int i;
C51 COMPILER V7.50   FLASH                                                                 03/16/2006 09:11:13 PAGE 2   

  56   1              //  rPDATC = rPDATC | WP;       //write unprotect
  57   1              FC_CMD;
  58   1              rKM29UXDATA = 0xff;     //reset command
  59   1              for (i=0; i<3000; i++); //delay         
  60   1      }
  61          /********************************************************/
  62          /*功能:擦除FLASH的1Block(对应文件系统为1Cluster)          */
  63          /*     每一个簇为16KB,因此KM29U128共有1024个簇            */
  64          /*输入:unsigned int cluster/block(需要擦除的Block Number)*/
  65          /*返回:OK或FAIL                                         */
  66          /********************************************************/
  67          
  68          unsigned char Erase_Cluster(unsigned int cluster) 
  69          {
  70   1              unsigned int blockPage = (cluster << 5);
  71   1              int i;
  72   1      
  73   1              FC_CMD;
  74   1              rKM29UXDATA = 0x60;
  75   1      
  76   1              FC_ADDR;             
  77   1              rKM29UXDATA = blockPage & 0xff;  
  78   1              rKM29UXDATA = (blockPage >> 8) & 0xff;
  79   1      
  80   1              for (i=0; i<2; i++);            //tWC  50ns
  81   1          
  82   1              FC_CMD;
  83   1              rKM29UXDATA = 0xd0;
  84   1          
  85   1              for (i=0; i<3; i++);
  86   1          
  87   1              FC_DATA;
  88   1              WAITRB;                                 //wait max 3ms
  89   1      
  90   1              FC_CMD;
  91   1              rKM29UXDATA = 0x70;
  92   1              FC_DATA;
  93   1              if (rKM29UXDATA & 0x1) //erase error
  94   1              {
  95   2                      FC_INACTIVE;
  96   2                      return FALSE;
  97   2              }
  98   1              else 
  99   1              {
 100   2                      FC_INACTIVE;   
 101   2                      return TRUE;
 102   2              }
 103   1      }
 104          
 105          /********************************************************/
 106          /*
 107          int VerifyPage(unsigned int block,unsigned int page,unsigned char *buffer)
 108          {
 109                  ReadPage(block,page,databuff);
 110                  if(strncmp((char *)databuff,(char *)buffer,528)==0)
 111                          return 1;
 112                  else
 113                          return 0;
 114          }
 115          */
 116          /*****************************************************************/
 117          /*功能:读取FLASH的某个Block中的1page数据                           */
C51 COMPILER V7.50   FLASH                                                                 03/16/2006 09:11:13 PAGE 3   

 118          /*     在文件系统中,有如下对应关系:Block=Cluster                   */
 119          /*                               Page =Sector                    */
 120          /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
 121          /*****************************************************************/
 122          
 123          void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)
 124          {
 125   1              int i;
 126   1              unsigned int blockPage = (block << 5) + page;
 127   1      
 128   1              FC_CMD;               
 129   1              rKM29UXDATA = 0x00;
 130   1              FC_ADDR;
 131   1              rKM29UXDATA = 0;
 132   1              rKM29UXDATA = blockPage & 0xff;
 133   1              rKM29UXDATA = (blockPage >> 8) & 0xff;
 134   1      
 135   1              for (i=0; i<3; i++);
 136   1              FC_DATA;
 137   1              WAITRB; //random access ,wait max. 10us 
 138   1      //      __RdPage528(pPage);             //which is written with assemble in flash.s
 139   1      
 140   1              for (i=0; i<SectorLength; i++) 
 141   1              {
 142   2                      *pPage++ = rKM29UXDATA;
 143   2              }
 144   1              FC_INACTIVE;
 145   1      }
 146          
 147          /*****************************************************************/
 148          /*功能:向FLASH的某个Block中的1page写入数据                         */
 149          /*     在文件系统中,有如下对应关系:Block=Cluster                   */
 150          /*                               Page =Sector                    */
 151          /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
 152          /*输出:0:Fail;1:OK                                               */
 153          /*****************************************************************/
 154          
 155          int WritePage(unsigned int block, unsigned int page, unsigned char *pPage)  
 156          {
 157   1              unsigned int blockPage = (block << 5) + page;
 158   1              int i;
 159   1              unsigned char *Source;                                      //the begin addr of data to write
 160   1              Source = pPage;
 161   1              FC_CMD;
 162   1              rKM29UXDATA = 0x80;
 163   1              FC_ADDR;
 164   1              rKM29UXDATA = 0;
 165   1              rKM29UXDATA = blockPage & 0xff;
 166   1              rKM29UXDATA = (blockPage >> 8) & 0xff;
 167   1              FC_DATA;
 168   1      
 169   1              for (i=0; i<528; i++)
 170   1              { 
 171   2                      rKM29UXDATA = *pPage++;
 172   2              }         //data input->as the same as _WrPage528()
 173   1      //      __WrPage528(pPage); //which is written with assemble in flash.s
 174   1      
 175   1              FC_CMD;
 176   1              rKM29UXDATA = 0x10;
 177   1              for (i=0; i<10; i++);  //twb=100ns. why is it 10? spec is false?  
 178   1                              //No. It's because of LED of PE1.
 179   1              WAITRB; //wait max 500us;
C51 COMPILER V7.50   FLASH                                                                 03/16/2006 09:11:13 PAGE 4   

 180   1              rKM29UXDATA = 0x70;
 181   1              FC_DATA;
 182   1              for (i=0; i<3; i++);  //twhr=60ns
 183   1              if ((rKM29UXDATA & 0x1))        //                      注销掉的程序行有问题,会导致堆栈出错!!!戎海峰
 184   1              {
 185   2                      FC_INACTIVE;    
 186   2                      return 0;
 187   2              }
 188   1              else
 189   1              {
 190   2                      FC_INACTIVE;        
 191   2      
 192   2              }
 193   1      }
 194          
 195          
 196          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    523    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       9
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   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 + -