📄 stm32f10x_gpio.txt
字号:
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 + -