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

📄 bsp_ser.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   00000004   ....               LDR.N    R0,??DataTable10_2
   \   00000006   ........           BL       BSP_OS_SemWait
    299          
    300              rx_byte = BSP_Ser_RdByteUnlocked();
   \   0000000A   ........           BL       BSP_Ser_RdByteUnlocked
   \   0000000E   0400               MOVS     R4,R0
    301          
    302              BSP_OS_SemPost(&BSP_SerLock);                               /* Release access to the serial interface.            */
   \   00000010   ....               LDR.N    R0,??DataTable10_2
   \   00000012   ........           BL       BSP_OS_SemPost
    303          
    304              return (rx_byte);
   \   00000016   2000               MOVS     R0,R4
   \   00000018   C0B2               UXTB     R0,R0            ;; ZeroExt  R0,R0,#+24,#+24
   \   0000001A   10BD               POP      {R4,PC}          ;; return
    305          }
    306          
    307          
    308          /*
    309          *********************************************************************************************************
    310          *                                       BSP_Ser_RdByteUnlocked()
    311          *
    312          * Description : Receive a single byte.
    313          *
    314          * Argument(s) : none.
    315          *
    316          * Return(s)   : The received byte.
    317          *
    318          * Caller(s)   : BSP_Ser_RdByte()
    319          *               BSP_Ser_RdStr()
    320          *
    321          * Note(s)     : none.
    322          *********************************************************************************************************
    323          */
    324          

   \                                 In section .text, align 2, keep-with-next
    325          CPU_INT08U  BSP_Ser_RdByteUnlocked (void)
    326          {
   \                     BSP_Ser_RdByteUnlocked:
   \   00000000   10B5               PUSH     {R4,LR}
    327          
    328              CPU_INT08U   rx_byte;
    329          
    330          
    331              USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);              /* Enable the Receive not empty interrupt             */
   \   00000002   0122               MOVS     R2,#+1
   \   00000004   40F22551           MOVW     R1,#+1317
   \   00000008   ....               LDR.N    R0,??DataTable10_4  ;; 0x40004400
   \   0000000A   ........           BL       USART_ITConfig
    332          
    333              BSP_OS_SemWait(&BSP_SerRxWait, 0);                          /* Wait until data is received                        */
   \   0000000E   0021               MOVS     R1,#+0
   \   00000010   ....               LDR.N    R0,??DataTable10_1
   \   00000012   ........           BL       BSP_OS_SemWait
    334          
    335              USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);             /* Disable the Receive not empty interrupt            */
   \   00000016   0022               MOVS     R2,#+0
   \   00000018   40F22551           MOVW     R1,#+1317
   \   0000001C   ....               LDR.N    R0,??DataTable10_4  ;; 0x40004400
   \   0000001E   ........           BL       USART_ITConfig
    336          
    337              rx_byte = BSP_SerRxData;                                    /* Read the data from the temporary register          */
   \   00000022   ....               LDR.N    R0,??DataTable10_6
   \   00000024   0078               LDRB     R0,[R0, #+0]
   \   00000026   0400               MOVS     R4,R0
    338          
    339              return (rx_byte);
   \   00000028   2000               MOVS     R0,R4
   \   0000002A   C0B2               UXTB     R0,R0            ;; ZeroExt  R0,R0,#+24,#+24
   \   0000002C   10BD               POP      {R4,PC}          ;; return
    340          }
    341          
    342          /*
    343          *********************************************************************************************************
    344          *                                                BSP_Ser_RdStr()
    345          *
    346          * Description : This function reads a string from a UART.
    347          *
    348          * Argument(s) : p_str       A pointer to a buffer at which the string can be stored.
    349          *
    350          *               len         The size of the string that will be read.
    351          *
    352          * Return(s)   : none.
    353          *
    354          * Caller(s)   : Application
    355          *
    356          * Note(s)     : none.
    357          *********************************************************************************************************
    358          */
    359          

   \                                 In section .text, align 2, keep-with-next
    360          void  BSP_Ser_RdStr (CPU_CHAR    *p_str,
    361                               CPU_INT16U   len)
    362          {
   \                     BSP_Ser_RdStr:
   \   00000000   2DE9F843           PUSH     {R3-R9,LR}
   \   00000004   0400               MOVS     R4,R0
   \   00000006   0D00               MOVS     R5,R1
    363              CPU_CHAR     *p_char;
    364              CPU_BOOLEAN   rxd_history_char0;
    365              CPU_CHAR      rx_data;
    366              CPU_BOOLEAN   err;
    367          
    368          
    369              rxd_history_char0 = DEF_NO;
   \   00000008   0020               MOVS     R0,#+0
   \   0000000A   0700               MOVS     R7,R0
    370              p_str[0]          = (CPU_CHAR)'\0';
   \   0000000C   0020               MOVS     R0,#+0
   \   0000000E   2070               STRB     R0,[R4, #+0]
    371              p_char            = p_str;
   \   00000010   2600               MOVS     R6,R4
    372          
    373              err = BSP_OS_SemWait(&BSP_SerLock, 0);                      /* Obtain access to the serial interface                */
   \   00000012   0021               MOVS     R1,#+0
   \   00000014   ....               LDR.N    R0,??DataTable10_2
   \   00000016   ........           BL       BSP_OS_SemWait
   \   0000001A   8146               MOV      R9,R0
    374          
    375              if (err != DEF_OK ) {
   \   0000001C   5FFA89F9           UXTB     R9,R9            ;; ZeroExt  R9,R9,#+24,#+24
   \   00000020   B9F1010F           CMP      R9,#+1
   \   00000024   49D1               BNE.N    ??BSP_Ser_RdStr_0
    376                  return;
    377              }
    378          
    379              while (DEF_TRUE)
    380              {
    381                  rx_data = BSP_Ser_RdByteUnlocked();
   \                     ??BSP_Ser_RdStr_1:
   \   00000026   ........           BL       BSP_Ser_RdByteUnlocked
   \   0000002A   8046               MOV      R8,R0
    382          
    383                  if ((rx_data == ASCII_CHAR_CARRIAGE_RETURN) ||          /* Is it '\r' or '\n' character  ?                      */
    384                      (rx_data == ASCII_CHAR_LINE_FEED      )) {
   \   0000002C   5FFA88F8           UXTB     R8,R8            ;; ZeroExt  R8,R8,#+24,#+24
   \   00000030   B8F10D0F           CMP      R8,#+13
   \   00000034   04D0               BEQ.N    ??BSP_Ser_RdStr_2
   \   00000036   5FFA88F8           UXTB     R8,R8            ;; ZeroExt  R8,R8,#+24,#+24
   \   0000003A   B8F10A0F           CMP      R8,#+10
   \   0000003E   0BD1               BNE.N    ??BSP_Ser_RdStr_3
    385          
    386                      BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_LINE_FEED);
   \                     ??BSP_Ser_RdStr_2:
   \   00000040   0A20               MOVS     R0,#+10
   \   00000042   ........           BL       BSP_Ser_WrByteUnlocked
    387                      BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_CARRIAGE_RETURN);
   \   00000046   0D20               MOVS     R0,#+13
   \   00000048   ........           BL       BSP_Ser_WrByteUnlocked
    388                     *p_char = (CPU_CHAR)'\0';                            /* set the null character at the end of the string      */
   \   0000004C   0020               MOVS     R0,#+0
   \   0000004E   3070               STRB     R0,[R6, #+0]
    389          #if (BSP_CFG_SER_CMD_HISTORY_LEN > 0u)
    390                      Str_Copy(BSP_SerCmdHistory, p_str);
    391          #endif
    392                      break;                                              /* exit the loop                                        */
    393                  }
    394          
    395                  if (rx_data == ASCII_CHAR_BACKSPACE) {                  /* Is backspace character                               */
    396                      if (p_char > p_str) {
    397                          BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_BACKSPACE);
    398                          p_char--;                                       /* Decrement the index                                  */
    399                      }
    400                  }
    401          
    402                  if ((ASCII_IsPrint(rx_data)      ) &&
    403                      (rxd_history_char0 == DEF_NO)) {                    /* Is it a printable character ... ?                    */
    404                      BSP_Ser_WrByteUnlocked((CPU_INT08U)rx_data);        /* Echo-back                                            */
    405                     *p_char = rx_data;                                   /* Save the received character in the buffer            */
    406                      p_char++;                                           /* Increment the buffer index                           */
    407                      if (p_char >= &p_str[len]) {
    408                          p_char  = &p_str[len];
    409                      }
    410          
    411                  } else if ((rx_data           == ASCII_CHAR_ESCAPE) &&
    412                             (rxd_history_char0 == DEF_NO           )) {
    413                      rxd_history_char0 = DEF_YES;
    414          
    415          #if (BSP_CFG_SER_CMD_HISTORY_LEN > 0u)
    416                  } else if ((rx_data           == ASCII_CHAR_LEFT_SQUARE_BRACKET) &&
    417                             (rxd_history_char0 == DEF_YES                       )) {
    418          
    419                      while (p_char != p_str) {
    420                          BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_BACKSPACE);
    421                          p_char--;                                       /* Decrement the index                                  */
    422                      }
    423          
    424                      Str_Copy(p_str, BSP_SerCmdHistory);
    425          
    426                      while (*p_char != '\0') {
    427                          BSP_Ser_WrByteUnlocked(*p_char++);
    428                      }
    429          #endif
    430                  } else {
    431                      rxd_history_char0 = DEF_NO;
    432                  }
    433              }
    434          
    435              BSP_OS_SemPost(&BSP_SerLock);                               /* Release access to the serial interface               */
   \   00000050   ....               LDR.N    R0,??DataTable10_2
   \   00000052   ........           BL       BSP_OS_SemPost
    436          }
   \   00000056   30E0               B.N      ??BSP_Ser_RdStr_0
   \                     ??BSP_Ser_RdStr_3:
   \   00000058   5FFA88F8           UXTB     R8,R8            ;; ZeroExt  R8,R8,#+24,#+24
   \   0000005C   B8F1080F           CMP      R8,#+8
   \   00000060   05D1               BNE.N    ??BSP_Ser_RdStr_4
   \   00000062   B442               CMP      R4,R6
   \   00000064   03D2               BCS.N    ??BSP_Ser_RdStr_4
   \   00000066   0820               MOVS     R0,#+8
   \   00000068   ........           BL       BSP_Ser_WrByteUnlocked
   \   0000006C   761E               SUBS     R6,R6,#+1
   \                     ??BSP_Ser_RdStr_4:
   \   0000006E   4046               MOV      R0,R8
   \   00000070   C0B2               UXTB     R0,R0            ;; ZeroExt  R0,R0,#+24,#+24
   \   00000072   ........           BL       ASCII_IsPrint
   \   00000076   0028               CMP      R0,#+0
   \   00000078   11D0               BEQ.N    ??BSP_Ser_RdStr_5
   \   0000007A   FFB2               UXTB     R7,R7            ;; ZeroExt  R7,R7,#+24,#+24
   \   0000007C   002F               CMP      R7,#+0
   \   0000007E   0ED1               BNE.N    ??BSP_Ser_RdStr_5
   \   00000080   4046               MOV      R0,R8
   \   00000082   C0B2               UXTB     R0,R0            ;; ZeroExt  R0,R0,#+24,#+24
   \   00000084   ........           BL       BSP_Ser_WrByteUnlocked
   \   00000088   86F80080           STRB     R8,[R6, #+0]
   \   0000008C   761C               ADDS     R6,R6,#+1
   \   0000008E   ADB2               UXTH     R5,R5            ;; ZeroExt  R5,R5,#+16,#+16
   \   00000090   2819               ADDS     R0,R5,R4
   \   00000092   8642               CMP      R6,R0
   \   00000094   C7D3               BCC.N    ??BSP_Ser_RdStr_1
   \   00000096   ADB2               UXTH     R5,R5            ;; ZeroExt  R5,R5,#+16,#+16
   \   00000098   2819               ADDS     R0,R5,R4
   \   0000009A   0600               MOVS     R6,R0
   \   0000009C   C3E7               B.N      ??BSP_Ser_RdStr_1
   \                     ??BSP_Ser_RdStr_5:
   \   0000009E   5FFA88F8           UXTB     R8,R8            ;; ZeroExt  R8,R8,#+24,#+24
   \   000000A2   B8F11B0F           CMP      R8,#+27
   \   000000A6   05D1               BNE.N    ??BSP_Ser_RdStr_6
   \   000000A8   FFB2               UXTB     R7,R7            ;; ZeroExt  R7,R7,#+24,#+24
   \   000000AA   002F               CMP      R7,#+0
   \   000000AC   02D1               BNE.N    ??BSP_Ser_RdStr_6
   \   000000AE   0120               MOVS     R0,#+1
   \   000000B0   0700               MOVS     R7,R0
   \   000000B2   B8E7               B.N      ??BSP_Ser_RdStr_1
   \                     ??BSP_Ser_RdStr_6:
   \   000000B4   0020               MOVS     R0,#+0
   \   000000B6   0700               MOVS     R7,R0
   \   000000B8   B5E7               B.N      ??BSP_Ser_RdStr_1
   \                     ??BSP_Ser_RdStr_0:
   \   000000BA   BDE8F183           POP      {R0,R4-R9,PC}    ;; return
    437          
    438          
    439          /*
    440          *********************************************************************************************************
    441          *                                          BSP_Ser_WrByteUnlocked()
    442          *
    443          * Description : Writes a single byte to a serial port.
    444          *
    445          * Argument(s) : c           The character to output.
    446          *
    447          * Return(s)   : none.
    448          *
    449          * Caller(s)   : BSP_Ser_WrByte()

⌨️ 快捷键说明

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