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

📄 main.lst

📁 本代bootloader通过usb下载代码首先存放在sdram中
💻 LST
📖 第 1 页 / 共 5 页
字号:
    162          
    163          // struct Inter is an interface for transmit information from usb or application
    164          // to bootloader
    165          
    166          // define a global interface varialble

   \                                 In section .bss, align 4
    167          INTERFACE * interface;
   \                     interface:
   \   00000000                      DS8 4
    168          
    169          #define  LEADAPP_STATE                       1
    170          #define  STARTAPP_STATE                      2
    171          #define  LOADAPP_STATE                       3
    172          #define  STARTUSB_STATE                      4
    173          #define  LISTEN                              5
    174          

   \                                 In section .data, align 4
    175          unsigned char *BootVersion = {"1.0"};
   \                     BootVersion:
   \   00000000   ........           DC32 `?<Constant "1.0">`
    176          
    177          //My define variable end ******************************************************
    178          /// SPI driver instance.

   \                                 In section .bss, align 4
    179          static Spid spid;
   \                     spid:
   \   00000000                      DS8 16
    180          
    181          /// AT45 driver instance.

   \                                 In section .bss, align 4
    182          static At45 at45;
   \                     at45:
   \   00000000                      DS8 40
    183          
    184          /// Pins used by the application.

   \                                 In section .rodata, align 4
    185          static const Pin pins[]  = {BOARD_AT45_A_SPI_PINS, BOARD_AT45_A_NPCS_PIN};
   \                     pins:
   \   00000000   0010000000F4       DC32 4096, 0FFFFF400H
   \              FFFF        
   \   00000008   02000100           DC8 2, 0, 1, 0
   \   0000000C   0020000000F4       DC32 8192, 0FFFFF400H
   \              FFFF        
   \   00000014   02000100           DC8 2, 0, 1, 0
   \   00000018   0040000000F4       DC32 16384, 0FFFFF400H
   \              FFFF        
   \   00000020   02000100           DC8 2, 0, 1, 0
   \   00000024   0008000000F4       DC32 2048, 0FFFFF400H
   \              FFFF        
   \   0000002C   02000100           DC8 2, 0, 1, 0
    186          
    187          /// Page buffer.

   \                                 In section .bss, align 4
    188          static unsigned char pBuffer[2112];
   \                     pBuffer:
   \   00000000                      DS8 2112
    189          
    190          //------------------------------------------------------------------------------
    191          //         Internal functions
    192          //------------------------------------------------------------------------------
    193          
    194          //------------------------------------------------------------------------------
    195          /// SPI interrupt handler. Invokes the SPI driver handler to check for pending
    196          /// interrupts.
    197          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    198          static void ISR_Spi(void)
    199          {
   \                     ISR_Spi:
   \   00000000   01402DE9           PUSH     {R0,LR}
    200              SPID_Handler(&spid);
   \   00000004   ........           LDR      R0,??DataTable69  ;; spid
    201          }
   \   00000008   0050BDE8           POP      {R12,LR}
   \   0000000C   ........           B        SPID_Handler     ;; tailcall
    202          
    203          //------------------------------------------------------------------------------
    204          /// Retrieves and returns the At45 current status, or 0 if an error
    205          /// happened.
    206          /// \param pAt45  Pointer to a At45 driver instance.
    207          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    208          static unsigned char AT45_GetStatus(At45 *pAt45)
    209          {
   \                     AT45_GetStatus:
   \   00000000   13402DE9           PUSH     {R0,R1,R4,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
    210              unsigned char error;
    211              unsigned char status;
    212          
    213              // Sanity checks
    214              ASSERT(pAt45, "-F- AT45_GetStatus: pAt45 is null\n\r");
   \   00000008   0400001A           BNE      ??AT45_GetStatus_0
   \   0000000C   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000010   ........           BL       printf
   \   00000014   68009FE5           LDR      R0,??AT45_GetStatus_1  ;; `?<Constant "-F- AT45_GetStatus: p...">`
   \   00000018   ........           BL       printf
   \                     ??AT45_GetStatus_2:
   \   0000001C   FEFFFFEA           B        ??AT45_GetStatus_2
    215          
    216              // Issue a status register read command
    217              error = AT45_SendCommand(pAt45, AT45_STATUS_READ, 1, &status, 1, 0, 0, 0);
   \                     ??AT45_GetStatus_0:
   \   00000020   0010A0E3           MOV      R1,#+0
   \   00000024   0000A0E3           MOV      R0,#+0
   \   00000028   03002DE9           PUSH     {R0,R1}
   \   0000002C   0100A0E3           MOV      R0,#+1
   \   00000030   03002DE9           PUSH     {R0,R1}
   \   00000034   10308DE2           ADD      R3,SP,#+16
   \   00000038   0020A0E1           MOV      R2,R0
   \   0000003C   D710A0E3           MOV      R1,#+215
   \   00000040   0400A0E1           MOV      R0,R4
   \   00000044   ........           BL       AT45_SendCommand
   \   00000048   10D08DE2           ADD      SP,SP,#+16       ;; stack cleaning
    218              ASSERT(!error, "-F- AT45_GetStatus: Failed to issue command.\n\r");
   \   0000004C   000050E3           CMP      R0,#+0
   \   00000050   0400000A           BEQ      ??AT45_GetStatus_3
   \   00000054   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000058   ........           BL       printf
   \   0000005C   24009FE5           LDR      R0,??AT45_GetStatus_1+0x4  ;; `?<Constant "-F- AT45_GetStatus: F...">`
   \   00000060   ........           BL       printf
   \                     ??AT45_GetStatus_4:
   \   00000064   FEFFFFEA           B        ??AT45_GetStatus_4
    219          
    220              // Wait for command to terminate
    221              while (AT45_IsBusy(pAt45));
   \                     ??AT45_GetStatus_3:
   \   00000068   0400A0E1           MOV      R0,R4
   \   0000006C   ........           BL       AT45_IsBusy
   \   00000070   000050E3           CMP      R0,#+0
   \   00000074   FBFFFF1A           BNE      ??AT45_GetStatus_3
    222          
    223              return status;
   \   00000078   0000DDE5           LDRB     R0,[SP, #+0]
   \   0000007C   1C40BDE8           POP      {R2-R4,LR}
   \   00000080   1EFF2FE1           BX       LR               ;; return
   \                     ??AT45_GetStatus_1:
   \   00000084   ........           DC32     `?<Constant "-F- AT45_GetStatus: p...">`
   \   00000088   ........           DC32     `?<Constant "-F- AT45_GetStatus: F...">`
    224          }
    225          
    226          //------------------------------------------------------------------------------
    227          /// Waits for the At45 to be ready to accept new commands.
    228          /// \param pAt45  Pointer to a At45 driver instance.
    229          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    230          static void AT45_WaitReady(At45 *pAt45) 
    231          {
   \                     AT45_WaitReady:
   \   00000000   10402DE9           PUSH     {R4,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
    232              unsigned char ready = 0;
    233          
    234              // Sanity checks
    235              ASSERT(pAt45, "-F- AT45_WaitUntilReady: pAt45 is null\n\r");
   \   00000008   0400001A           BNE      ??AT45_WaitReady_0
   \   0000000C   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000010   ........           BL       printf
   \   00000014   1C009FE5           LDR      R0,??AT45_WaitReady_1  ;; `?<Constant "-F- AT45_WaitUntilRea...">`
   \   00000018   ........           BL       printf
   \                     ??AT45_WaitReady_2:
   \   0000001C   FEFFFFEA           B        ??AT45_WaitReady_2
    236          
    237              // Poll device until it is ready
    238              while (!ready) {
    239          
    240                  ready = AT45_STATUS_READY(AT45_GetStatus(pAt45));
   \                     ??AT45_WaitReady_0:
   \   00000020   0400A0E1           MOV      R0,R4
   \   00000024   ........           BL       AT45_GetStatus
   \   00000028   800010E2           ANDS     R0,R0,#0x80
    241              }
   \   0000002C   FBFFFF0A           BEQ      ??AT45_WaitReady_0
    242          }
   \   00000030   1040BDE8           POP      {R4,LR}
   \   00000034   1EFF2FE1           BX       LR               ;; return
   \                     ??AT45_WaitReady_1:
   \   00000038   ........           DC32     `?<Constant "-F- AT45_WaitUntilRea...">`
    243          
    244          //------------------------------------------------------------------------------
    245          /// Reads and returns the JEDEC identifier of a At45.
    246          /// \param pAt45  Pointer to a At45 driver instance.
    247          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    248          static unsigned int AT45_GetJedecId(At45 *pAt45)
    249          {
   \                     AT45_GetJedecId:
   \   00000000   13402DE9           PUSH     {R0,R1,R4,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
    250              unsigned char error;
    251              unsigned int id;
    252          
    253              // Sanity checks
    254              ASSERT(pAt45, "-F- AT45_GetJedecId: pAt45 is null\n\r");
   \   00000008   0400001A           BNE      ??AT45_GetJedecId_0
   \   0000000C   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000010   ........           BL       printf
   \   00000014   68009FE5           LDR      R0,??AT45_GetJedecId_1  ;; `?<Constant "-F- AT45_GetJedecId: ...">`
   \   00000018   ........           BL       printf
   \                     ??AT45_GetJedecId_2:
   \   0000001C   FEFFFFEA           B        ??AT45_GetJedecId_2
    255          
    256              // Issue a manufacturer and device ID read command
    257              error = AT45_SendCommand(pAt45, AT45_ID_READ, 1, (void *) &id, 4, 0, 0, 0);
   \                     ??AT45_GetJedecId_0:
   \   00000020   0010A0E3           MOV      R1,#+0
   \   00000024   0000A0E3           MOV      R0,#+0
   \   00000028   03002DE9           PUSH     {R0,R1}
   \   0000002C   0400A0E3           MOV      R0,#+4
   \   00000030   03002DE9           PUSH     {R0,R1}
   \   00000034   10308DE2           ADD      R3,SP,#+16
   \   00000038   0120A0E3           MOV      R2,#+1
   \   0000003C   9F10A0E3           MOV      R1,#+159
   \   00000040   0400A0E1           MOV      R0,R4
   \   00000044   ........           BL       AT45_SendCommand
   \   00000048   10D08DE2           ADD      SP,SP,#+16       ;; stack cleaning
    258              ASSERT(!error, "-F- AT45_GetJedecId: Could not issue command.\n\r");
   \   0000004C   000050E3           CMP      R0,#+0
   \   00000050   0400000A           BEQ      ??AT45_GetJedecId_3
   \   00000054   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000058   ........           BL       printf

⌨️ 快捷键说明

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