243 lines
11 KiB
Plaintext
243 lines
11 KiB
Plaintext
|
C51 COMPILER V9.01 FLASH 12/22/2023 12:15:06 PAGE 1
|
|||
|
|
|||
|
|
|||
|
C51 COMPILER V9.01, COMPILATION OF MODULE FLASH
|
|||
|
OBJECT MODULE PLACED IN .\output\Flash.obj
|
|||
|
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE code_bootloader\Flash.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\header_bootloa
|
|||
|
-der) DEBUG OBJECTEXTEND PRINT(.\output\Flash.lst) OBJECT(.\output\Flash.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 "MCURegister.h"
|
|||
|
10 #include "C51_TYPE.H"
|
|||
|
11 #include "Flash.h"
|
|||
|
12 #include <intrins.h>
|
|||
|
13 #include <ABSACC.H>
|
|||
|
14
|
|||
|
15 U8 ucMcuFlashWrValid;
|
|||
|
16
|
|||
|
17
|
|||
|
18 /*************************************************************************************************
|
|||
|
19 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashEraseSector
|
|||
|
20 * <20><> <20><>: McuFlashAddr<64><72><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7>McuType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CODE<44><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
|
|||
|
21 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|||
|
22 * <20><> <20><>: <20><><EFBFBD><EFBFBD>Sector
|
|||
|
23 *************************************************************************************************/
|
|||
|
24 void McuFlashEraseSector(U32 xdata McuFlashAddr, U8 xdata McuType)
|
|||
|
25 {
|
|||
|
26 1 FLASHCON = McuType;
|
|||
|
27 1 XPAGE = McuFlashAddr>>8;
|
|||
|
28 1
|
|||
|
29 1 IB_CON1 = 0xE6;
|
|||
|
30 1 if(!EA) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
31 1 {
|
|||
|
32 2 IB_CON2 = 0x05;
|
|||
|
33 2 if(FLASHCON == McuType) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
34 2 {
|
|||
|
35 3 IB_CON3 = 0x0A;
|
|||
|
36 3 if(ucMcuFlashWrValid == 0x55) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
37 3 {
|
|||
|
38 4 IB_CON4 = 0x09;
|
|||
|
39 4 if(XPAGE == (McuFlashAddr>>8)) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
40 4 {
|
|||
|
41 5 IB_CON5 = 0x06;
|
|||
|
42 5 _nop_();
|
|||
|
43 5 _nop_();
|
|||
|
44 5 _nop_();
|
|||
|
45 5 _nop_();
|
|||
|
46 5 }
|
|||
|
47 4 }
|
|||
|
48 3 }
|
|||
|
49 2 }
|
|||
|
50 1
|
|||
|
51 1 FLASHCON = MCU_TYPE_CODE;
|
|||
|
52 1 }
|
|||
|
53
|
|||
|
54
|
|||
|
C51 COMPILER V9.01 FLASH 12/22/2023 12:15:06 PAGE 2
|
|||
|
|
|||
|
55 /*************************************************************************************************
|
|||
|
56 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashBlankCheck
|
|||
|
57 * <20><> <20><>: McuFlashAddr<64><72><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
|||
|
58 * <20><><EFBFBD><EFBFBD>ֵ: 0<><30><EFBFBD><EFBFBD>ȫ0<C8AB><30>Eraseʧ<65>ܣ<EFBFBD>1<EFBFBD><31>ȫ0<C8AB><30>Erase<73>ɹ<EFBFBD>
|
|||
|
59 * <20><> <20><>: <20><>Erase<73><65>1<EFBFBD><31>Sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȫΪ0
|
|||
|
60 *************************************************************************************************/
|
|||
|
61 BOOL McuFlashBlankCheck(U32 xdata McuFlashAddr, U8 xdata McuType)
|
|||
|
62 {
|
|||
|
63 1 BOOL Result = 1;
|
|||
|
64 1 U16 i;
|
|||
|
65 1
|
|||
|
66 1 FLASHCON = McuType;
|
|||
|
67 1 for(i=0; i<MCU_CODE_SECTOR_SIZE; i++)
|
|||
|
68 1 {
|
|||
|
69 2 if(CBYTE[McuFlashAddr+i] != 0x00)
|
|||
|
70 2 {
|
|||
|
71 3 Result = 0;
|
|||
|
72 3 break;
|
|||
|
73 3 }
|
|||
|
74 2 }
|
|||
|
75 1 FLASHCON = MCU_TYPE_CODE;
|
|||
|
76 1
|
|||
|
77 1 return Result;
|
|||
|
78 1 }
|
|||
|
79
|
|||
|
80
|
|||
|
81 /*************************************************************************************************
|
|||
|
82 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashWrOneByte
|
|||
|
83 * <20><> <20><>: McuFlashAddr<64><72><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7>WrData<74><61>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
|
|||
|
84 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|||
|
85 * <20><> <20><>: д1<D0B4><31><EFBFBD>ֽ<EFBFBD>
|
|||
|
86 *************************************************************************************************/
|
|||
|
87 void McuFlashWrOneByte(U32 xdata McuFlashAddr, U8 xdata WrData, U8 xdata McuType)
|
|||
|
88 {
|
|||
|
89 1 FLASHCON = McuType;
|
|||
|
90 1 XPAGE = McuFlashAddr>>8;
|
|||
|
91 1 IB_OFFSET = McuFlashAddr % 256;
|
|||
|
92 1
|
|||
|
93 1 IB_DATA = WrData;
|
|||
|
94 1 IB_CON1 = 0x6E;
|
|||
|
95 1 if(!EA) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
96 1 {
|
|||
|
97 2 IB_CON2 = 0x05;
|
|||
|
98 2 if(FLASHCON == McuType) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
99 2 {
|
|||
|
100 3 IB_CON3 = 0x0A;
|
|||
|
101 3 if(ucMcuFlashWrValid == 0x55) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
102 3 {
|
|||
|
103 4 IB_CON4 = 0x09;
|
|||
|
104 4 if(XPAGE == (McuFlashAddr>>8)) //<2F><>ֹ<EFBFBD><D6B9>д
|
|||
|
105 4 {
|
|||
|
106 5 IB_CON5 = 0x06;
|
|||
|
107 5 _nop_();
|
|||
|
108 5 _nop_();
|
|||
|
109 5 _nop_();
|
|||
|
110 5 _nop_();
|
|||
|
111 5 _nop_();
|
|||
|
112 5 }
|
|||
|
113 4 }
|
|||
|
114 3 }
|
|||
|
115 2 }
|
|||
|
116 1
|
|||
|
C51 COMPILER V9.01 FLASH 12/22/2023 12:15:06 PAGE 3
|
|||
|
|
|||
|
117 1 FLASHCON = MCU_TYPE_CODE;
|
|||
|
118 1 }
|
|||
|
119
|
|||
|
120
|
|||
|
121 /*************************************************************************************************
|
|||
|
122 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: McuFlashRdOneByte
|
|||
|
123 * <20><> <20><>: McuFlashAddr<64><72><EFBFBD><EFBFBD>ȡCODE<44><45><EFBFBD>ĵ<EFBFBD>ַ
|
|||
|
124 * <20><><EFBFBD><EFBFBD>ֵ: <20><><EFBFBD>ص<EFBFBD>ǰCode<64>ֽ<EFBFBD>
|
|||
|
125 * <20><> <20><>: <20><>1<EFBFBD><31><EFBFBD>ֽ<EFBFBD>
|
|||
|
126 *************************************************************************************************/
|
|||
|
127 U8 McuFlashRdOneByte(U32 xdata McuFlashAddr, U8 xdata McuType)
|
|||
|
128 {
|
|||
|
129 1 U8 GetData = 0;
|
|||
|
130 1
|
|||
|
131 1 FLASHCON = McuType;
|
|||
|
132 1 GetData = CBYTE[McuFlashAddr];
|
|||
|
133 1 FLASHCON = MCU_TYPE_CODE;
|
|||
|
134 1 return GetData;
|
|||
|
135 1 }
|
|||
|
136
|
|||
|
137
|
|||
|
138 /*************************************************************************************************
|
|||
|
139 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: BootProgram
|
|||
|
140 * <20><> <20><>: <20><>
|
|||
|
141 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|||
|
142 * <20><> <20><>: Boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Erase->Program->Verify
|
|||
|
143 ÿ<><C3BF><EFBFBD><EFBFBD>1<EFBFBD><31>Sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
144 *************************************************************************************************/
|
|||
|
145 U8 BootProgram(void)
|
|||
|
146 {
|
|||
|
147 1 U8 i, McuCode, McuFlashType;
|
|||
|
148 1 U16 j;
|
|||
|
149 1 U32 McuFlashAddr;
|
|||
|
150 1
|
|||
|
151 1 for(i=0; i<IAP_BK_CODE_SIZE/MCU_CODE_SECTOR_SIZE; i++) //<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SectorΪ<72>
|
|||
|
-<2D>λ
|
|||
|
152 1 {
|
|||
|
153 2 BootMcuWdtClear();
|
|||
|
154 2 if(i < IAP_CODE_SIZE/MCU_CODE_SECTOR_SIZE) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>CODE<44><45>29K
|
|||
|
155 2 {
|
|||
|
156 3 McuFlashType = MCU_TYPE_CODE; //IAP<41><50><EFBFBD><EFBFBD>CODE<44><45>
|
|||
|
157 3 McuFlashAddr = IAP_CODE_START_ADDR + (U16)i*MCU_CODE_SECTOR_SIZE; //<2F>ӵ<EFBFBD>5K<35><4B>ʼ
|
|||
|
158 3 }
|
|||
|
159 2 else
|
|||
|
160 2 {
|
|||
|
161 3 McuFlashType = MCU_TYPE_E2P; //IAP<41><50><EFBFBD><EFBFBD>EEPROM<4F><4D>
|
|||
|
162 3 McuFlashAddr = (U16)i*MCU_CODE_SECTOR_SIZE - IAP_CODE_SIZE;
|
|||
|
163 3 }
|
|||
|
164 2 ucMcuFlashWrValid = 0x55;
|
|||
|
165 2 McuFlashEraseSector(McuFlashAddr, McuFlashType); //<2F><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
|
|||
|
166 2 if(McuFlashBlankCheck(McuFlashAddr, McuFlashType)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|||
|
167 2 {
|
|||
|
168 3 for(j=0; j<MCU_CODE_SECTOR_SIZE; j++) //<2F><><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>APP<50><50>Ӧ<EFBFBD><D3A6>ַ
|
|||
|
169 3 {
|
|||
|
170 4 McuCode = McuFlashRdOneByte(IAP_BK_CODE_START_ADDR+j+(U16)i*MCU_CODE_SECTOR_SIZE, MCU_TYPE_CODE); //ya
|
|||
|
-ngweilei <20>˴<EFBFBD><CBB4>̻<EFBFBD>Ϊ<EFBFBD><CEAA>flashȡ<68><C8A1><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡCODE(1<>ֽ<EFBFBD>)
|
|||
|
171 4 McuFlashWrOneByte(McuFlashAddr+j, McuCode, McuFlashType); //<2F><>CODEд<45><D0B4>APPִ<50><D6B4><EFBFBD><EFBFBD>
|
|||
|
172 4 if(McuCode != McuFlashRdOneByte(McuFlashAddr+j, McuFlashType)) //У<><D0A3>д<EFBFBD><D0B4><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
173 4 {
|
|||
|
174 5 return (BOOT_PGR_WR_ERR);
|
|||
|
175 5 }
|
|||
|
176 4 }
|
|||
|
C51 COMPILER V9.01 FLASH 12/22/2023 12:15:06 PAGE 4
|
|||
|
|
|||
|
177 3 }
|
|||
|
178 2 else
|
|||
|
179 2 {
|
|||
|
180 3 return (BOOT_PGR_ERASE_ERR);
|
|||
|
181 3 }
|
|||
|
182 2 }
|
|||
|
183 1
|
|||
|
184 1 return (BOOT_PGR_OK);
|
|||
|
185 1 }
|
|||
|
186
|
|||
|
187
|
|||
|
188 /*************************************************************************************************
|
|||
|
189 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: BootUpgradeCode
|
|||
|
190 * <20><> <20><>: <20><>
|
|||
|
191 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
|||
|
192 * <20><> <20><>: Boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Erase->Program->Verify
|
|||
|
193 *************************************************************************************************/
|
|||
|
194 BOOL BootUpgradeCode(void)
|
|||
|
195 {
|
|||
|
196 1 BOOL Result = 1;
|
|||
|
197 1
|
|||
|
198 1 if(BootProgram() == BOOT_PGR_OK)
|
|||
|
199 1 {
|
|||
|
200 2 McuFlashEraseSector(BOOT_FLG_START_ADDR, MCU_TYPE_CODE); //д<><D0B4><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
|
|||
|
201 2 Result = McuFlashBlankCheck(BOOT_FLG_START_ADDR, MCU_TYPE_CODE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|||
|
202 2 }
|
|||
|
203 1 else
|
|||
|
204 1 {
|
|||
|
205 2 Result = 0;
|
|||
|
206 2 }
|
|||
|
207 1
|
|||
|
208 1 return Result;
|
|||
|
209 1 }
|
|||
|
210
|
|||
|
|
|||
|
|
|||
|
MODULE INFORMATION: STATIC OVERLAYABLE
|
|||
|
CODE SIZE = 617 ----
|
|||
|
CONSTANT SIZE = ---- ----
|
|||
|
XDATA SIZE = ---- ----
|
|||
|
PDATA SIZE = ---- ----
|
|||
|
DATA SIZE = 1 32
|
|||
|
IDATA SIZE = ---- ----
|
|||
|
BIT SIZE = ---- 2
|
|||
|
END OF MODULE INFORMATION.
|
|||
|
|
|||
|
|
|||
|
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|