ZDBMS/output/McuFlash.lst

408 lines
19 KiB
Plaintext
Raw Normal View History

2025-02-19 06:13:28 +00:00
C51 COMPILER V9.01 MCUFLASH 02/19/2025 10:42:27 PAGE 1
2025-02-06 07:35:32 +00:00
C51 COMPILER V9.01, COMPILATION OF MODULE MCUFLASH
OBJECT MODULE PLACED IN .\output\McuFlash.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\McuFlash.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Lo
-ad.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\c
-ode_classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\McuFlash.lst) OBJECT(.\output\M
-cuFlash.obj)
line level source
1 /********************************************************************************
2 Copyright (C), Sinowealth Electronic. Ltd.
3 Author: Sino
4 Version: V0.0
5 Date: 2020/04/26
6 History:
7 V2.0 2020/04/26 Preliminary
8 ********************************************************************************/
9 #include "Main.h"
10
11
12 BOOL bMcuFlashWrWaitFlg;
13 BOOL bMcuFlashWrFlg;
14 BOOL bMcuFlashErr;
15 U8 xdata ucMcuFlashWrValid;
16 U8 xdata bMcuFlashWrWaitCnt;
17
18 /*************************************************************************************************
19 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrOneByte
20 * <20><> <20><>: McuFlashAddr<64><72><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7>WrData<74><61>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
21 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
22 * <20><> <20><>: д1<D0B4><31><EFBFBD>ֽ<EFBFBD>
23 *************************************************************************************************/
24 void McuFlashWrOneByte(U16 McuFlashAddr, U8 WrData)
25 {
26 1 IrqDis();
27 1 McuFlashEn();
28 1
29 1 XPAGE = McuFlashAddr>>8;
30 1 IB_OFFSET = McuFlashAddr % 256;
31 1 IB_DATA = WrData;
32 1
33 1 IB_CON1 = 0x6E;
34 1 IB_CON2 = 0x05;
35 1 IB_CON3 = 0x0A;
36 1 IB_CON4 = 0x09;
37 1 if(XPAGE == (McuFlashAddr>>8))
38 1 {
39 2 IB_CON5 = 0x06;
40 2 _nop_();
41 2 _nop_();
42 2 _nop_();
43 2 _nop_();
44 2 _nop_();
45 2 }
46 1
47 1 McuFlashDis();
48 1 IrqEn();
49 1 }
50
51
52 /*************************************************************************************************
2025-02-19 06:13:28 +00:00
C51 COMPILER V9.01 MCUFLASH 02/19/2025 10:42:27 PAGE 2
2025-02-06 07:35:32 +00:00
53 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashBlankCheck
54 * <20><> <20><>: McuFlashAddr<64><72><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
55 * <20><><EFBFBD><EFBFBD>ֵ: 0<><30><EFBFBD><EFBFBD>ȫ0<C8AB><30>Eraseʧ<65>ܣ<EFBFBD>1<EFBFBD><31>ȫ0<C8AB><30>Erase<73>ɹ<EFBFBD>
56 * <20><> <20><>: <20><>Erase<73><65>1<EFBFBD><31>Sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȫΪ0
57 *************************************************************************************************/
58 BOOL McuFlashBlankCheck(U16 McuFlashAddr)
59 {
60 1 BOOL Result = 1;
61 1 U16 i;
62 1
63 1 for(i=0; i<MCUFLASH_SECTOR_SIZE; i++)
64 1 {
65 2 if(CBYTE[McuFlashAddr+i] != 0x00)
66 2 {
67 3 Result = 0;
68 3 break;
69 3 }
70 2 }
71 1
72 1 return Result;
73 1 }
74
75
76 /*************************************************************************************************
77 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashDataCheck
78 * <20><> <20><>: McuFlashAddr<64><72><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
79 * <20><><EFBFBD><EFBFBD>ֵ: 0<><30>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ȷ
80 * <20><> <20><>: У<>鱻д<E9B1BB><D0B4>Sector<6F><72><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>XRAM<41><4D>һ<EFBFBD><D2BB>
81 *************************************************************************************************/
82 BOOL McuFlashDataCheck(U16 McuFlashAddr, U16 XramAddr)
83 {
84 1 BOOL Result = 1;
85 1 U8 xdata *ptr = (U8 xdata *)XramAddr; //ǿ<>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>ֵ<EFBFBD><D6B5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
86 1 U16 i;
87 1
88 1 for(i=0; i<MCUFLASH_SECTOR_SIZE; i++)
89 1 {
90 2 if(CBYTE[McuFlashAddr+i] != *(ptr+i))
91 2 {
92 3 Result = 0;
93 3 break;
94 3 }
95 2 }
96 1
97 1 return Result;
98 1 }
99
100
101 /*************************************************************************************************
102 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrSector
103 * <20><> <20><>: <20><>
104 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
105 * <20><> <20><>: д1<D0B4><31>Sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
106 *************************************************************************************************/
107 BOOL McuFlashWrSector(U16 McuFlashAddr, U16 XramAddr)
108 {
109 1 BOOL Result = 0;
110 1 U16 i;
111 1 U8 xdata *ptr = (U8 xdata *)XramAddr; //ǿ<>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>ֵ<EFBFBD><D6B5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
112 1
113 1 for(i=0; i<MCUFLASH_SECTOR_SIZE; i++)
114 1 {
2025-02-19 06:13:28 +00:00
C51 COMPILER V9.01 MCUFLASH 02/19/2025 10:42:27 PAGE 3
2025-02-06 07:35:32 +00:00
115 2 IB_OFFSET = McuFlashAddr+i;
116 2 XPAGE = (McuFlashAddr+i)>>8;
117 2 IB_DATA = *(ptr+i);
118 2 IB_CON1 = 0x6E;
119 2 if(!EA)
120 2 {
121 3 IB_CON2 = 0x05;
122 3 if(FLASHCON)
123 3 {
124 4 IB_CON3 = 0x0A;
125 4 if(ucMcuFlashWrValid == 0x55)
126 4 {
127 5 IB_CON4 = 0x09;
128 5 if(XPAGE == ((McuFlashAddr+i)>>8))
129 5 {
130 6 IB_CON5 = 0x06;
131 6 _nop_();
132 6 _nop_();
133 6 _nop_();
134 6 _nop_();
135 6 _nop_();
136 6 Result = 1;
137 6 }
138 5 else
139 5 {
140 6 Result = 0;
141 6 break;
142 6 }
143 5 }
144 4 else
145 4 {
146 5 Result = 0;
147 5 break;
148 5 }
149 4 }
150 3 else
151 3 {
152 4 Result = 0;
153 4 break;
154 4 }
155 3 }
156 2 else
157 2 {
158 3 Result = 0;
159 3 break;
160 3 }
161 2 }
162 1
163 1 return Result;
164 1 }
165
166
167 /*************************************************************************************************
168 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrite
169 * <20><> <20><>: McuFlashAddr<64><72>д<EFBFBD><D0B4><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȹ̶<C8B9>Ϊ1<CEAA><31>Sector
170 * <20><><EFBFBD><EFBFBD>ֵ: 0<><30>д<EFBFBD><D0B4>ʧ<EFBFBD>ܣ<EFBFBD>1<EFBFBD><31>д<EFBFBD><D0B4><EFBFBD>ɹ<EFBFBD>
171 * <20><> <20><>: дMCU Flash<73><68>1<EFBFBD><31>Sector:
172 1.Erase Sector
173 2.<2E><><EFBFBD>鵱ǰSector<6F>Ƿ<EFBFBD>ȫΪ0
174 3.<2E><>XRAM<41><4D><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
175 4.У<><D0A3>XRAM<41><4D>MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>
176 *************************************************************************************************/
2025-02-19 06:13:28 +00:00
C51 COMPILER V9.01 MCUFLASH 02/19/2025 10:42:27 PAGE 4
2025-02-06 07:35:32 +00:00
177 BOOL McuFlashWrite(U16 McuFlashAddr, U16 XramAddr)
178 {
179 1 BOOL Result = 0;
180 1
181 1 McuWDTClear(); //<2F><EFBFBD>Ź<EFBFBD>
182 1 IrqDis(); //<2F>ر<EFBFBD><D8B1>ж<EFBFBD>Դ
183 1 McuFlashEn();
184 1
185 1 XPAGE = McuFlashAddr >> 8;
186 1 IB_CON1 = 0xE6;
187 1 if(!EA)
188 1 {
189 2 IB_CON2 = 0x05;
190 2 if(FLASHCON)
191 2 {
192 3 IB_CON3 = 0x0A;
193 3 if(ucMcuFlashWrValid == 0x55)
194 3 {
195 4 IB_CON4 = 0x09;
196 4 if(XPAGE == (McuFlashAddr >> 8))
197 4 {
198 5 IB_CON5 = 0x06;
199 5 _nop_();
200 5 _nop_();
201 5 _nop_();
202 5 _nop_();
203 5 _nop_();
204 5
205 5 if(McuFlashBlankCheck(McuFlashAddr)) //<2F><><EFBFBD><EFBFBD>
206 5 {
207 6 if(McuFlashWrSector(McuFlashAddr, XramAddr)) //д<><D0B4>
208 6 {
209 7 if(McuFlashDataCheck(McuFlashAddr, XramAddr)) //У<><D0A3>
210 7 {
211 8 Result = 1;
212 8 }
213 7 }
214 6 }
215 5 }
216 4 }
217 3 }
218 2 }
219 1
220 1 IB_CON1 = 0;
221 1 IB_CON2 = 0;
222 1 IB_CON3 = 0;
223 1 IB_CON4 = 0;
224 1 IB_CON5 = 0;
225 1
226 1 McuFlashDis();
227 1 XPAGE = 0x00;
228 1 IrqEn();
229 1
230 1 return Result;
231 1 }
232
233
234
235
236
237
238 /*************************************************************************************************
2025-02-19 06:13:28 +00:00
C51 COMPILER V9.01 MCUFLASH 02/19/2025 10:42:27 PAGE 5
2025-02-06 07:35:32 +00:00
239 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashProcess
240 * <20><> <20><>: <20><>
241 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
242 * <20><> <20><>: дMCU Flash<73><68>ͬʱ<CDAC><CAB1><EFBFBD>±<EFBFBD><C2B1><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>2<EFBFBD><32>
243 *************************************************************************************************/
244 void McuFlashProcess(void)
245 {
246 1 BOOL McuFlashBk1WrFailFlg = 0, McuFlashBk2WrFailFlg = 0;
247 1 U16 VoltageMin;
248 1
249 1 if(bMcuFlashWrFlg)
250 1 {
251 2 bMcuFlashWrFlg = 0;
252 2
253 2 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
254 2 if(ucCellNum > 5) //6~10<31><30>Ӧ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ҫ<EFBFBD>ܵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>10V
255 2 {
256 3 VoltageMin = 10000;
257 3 }
258 2 else //3~5<><35>Ӧ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ҫ<EFBFBD>ܵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>5V
259 2 {
260 3 VoltageMin = 5000;
261 3 }
262 2
263 2 if((Info.ulVoltage>=VoltageMin) && (E2uiCheckFlag==0x5AA5))
264 2 {
265 3 if(!McuFlashWrite(MCUFLASH_BK1_ADDR, XRAM_MAP_ADDR)) //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
266 3 {
267 4 if(!McuFlashWrite(MCUFLASH_BK1_ADDR, XRAM_MAP_ADDR))
268 4 {
269 5 McuFlashBk1WrFailFlg = 1;
270 5 E2uiCheckFlag = 0xFFFF;
271 5 McuFlashWrOneByte(MCUFLASH_BK1_ADDR+510,0xFF);
272 5 McuFlashWrOneByte(MCUFLASH_BK1_ADDR+511,0xFF);
273 5 }
274 4 }
275 3
276 3 if(!McuFlashWrite(MCUFLASH_BK2_ADDR, XRAM_MAP_ADDR))
277 3 {
278 4 if(!McuFlashWrite(MCUFLASH_BK2_ADDR, XRAM_MAP_ADDR))
279 4 {
280 5 McuFlashBk2WrFailFlg = 1;
281 5 E2uiCheckFlag = 0xFFFF;
282 5 McuFlashWrOneByte(MCUFLASH_BK2_ADDR+510,0xFF);
283 5 McuFlashWrOneByte(MCUFLASH_BK2_ADDR+511,0xFF);
284 5 }
285 4 }
286 3 }
287 2 else
288 2 {
289 3 McuFlashBk1WrFailFlg = 1;
290 3 McuFlashBk2WrFailFlg = 1;
291 3 }
292 2 ucMcuFlashWrValid = 0x00;
293 2
294 2 if(McuFlashBk1WrFailFlg && McuFlashBk2WrFailFlg) //<2F><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λFlash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
295 2 {
296 3 bMcuFlashErr = 1;
297 3 }
298 2 }
299 1 }
300
2025-02-19 06:13:28 +00:00
C51 COMPILER V9.01 MCUFLASH 02/19/2025 10:42:27 PAGE 6
2025-02-06 07:35:32 +00:00
301
302 /*************************************************************************************************
303 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashRead
304 * <20><> <20><>: SourceAddr<64><72>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7>TargetAddr<64><72>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Length<74><68><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
305 * <20><><EFBFBD><EFBFBD>ֵ: 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
306 * <20><> <20><>: <20>ж<EFBFBD>MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD>Ƿ<EFBFBD>Ϊ0x5AA5<41><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ƻ<EFBFBD>
307 *************************************************************************************************/
308 BOOL McuFlashRead(U16 SourceAddr, U8 xdata *TargetAddr, U16 Length)
309 {
310 1 U16 i;
311 1 BOOL Result = 1;
312 1 U8 xdata *data TargetAddr1 = TargetAddr; //*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<74>ؼ<EFBFBD><D8BC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ǰ<EFBFBD>ָ<EFBFBD><D6B8>TargetAddr1
-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<74><61><EFBFBD><EFBFBD>
313 1
314 1 IrqDis();
315 1 McuFlashEn();
316 1 McuWDTClear();
317 1 for(i=0; i<Length; i++)
318 1 {
319 2 *TargetAddr1 = CBYTE[SourceAddr+i];
320 2 TargetAddr1++;
321 2 }
322 1 McuFlashDis();
323 1 IrqEn();
324 1
325 1 return Result;
326 1 }
327
328
329 /*************************************************************************************************
330 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrWaitCheck
331 * <20><> <20><>: <20><>
332 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
333 * <20><> <20><>: <20><><EFBFBD><EFBFBD>ҪдMCU Flash<73><68><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ2Sִ<53><D6B4>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д
334 *************************************************************************************************/
335 void McuFlashWrWaitCheck(void)
336 {
337 1 if(bMcuFlashWrWaitFlg)
338 1 {
339 2 if(++bMcuFlashWrWaitCnt >= MCU_FLASH_WATI_DELAY)
340 2 {
341 3 bMcuFlashWrWaitFlg = 0;
342 3 bMcuFlashWrWaitCnt = 0;
343 3 bMcuFlashWrFlg = 1;
344 3 }
345 2 }
346 1 }
347
348
349 /*************************************************************************************************
350 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashCheckFlg
351 * <20><> <20><>: McuFlashAddr<64><72>MCU Flash<73><68><EFBFBD>ĵ<EFBFBD>ַ
352 * <20><><EFBFBD><EFBFBD>ֵ: 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
353 * <20><> <20><>: <20>ж<EFBFBD>MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD>Ƿ<EFBFBD>Ϊ0x5AA5<41><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ƻ<EFBFBD>
354 *************************************************************************************************/
355 BOOL McuFlashCheckFlg(U16 McuFlashAddr)
356 {
357 1 BOOL Result = 0;
358 1
359 1 McuFlashEn();
360 1 if(CWORD[McuFlashAddr/2] == 0x5AA5)
361 1 {
2025-02-19 06:13:28 +00:00
C51 COMPILER V9.01 MCUFLASH 02/19/2025 10:42:27 PAGE 7
2025-02-06 07:35:32 +00:00
362 2 Result = 1;
363 2 }
364 1 McuFlashDis();
365 1
366 1 return Result;
367 1 }
368
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 820 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 18
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
BIT SIZE = 3 8
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)