📄 flash.lst
字号:
*** ERROR C231 IN LINE 294 OF REGSND1.H: 'EP0INT': redefinition
*** ERROR C231 IN LINE 299 OF REGSND1.H: 'MMDAT': redefinition
*** ERROR C231 IN LINE 300 OF REGSND1.H: 'MMCMD': redefinition
*** ERROR C231 IN LINE 301 OF REGSND1.H: 'MMSTA': redefinition
*** ERROR C231 IN LINE 302 OF REGSND1.H: 'MMMSK': redefinition
*** ERROR C231 IN LINE 303 OF REGSND1.H: 'MMCON0': redefinition
*** ERROR C231 IN LINE 304 OF REGSND1.H: 'MMCON1': redefinition
*** ERROR C231 IN LINE 305 OF REGSND1.H: 'MMCON2': redefinition
*** ERROR C231 IN LINE 306 OF REGSND1.H: 'MMINT': redefinition
*** ERROR C231 IN LINE 307 OF REGSND1.H: 'MMCLK': redefinition
*** ERROR C231 IN LINE 312 OF REGSND1.H: 'DAT16H': redefinition
*** ERROR C231 IN LINE 317 OF REGSND1.H: 'SCON': redefinition
*** ERROR C231 IN LINE 318 OF REGSND1.H: 'SBUF': redefinition
*** ERROR C231 IN LINE 319 OF REGSND1.H: 'SADDR': redefinition
*** ERROR C231 IN LINE 320 OF REGSND1.H: 'SADEN': redefinition
*** ERROR C231 IN LINE 322 OF REGSND1.H: 'SM0': redefinition
*** ERROR C231 IN LINE 323 OF REGSND1.H: 'FE': redefinition
*** ERROR C231 IN LINE 324 OF REGSND1.H: 'SM1': redefinition
*** ERROR C231 IN LINE 325 OF REGSND1.H: 'SM2': redefinition
*** ERROR C231 IN LINE 326 OF REGSND1.H: 'REN': redefinition
*** ERROR C231 IN LINE 327 OF REGSND1.H: 'TB8': redefinition
*** ERROR C231 IN LINE 328 OF REGSND1.H: 'RB8': redefinition
*** ERROR C231 IN LINE 329 OF REGSND1.H: 'TI': redefinition
*** ERROR C231 IN LINE 330 OF REGSND1.H: 'RI': redefinition
*** ERROR C231 IN LINE 335 OF REGSND1.H: 'SPCON': redefinition
*** ERROR C231 IN LINE 336 OF REGSND1.H: 'SPSTA': redefinition
*** ERROR C231 IN LINE 337 OF REGSND1.H: 'SPDAT': redefinition
*** ERROR C231 IN LINE 342 OF REGSND1.H: 'SSCON': redefinition
*** ERROR C231 IN LINE 343 OF REGSND1.H: 'SSSTA': redefinition
*** ERROR C231 IN LINE 344 OF REGSND1.H: 'SSDAT': redefinition
*** ERROR C231 IN LINE 345 OF REGSND1.H: 'SSADR': redefinition
*** ERROR C231 IN LINE 350 OF REGSND1.H: 'KBCON': redefinition
*** ERROR C231 IN LINE 351 OF REGSND1.H: 'KBSTA': redefinition
*** ERROR C231 IN LINE 356 OF REGSND1.H: 'ADCON': redefinition
*** ERROR C231 IN LINE 357 OF REGSND1.H: 'ADDL': redefinition
*** ERROR C231 IN LINE 358 OF REGSND1.H: 'ADDH': redefinition
*** ERROR C231 IN LINE 359 OF REGSND1.H: 'ADCLK': redefinition
25
26 xdata BYTE rKM29UXDATA _at_ 0x3FFF;
27
28
29
30 /*unsigned int Check_Flash_Id(void)
31 {
C51 COMPILER V7.07 FLASH 11/26/2006 21:07:32 PAGE 5
32 int i;
33 unsigned int id;
34
35 FC_CMD;
36 rKM29UXDATA = 0x90;
37
38 FC_ADDR;
39 rKM29UXDATA = 0;
40 FC_DATA;
41
42 for(i=0;i<5;i++); //wait 100ns
43 id = rKM29UXDATA<<8;
44 for(i=0;i<5;i++); //wait 100ns
45 id += rKM29UXDATA;
46 FC_INACTIVE;
47 return id;
48 }*/
49 void Flash_Reset(void) //flash reset
50 {
51 1 int i;
52 1 // rPDATC = rPDATC | WP; //write unprotect
53 1 FC_CMD;
54 1 rKM29UXDATA = 0xff; //reset command
55 1 for (i=0;i<3000;i++); //delay
56 1 }
57 /********************************************************/
58 /*功能:擦除FLASH的1Block(对应文件系统为1Cluster) */
59 /* 每一个簇为16KB,因此KM29U128共有1024个簇 */
60 /*输入:unsigned int cluster/block(需要擦除的Block Number)*/
61 /*返回:OK或FAIL */
62 /********************************************************/
63
64 unsigned char Erase_Cluster(unsigned int cluster)
65 {
66 1 unsigned int blockPage = (cluster << 5);
67 1 int i;
68 1
69 1 FC_CMD;
70 1 rKM29UXDATA = 0x60;
71 1
72 1 FC_ADDR;
73 1 rKM29UXDATA = blockPage & 0xff;
74 1 rKM29UXDATA = (blockPage >> 8) & 0xff;
75 1
76 1 for (i=0; i<2; i++); //tWC 50ns
77 1
78 1 FC_CMD;
79 1 rKM29UXDATA = 0xd0;
80 1
81 1 for (i=0; i<3; i++);
82 1
83 1 FC_DATA;
84 1 WAITRB; //wait max 3ms
85 1
86 1 FC_CMD;
87 1 rKM29UXDATA = 0x70;
88 1 FC_DATA;
89 1 if (rKM29UXDATA & 0x1) //erase error
90 1 {
91 2 FC_INACTIVE;
92 2 return FALSE;
93 2 }
C51 COMPILER V7.07 FLASH 11/26/2006 21:07:32 PAGE 6
94 1 else
95 1 {
96 2 FC_INACTIVE;
97 2 return TRUE;
98 2 }
99 1 }
100
101 /********************************************************/
102 /*
103 int VerifyPage(unsigned int block,unsigned int page,unsigned char *buffer)
104 {
105 ReadPage(block,page,databuff);
106 if(strncmp((char *)databuff,(char *)buffer,528)==0)
107 return 1;
108 else
109 return 0;
110 }
111 */
112 /*****************************************************************/
113 /*功能:读取FLASH的某个Block中的1page数据 */
114 /* 在文件系统中,有如下对应关系:Block=Cluster */
115 /* Page =Sector */
116 /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
117 /*****************************************************************/
118
119 void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)
120 {
121 1 int i;
122 1 unsigned int blockPage = (block << 5) + page;
123 1
124 1 FC_CMD;
125 1 rKM29UXDATA = 0x00;
126 1 FC_ADDR;
127 1 rKM29UXDATA = 0;
128 1 rKM29UXDATA = blockPage & 0xff;
129 1 rKM29UXDATA = (blockPage >> 8) & 0xff;
130 1 //f for(i=0;i<3;i++);
131 1 FC_DATA;
132 1 WAITRB; //random access ,wait max. 10us
133 1
134 1 for (i=0; i<SectorLength; i++)
135 1 {
136 2 *pPage++ = rKM29UXDATA;
137 2 }
138 1 FC_INACTIVE;
139 1 }
140
141 /*****************************************************************/
142 /*功能:向FLASH的某个Block中的1page写入数据 */
143 /* 在文件系统中,有如下对应关系:Block=Cluster */
144 /* Page =Sector */
145 /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
146 /*输出:0:Fail;1:OK */
147 /*****************************************************************/
148
149 int WritePage(unsigned int block, unsigned int page, unsigned char *pPage)
150 {
151 1 unsigned int blockPage = (block << 5) + page;
152 1 int i;
153 1 unsigned char *Source; //the begin addr of data to write
154 1 Source = pPage;
155 1 FC_CMD;
C51 COMPILER V7.07 FLASH 11/26/2006 21:07:32 PAGE 7
156 1 rKM29UXDATA = 0x80;
157 1 FC_ADDR;
158 1 rKM29UXDATA = 0;
159 1 rKM29UXDATA = blockPage & 0xff;
160 1 rKM29UXDATA = (blockPage >> 8) & 0xff;
161 1 FC_DATA;
162 1 //for(i=0;i<64;i++)rKM29UXDATA=*pPage++;//Bulk_Out_Buf---->pPage
163 1
164 1 for (i=0; i<528; i++)
165 1 {
166 2 rKM29UXDATA = *pPage++;
167 2 } //data input->as the same as _WrPage528()
168 1
169 1 FC_CMD;
170 1 rKM29UXDATA = 0x10;
171 1 //f for(i=0;i<10;i++); //twb=100ns. why is it 10? spec is false?
172 1 //No. It's because of LED of PE1.
173 1 WAITRB; //wait max 500us;
174 1 rKM29UXDATA = 0x70;
175 1 FC_DATA;
176 1 //f for(i=0;i<3;i++); //twhr=60ns
177 1 if ((rKM29UXDATA & 0x1)) //
178 1 {
179 2 FC_INACTIVE;
180 2 return 0;
181 2 }
182 1 else
183 1 {
184 2 FC_INACTIVE;
185 2
186 2 }
187 1 }
188
189
190
C51 COMPILATION COMPLETE. 0 WARNING(S), 210 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -