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

📄 probe_com.lst

📁 针对STM32F103的UCOS移植
💻 LST
📖 第 1 页 / 共 5 页
字号:
    621          *********************************************************************************************************
    622          */
    623          

   \                                 In segment CODE, align 4, keep-with-next
    624          static  CPU_INT16U  ProbeCom_CmdError (CPU_INT08U  *tx_buf,
    625                                                 CPU_INT16U   com_error)
    626          {
   \                     ProbeCom_CmdError:
   \   00000000   11B5               PUSH     {R0,R4,LR}
   \   00000002   0C00               MOVS     R4,R1
    627          #if (PROBE_COM_STAT_EN == DEF_ENABLED)
    628              ProbeCom_ErrPktCtr++;
   \   00000004   ....               LDR.N    R0,??DataTable7  ;; ProbeCom_RxPktCtr
   \   00000006   0169               LDR      R1,[R0, #+16]
   \   00000008   491C               ADDS     R1,R1,#+1
   \   0000000A   0161               STR      R1,[R0, #+16]
    629          #endif
    630          
    631              ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_TX_ERROR);            /*  (a) TX packet format                                */
   \   0000000C   5FF40041           MOVS     R1,#+32768
   \   00000010   6846               MOV      R0,SP
   \   00000012   ........           BL       ProbeCom_StoINT16U
    632              ProbeCom_StoINT8U( &tx_buf, com_error);                         /*  (b) Target status                                   */
   \   00000016   2100               MOVS     R1,R4
   \   00000018   C9B2               UXTB     R1,R1
   \   0000001A   6846               MOV      R0,SP
   \   0000001C   ........           BL       ProbeCom_StoINT8U
    633              ProbeCom_StoINT8U( &tx_buf, ProbeCom_PktModifier());            /*  (c) Modifier                                        */
   \   00000020   ........           BL       ProbeCom_PktModifier
   \   00000024   0100               MOVS     R1,R0
   \   00000026   6846               MOV      R0,SP
   \   00000028   ........           BL       ProbeCom_StoINT8U
    634              return (PROBE_COM_SIZE_TX_HEADER);                              /*  (d) Return TX data segment size                     */
   \   0000002C   0420               MOVS     R0,#+4
   \   0000002E   12BD               POP      {R1,R4,PC}       ;; return
    635                                                                              /*        =  4      (= Tx header size)                  */
    636          }
    637          
    638          
    639          /*
    640          *********************************************************************************************************
    641          *                                       Respond to FMT_QUERY Command
    642          *
    643          * Description: This routine is called to parse the FMT_QUERY command.  This command asks the target
    644          *              about its capabilities, which are returned in response.
    645          *
    646          * Argument(s): rx_buf       is a pointer to the receive  buffer
    647          *              tx_buf       is a pointer to the transmit buffer
    648          *              rx_pkt_sz    is the size  of the receive  packet
    649          *              tx_buf_sz    is the size  of the transmit buffer
    650          *
    651          * Returns    : The number of bytes written to the tx buffer.
    652          *
    653          * Note(s)    : (1) The RX format:
    654          *
    655          *                   (A) A 2-byte format  , indicating the data segment format;                      AND
    656          *                   (B) A 2-byte query   , indicating the length of the remaining data.
    657          *
    658          *                         +-------------------------+-------------------------+
    659          *                         |          Format         |          Query          |
    660          *                         +-------------------------+-------------------------+
    661          *
    662          *              (2) The TX format:
    663          *                   (A) A 2-byte format  , indicating the data segment format;                      AND
    664          *                   (B) A 1-byte status  , indicating the status after the request;                 AND
    665          *                   (C) A 1-byte modifier;                                                          AND
    666          *                   (E) A n-byte answer  , the answer to the query.
    667          *
    668          *                         +-------------------------+------------+------------+
    669          *                         |          Format         |   Status   |  Modifier  |
    670          *                         +-------------------------+------------+------------+
    671          *                         |                       Answer                      |
    672          *                         |                         .                         |
    673          *                         |                         .                         |
    674          *                         |                         .                         |
    675          *                         +---------------------------------------------------+
    676          *
    677          *********************************************************************************************************
    678          */
    679          

   \                                 In segment CODE, align 4, keep-with-next
    680          static  CPU_INT16U  ProbeCom_CmdQuery (CPU_INT08U  *rx_buf,
    681                                                 CPU_INT08U  *tx_buf,
    682                                                 CPU_INT16U   rx_pkt_sz,
    683                                                 CPU_INT16U   tx_buf_sz)
    684          {
   \                     ProbeCom_CmdQuery:
   \   00000000   73B5               PUSH     {R0,R1,R4-R6,LR}
    685              CPU_INT16U   query;
    686              CPU_INT16U   nbytes;
    687              CPU_INT08U   error;
    688          
    689          
    690              query  = 0;
   \   00000002   0026               MOVS     R6,#+0
   \   00000004   3500               MOVS     R5,R6
    691              nbytes = 0;
    692              error  = PROBE_COM_STATUS_OK;
   \   00000006   0124               MOVS     R4,#+1
    693          
    694          
    695              if (rx_pkt_sz == 4) {                                           /* If RX data segment is the expected size              */
   \   00000008   042A               CMP      R2,#+4
   \   0000000A   0DD1               BNE.N    ??ProbeCom_CmdQuery_0
    696                                                                              /*        =  2      (= Rx header size)                  */
    697                                                                              /*        +  2      (= Query         )                  */
    698          
    699                  query = ProbeCom_GetINT16U(&rx_buf);                        /*  (a) Read the query                                  */
   \   0000000C   6846               MOV      R0,SP
   \   0000000E   ........           BL       ProbeCom_GetINT16U
   \   00000012   0500               MOVS     R5,R0
    700          
    701                  switch (query) {
   \   00000014   2149               LDR.N    R1,??ProbeCom_CmdQuery_1  ;; 0x101
   \   00000016   401A               SUBS     R0,R0,R1
   \   00000018   0128               CMP      R0,#+1
   \   0000001A   06D9               BLS.N    ??ProbeCom_CmdQuery_2
   \   0000001C   5FF47061           MOVS     R1,#+3840
   \   00000020   401A               SUBS     R0,R0,R1
   \   00000022   02D0               BEQ.N    ??ProbeCom_CmdQuery_2
    702                      case PROBE_COM_QUERY_MAX_RX_SIZE:
    703                      case PROBE_COM_QUERY_MAX_TX_SIZE:
    704                      case PROBE_COM_QUERY_FMT_SUPPORT:
    705                           break;
    706          
    707                      default:
    708                           error = PROBE_COM_STATUS_QUERY_NOT_SUPPORTED;
   \   00000024   FC24               MOVS     R4,#+252
   \   00000026   00E0               B.N      ??ProbeCom_CmdQuery_2
    709                           break;
    710                  }
    711          
    712              } else {                                                        /* If RX data segment is NOT the expected size          */
    713          
    714                  error = PROBE_COM_STATUS_RX_PKT_WRONG_SIZE;
   \                     ??ProbeCom_CmdQuery_0:
   \   00000028   FE24               MOVS     R4,#+254
    715              }
    716          
    717              if (error != PROBE_COM_STATUS_OK) {                             /* Error                                                */
   \                     ??ProbeCom_CmdQuery_2:
   \   0000002A   012C               CMP      R4,#+1
   \   0000002C   04D0               BEQ.N    ??ProbeCom_CmdQuery_3
    718                  return (ProbeCom_CmdError(tx_buf, error));
   \   0000002E   2100               MOVS     R1,R4
   \   00000030   0198               LDR      R0,[SP, #+4]
   \   00000032   ........           BL       ProbeCom_CmdError
   \   00000036   76BD               POP      {R1,R2,R4-R6,PC}
    719          
    720              }
    721          
    722                                                                              /* No error                                             */
    723              ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_TX_QUERY);            /*  (a) TX packet format                                */
   \                     ??ProbeCom_CmdQuery_3:
   \   00000038   1949               LDR.N    R1,??ProbeCom_CmdQuery_1+0x4  ;; 0x8001
   \   0000003A   01A8               ADD      R0,SP,#+4
   \   0000003C   ........           BL       ProbeCom_StoINT16U
    724              ProbeCom_StoINT8U( &tx_buf, PROBE_COM_STATUS_OK);               /*  (b) Target status                                   */
   \   00000040   0121               MOVS     R1,#+1
   \   00000042   01A8               ADD      R0,SP,#+4
   \   00000044   ........           BL       ProbeCom_StoINT8U
    725              ProbeCom_StoINT8U( &tx_buf, ProbeCom_PktModifier());            /*  (c) Modifier                                        */
   \   00000048   ........           BL       ProbeCom_PktModifier
   \   0000004C   0100               MOVS     R1,R0
   \   0000004E   01A8               ADD      R0,SP,#+4
   \   00000050   ........           BL       ProbeCom_StoINT8U
    726          
    727                                                                              /*  (d) Save TX data segment data                       */
    728              switch (query) {
   \   00000054   1148               LDR.N    R0,??ProbeCom_CmdQuery_1  ;; 0x101
   \   00000056   2D1A               SUBS     R5,R5,R0
   \   00000058   012D               CMP      R5,#+1
   \   0000005A   04D9               BLS.N    ??ProbeCom_CmdQuery_4
   \   0000005C   5FF47060           MOVS     R0,#+3840
   \   00000060   2D1A               SUBS     R5,R5,R0
   \   00000062   06D0               BEQ.N    ??ProbeCom_CmdQuery_5
   \   00000064   16E0               B.N      ??ProbeCom_CmdQuery_6
    729          
    730                  case PROBE_COM_QUERY_MAX_RX_SIZE:
    731                       ProbeCom_StoINT32U(&tx_buf, PROBE_COM_RX_MAX_SIZE);
   \                     ??ProbeCom_CmdQuery_4:
   \   00000066   4021               MOVS     R1,#+64
   \   00000068   01A8               ADD      R0,SP,#+4
   \   0000006A   ........           BL       ProbeCom_StoINT32U
    732                       nbytes  = 4;
   \   0000006E   0426               MOVS     R6,#+4
   \   00000070   10E0               B.N      ??ProbeCom_CmdQuery_6
    733                       break;
    734          
    735                  case PROBE_COM_QUERY_MAX_TX_SIZE:
    736                       ProbeCom_StoINT32U(&tx_buf, PROBE_COM_TX_MAX_SIZE);
    737                       nbytes  = 4;
    738                       break;
    739          
    740                  case PROBE_COM_QUERY_FMT_SUPPORT:
    741                       ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_QUERY      );
   \                     ??ProbeCom_CmdQuery_5:
   \   00000072   0121               MOVS     R1,#+1
   \   00000074   01A8               ADD      R0,SP,#+4
   \   00000076   ........           BL       ProbeCom_StoINT16U
    742                       ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_SIMPLE_RD  );
   \   0000007A   0221               MOVS     R1,#+2
   \   0000007C   01A8               ADD      R0,SP,#+4
   \   0000007E   ........           BL       ProbeCom_StoINT16U
    743                       nbytes  = 4;
    744          #if (PROBE_COM_SUPPORT_WR == DEF_TRUE)
    745                       ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_SIMPLE_WR  );
    746                       nbytes += 2;
    747          #endif
    748                       ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_MULTIPLE_RD);
   \   00000082   0721               MOVS     R1,#+7
   \   00000084   01A8

⌨️ 快捷键说明

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