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

📄 stm32f10x_usart.txt

📁 基于cortex arm stm32f103RB的智能卡(SmartCard)程序。编译通过
💻 TXT
📖 第 1 页 / 共 3 页
字号:
000008  8b02              LDRH     r2,[r0,#0x18]
00000a  430a              ORRS     r2,r2,r1
00000c  8302              STRH     r2,[r0,#0x18]
;;;553    }
00000e  4770              BX       lr
                          ENDP


                          AREA ||i.USART_SmartCardCmd||, CODE, READONLY, ALIGN=1

                  USART_SmartCardCmd PROC
;;;569        
;;;570      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;571      {
;;;572        /* Enable the SC mode by setting the SCEN bit in the CR3 register */
;;;573        USARTx->CR3 |= CR3_SCEN_Set;
000002  8a81              LDRH     r1,[r0,#0x14]
000004  d002              BEQ      |L17.12|
000006  f041f041          ORR      r1,r1,#0x20
00000a  e001              B        |L17.16|
                  |L17.12|
;;;574      }
;;;575      else
;;;576      {
;;;577        /* Disable the SC mode by clearing the SCEN bit in the CR3 register */
;;;578        USARTx->CR3 &= CR3_SCEN_Reset;
00000c  f021f021          BIC      r1,r1,#0x20
                  |L17.16|
000010  8281              STRH     r1,[r0,#0x14]
;;;579      }
;;;580    }
000012  4770              BX       lr
                          ENDP


                          AREA ||i.USART_SmartCardNACKCmd||, CODE, READONLY, ALIGN=1

                  USART_SmartCardNACKCmd PROC
;;;596       
;;;597      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;598      {
;;;599        /* Enable the NACK transmission by setting the NACK bit in the CR3 register */
;;;600        USARTx->CR3 |= CR3_NACK_Set;
000002  8a81              LDRH     r1,[r0,#0x14]
000004  d002              BEQ      |L18.12|
000006  f041f041          ORR      r1,r1,#0x10
00000a  e001              B        |L18.16|
                  |L18.12|
;;;601      }
;;;602      else
;;;603      {
;;;604        /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */
;;;605        USARTx->CR3 &= CR3_NACK_Reset;
00000c  f021f021          BIC      r1,r1,#0x10
                  |L18.16|
000010  8281              STRH     r1,[r0,#0x14]
;;;606      }
;;;607    
;;;608    }
000012  4770              BX       lr
                          ENDP


                          AREA ||i.USART_HalfDuplexCmd||, CODE, READONLY, ALIGN=1

                  USART_HalfDuplexCmd PROC
;;;624      
;;;625      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;626      {
;;;627        /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
;;;628        USARTx->CR3 |= CR3_HDSEL_Set;
000002  8a81              LDRH     r1,[r0,#0x14]
000004  d002              BEQ      |L19.12|
000006  f041f041          ORR      r1,r1,#8
00000a  e001              B        |L19.16|
                  |L19.12|
;;;629      }
;;;630      else
;;;631      {
;;;632        /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */
;;;633        USARTx->CR3 &= CR3_HDSEL_Reset;
00000c  f021f021          BIC      r1,r1,#8
                  |L19.16|
000010  8281              STRH     r1,[r0,#0x14]
;;;634      }
;;;635    }
000012  4770              BX       lr
                          ENDP


                          AREA ||i.USART_IrDAConfig||, CODE, READONLY, ALIGN=1

                  USART_IrDAConfig PROC
;;;653        
;;;654      USARTx->CR3 &= CR3_IRLP_Mask;
000000  8a82              LDRH     r2,[r0,#0x14]
000002  f022f022          BIC      r2,r2,#4
000006  8282              STRH     r2,[r0,#0x14]
;;;655      USARTx->CR3 |= USART_IrDAMode;
000008  8a82              LDRH     r2,[r0,#0x14]
00000a  430a              ORRS     r2,r2,r1
00000c  8282              STRH     r2,[r0,#0x14]
;;;656    }
00000e  4770              BX       lr
                          ENDP


                          AREA ||i.USART_IrDACmd||, CODE, READONLY, ALIGN=1

                  USART_IrDACmd PROC
;;;672        
;;;673      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;674      {
;;;675        /* Enable the IrDA mode by setting the IREN bit in the CR3 register */
;;;676        USARTx->CR3 |= CR3_IREN_Set;
000002  8a81              LDRH     r1,[r0,#0x14]
000004  d002              BEQ      |L21.12|
000006  f041f041          ORR      r1,r1,#2
00000a  e001              B        |L21.16|
                  |L21.12|
;;;677      }
;;;678      else
;;;679      {
;;;680        /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */
;;;681        USARTx->CR3 &= CR3_IREN_Reset;
00000c  f021f021          BIC      r1,r1,#2
                  |L21.16|
000010  8281              STRH     r1,[r0,#0x14]
;;;682      }
;;;683    }
000012  4770              BX       lr
                          ENDP


                          AREA ||i.USART_GetFlagStatus||, CODE, READONLY, ALIGN=1

                  USART_GetFlagStatus PROC
;;;705    FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
;;;706    {
000000  4602              MOV      r2,r0
;;;707      FlagStatus bitstatus = RESET;
;;;708      
;;;709      /* Check the parameters */
;;;710      assert_param(IS_USART_FLAG(USART_FLAG));
;;;711      
;;;712      if ((USARTx->SR & USART_FLAG) != (u16)RESET)
000002  8812              LDRH     r2,[r2,#0]
000004  2000              MOVS     r0,#0
000006  420a              TST      r2,r1
000008  d000              BEQ      |L22.12|
;;;713      {
;;;714        bitstatus = SET;
00000a  2001              MOVS     r0,#1
                  |L22.12|
;;;715      }
;;;716      else
;;;717      {
;;;718        bitstatus = RESET;
;;;719      }
;;;720      return bitstatus;
;;;721    }
00000c  4770              BX       lr
                          ENDP


                          AREA ||i.USART_ClearFlag||, CODE, READONLY, ALIGN=1

                  USART_ClearFlag PROC
;;;747       
;;;748      USARTx->SR &= (u16)~USART_FLAG;
000000  8802              LDRH     r2,[r0,#0]
000002  438a              BICS     r2,r2,r1
000004  8002              STRH     r2,[r0,#0]
;;;749    }
000006  4770              BX       lr
                          ENDP


                          AREA ||i.USART_GetITStatus||, CODE, READONLY, ALIGN=1

                  USART_GetITStatus PROC
;;;771    ITStatus USART_GetITStatus(USART_TypeDef* USARTx, u16 USART_IT)
;;;772    {
000000  b570              PUSH     {r4-r6,lr}
;;;773      u32 bitpos = 0x00, itmask = 0x00, usartreg = 0;
;;;774      ITStatus bitstatus = RESET;
;;;775    
;;;776      /* Check the parameters */
;;;777      assert_param(IS_USART_IT(USART_IT));
;;;778      
;;;779      /* Get the USART register index */
;;;780      usartreg = (((u8)USART_IT) >> 0x05);
;;;781    
;;;782      /* Get the interrupt position */
;;;783      itmask = USART_IT & USART_IT_Mask;
000002  f001f001          AND      r5,r1,#0x1f
;;;784    
;;;785      itmask = (u32)0x01 << itmask;
000006  2601              MOVS     r6,#1
000008  2400              MOVS     r4,#0
00000a  f3c1f3c1          UBFX     r3,r1,#5,#3
00000e  fa06fa06          LSL      r2,r6,r5
;;;786      
;;;787      if (usartreg == 0x01) /* The IT  is in CR1 register */
000012  2b01              CMP      r3,#1
000014  d101              BNE      |L24.26|
;;;788      {
;;;789        itmask &= USARTx->CR1;
000016  8983              LDRH     r3,[r0,#0xc]
000018  e004              B        |L24.36|
                  |L24.26|
;;;790      }
;;;791      else if (usartreg == 0x02) /* The IT  is in CR2 register */
00001a  2b02              CMP      r3,#2
00001c  d101              BNE      |L24.34|
;;;792      {
;;;793        itmask &= USARTx->CR2;
00001e  8a03              LDRH     r3,[r0,#0x10]
000020  e000              B        |L24.36|
                  |L24.34|
;;;794      }
;;;795      else /* The IT  is in CR3 register */
;;;796      {
;;;797        itmask &= USARTx->CR3;
000022  8a83              LDRH     r3,[r0,#0x14]
                  |L24.36|
;;;798      }
;;;799      
;;;800      bitpos = USART_IT >> 0x08;
000024  ea4fea4f          LSR      r1,r1,#8
;;;801    
;;;802      bitpos = (u32)0x01 << bitpos;
;;;803      bitpos &= USARTx->SR;
000028  8800              LDRH     r0,[r0,#0]
00002a  4213              TST      r3,r2
00002c  fa06fa06          LSL      r6,r6,r1
000030  ea00ea00          AND      r0,r0,r6
;;;804    
;;;805      if ((itmask != (u16)RESET)&&(bitpos != (u16)RESET))
000034  d001              BEQ      |L24.58|
000036  b100              CBZ      r0,|L24.58|
;;;806      {
;;;807        bitstatus = SET;
000038  2401              MOVS     r4,#1
                  |L24.58|
;;;808      }
;;;809      else
;;;810      {
;;;811        bitstatus = RESET;
;;;812      }
;;;813      return bitstatus;
00003a  4620              MOV      r0,r4
;;;814    }
00003c  bd70              POP      {r4-r6,pc}
                          ENDP


                          AREA ||i.USART_ClearITPendingBit||, CODE, READONLY, ALIGN=1

                  USART_ClearITPendingBit PROC
;;;842      
;;;843      bitpos = USART_IT >> 0x08;
000000  0a0a              LSRS     r2,r1,#8
;;;844    
;;;845      itmask = (u32)0x01 << bitpos;
000002  2101              MOVS     r1,#1
000004  4091              LSLS     r1,r1,r2
;;;846      USARTx->SR &= ~itmask;
000006  8802              LDRH     r2,[r0,#0]
000008  438a              BICS     r2,r2,r1
00000a  8002              STRH     r2,[r0,#0]
;;;847    }
00000c  4770              BX       lr
                          ENDP

⌨️ 快捷键说明

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