⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.s79

📁 IAPBootLoader源程序是单片机ARM的在系统编程方法1
💻 S79
📖 第 1 页 / 共 3 页
字号:
        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 + -