ZDBMS/output/IapIsp.lst

856 lines
50 KiB
Plaintext
Raw Normal View History

C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 1
2025-02-06 07:35:32 +00:00
C51 COMPILER V9.01, COMPILATION OF MODULE IAPISP
OBJECT MODULE PLACED IN .\output\IapIsp.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_bootloader\IapIsp.c BROWSE INCDIR(.\header_bootloader) DEBUG OBJE
-CTEXTEND PRINT(.\output\IapIsp.lst) OBJECT(.\output\IapIsp.obj)
2025-02-06 07:35:32 +00:00
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 "IapIsp.h"
13
14 BOOL bIapIspFlg; //0<><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰִ<C7B0><D6B4>IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰִ<C7B0><D6B4>ISP<53><50><EFBFBD><EFBFBD>
15 BOOL bHandsheakOkFlg;
16 BOOL bUartSndOverFlg;
17 U16 uiUartRcvChkSum;
18 U8 ucUartErrCode;
19 U8 ucUartBufPT;
20 U32 ulIapDataPtr;
21 U32 ulIapChksum;
22 U32 ulIapRecDataLen;
23 U8 ucIapIndexBk;
24 U8 ucIapRestCommand;
25 U8 xdata ucUartBuf[150];
26 U8 xdata ucIapBuf[MCU_CODE_SECTOR_SIZE];
27
28 extern void UARTInit(void);
29 /*************************************************************************************************
30 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UartSendAck
31 * <20><> <20><>: <20><>
32 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
33 * <20><> <20><>: <20><>Slave<76><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ󣬿<C9BA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
34 *************************************************************************************************/
35 void UartSendAck(void)
36 {
37 1 U8 i, DataBak;
38 1 U16 CheckSum = 0;
39 1
40 1 ucUartBuf[LENGTH] = 0x00;
41 1 ucUartBuf[COMMAND] = 0x0B;
42 1
43 1 DataBak = ucUartBuf[SOURCE]; //<2F><><EFBFBD><EFBFBD>ԴID<49><44>Ŀ<EFBFBD><C4BF>ID
44 1 ucUartBuf[SOURCE] = ucUartBuf[TARGET];
45 1 ucUartBuf[TARGET] = DataBak;
46 1
47 1 for(i=2; i<(ucUartBuf[LENGTH]+7); i++)
48 1 {
49 2 CheckSum += ucUartBuf[i];
50 2 }
51 1
52 1 ucUartBuf[7+ucUartBuf[LENGTH]] = (U8)CheckSum;
53 1 ucUartBuf[8+ucUartBuf[LENGTH]] = (U8)(CheckSum>>8);
54 1
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 2
2025-02-06 07:35:32 +00:00
55 1 bUartSndOverFlg = 0;
56 1 UartTxEn(ucUartBuf[ucUartBufPT]);
57 1 }
58
59
60 /*************************************************************************************************
61 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapHandShake
62 * <20><> <20><>: <20><>
63 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
64 * <20><> <20><>: <20><><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>IAP<41><50><EFBFBD><EFBFBD>ISP<53><50>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
65 bIapIspFlg: 0--IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1--ISP<53><50><EFBFBD><EFBFBD>
66 *************************************************************************************************/
67 void IapHandShake(void)
68 {
69 1 ucUartBuf[INDEXES] = 0;
70 1 if(ucUartBuf[DATA]=='I' && ucUartBuf[DATA+1]=='A' && ucUartBuf[DATA+2]=='P')
71 1 {
72 2 bIapIspFlg = IAP_MODE;
73 2 bHandsheakOkFlg = 1;
74 2 }
75 1 else if(ucUartBuf[DATA]=='I' && ucUartBuf[DATA+1]=='S' && ucUartBuf[DATA+2]=='P')
76 1 {
77 2 bIapIspFlg = ISP_MODE;
78 2 bHandsheakOkFlg = 1;
79 2 }
80 1 else
81 1 {
82 2 ucUartBuf[INDEXES] = IAPERROR_HANDSHAKE; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
83 2 bHandsheakOkFlg = 0;
84 2 }
85 1 }
86
87
88 /*************************************************************************************************
89 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapBeginAck
90 * <20><> <20><>: <20><>
91 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
92 * <20><> <20><>: IAP<41><50>ISP<53><50>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CODE<44>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>30K
93 *************************************************************************************************/
94 void IapBeginAck(void)
95 {
96 1 U8 i, SectorNum, McuFlashType;
97 1 U32 McuFlashAddr;
98 1
99 1 ulIapDataPtr = 0;
100 1 ulIapChksum = 0;
101 1 ulIapRecDataLen = 0;
102 1 ulIapRecDataLen = ((U32)ucUartBuf[DATA+3]<<24) //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
103 1 | ((U32)ucUartBuf[DATA+2]<<16)
104 1 | ((U32)ucUartBuf[DATA+1]<<8)
105 1 | (U32)ucUartBuf[DATA];
106 1
107 1 if(!bHandsheakOkFlg)
108 1 {
109 2 ucUartBuf[INDEXES] = IAPERROR_HANDSHAKE; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
110 2 }
111 1
112 1 if((ulIapRecDataLen > IAP_BK_CODE_SIZE) && (bIapIspFlg == IAP_MODE))
113 1 {
114 2 ucUartBuf[INDEXES] = IAPERROR_SIZE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>IAP<41><50>ISP<53><50><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>
<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>
115 2 }
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 3
2025-02-06 07:35:32 +00:00
116 1 else if((ulIapRecDataLen > ISP_CODE_SIZE) && (bIapIspFlg == ISP_MODE))
117 1 {
118 2 ucUartBuf[INDEXES] = IAPERROR_SIZE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>IAP<41><50>ISP<53><50><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>
<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>
119 2 }
120 1 else
121 1 {
122 2 ucUartBuf[INDEXES] = 0; //<2F><>Ԥ<EFBFBD><D4A4><EFBFBD>ظ<EFBFBD><D8B8>ɹ<EFBFBD>
123 2 ucIapIndexBk = 0;
124 2
125 2 //1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>BOOT_FLG_ISP_ADD<44><44>дISP_FLG<4C><47>־0xA5
126 2 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
<><D6B9>д
127 2 McuFlashEraseSector(BOOT_FLG_START_ADDR, MCU_TYPE_CODE);
128 2 if(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>
129 2 {
130 3 if(bIapIspFlg == ISP_MODE)
131 3 {
132 4 McuFlashWrOneByte(BOOT_FLG_ISP_ADDR, ISP_FLG, MCU_TYPE_CODE);
133 4 if(McuFlashRdOneByte(BOOT_FLG_ISP_ADDR, MCU_TYPE_CODE) != ISP_FLG)
134 4 {
135 5 ucUartBuf[INDEXES] = IAPERROR_WR; //Writeʧ<65><CAA7>
136 5 }
137 4 }
138 3 }
139 2 else
140 2 {
141 3 ucUartBuf[INDEXES] = IAPERROR_ERASE; //Eraseʧ<65><CAA7>
142 3 }
143 2 ucMcuFlashWrValid = 0;
144 2
145 2 //2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IAP<41><50><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>EEPROM<4F><4D>
146 2 if(ucUartBuf[INDEXES] == 0) //<2F><><EFBFBD><EFBFBD>ucUartBuf[INDEXES]
147 2 {
148 3 SectorNum = ulIapRecDataLen/MCU_CODE_SECTOR_SIZE;
149 3 for(i=0; i<SectorNum; i++) //<2F>Ȳ<EFBFBD><C8B2><EFBFBD>CODE<44><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sector
150 3 {
151 4 McuFlashType = MCU_TYPE_CODE; //<2F><>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>flash
152 4 if(bIapIspFlg == ISP_MODE)
153 4 {
154 5 McuFlashAddr = ISP_CODE_START_ADDR; //ISP<53><50>ʼ<EFBFBD><CABC>ַ
155 5 }
156 4 else
157 4 {
158 5 McuFlashAddr = IAP_BK_CODE_START_ADDR; //IAP<41><50>ʼ<EFBFBD><CABC>ַ
159 5 }
160 4 McuFlashAddr += (U16)i*512; //ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ʼ<EFBFBD><CABC>ַ
161 4
162 4 if(bIapIspFlg == ISP_MODE) //ISPģʽ<C4A3><CABD>ֱ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>EEPROM
163 4 {
164 5 if(i>=(SectorNum-APP_PARA_SIZE/MCU_CODE_SECTOR_SIZE)) //EEPROM<4F><4D>sector<6F><72><EFBFBD><EFBFBD>
165 5 {
166 6 McuFlashType = MCU_TYPE_E2P;
167 6 McuFlashAddr = (U16)(i+APP_PARA_SIZE/MCU_CODE_SECTOR_SIZE-SectorNum)*512;
168 6 }
169 5 }
170 4
171 4 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>д
172 4 McuFlashEraseSector(McuFlashAddr, McuFlashType);
173 4 if(!McuFlashBlankCheck(McuFlashAddr, McuFlashType)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
174 4 {
175 5 ucUartBuf[INDEXES] = IAPERROR_ERASE; //Eraseʧ<65><CAA7>
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 4
2025-02-06 07:35:32 +00:00
176 5 }
177 4 ucMcuFlashWrValid = 0;
178 4 }
179 3 }
180 2 else
181 2 {
182 3 ucUartBuf[INDEXES] = IAPERROR_INDEX;
183 3 }
184 2 }
185 1 }
186
187
188 /*************************************************************************************************
189 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapWrSector
190 * <20><> <20><>: <20><>
191 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
192 * <20><> <20><>: д<><D0B4>1<EFBFBD><31>Sector<6F><72><EFBFBD><EFBFBD>
193 *************************************************************************************************/
194 BOOL IapWrSector(void)
195 {
196 1 BOOL Result = 1;
197 1 U16 i;
198 1 U32 McuFlashAddr;
199 1 U8 McuFlashType;
200 1
201 1 for(i=0; i<MCU_CODE_SECTOR_SIZE; i++) //<2F><><EFBFBD><EFBFBD>д1<D0B4><31>sector
202 1 {
203 2 McuFlashType = MCU_TYPE_CODE;
204 2 if(bIapIspFlg == ISP_MODE) //ISP
205 2 {
206 3 McuFlashAddr = ISP_CODE_START_ADDR + ulIapDataPtr;
207 3 if(McuFlashAddr >= (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE))
208 3 {
209 4 McuFlashAddr = McuFlashAddr - (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE);
210 4 McuFlashType = MCU_TYPE_E2P; //ISP<53><50><EFBFBD><EFBFBD>EEPROM<4F><4D>
211 4 }
212 3 }
213 2 else
214 2 {
215 3 McuFlashAddr = IAP_BK_CODE_START_ADDR + ulIapDataPtr;
216 3 }
217 2 McuFlashWrOneByte(McuFlashAddr, ucIapBuf[i], McuFlashType);
218 2 if(ucIapBuf[i] != McuFlashRdOneByte(McuFlashAddr, McuFlashType))
219 2 {
220 3 Result = 0;
221 3 break;
222 3 }
223 2 ulIapDataPtr++;
224 2 }
225 1
226 1 return Result;
227 1 }
228
229
230 /*************************************************************************************************
231 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapReceiveData
232 * <20><> <20><>: <20><>
233 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
234 * <20><> <20><>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>MCU CODE<44><45>
235 *************************************************************************************************/
236 void IapReceiveData(void)
237 {
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 5
2025-02-06 07:35:32 +00:00
238 1 U16 i;
239 1 U8 j;
240 1 U32 McuFlashAddr;
241 1 U8 McuFlashType;
242 1
243 1 bHandsheakOkFlg = 0;
244 1
245 1 if( ((ucUartBuf[INDEXES]<ucIapIndexBk) || (ucUartBuf[INDEXES]>(ucIapIndexBk+4))) && (ucUartBuf[INDEXES
-] != 0) ) //yangweilei
246 1 {
247 2 ucUartBuf[INDEXES] = IAPERROR_INDEX; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD><D0B6>Ƿ񳬳<C7B7><F1B3ACB3><EFBFBD>Χ
248 2 }
249 1 else
250 1 {
251 2 ucIapIndexBk = ucUartBuf[INDEXES];
252 2 ucUartBuf[INDEXES] = 0;
253 2 if(ucUartBuf[LENGTH] == 0)
254 2 {
255 3 ulIapDataPtr += 512; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ128<32><38><EFBFBD>ֽ<EFBFBD><D6BD>
-<2D>0<EFBFBD><30>ָ<EFBFBD><D6B8><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>д(<28><><EFBFBD><EFBFBD>150mS/1K)
256 3 }
257 2 else
258 2 {
259 3 j = ucIapIndexBk % 4; //Ŀǰ<C4BF>ݶ<EFBFBD>sector<6F><72><EFBFBD><EFBFBD>Ϊ512bytes<65><73>ÿ<EFBFBD>δ<EFBFBD><CEB4>
-<2D>128bytes<65><73><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>Ϊ4
260 3 for(i=0; i<ucUartBuf[LENGTH]; i++)
261 3 {
262 4 ucIapBuf[i+(U16)j*ucUartBuf[LENGTH]] = ucUartBuf[DATA+i];
263 4 }
264 3 if(j == 3) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>sector<6F><72><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
265 3 {
266 4 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
<><D6B9>д
267 4 if(!IapWrSector()) //<2F><>һ<EFBFBD><D2BB>дsector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дһ<D0B4><D2BB>
268 4 {
269 5 if(ulIapDataPtr >= MCU_CODE_SECTOR_SIZE)
270 5 {
271 6 ulIapDataPtr -= MCU_CODE_SECTOR_SIZE; //ָ<><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Sector<6F><72>ʼ
272 6 }
273 5 else
274 5 {
275 6 ulIapDataPtr = 0;
276 6 }
277 5
278 5 McuFlashType = MCU_TYPE_CODE; //Ĭ<><C4AC><EFBFBD><EFBFBD>CODE<44><45>
279 5 if(bIapIspFlg == ISP_MODE) //ISP
280 5 {
281 6 McuFlashAddr = ISP_CODE_START_ADDR + ulIapDataPtr;
282 6 if(McuFlashAddr >= (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE))
283 6 {
284 7 McuFlashAddr = McuFlashAddr - (ulIapRecDataLen+BOOT_CODE_SIZE-APP_PARA_SIZE);
285 7 McuFlashType = MCU_TYPE_E2P; //ISP<53><50><EFBFBD><EFBFBD>EEPROM<4F><4D>
286 7 }
287 6 }
288 5 else
289 5 {
290 6 McuFlashAddr = IAP_BK_CODE_START_ADDR + ulIapDataPtr;
291 6 }
292 5 ucMcuFlashWrValid = 0x55;
293 5 McuFlashEraseSector(McuFlashAddr, McuFlashType);
294 5 if(McuFlashBlankCheck(McuFlashAddr, McuFlashType)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 6
2025-02-06 07:35:32 +00:00
295 5 {
296 6 if(!IapWrSector()) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻ظ<F2B7B5BB><D8B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>
297 6 {
298 7 ucUartBuf[INDEXES] = IAPERROR_WR; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
299 7 }
300 6 else
301 6 {
302 7 goto UpdateChksum;
303 7 }
304 6 }
305 5 else
306 5 {
307 6 ucUartBuf[INDEXES] = IAPERROR_ERASE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
308 6 }
309 5 }
310 4 else //512Bytesд<73><D0B4><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD>checksumֵ
311 4 {
312 5 UpdateChksum:
313 5 for(j=0; j<MCU_CODE_SECTOR_SIZE/4; j++) //<2F><><EFBFBD><EFBFBD>checksum<75><6D>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>32bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STM32
314 5 {
315 6 ulIapChksum += (((U32)ucIapBuf[j*4+3]<<24)
316 6 | ((U32)ucIapBuf[j*4+2]<<16)
317 6 | ((U32)ucIapBuf[j*4+1]<<8)
318 6 | ((U32)ucIapBuf[j*4+0]));
319 6 }
320 5 }
321 4
322 4 ucMcuFlashWrValid = 0;
323 4 }
324 3 }
325 2 }
326 1 }
327
328
329 /*************************************************************************************************
330 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapRDataVerify
331 * <20><> <20><>: <20><>
332 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
333 * <20><> <20><>: <20><>֤CheckSum<75>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
334 *************************************************************************************************/
335 void IapRDataVerify(void)
336 {
337 1 U32 CheckSum = 0;
338 1
339 1 CheckSum = ((U32)ucUartBuf[DATA+3]<<24) //<2F><>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB><EFBFBD>·<EFBFBD><C2B7><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
340 1 | ((U32)ucUartBuf[DATA+2]<<16)
341 1 | ((U32)ucUartBuf[DATA+1]<<8)
342 1 | ((U32)ucUartBuf[DATA+0]);
343 1
344 1 if(ulIapChksum != CheckSum) //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
345 1 {
346 2 ucUartBuf[INDEXES] = IAPERROR_CRC;
347 2 }
348 1 else
349 1 {
350 2 ucUartBuf[INDEXES] = 0; //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD>
351 2 }
352 1 }
353
354
355 /*************************************************************************************************
356 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IapCmdReset
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 7
2025-02-06 07:35:32 +00:00
357 * <20><> <20><>: <20><>
358 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
359 * <20><> <20><>: <20><>IAP<41><50>ISP<53><50><EFBFBD><EFBFBD>Program<61><6D><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>λָ<CEBB><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>0x0000<30><30>ַ
360 ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ISP<53><50><EFBFBD><EFBFBD>
361 IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>д0x5A<35><41>APP<50><50><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
362 *************************************************************************************************/
363 void IapCmdReset(void)
364 {
365 1 ucUartBuf[INDEXES] = 0;
366 1 ucIapRestCommand = IAP_CMD_RESET;
367 1
368 1 ucMcuFlashWrValid = 0x55; //<2F><><EFBFBD><EFBFBD>MCU Code<64><65><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ֹ<EFBFBD>
-<2D>д
369 1 McuFlashEraseSector(BOOT_FLG_START_ADDR, MCU_TYPE_CODE);
370 1 if(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>
371 1 {
372 2 if(bIapIspFlg == IAP_MODE) //IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>BOOT<4F><54><EFBFBD>ı<EFBFBD>־<EFBFBD>
-<2D><><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>д0x5A
373 2 {
374 3 McuFlashWrOneByte(BOOT_FLG_IAP_ADDR, IAP_FLG, MCU_TYPE_CODE);
375 3 if(McuFlashRdOneByte(BOOT_FLG_IAP_ADDR, MCU_TYPE_CODE) != IAP_FLG)
376 3 {
377 4 ucUartBuf[INDEXES] = IAPERROR_WR; //Writeʧ<65><CAA7>
378 4 ucIapRestCommand = 0;
379 4 }
380 3 }
381 2 }
382 1 else
383 1 {
384 2 ucUartBuf[INDEXES] = IAPERROR_ERASE; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
385 2 ucIapRestCommand = 0;
386 2 }
387 1 ucMcuFlashWrValid = 0;
388 1 }
389
390
391 /*************************************************************************************************
392 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UartCmdProcess
393 * <20><> <20><>: <20><>
394 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
395 * <20><> <20><>: <20><><EFBFBD><EFBFBD>IAP<41><50>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
396 *************************************************************************************************/
397 void UartCmdProcess(void)
398 {
399 1 ucUartBufPT = 0;
400 1 if(uiUartRcvChkSum != ((ucUartBuf[ucUartBuf[LENGTH]+8]<<8) + ucUartBuf[ucUartBuf[LENGTH]+7]))
401 1 {
402 2 ucUartErrCode |= IAPERROR_CHECKSUM;
403 2 }
404 1
405 1 if(ucUartErrCode != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6>
406 1 {
407 2 ucUartBuf[INDEXES] = ucUartErrCode;
408 2 }
409 1 else
410 1 {
411 2 if(ucUartBuf[COMMAND] == IAP_CMD_HANDSHAKE) //IAP<41><50>ISP<53><50><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><E9A3AC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
412 2 {
413 3 IapHandShake();
414 3 }
415 2 else if(ucUartBuf[COMMAND] == IAP_CMD_BEGIN) //<2F><>ʼIAP<41><50>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CODE<44><45>/EEP<45><50>ȫ<EFBFBD><C8AB>
-<2D><><EFBFBD><EFBFBD>
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 8
2025-02-06 07:35:32 +00:00
416 2 {
417 3 IapBeginAck();
418 3 }
419 2 else if(ucUartBuf[COMMAND] == IAP_CMD_TRANS) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>д<EFBFBD>У<EBA1A2><D0A3>
420 2 {
421 3 IapReceiveData();
422 3 }
423 2 else if(ucUartBuf[COMMAND] == IAP_CMD_VERIFY) //
424 2 {
425 3 IapRDataVerify();
426 3 }
427 2 else if(ucUartBuf[COMMAND] == IAP_CMD_RESET)
428 2 {
429 3 IapCmdReset();
430 3 }
431 2 }
432 1
433 1 UartSendAck();
434 1 }
435
436
437 /*************************************************************************************************
438 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: BootIapIsp
439 * <20><> <20><>: <20><>
440 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
441 * <20><> <20><>: IAP<41><50>ISP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
442 *************************************************************************************************/
443 void BootIapIsp(void)
444 {
445 1 ulIapDataPtr = 0;
446 1 ulIapChksum = 0;
447 1 ucIapRestCommand = 0;
448 1 UARTInit();
449 1 while(1)
450 1 {
451 2 #if ((UART_DEFINE >= 1)&&(UART_DEFINE<= 30))
452 2 {
453 3 if(RI)
454 3 {
455 4 //BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6>
-<2D><><EFBFBD>ж<EFBFBD>ͨѶ<CDA8><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
456 4 ucUartBuf[ucUartBufPT] = SBUF;
457 4 ucUartBufPT++;
458 4 if(ucUartBufPT >= 140) //<2F><>ָ<EFBFBD><EFBFBD><EFBFBD><E1B3AC>140
459 4 {
460 5 ucUartBufPT = 0;
461 5 }
462 4 if(ucUartBufPT == 1)
463 4 {
464 5 if(ucUartBuf[HEARD1] != 0x5A) //<2F><><EFBFBD><EFBFBD>֡ͷ<D6A1>Ƿ<EFBFBD>Wie0x5AA5
465 5 {
466 6 ucUartBufPT = 0;
467 6 }
468 5
469 5 }
470 4 else if(ucUartBufPT == 2)
471 4 {
472 5
473 5 if(ucUartBuf[HEARD2] != 0xA5)
474 5 {
475 6 ucUartBufPT = 0;
476 6 }
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 9
2025-02-06 07:35:32 +00:00
477 5 else
478 5 {
479 6 uiUartRcvChkSum = 0; //֡ͷ<D6A1>ж<EFBFBD><D0B6><EFBFBD>ȷ
480 6 ucUartErrCode = 0;
481 6 }
482 5 }
483 4 else
484 4 {
485 5
486 5 if(ucUartBufPT < (ucUartBuf[LENGTH]+9))
487 5 {
488 6 if(ucUartBufPT <= (ucUartBuf[LENGTH]+7))
489 6 {
490 7 uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1];
491 7 }
492 6
493 6 if(ucUartBufPT == (TARGET+1)) //<2F><><EFBFBD><EFBFBD>ID
494 6 {
495 7
496 7 if(ucUartBuf[TARGET] != IAP_BMSID)
497 7 {
498 8 ucUartBufPT = 0;
499 8 }
500 7 }
501 6 else if(ucUartBufPT == (COMMAND+1)) //<2F><><EFBFBD><EFBFBD>COMMAND
502 6 {
503 7 if((ucUartBuf[COMMAND] != IAP_CMD_HANDSHAKE)
504 7 && (ucUartBuf[COMMAND] != IAP_CMD_BEGIN)
505 7 && (ucUartBuf[COMMAND] != IAP_CMD_TRANS)
506 7 && (ucUartBuf[COMMAND] != IAP_CMD_VERIFY)
507 7 && (ucUartBuf[COMMAND] != IAP_CMD_RESET))
508 7 {
509 8 ucUartErrCode |= IAPERROR_CMD;
510 8 }
511 7 }
512 6 }
513 5 else
514 5 {
515 6 BootMcuWdtClear();
516 6 UartCmdProcess();
517 6 }
518 5 }
519 4 RI = 0;
520 4 }
521 3
522 3 if(TI)
523 3 {
524 4 BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
-<2D>ж<EFBFBD>ͨѶ<CDA8><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
525 4
526 4 if(ucUartBufPT >= (ucUartBuf[LENGTH]+8))
527 4 {
528 5 UartRxEn(); //Allow UART receive data
529 5 ucUartBufPT = 0;
530 5 ucUartBuf[0] = 0;
531 5 ucUartBuf[1] = 0;
532 5 ucUartBuf[2] = 0;
533 5 bUartSndOverFlg = 1;
534 5 }
535 4 else
536 4 {
537 5 ucUartBufPT++;
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 10
2025-02-06 07:35:32 +00:00
538 5 UartTxEn(ucUartBuf[ucUartBufPT]);
539 5 }
540 4
541 4 TI = 0;
542 4 }
543 3
544 3 if(ucIapRestCommand == IAP_CMD_RESET)
545 3 {
546 4 BootMcuWdtClear();
547 4 if(bUartSndOverFlg) //Reset֡<74>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
548 4 {
549 5 bUartSndOverFlg = 0;
550 5 ucIapRestCommand = 0;
551 5 ((void(code*)(void))0x0000)();
552 5 }
553 4 }
554 3 }
555 2 #elif ((UART_DEFINE >= 31)&&(UART_DEFINE<= 60))
{
INSCON = 0x40;
if(RI1)
{
//BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6>
-<2D><><EFBFBD>ж<EFBFBD>ͨѶ<CDA8><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
ucUartBuf[ucUartBufPT] = SBUF1;
INSCON = 0x00;
ucUartBufPT++;
if(ucUartBufPT >= 140) //<2F><>ָ<EFBFBD><EFBFBD><EFBFBD><E1B3AC>140
{
ucUartBufPT = 0;
}
if(ucUartBufPT == 1)
{
if(ucUartBuf[HEARD1] != 0x5A) //<2F><><EFBFBD><EFBFBD>֡ͷ<D6A1>Ƿ<EFBFBD>Wie0x5AA5
{
ucUartBufPT = 0;
}
}
else if(ucUartBufPT == 2)
{
if(ucUartBuf[HEARD2] != 0xA5)
{
ucUartBufPT = 0;
}
else
{
uiUartRcvChkSum = 0; //֡ͷ<D6A1>ж<EFBFBD><D0B6><EFBFBD>ȷ
ucUartErrCode = 0;
}
}
else
{
if(ucUartBufPT < (ucUartBuf[LENGTH]+9))
{
if(ucUartBufPT <= (ucUartBuf[LENGTH]+7))
{
uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1];
}
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 11
2025-02-06 07:35:32 +00:00
if(ucUartBufPT == (TARGET+1)) //<2F><><EFBFBD><EFBFBD>ID
{
if(ucUartBuf[TARGET] != IAP_BMSID)
{
ucUartBufPT = 0;
}
}
else if(ucUartBufPT == (COMMAND+1)) //<2F><><EFBFBD><EFBFBD>COMMAND
{
if((ucUartBuf[COMMAND] != IAP_CMD_HANDSHAKE)
&& (ucUartBuf[COMMAND] != IAP_CMD_BEGIN)
&& (ucUartBuf[COMMAND] != IAP_CMD_TRANS)
&& (ucUartBuf[COMMAND] != IAP_CMD_VERIFY)
&& (ucUartBuf[COMMAND] != IAP_CMD_RESET))
{
ucUartErrCode |= IAPERROR_CMD;
}
}
}
else
{
BootMcuWdtClear();
UartCmdProcess();
}
}
INSCON = 0x40;
RI1 = 0;
INSCON = 0x00;
}
INSCON = 0x40;
if(TI1)
{
INSCON = 0x00;
BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
-<2D>ж<EFBFBD>ͨѶ<CDA8><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
if(ucUartBufPT >= (ucUartBuf[LENGTH]+8))
{
UartRxEn(); //Allow UART receive data
ucUartBufPT = 0;
ucUartBuf[0] = 0;
ucUartBuf[1] = 0;
ucUartBuf[2] = 0;
bUartSndOverFlg = 1;
}
else
{
ucUartBufPT++;
UartTxEn(ucUartBuf[ucUartBufPT]);
}
INSCON = 0x40;
TI1 = 0;
INSCON = 0x00;
}
if(ucIapRestCommand == IAP_CMD_RESET)
{
BootMcuWdtClear();
if(bUartSndOverFlg) //Reset֡<74>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 12
2025-02-06 07:35:32 +00:00
{
bUartSndOverFlg = 0;
ucIapRestCommand = 0;
((void(code*)(void))0x0000)();
}
}
}
#elif ( UART_DEFINE == 61)
{
INSCON = 0x40;
if(RI2)
{
//BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6>
-<2D><><EFBFBD>ж<EFBFBD>ͨѶ<CDA8><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
ucUartBuf[ucUartBufPT] = SBUF2;
INSCON = 0x00;
ucUartBufPT++;
if(ucUartBufPT >= 140) //<2F><>ָ<EFBFBD><EFBFBD><EFBFBD><E1B3AC>140
{
ucUartBufPT = 0;
}
if(ucUartBufPT == 1)
{
if(ucUartBuf[HEARD1] != 0x5A) //<2F><><EFBFBD><EFBFBD>֡ͷ<D6A1>Ƿ<EFBFBD>Wie0x5AA5
{
ucUartBufPT = 0;
}
}
else if(ucUartBufPT == 2)
{
if(ucUartBuf[HEARD2] != 0xA5)
{
ucUartBufPT = 0;
}
else
{
uiUartRcvChkSum = 0; //֡ͷ<D6A1>ж<EFBFBD><D0B6><EFBFBD>ȷ
ucUartErrCode = 0;
}
}
else
{
if(ucUartBufPT < (ucUartBuf[LENGTH]+9))
{
if(ucUartBufPT <= (ucUartBuf[LENGTH]+7))
{
uiUartRcvChkSum += ucUartBuf[ucUartBufPT-1];
}
if(ucUartBufPT == (TARGET+1)) //<2F><><EFBFBD><EFBFBD>ID
{
if(ucUartBuf[TARGET] != IAP_BMSID)
{
ucUartBufPT = 0;
}
}
else if(ucUartBufPT == (COMMAND+1)) //<2F><><EFBFBD><EFBFBD>COMMAND
{
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 13
2025-02-06 07:35:32 +00:00
if((ucUartBuf[COMMAND] != IAP_CMD_HANDSHAKE)
&& (ucUartBuf[COMMAND] != IAP_CMD_BEGIN)
&& (ucUartBuf[COMMAND] != IAP_CMD_TRANS)
&& (ucUartBuf[COMMAND] != IAP_CMD_VERIFY)
&& (ucUartBuf[COMMAND] != IAP_CMD_RESET))
{
ucUartErrCode |= IAPERROR_CMD;
}
}
}
else
{
BootMcuWdtClear();
UartCmdProcess();
}
}
INSCON = 0x40;
RI2 = 0;
INSCON = 0x00;
}
INSCON = 0x40;
if(TI2)
{
INSCON = 0x00;
BootMcuWdtClear(); //<2F>ڸó<DAB8><C3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>UARTͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
-<2D>ж<EFBFBD>ͨѶ<CDA8><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
if(ucUartBufPT >= (ucUartBuf[LENGTH]+8))
{
UartRxEn(); //Allow UART receive data
ucUartBufPT = 0;
ucUartBuf[0] = 0;
ucUartBuf[1] = 0;
ucUartBuf[2] = 0;
bUartSndOverFlg = 1;
}
else
{
ucUartBufPT++;
UartTxEn(ucUartBuf[ucUartBufPT]);
}
INSCON = 0x40;
TI2 = 0;
INSCON = 0x00;
}
if(ucIapRestCommand == IAP_CMD_RESET)
{
BootMcuWdtClear();
if(bUartSndOverFlg) //Reset֡<74>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
{
bUartSndOverFlg = 0;
ucIapRestCommand = 0;
((void(code*)(void))0x0000)();
}
}
}
#endif
780 2 }
781 1 }
C51 COMPILER V9.01 IAPISP 02/11/2025 11:30:12 PAGE 14
2025-02-06 07:35:32 +00:00
782
783
784
785
786
787
788
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2211 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 662 ----
PDATA SIZE = ---- ----
DATA SIZE = 18 24
IDATA SIZE = ---- ----
BIT SIZE = 3 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)