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

📄 stm32f10x_usart.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
    149            {
    150              RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
   \   0000005E   0121               MOVS     R1,#+1
   \   00000060   5FF40020           MOVS     R0,#+524288
   \   00000064   ........           BL       RCC_APB1PeriphResetCmd
    151              RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
   \   00000068   0021               MOVS     R1,#+0
   \   0000006A   5FF40020           MOVS     R0,#+524288
   \   0000006E   ........           BL       RCC_APB1PeriphResetCmd
   \   00000072   0CE0               B.N      ??USART_DeInit_1
    152            }    
    153            else
    154            {
    155              if (USARTx == UART5)
   \                     ??USART_DeInit_4:
   \   00000074   ....               LDR.N    R0,??DataTable1_4  ;; 0x40005000
   \   00000076   8442               CMP      R4,R0
   \   00000078   09D1               BNE.N    ??USART_DeInit_1
    156              { 
    157                RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
   \   0000007A   0121               MOVS     R1,#+1
   \   0000007C   5FF48010           MOVS     R0,#+1048576
   \   00000080   ........           BL       RCC_APB1PeriphResetCmd
    158                RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
   \   00000084   0021               MOVS     R1,#+0
   \   00000086   5FF48010           MOVS     R0,#+1048576
   \   0000008A   ........           BL       RCC_APB1PeriphResetCmd
    159              }
    160            }
    161          }
   \                     ??USART_DeInit_1:
   \   0000008E   10BD               POP      {R4,PC}          ;; return
    162          
    163          /**
    164            * @brief  Initializes the USARTx peripheral according to the specified
    165            *   parameters in the USART_InitStruct .
    166            * @param  USARTx: Select the USART or the UART peripheral. 
    167            *   This parameter can be one of the following values:
    168            *   USART1, USART2, USART3, UART4 or UART5.
    169            * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure
    170            *   that contains the configuration information for the specified USART peripheral.
    171            * @retval None
    172            */

   \                                 In section .text, align 2, keep-with-next
    173          void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
    174          {
   \                     USART_Init:
   \   00000000   2DE9F047           PUSH     {R4-R10,LR}
   \   00000004   86B0               SUB      SP,SP,#+24
   \   00000006   0400               MOVS     R4,R0
   \   00000008   0D00               MOVS     R5,R1
    175            uint32_t tmpreg = 0x00, apbclock = 0x00;
   \   0000000A   0026               MOVS     R6,#+0
   \   0000000C   0027               MOVS     R7,#+0
    176            uint32_t integerdivider = 0x00;
   \   0000000E   5FF00008           MOVS     R8,#+0
    177            uint32_t fractionaldivider = 0x00;
   \   00000012   5FF00009           MOVS     R9,#+0
    178            uint32_t usartxbase = 0;
   \   00000016   5FF0000A           MOVS     R10,#+0
    179            RCC_ClocksTypeDef RCC_ClocksStatus;
    180            /* Check the parameters */
    181            assert_param(IS_USART_ALL_PERIPH(USARTx));
    182            assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate));  
    183            assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength));
    184            assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits));
    185            assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity));
    186            assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode));
    187            assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl));
    188            /* The hardware flow control is available only for USART1, USART2 and USART3 */
    189            if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None)
   \   0000001A   A889               LDRH     R0,[R5, #+12]
   \   0000001C   0028               CMP      R0,#+0
    190            {
    191              assert_param(IS_USART_123_PERIPH(USARTx));
    192            }
    193          
    194            usartxbase = (uint32_t)USARTx;
   \                     ??USART_Init_0:
   \   0000001E   A246               MOV      R10,R4
    195          
    196          /*---------------------------- USART CR2 Configuration -----------------------*/
    197            tmpreg = USARTx->CR2;
   \   00000020   208A               LDRH     R0,[R4, #+16]
   \   00000022   0600               MOVS     R6,R0
    198            /* Clear STOP[13:12] bits */
    199            tmpreg &= CR2_STOP_CLEAR_Mask;
   \   00000024   4CF6FF70           MOVW     R0,#+53247
   \   00000028   0640               ANDS     R6,R0,R6
    200            /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/
    201            /* Set STOP[13:12] bits according to USART_StopBits value */
    202            tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
   \   0000002A   E888               LDRH     R0,[R5, #+6]
   \   0000002C   0643               ORRS     R6,R0,R6
    203            
    204            /* Write to USART CR2 */
    205            USARTx->CR2 = (uint16_t)tmpreg;
   \   0000002E   2682               STRH     R6,[R4, #+16]
    206          
    207          /*---------------------------- USART CR1 Configuration -----------------------*/
    208            tmpreg = USARTx->CR1;
   \   00000030   A089               LDRH     R0,[R4, #+12]
   \   00000032   0600               MOVS     R6,R0
    209            /* Clear M, PCE, PS, TE and RE bits */
    210            tmpreg &= CR1_CLEAR_Mask;
   \   00000034   4EF6F310           MOVW     R0,#+59891
   \   00000038   0640               ANDS     R6,R0,R6
    211            /* Configure the USART Word Length, Parity and mode ----------------------- */
    212            /* Set the M bits according to USART_WordLength value */
    213            /* Set PCE and PS bits according to USART_Parity value */
    214            /* Set TE and RE bits according to USART_Mode value */
    215            tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
    216                      USART_InitStruct->USART_Mode;
   \   0000003A   A888               LDRH     R0,[R5, #+4]
   \   0000003C   2989               LDRH     R1,[R5, #+8]
   \   0000003E   0843               ORRS     R0,R1,R0
   \   00000040   6989               LDRH     R1,[R5, #+10]
   \   00000042   0843               ORRS     R0,R1,R0
   \   00000044   0643               ORRS     R6,R0,R6
    217            /* Write to USART CR1 */
    218            USARTx->CR1 = (uint16_t)tmpreg;
   \   00000046   A681               STRH     R6,[R4, #+12]
    219          
    220          /*---------------------------- USART CR3 Configuration -----------------------*/  
    221            tmpreg = USARTx->CR3;
   \   00000048   A08A               LDRH     R0,[R4, #+20]
   \   0000004A   0600               MOVS     R6,R0
    222            /* Clear CTSE and RTSE bits */
    223            tmpreg &= CR3_CLEAR_Mask;
   \   0000004C   4FF6FF40           MOVW     R0,#+64767
   \   00000050   0640               ANDS     R6,R0,R6
    224            /* Configure the USART HFC -------------------------------------------------*/
    225            /* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
    226            tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
   \   00000052   A889               LDRH     R0,[R5, #+12]
   \   00000054   0643               ORRS     R6,R0,R6
    227            /* Write to USART CR3 */
    228            USARTx->CR3 = (uint16_t)tmpreg;
   \   00000056   A682               STRH     R6,[R4, #+20]
    229          
    230          /*---------------------------- USART BRR Configuration -----------------------*/
    231            /* Configure the USART Baud Rate -------------------------------------------*/
    232            RCC_GetClocksFreq(&RCC_ClocksStatus);
   \   00000058   00A8               ADD      R0,SP,#+0
   \   0000005A   ........           BL       RCC_GetClocksFreq
    233            if (usartxbase == USART1_BASE)
   \   0000005E   ....               LDR.N    R0,??DataTable1  ;; 0x40013800
   \   00000060   8245               CMP      R10,R0
   \   00000062   02D1               BNE.N    ??USART_Init_1
    234            {
    235              apbclock = RCC_ClocksStatus.PCLK2_Frequency;
   \   00000064   0398               LDR      R0,[SP, #+12]
   \   00000066   0700               MOVS     R7,R0
   \   00000068   01E0               B.N      ??USART_Init_2
    236            }
    237            else
    238            {
    239              apbclock = RCC_ClocksStatus.PCLK1_Frequency;
   \                     ??USART_Init_1:
   \   0000006A   0298               LDR      R0,[SP, #+8]
   \   0000006C   0700               MOVS     R7,R0
    240            }
    241            
    242            /* Determine the integer part */
    243            if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
   \                     ??USART_Init_2:
   \   0000006E   A089               LDRH     R0,[R4, #+12]
   \   00000070   0004               LSLS     R0,R0,#+16
   \   00000072   08D5               BPL.N    ??USART_Init_3
    244            {
    245              /* Integer part computing in case Oversampling mode is 8 Samples */
    246              integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));    
   \   00000074   1920               MOVS     R0,#+25
   \   00000076   00FB07F0           MUL      R0,R0,R7
   \   0000007A   2968               LDR      R1,[R5, #+0]
   \   0000007C   4900               LSLS     R1,R1,#+1
   \   0000007E   B0FBF1F0           UDIV     R0,R0,R1
   \   00000082   8046               MOV      R8,R0
   \   00000084   07E0               B.N      ??USART_Init_4
    247            }
    248            else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
    249            {
    250              /* Integer part computing in case Oversampling mode is 16 Samples */
    251              integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));    
   \                     ??USART_Init_3:
   \   00000086   1920               MOVS     R0,#+25
   \   00000088   00FB07F0           MUL      R0,R0,R7
   \   0000008C   2968               LDR      R1,[R5, #+0]
   \   0000008E   8900               LSLS     R1,R1,#+2
   \   00000090   B0FBF1F0           UDIV     R0,R0,R1
   \   00000094   8046               MOV      R8,R0
    252            }
    253            tmpreg = (integerdivider / 100) << 4;
   \                     ??USART_Init_4:
   \   00000096   6420               MOVS     R0,#+100
   \   00000098   B8FBF0F0           UDIV     R0,R8,R0
   \   0000009C   0001               LSLS     R0,R0,#+4
   \   0000009E   0600               MOVS     R6,R0
    254          
    255            /* Determine the fractional part */
    256            fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
   \   000000A0   3009               LSRS     R0,R6,#+4
   \   000000A2   6421               MOVS     R1,#+100
   \   000000A4   01FB1080           MLS      R0,R1,R0,R8
   \   000000A8   8146               MOV      R9,R0
    257          
    258            /* Implement the fractional part in the register */
    259            if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
   \   000000AA   A089               LDRH     R0,[R4, #+12]
   \   000000AC   0004               LSLS     R0,R0,#+16
   \   000000AE   09D5               BPL.N    ??USART_Init_5
    260            {
    261              tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
   \   000000B0   5FEAC900           LSLS     R0,R9,#+3
   \   000000B4   3230               ADDS     R0,R0,#+50
   \   000000B6   6421               MOVS     R1,#+100
   \   000000B8   B0FBF1F0           UDIV     R0,R0,R1
   \   000000BC   10F00700           ANDS     R0,R0,#0x7
   \   000000C0   0643               ORRS     R6,R0,R6
   \   000000C2   08E0               B.N      ??USART_Init_6
    262            }
    263            else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
    264            {
    265              tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
   \                     ??USART_Init_5:
   \   000000C4   5FEA0910           LSLS     R0,R9,#+4
   \   000000C8   3230               ADDS     R0,R0,#+50
   \   000000CA   6421               MOVS     R1,#+100
   \   000000CC   B0FBF1F0           UDIV     R0,R0,R1
   \   000000D0   10F00F00           ANDS     R0,R0,#0xF
   \   000000D4   0643               ORRS     R6,R0,R6
    266            }
    267            
    268            /* Write to USART BRR */

⌨️ 快捷键说明

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