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

📄 common.lst

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -