📄 common.s79
字号:
BL SerialPutString
MOV R0,#+0
MOVS R5,R0
B ??GetInputString_0
??GetInputString_5:
CMP R6,#+32
BCC ??GetInputString_0
CMP R6,#+127
BCS ??GetInputString_0
STRB R6,[R5, +R4]
ADDS R5,R5,#+1
MOVS R0,R6
BL SerialPutChar
B ??GetInputString_0
??GetInputString_3:
POP {R4-R6,PC} ;; return
DATA
??GetInputString_2:
DC8 "\n\r",+0
DC8 "\b \b"
DC32 `?<Constant "Command string size o...">`
CFI EndBlock cfiBlock7
// 258
// 259 /*******************************************************************************
// 260 * Function Name : FLASH_SectorMask
// 261 * Description : Calculate the sectors mask
// 262 * Input : The image size
// 263 * Return : The sectors mask
// 264 *******************************************************************************/
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock8 Using cfiCommon0
CFI Function FLASH_SectorMask
ARM
// 265 u32 FLASH_SectorMask(vu32 Size)
// 266 {
FLASH_SectorMask:
PUSH {R0}
CFI CFA R13+4
// 267 if (Size <= 0x2000)
LDR R0,[SP, #+0]
MOV R1,#+1
ORR R1,R1,#0x2000
CMP R0,R1
BCS ??FLASH_SectorMask_0
// 268 return 0x2;
MOV R0,#+2
B ??FLASH_SectorMask_1
// 269 if (Size <= 0x4000)
??FLASH_SectorMask_0:
LDR R0,[SP, #+0]
MOV R1,#+1
ORR R1,R1,#0x4000
CMP R0,R1
BCS ??FLASH_SectorMask_2
// 270 return 0x6;
MOV R0,#+6
B ??FLASH_SectorMask_1
// 271 if (Size <= 0x6000)
??FLASH_SectorMask_2:
LDR R0,[SP, #+0]
MOV R1,#+1
ORR R1,R1,#0x6000
CMP R0,R1
BCS ??FLASH_SectorMask_3
// 272 return 0xE;
MOV R0,#+14
B ??FLASH_SectorMask_1
// 273 if (Size <= 0xE000)
??FLASH_SectorMask_3:
LDR R0,[SP, #+0]
MOV R1,#+1
ORR R1,R1,#0xE000
CMP R0,R1
BCS ??FLASH_SectorMask_4
// 274 return 0x1E;
MOV R0,#+30
B ??FLASH_SectorMask_1
// 275 if (Size <= 0x1E000)
??FLASH_SectorMask_4:
LDR R0,[SP, #+0]
MOV R1,#+1
ORR R1,R1,#0x1E000
CMP R0,R1
BCS ??FLASH_SectorMask_5
// 276 return 0x3E;
MOV R0,#+62
B ??FLASH_SectorMask_1
// 277 if (Size <= 0x2E000)
??FLASH_SectorMask_5:
LDR R0,[SP, #+0]
MOV R1,#+1
ORR R1,R1,#0x2E000
CMP R0,R1
BCS ??FLASH_SectorMask_6
// 278 return 0x7E;
MOV R0,#+126
B ??FLASH_SectorMask_1
// 279 if (Size <= 0x3E000)
??FLASH_SectorMask_6:
LDR R0,[SP, #+0]
MOV R1,#+1
ORR R1,R1,#0x3E000
CMP R0,R1
BCS ??FLASH_SectorMask_7
// 280 return 0xFE;
MOV R0,#+254
B ??FLASH_SectorMask_1
// 281 return 0;
??FLASH_SectorMask_7:
MOV R0,#+0
??FLASH_SectorMask_1:
ADD SP,SP,#+4 ;; stack cleaning
CFI CFA R13+0
MOV PC,LR ;; return
CFI EndBlock cfiBlock8
// 282 }
// 283
// 284 /*******************************************************************************
// 285 * Function Name : Main_Menu
// 286 * Description : Display the Main Menu on to HyperTerminal
// 287 * Input : None
// 288 * Return : None
// 289 *******************************************************************************/
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock9 Using cfiCommon0
CFI Function Main_Menu
ARM
// 290 void Main_Menu(void )
// 291 {
Main_Menu:
PUSH {R4,LR}
CFI R4 Frame(CFA, -8)
CFI ?RET Frame(CFA, -4)
CFI CFA R13+8
// 292 u8 key;
// 293
// 294 while(1)
// 295 {
// 296 SerialPutString("\r\n================== Main Menu ==================\r\n\n");
??Main_Menu_0:
LDR R0,??Main_Menu_1 ;; `?<Constant "\\r\\n================== ...">`
BL SerialPutString
// 297 SerialPutString(" Download Image To Internal Flash ---------- 1\r\n\n");
LDR R0,??Main_Menu_1+0x4 ;; `?<Constant " Download Image To I...">`
BL SerialPutString
// 298 SerialPutString(" Execute The New Program ------------------- 2\r\n\n");
LDR R0,??Main_Menu_1+0x8 ;; `?<Constant " Execute The New Pro...">`
BL SerialPutString
// 299 SerialPutString("===============================================\r\n\n");
LDR R0,??Main_Menu_1+0xC ;; `?<Constant "=====================...">`
BL SerialPutString
// 300
// 301 if ((PCU->BOOTCR&0x03)==2)
MOV R0,#+80
ORR R0,R0,#0xA0000000
LDRH R0,[R0, #+0]
MOV R0,R0, LSL #+16
MOVS R0,R0, LSR #+16
ANDS R0,R0,#0x3
CMP R0,#+2
BNE ??Main_Menu_2
// 302 SerialPutString("IAP remap to RAM \r\n\n");
LDR R0,??Main_Menu_1+0x10 ;; `?<Constant "IAP remap to RAM \\r\\n\\n">`
BL SerialPutString
// 303 if ((PCU->BOOTCR&0x03)==0)
??Main_Menu_2:
MOV R0,#+80
ORR R0,R0,#0xA0000000
LDRH R0,[R0, #+0]
TST R0,#0x3
BNE ??Main_Menu_3
// 304 SerialPutString("IAP remap to Flash \r\n\n");
LDR R0,??Main_Menu_1+0x14 ;; `?<Constant "IAP remap to Flash \\r\\n\\n">`
BL SerialPutString
// 305
// 306 key = GetKey();
??Main_Menu_3:
BL GetKey
MOVS R4,R0
// 307 if (key == 0x31)
CMP R4,#+49
BNE ??Main_Menu_4
// 308 {
// 309 SerialDownload();
_BLF SerialDownload,??SerialDownload??rA
B ??Main_Menu_0
// 310 }
// 311 else if (key == 0x32)
??Main_Menu_4:
CMP R4,#+50
BNE ??Main_Menu_5
// 312 {
// 313 /* Restore the default RCCU configuration */
// 314 RCCU_RCLKSourceConfig(RCCU_CLOCK2);
MOV R0,#+2
_BLF RCCU_RCLKSourceConfig,??RCCU_RCLKSourceConfig??rA
// 315 /* Jump to the new program */
// 316
// 317 jump_function =(pointer) 0x40002000 ;
LDR R0,??Main_Menu_1+0x18 ;; jump_function
MOV R1,#+1073741824
ORR R1,R1,#0x2000
STR R1,[R0, #+0]
// 318 jump_function();
LDR R0,??Main_Menu_1+0x18 ;; jump_function
LDR R0,[R0, #+0]
MOV LR,PC
MOV PC,R0
B ??Main_Menu_0
// 319 }
// 320 else
// 321 {
// 322 SerialPutString("Invalid Number ! ==> The number should be either 1 or 2\r\n");
??Main_Menu_5:
LDR R0,??Main_Menu_1+0x1C ;; `?<Constant "Invalid Number ! ==> ...">`
BL SerialPutString
B ??Main_Menu_0
DATA
??Main_Menu_1:
DC32 `?<Constant "\\r\\n================== ...">`
DC32 `?<Constant " Download Image To I...">`
DC32 `?<Constant " Execute The New Pro...">`
DC32 `?<Constant "=====================...">`
DC32 `?<Constant "IAP remap to RAM \\r\\n\\n">`
DC32 `?<Constant "IAP remap to Flash \\r\\n\\n">`
DC32 jump_function
DC32 `?<Constant "Invalid Number ! ==> ...">`
CFI EndBlock cfiBlock9
// 323 }
// 324 }
// 325 }
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock10 Using cfiCommon0
CFI NoFunction
ARM
??rA??divu32_a:
LDR R12,??Subroutine0_0 ;; ??divu32_a
MOV PC,R12
DATA
??Subroutine0_0:
DC32 ??divu32_a
CFI EndBlock cfiBlock10
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock11 Using cfiCommon0
CFI NoFunction
ARM
??UART_FifoReset??rA:
LDR R12,??Subroutine1_0 ;; UART_FifoReset
MOV PC,R12
DATA
??Subroutine1_0:
DC32 UART_FifoReset
CFI EndBlock cfiBlock11
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock12 Using cfiCommon0
CFI NoFunction
ARM
??UART_ByteSend??rA:
LDR R12,??Subroutine2_0 ;; UART_ByteSend
MOV PC,R12
DATA
??Subroutine2_0:
DC32 UART_ByteSend
CFI EndBlock cfiBlock12
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock13 Using cfiCommon0
CFI NoFunction
ARM
??SerialDownload??rA:
LDR R12,??Subroutine3_0 ;; SerialDownload
MOV PC,R12
DATA
??Subroutine3_0:
DC32 SerialDownload
CFI EndBlock cfiBlock13
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock14 Using cfiCommon0
CFI NoFunction
ARM
??RCCU_RCLKSourceConfig??rA:
LDR R12,??Subroutine4_0 ;; RCCU_RCLKSourceConfig
MOV PC,R12
DATA
??Subroutine4_0:
DC32 RCCU_RCLKSourceConfig
CFI EndBlock cfiBlock14
RSEG INITTAB:CODE:ROOT(2)
DATA
?init?tab?DATA_Z:
DCD sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z)
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "User Cancelled \\r\\n">`:
DATA
DC8 "User Cancelled \015\012"
DC8 0, 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "Error, Input again: \\r\\n">`:
DATA
DC8 "Error, Input again: \015\012"
DC8 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
DATA
DC8 "\010 \010"
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "Command string size o...">`:
DATA
DC8 "Command string size overflow\015\012"
DC8 0
RSEG DATA_C:CONST:SORT:NOROOT(0)
DATA
DC8 "\012\015"
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "\\r\\n================== ...">`:
DATA
DC8 0DH, 0AH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 20H, 4DH, 61H, 69H
DC8 6EH, 20H, 4DH, 65H, 6EH, 75H, 20H, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 0DH, 0AH, 0AH, 0
DC8 0, 0, 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant " Download Image To I...">`:
DATA
DC8 20H, 20H, 44H, 6FH, 77H, 6EH, 6CH, 6FH
DC8 61H, 64H, 20H, 49H, 6DH, 61H, 67H, 65H
DC8 20H, 54H, 6FH, 20H, 49H, 6EH, 74H, 65H
DC8 72H, 6EH, 61H, 6CH, 20H, 46H, 6CH, 61H
DC8 73H, 68H, 20H, 2DH, 2DH, 2DH, 2DH, 2DH
DC8 2DH, 2DH, 2DH, 2DH, 2DH, 20H, 31H, 0DH
DC8 0AH, 0AH, 0
DC8 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant " Execute The New Pro...">`:
DATA
DC8 20H, 20H, 45H, 78H, 65H, 63H, 75H, 74H
DC8 65H, 20H, 54H, 68H, 65H, 20H, 4EH, 65H
DC8 77H, 20H, 50H, 72H, 6FH, 67H, 72H, 61H
DC8 6DH, 20H, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DC8 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DC8 2DH, 2DH, 2DH, 2DH, 2DH, 20H, 32H, 0DH
DC8 0AH, 0AH, 0
DC8 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "=====================...">`:
DATA
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH
DC8 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 3DH, 0DH
DC8 0AH, 0AH, 0
DC8 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "IAP remap to RAM \\r\\n\\n">`:
DATA
DC8 "IAP remap to RAM \015\012\012"
DC8 0, 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "IAP remap to Flash \\r\\n\\n">`:
DATA
DC8 "IAP remap to Flash \015\012\012"
DC8 0
RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "Invalid Number ! ==> ...">`:
DATA
DC8 49H, 6EH, 76H, 61H, 6CH, 69H, 64H, 20H
DC8 4EH, 75H, 6DH, 62H, 65H, 72H, 20H, 21H
DC8 20H, 3DH, 3DH, 3EH, 20H, 54H, 68H, 65H
DC8 20H, 6EH, 75H, 6DH, 62H, 65H, 72H, 20H
DC8 73H, 68H, 6FH, 75H, 6CH, 64H, 20H, 62H
DC8 65H, 20H, 65H, 69H, 74H, 68H, 65H, 72H
DC8 20H, 31H, 20H, 6FH, 72H, 20H, 32H, 0DH
DC8 0AH, 0
DC8 0, 0
END
// 326 /*******************(C)COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/
// 327
//
// 1 708 bytes in segment CODE_Flash
// 403 bytes in segment DATA_C
// 8 bytes in segment DATA_Z
// 12 bytes in segment INITTAB
//
// 1 648 bytes of CODE memory (+ 72 bytes shared)
// 403 bytes of CONST memory
// 8 bytes of DATA memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -