?? common.lst
字號(hào):
192 * Function Name : SerialPutChar
193 * Description : Print a character on the HyperTerminal
194 * Input : The character to be printed
195 * Return : None
196 *******************************************************************************/
\ In segment CODE_Flash, align 4, keep-with-next
197 void SerialPutChar(char c)
198 {
\ SerialPutChar:
\ 00000000 01402DE9 PUSH {R0,LR}
199 UART_ByteSend(UART0,(u8*)&c);
\ 00000004 0D10B0E1 MOVS R1,SP
\ 00000008 C004A0E3 MOV R0,#-1073741824
\ 0000000C 400C80E3 ORR R0,R0,#0x4000
\ 00000010 ........ _BLF UART_ByteSend,??UART_ByteSend??rA
200 }
\ 00000014 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 00000018 0080BDE8 POP {PC} ;; return
201
202 /*******************************************************************************
203 * Function Name : SerialPutString
204 * Description : Print a string on the HyperTerminal
205 * Input : The string to be printed
206 * Return : None
207 *******************************************************************************/
\ In segment CODE_Flash, align 4, keep-with-next
208 void SerialPutString(char *s)
209 {
\ SerialPutString:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
210 while (*s != '\0')
\ ??SerialPutString_0:
\ 00000008 0000D4E5 LDRB R0,[R4, #+0]
\ 0000000C 000050E3 CMP R0,#+0
\ 00000010 0300000A BEQ ??SerialPutString_1
211 {
212 SerialPutChar(*s);
\ 00000014 0000D4E5 LDRB R0,[R4, #+0]
\ 00000018 ........ BL SerialPutChar
213 s ++;
\ 0000001C 014094E2 ADDS R4,R4,#+1
\ 00000020 F8FFFFEA B ??SerialPutString_0
214 }
215 }
\ ??SerialPutString_1:
\ 00000024 1080BDE8 POP {R4,PC} ;; return
216
217 /*******************************************************************************
218 * Function Name : GetInputString
219 * Description : Get Input string from the HyperTerminal
220 * Input : The input string
221 * Return : None
222 *******************************************************************************/
\ In segment CODE_Flash, align 4, keep-with-next
223 void GetInputString (char * buffP)
224 {
\ GetInputString:
\ 00000000 70402DE9 PUSH {R4-R6,LR}
\ 00000004 0040B0E1 MOVS R4,R0
225 u32 bytes_read = 0;
\ 00000008 0000A0E3 MOV R0,#+0
\ 0000000C 0050B0E1 MOVS R5,R0
226 char c;
227 do
228 {
229 c = GetKey();
\ ??GetInputString_0:
\ 00000010 ........ BL GetKey
\ 00000014 0060B0E1 MOVS R6,R0
230 if (c == '\r')
\ 00000018 0D0056E3 CMP R6,#+13
\ 0000001C 0400001A BNE ??GetInputString_1
231 break;
232 if (c == '\b') /* Backspace */
233 {
234 if (bytes_read > 0)
235 {
236 SerialPutString("\b \b");
237 bytes_read --;
238 }
239 continue;
240 }
241 if (bytes_read >= CMD_STRING_SIZE )
242 {
243 SerialPutString("Command string size overflow\r\n");
244 bytes_read = 0;
245 continue;
246 }
247 if (c >= 0x20 && c<= 0x7E)
248 {
249 buffP[bytes_read++] = c;
250 SerialPutChar(c);
251 }
252
253 }
254 while (1);
255 SerialPutString("\n\r");
\ 00000020 1C0F8FE2 ADR R0,??GetInputString_2 ;; "\n\r"
\ 00000024 ........ BL SerialPutString
256 buffP[bytes_read] = '\0';
\ 00000028 0000A0E3 MOV R0,#+0
\ 0000002C 0400C5E7 STRB R0,[R5, +R4]
257 }
\ 00000030 170000EA B ??GetInputString_3
\ ??GetInputString_1:
\ 00000034 080056E3 CMP R6,#+8
\ 00000038 0500001A BNE ??GetInputString_4
\ 0000003C 000055E3 CMP R5,#+0
\ 00000040 F2FFFF0A BEQ ??GetInputString_0
\ 00000044 140F8FE2 ADR R0,??GetInputString_2+0x4 ;; "\b \b"
\ 00000048 ........ BL SerialPutString
\ 0000004C 015055E2 SUBS R5,R5,#+1
\ 00000050 EEFFFFEA B ??GetInputString_0
\ ??GetInputString_4:
\ 00000054 800055E3 CMP R5,#+128
\ 00000058 0400003A BCC ??GetInputString_5
\ 0000005C 3C009FE5 LDR R0,??GetInputString_2+0x8 ;; `?<Constant "Command string size o...">`
\ 00000060 ........ BL SerialPutString
\ 00000064 0000A0E3 MOV R0,#+0
\ 00000068 0050B0E1 MOVS R5,R0
\ 0000006C E7FFFFEA B ??GetInputString_0
\ ??GetInputString_5:
\ 00000070 200056E3 CMP R6,#+32
\ 00000074 E5FFFF3A BCC ??GetInputString_0
\ 00000078 7F0056E3 CMP R6,#+127
\ 0000007C E3FFFF2A BCS ??GetInputString_0
\ 00000080 0460C5E7 STRB R6,[R5, +R4]
\ 00000084 015095E2 ADDS R5,R5,#+1
\ 00000088 0600B0E1 MOVS R0,R6
\ 0000008C ........ BL SerialPutChar
\ 00000090 DEFFFFEA B ??GetInputString_0
\ ??GetInputString_3:
\ 00000094 7080BDE8 POP {R4-R6,PC} ;; return
\ ??GetInputString_2:
\ 00000098 0A0D0000 DC8 "\n\r",+0
\ 0000009C 08200800 DC8 "\b \b"
\ 000000A0 ........ DC32 `?<Constant "Command string size o...">`
258
259 /*******************************************************************************
260 * Function Name : FLASH_SectorMask
261 * Description : Calculate the sectors mask
262 * Input : The image size
263 * Return : The sectors mask
264 *******************************************************************************/
\ In segment CODE_Flash, align 4, keep-with-next
265 u32 FLASH_SectorMask(vu32 Size)
266 {
\ FLASH_SectorMask:
\ 00000000 01002DE9 PUSH {R0}
267 if (Size <= 0x2000)
\ 00000004 00009DE5 LDR R0,[SP, #+0]
\ 00000008 0110A0E3 MOV R1,#+1
\ 0000000C 801D81E3 ORR R1,R1,#0x2000
\ 00000010 010050E1 CMP R0,R1
\ 00000014 0100002A BCS ??FLASH_SectorMask_0
268 return 0x2;
\ 00000018 0200A0E3 MOV R0,#+2
\ 0000001C 2A0000EA B ??FLASH_SectorMask_1
269 if (Size <= 0x4000)
\ ??FLASH_SectorMask_0:
\ 00000020 00009DE5 LDR R0,[SP, #+0]
\ 00000024 0110A0E3 MOV R1,#+1
\ 00000028 401C81E3 ORR R1,R1,#0x4000
\ 0000002C 010050E1 CMP R0,R1
\ 00000030 0100002A BCS ??FLASH_SectorMask_2
270 return 0x6;
\ 00000034 0600A0E3 MOV R0,#+6
\ 00000038 230000EA B ??FLASH_SectorMask_1
271 if (Size <= 0x6000)
\ ??FLASH_SectorMask_2:
\ 0000003C 00009DE5 LDR R0,[SP, #+0]
\ 00000040 0110A0E3 MOV R1,#+1
\ 00000044 601C81E3 ORR R1,R1,#0x6000
\ 00000048 010050E1 CMP R0,R1
\ 0000004C 0100002A BCS ??FLASH_SectorMask_3
272 return 0xE;
\ 00000050 0E00A0E3 MOV R0,#+14
\ 00000054 1C0000EA B ??FLASH_SectorMask_1
273 if (Size <= 0xE000)
\ ??FLASH_SectorMask_3:
\ 00000058 00009DE5 LDR R0,[SP, #+0]
\ 0000005C 0110A0E3 MOV R1,#+1
\ 00000060 E01C81E3 ORR R1,R1,#0xE000
\ 00000064 010050E1 CMP R0,R1
\ 00000068 0100002A BCS ??FLASH_SectorMask_4
274 return 0x1E;
\ 0000006C 1E00A0E3 MOV R0,#+30
\ 00000070 150000EA B ??FLASH_SectorMask_1
275 if (Size <= 0x1E000)
\ ??FLASH_SectorMask_4:
\ 00000074 00009DE5 LDR R0,[SP, #+0]
\ 00000078 0110A0E3 MOV R1,#+1
\ 0000007C 781B81E3 ORR R1,R1,#0x1E000
\ 00000080 010050E1 CMP R0,R1
\ 00000084 0100002A BCS ??FLASH_SectorMask_5
276 return 0x3E;
\ 00000088 3E00A0E3 MOV R0,#+62
\ 0000008C 0E0000EA B ??FLASH_SectorMask_1
277 if (Size <= 0x2E000)
\ ??FLASH_SectorMask_5:
\ 00000090 00009DE5 LDR R0,[SP, #+0]
\ 00000094 0110A0E3 MOV R1,#+1
\ 00000098 B81B81E3 ORR R1,R1,#0x2E000
\ 0000009C 010050E1 CMP R0,R1
\ 000000A0 0100002A BCS ??FLASH_SectorMask_6
278 return 0x7E;
\ 000000A4 7E00A0E3 MOV R0,#+126
\ 000000A8 070000EA B ??FLASH_SectorMask_1
279 if (Size <= 0x3E000)
\ ??FLASH_SectorMask_6:
\ 000000AC 00009DE5 LDR R0,[SP, #+0]
\ 000000B0 0110A0E3 MOV R1,#+1
\ 000000B4 F81B81E3 ORR R1,R1,#0x3E000
\ 000000B8 010050E1 CMP R0,R1
\ 000000BC 0100002A BCS ??FLASH_SectorMask_7
280 return 0xFE;
\ 000000C0 FE00A0E3 MOV R0,#+254
\ 000000C4 000000EA B ??FLASH_SectorMask_1
281 return 0;
\ ??FLASH_SectorMask_7:
\ 000000C8 0000A0E3 MOV R0,#+0
\ ??FLASH_SectorMask_1:
\ 000000CC 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 000000D0 0EF0A0E1 MOV PC,LR ;; return
282 }
283
284 /*******************************************************************************
285 * Function Name : Main_Menu
286 * Description : Display the Main Menu on to HyperTerminal
287 * Input : None
288 * Return : None
289 *******************************************************************************/
\ In segment CODE_Flash, align 4, keep-with-next
290 void Main_Menu(void )
291 {
\ Main_Menu:
\ 00000000 10402DE9 PUSH {R4,LR}
292 u8 key;
293
294 while(1)
295 {
296 SerialPutString("\r\n================== Main Menu ==================\r\n\n");
\ ??Main_Menu_0:
\ 00000004 B4009FE5 LDR R0,??Main_Menu_1 ;; `?<Constant "\\r\\n================== ...">`
\ 00000008 ........ BL SerialPutString
297 SerialPutString(" Download Image To Internal Flash ---------- 1\r\n\n");
\ 0000000C B0009FE5 LDR R0,??Main_Menu_1+0x4 ;; `?<Constant " Download Image To I...">`
\ 00000010 ........ BL SerialPutString
298 SerialPutString(" Execute The New Program ------------------- 2\r\n\n");
\ 00000014 AC009FE5 LDR R0,??Main_Menu_1+0x8 ;; `?<Constant " Execute The New Pro...">`
\ 00000018 ........ BL SerialPutString
299 SerialPutString("===============================================\r\n\n");
\ 0000001C A8009FE5 LDR R0,??Main_Menu_1+0xC ;; `?<Constant "=====================...">`
\ 00000020 ........ BL SerialPutString
300
301 if ((PCU->BOOTCR&0x03)==2)
\ 00000024 5000A0E3 MOV R0,#+80
\ 00000028 A00480E3 ORR R0,R0,#0xA0000000
\ 0000002C B000D0E1 LDRH R0,[R0, #+0]
\ 00000030 0008A0E1 MOV R0,R0, LSL #+16
\ 00000034 2008B0E1 MOVS R0,R0, LSR #+16
\ 00000038 030010E2 ANDS R0,R0,#0x3
\ 0000003C 020050E3 CMP R0,#+2
\ 00000040 0100001A BNE ??Main_Menu_2
302 SerialPutString("IAP remap to RAM \r\n\n");
\ 00000044 84009FE5 LDR R0,??Main_Menu_1+0x10 ;; `?<Constant "IAP remap to RAM \\r\\n\\n">`
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -