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

📄 amdflash.lst

📁 DownLoad_sst39sf010.zip--嵌入式系统中关于SST39SF010的FLASH的BOOTLOADER源程序(KC51)
💻 LST
字号:
C51 COMPILER V6.14  AMDFLASH                                                               01/11/2002 10:39:11 PAGE 1   


C51 COMPILER V6.14, COMPILATION OF MODULE AMDFLASH
OBJECT MODULE PLACED IN .\AMDflash.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\AMDflash.c LARGE OPTIMIZE(4,SPEED) DEBUG OBJECTEXTEND

stmt level    source

   1          #include "extell.h"
   2          #include "extell51.h"
   3          
   4          
   5          #define	UNLOCK1_OFFSET	0x0555
   6          #define	UNLOCK2_OFFSET	0x02aa
   7          #define	COMMAND_OFFSET	0x0555
   8          
   9          #define FLASH_CMD_UNLOCK1		0xAA
  10          #define FLASH_CMD_UNLOCK2		0x55
  11          #define FLASH_CMD_READ_RESET	0xF0
  12          #define FLASH_CMD_AUTOSELECT	0x90
  13          #define FLASH_CMD_BYTE_PROGRAM	0xA0
  14          #define FLASH_CMD_ERASE_SETUP	0x80
  15          #define FLASH_CMD_CHIP_ERASE	0x10
  16          #define FLASH_CMD_SECTOR_ERASE	0x30
  17          #define FLASH_CMD_ERASE_SUSPEND	0xB0
  18          #define FLASH_CMD_ERASE_RESUME	0x30
  19          
  20          #define DQ7						0x80
  21          #define DQ6						0x40
  22          #define DQ5						0x20
  23          
  24          void ManuIdSelect(void);
  25          void DeviceIdSelect(void);
  26          void SectorProtectIdSelect(unsigned int SectorAddr);
  27          void FlashWrite(unsigned int addr, unsigned char fdata);
  28          unsigned char FlashWriteConfirm(unsigned int addr, unsigned char fdata);
  29          void UnlockBypass(void);
  30          void UnlockBypassProg(unsigned int addr, unsigned char fdata);
  31          void UnlockBypassReset(void);
  32          unsigned char ChipErase(void);
  33          unsigned char SectorErase(unsigned int SectorAddr);
  34          void EraseSuspend(void);
  35          void EraseResume(void);
  36          
  37          
  38          void ManuIdSelect(void)
  39          {
  40   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
  41   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
  42   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_AUTOSELECT);
  43   1      	write_XDATA(0x0000,0x01);
  44   1      }
  45          void DeviceIdSelect(void)
  46          {
  47   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
  48   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
  49   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_AUTOSELECT);
  50   1      	write_XDATA(0x0001,0x4f);
  51   1      }
  52          void SectorProtectIdSelect(unsigned int SectorAddr)
  53          {
  54   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
  55   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
C51 COMPILER V6.14  AMDFLASH                                                               01/11/2002 10:39:11 PAGE 2   

  56   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_AUTOSELECT);
  57   1      	if(SectorAddr)
  58   1      		write_XDATA(SectorAddr,0x01);
  59   1      	else write_XDATA(0x0002,0x01);
  60   1      }
  61          void FlashWrite(unsigned int addr, unsigned char fdata)
  62          {
  63   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
  64   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
  65   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_BYTE_PROGRAM);
  66   1      	write_XDATA(addr,fdata);
  67   1      }
  68          
  69          unsigned char FlashWriteConfirm(unsigned int addr, unsigned char fdata)
  70          {
  71   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
  72   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
  73   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_BYTE_PROGRAM);
  74   1      	write_XDATA(addr,fdata);
  75   1      	while(((read_XDATA(addr)&DQ7) != (fdata&DQ7)) && !(read_XDATA(addr)&DQ5));
  76   1      	if((read_XDATA(addr)&DQ7) == (fdata&DQ7)) return(OK);
  77   1      	else return(ERROR);
  78   1      }
  79          
  80          void UnlockBypass(void)
  81          {
  82   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
  83   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
  84   1      	write_XDATA(COMMAND_OFFSET,0x20);
  85   1      }
  86          
  87          void UnlockBypassProg(unsigned int addr, unsigned char fdata)
  88          {
  89   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
  90   1      	write_XDATA(addr,fdata);
  91   1      }
  92          
  93          
  94          void UnlockBypassReset(void)
  95          {
  96   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_AUTOSELECT);
  97   1      	write_XDATA(UNLOCK2_OFFSET,0x00);
  98   1      }
  99          
 100          unsigned char ChipErase(void)
 101          {
 102   1      	unsigned char data prev,next;
 103   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
 104   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
 105   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_ERASE_SETUP);
 106   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
 107   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
 108   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_CHIP_ERASE);
 109   1      	prev = read_XDATA(0);
 110   1      	next= read_XDATA(0);
 111   1      	while((!(next&DQ7) || !(next&DQ5)) || ((prev&DQ5)!= (next&DQ5)))
 112   1      	{
 113   2      		prev = read_XDATA(0);
 114   2      		next= read_XDATA(0);
 115   2      	}
 116   1      	next= read_XDATA(0);
 117   1      	if(next&DQ7) return(OK);
C51 COMPILER V6.14  AMDFLASH                                                               01/11/2002 10:39:11 PAGE 3   

 118   1      	else return(ERROR);
 119   1      }
 120          
 121          unsigned char SectorErase(unsigned int SectorAddr)
 122          {
 123   1      	unsigned char data prev,next;
 124   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
 125   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
 126   1      	write_XDATA(COMMAND_OFFSET,FLASH_CMD_ERASE_SETUP);
 127   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_UNLOCK1);
 128   1      	write_XDATA(UNLOCK2_OFFSET,FLASH_CMD_UNLOCK2);
 129   1      	write_XDATA(SectorAddr,FLASH_CMD_SECTOR_ERASE);
 130   1      	prev = read_XDATA(0);
 131   1      	next= read_XDATA(0);
 132   1      	while((!(next&DQ7) || !(next&DQ5)) || ((prev&DQ5)!= (next&DQ5)))
 133   1      	{
 134   2      		prev = read_XDATA(0);
 135   2      		next= read_XDATA(0);
 136   2      	}
 137   1      	next= read_XDATA(0);
 138   1      	if(next&DQ7) return(OK);
 139   1      	else return(ERROR);
 140   1      }
 141          
 142          void EraseSuspend(void)
 143          {
 144   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_ERASE_SUSPEND);
 145   1      }
 146          
 147          void EraseResume(void)
 148          {
 149   1      	write_XDATA(UNLOCK1_OFFSET,FLASH_CMD_ERASE_RESUME);
 150   1      }
 151          


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