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

📄 stm32f10x_gpio.txt

📁 stm32-SDIO+FatFS文件系统txt-int-ascii
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                          ENDP

00001a  0000              DCW      0x0000
                  |L6.28|
                          DCD      0x40010000

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

                  GPIO_Init PROC
;;;172      */
;;;173    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;174    {
000004  4602              MOV      r2,r0
;;;175      uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
000006  2500              MOVS     r5,#0
000008  2600              MOVS     r6,#0
00000a  2000              MOVS     r0,#0
00000c  2300              MOVS     r3,#0
;;;176      uint32_t tmpreg = 0x00, pinmask = 0x00;
00000e  2400              MOVS     r4,#0
000010  2700              MOVS     r7,#0
;;;177      /* Check the parameters */
;;;178      assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;179      assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
;;;180      assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));  
;;;181      
;;;182    /*---------------------------- GPIO Mode Configuration -----------------------*/
;;;183      currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
000012  f891c003          LDRB     r12,[r1,#3]
000016  f00c050f          AND      r5,r12,#0xf
;;;184      if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
00001a  f891c003          LDRB     r12,[r1,#3]
00001e  f01c0f10          TST      r12,#0x10
000022  d003              BEQ      |L7.44|
;;;185      { 
;;;186        /* Check the parameters */
;;;187        assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
;;;188        /* Output mode */
;;;189        currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
000024  f891c002          LDRB     r12,[r1,#2]
000028  ea4c0505          ORR      r5,r12,r5
                  |L7.44|
;;;190      }
;;;191    /*---------------------------- GPIO CRL Configuration ------------------------*/
;;;192      /* Configure the eight low port pins */
;;;193      if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
00002c  f8b1c000          LDRH     r12,[r1,#0]
000030  f01c0fff          TST      r12,#0xff
000034  d031              BEQ      |L7.154|
;;;194      {
;;;195        tmpreg = GPIOx->CRL;
000036  6814              LDR      r4,[r2,#0]
;;;196        for (pinpos = 0x00; pinpos < 0x08; pinpos++)
000038  2000              MOVS     r0,#0
00003a  e02b              B        |L7.148|
                  |L7.60|
;;;197        {
;;;198          pos = ((uint32_t)0x01) << pinpos;
00003c  f04f0c01          MOV      r12,#1
000040  fa0cf300          LSL      r3,r12,r0
;;;199          /* Get the port pins position */
;;;200          currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
000044  f8b1c000          LDRH     r12,[r1,#0]
000048  ea0c0603          AND      r6,r12,r3
;;;201          if (currentpin == pos)
00004c  429e              CMP      r6,r3
00004e  d120              BNE      |L7.146|
;;;202          {
;;;203            pos = pinpos << 2;
000050  0083              LSLS     r3,r0,#2
;;;204            /* Clear the corresponding low control register bits */
;;;205            pinmask = ((uint32_t)0x0F) << pos;
000052  f04f0c0f          MOV      r12,#0xf
000056  fa0cf703          LSL      r7,r12,r3
;;;206            tmpreg &= ~pinmask;
00005a  43bc              BICS     r4,r4,r7
;;;207            /* Write the mode configuration in the corresponding bits */
;;;208            tmpreg |= (currentmode << pos);
00005c  fa05fc03          LSL      r12,r5,r3
000060  ea4c0404          ORR      r4,r12,r4
;;;209            /* Reset the corresponding ODR bit */
;;;210            if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
000064  f891c003          LDRB     r12,[r1,#3]
000068  f1bc0f28          CMP      r12,#0x28
00006c  d106              BNE      |L7.124|
;;;211            {
;;;212              GPIOx->BRR = (((uint32_t)0x01) << pinpos);
00006e  f04f0c01          MOV      r12,#1
000072  fa0cfc00          LSL      r12,r12,r0
000076  f8c2c014          STR      r12,[r2,#0x14]
00007a  e00a              B        |L7.146|
                  |L7.124|
;;;213            }
;;;214            else
;;;215            {
;;;216              /* Set the corresponding ODR bit */
;;;217              if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
00007c  f891c003          LDRB     r12,[r1,#3]
000080  f1bc0f48          CMP      r12,#0x48
000084  d105              BNE      |L7.146|
;;;218              {
;;;219                GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
000086  f04f0c01          MOV      r12,#1
00008a  fa0cfc00          LSL      r12,r12,r0
00008e  f8c2c010          STR      r12,[r2,#0x10]
                  |L7.146|
000092  1c40              ADDS     r0,r0,#1              ;196
                  |L7.148|
000094  2808              CMP      r0,#8                 ;196
000096  d3d1              BCC      |L7.60|
;;;220              }
;;;221            }
;;;222          }
;;;223        }
;;;224        GPIOx->CRL = tmpreg;
000098  6014              STR      r4,[r2,#0]
                  |L7.154|
;;;225      }
;;;226    /*---------------------------- GPIO CRH Configuration ------------------------*/
;;;227      /* Configure the eight high port pins */
;;;228      if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
00009a  f8b1c000          LDRH     r12,[r1,#0]
00009e  f1bc0fff          CMP      r12,#0xff
0000a2  dd34              BLE      |L7.270|
;;;229      {
;;;230        tmpreg = GPIOx->CRH;
0000a4  6854              LDR      r4,[r2,#4]
;;;231        for (pinpos = 0x00; pinpos < 0x08; pinpos++)
0000a6  2000              MOVS     r0,#0
0000a8  e02e              B        |L7.264|
                  |L7.170|
;;;232        {
;;;233          pos = (((uint32_t)0x01) << (pinpos + 0x08));
0000aa  f1000c08          ADD      r12,r0,#8
0000ae  f04f0801          MOV      r8,#1
0000b2  fa08f30c          LSL      r3,r8,r12
;;;234          /* Get the port pins position */
;;;235          currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
0000b6  f8b1c000          LDRH     r12,[r1,#0]
0000ba  ea0c0603          AND      r6,r12,r3
;;;236          if (currentpin == pos)
0000be  429e              CMP      r6,r3
0000c0  d121              BNE      |L7.262|
;;;237          {
;;;238            pos = pinpos << 2;
0000c2  0083              LSLS     r3,r0,#2
;;;239            /* Clear the corresponding high control register bits */
;;;240            pinmask = ((uint32_t)0x0F) << pos;
0000c4  f04f0c0f          MOV      r12,#0xf
0000c8  fa0cf703          LSL      r7,r12,r3
;;;241            tmpreg &= ~pinmask;
0000cc  43bc              BICS     r4,r4,r7
;;;242            /* Write the mode configuration in the corresponding bits */
;;;243            tmpreg |= (currentmode << pos);
0000ce  fa05fc03          LSL      r12,r5,r3
0000d2  ea4c0404          ORR      r4,r12,r4
;;;244            /* Reset the corresponding ODR bit */
;;;245            if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
0000d6  f891c003          LDRB     r12,[r1,#3]
0000da  f1bc0f28          CMP      r12,#0x28
0000de  d105              BNE      |L7.236|
;;;246            {
;;;247              GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
0000e0  f1000c08          ADD      r12,r0,#8
0000e4  fa08f80c          LSL      r8,r8,r12
0000e8  f8c28014          STR      r8,[r2,#0x14]
                  |L7.236|
;;;248            }
;;;249            /* Set the corresponding ODR bit */
;;;250            if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
0000ec  f891c003          LDRB     r12,[r1,#3]
0000f0  f1bc0f48          CMP      r12,#0x48
0000f4  d107              BNE      |L7.262|
;;;251            {
;;;252              GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
0000f6  f1000c08          ADD      r12,r0,#8
0000fa  f04f0801          MOV      r8,#1
0000fe  fa08f80c          LSL      r8,r8,r12
000102  f8c28010          STR      r8,[r2,#0x10]
                  |L7.262|
000106  1c40              ADDS     r0,r0,#1              ;231
                  |L7.264|
000108  2808              CMP      r0,#8                 ;231
00010a  d3ce              BCC      |L7.170|
;;;253            }
;;;254          }
;;;255        }
;;;256        GPIOx->CRH = tmpreg;
00010c  6054              STR      r4,[r2,#4]
                  |L7.270|
;;;257      }
;;;258    }
00010e  e8bd81f0          POP      {r4-r8,pc}
;;;259    
                          ENDP


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

                  GPIO_PinLockConfig PROC
;;;431      */
;;;432    void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
000000  f44f3280          MOV      r2,#0x10000
;;;433    {
;;;434      uint32_t tmp = 0x00010000;
;;;435      
;;;436      /* Check the parameters */
;;;437      assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;438      assert_param(IS_GPIO_PIN(GPIO_Pin));
;;;439      
;;;440      tmp |= GPIO_Pin;
000004  430a              ORRS     r2,r2,r1
;;;441      /* Set LCKK bit */
;;;442      GPIOx->LCKR = tmp;
000006  6182              STR      r2,[r0,#0x18]
;;;443      /* Reset LCKK bit */
;;;444      GPIOx->LCKR =  GPIO_Pin;
000008  6181              STR      r1,[r0,#0x18]
;;;445      /* Set LCKK bit */
;;;446      GPIOx->LCKR = tmp;
00000a  6182              STR      r2,[r0,#0x18]
;;;447      /* Read LCKK bit*/
;;;448      tmp = GPIOx->LCKR;
00000c  6982              LDR      r2,[r0,#0x18]
;;;449      /* Read LCKK bit*/
;;;450      tmp = GPIOx->LCKR;
00000e  6982              LDR      r2,[r0,#0x18]
;;;451    }
000010  4770              BX       lr
;;;452    
                          ENDP


                          AREA ||i.GPIO_PinRemapConfig||, CODE, READONLY, ALIGN=2

                  GPIO_PinRemapConfig PROC
;;;548      */
;;;549    void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
000000  b5f0              PUSH     {r4-r7,lr}
;;;550    {
000002  460a              MOV      r2,r1
;;;551      uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
000004  2300              MOVS     r3,#0
000006  2400              MOVS     r4,#0
000008  2100              MOVS     r1,#0
00000a  2500              MOVS     r5,#0
;;;552    
;;;553      /* Check the parameters */
;;;554      assert_param(IS_GPIO_REMAP(GPIO_Remap));
;;;555      assert_param(IS_FUNCTIONAL_STATE(NewState));  
;;;556      
;;;557      if((GPIO_Remap & 0x80000000) == 0x80000000)
00000c  f0004600          AND      r6,r0,#0x80000000
000010  f1b64f00          CMP      r6,#0x80000000
000014  d102              BNE      |L9.28|
;;;558      {
;;;559        tmpreg = AFIO->MAPR2;
000016  4e1d              LDR      r6,|L9.140|
000018  69f1              LDR      r1,[r6,#0x1c]
00001a  e001              B        |L9.32|
                  |L9.28|
;;;560      }
;;;561      else
;;;562      {
;;;563        tmpreg = AFIO->MAPR;
00001c  4e1b              LDR      r6,|L9.140|
00001e  6871              LDR      r1,[r6,#4]
                  |L9.32|
;;;564      }
;;;565    
;;;566      tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
000020  f3c04503          UBFX     r5,r0,#16,#4
;;;567      tmp = GPIO_Remap & LSB_MASK;
000024  b283              UXTH     r3,r0
;;;568    
;;;569      if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
000026  f4001640          AND      r6,r0,#0x300000
00002a  f5b61f40          CMP      r6,#0x300000
00002e  d108              BNE      |L9.66|
;;;570      {
;;;571        tmpreg &= DBGAFR_SWJCFG_MASK;
000030  f0216170          BIC      r1,r1,#0xf000000
;;;572        AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
000034  4e15              LDR      r6,|L9.140|
000036  6876              LDR      r6,[r6,#4]
000038  f0266670          BIC      r6,r6,#0xf000000

⌨️ 快捷键说明

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