📄 amdflash.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 + -