📄 stm32f10x_gpio.txt
字号:
GPIO_StructInit PROC
;;;230 /* Reset GPIO init structure parameters values */
;;;231 GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
000172 f64ff64f MOV r1,#0xffff
000176 8001 STRH r1,[r0,#0]
;;;232 GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
000178 2102 MOVS r1,#2
00017a 7081 STRB r1,[r0,#2]
;;;233 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
00017c 2104 MOVS r1,#4
00017e 70c1 STRB r1,[r0,#3]
;;;234 }
000180 4770 BX lr
;;;235
ENDP
GPIO_ReadInputDataBit PROC
;;;245 u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
;;;246 {
000182 4602 MOV r2,r0
;;;247 u8 bitstatus = 0x00;
000184 2000 MOVS r0,#0
;;;248
;;;249 /* Check the parameters */
;;;250 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;251 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
;;;252
;;;253 if ((GPIOx->IDR & GPIO_Pin) != (u32)Bit_RESET)
000186 6892 LDR r2,[r2,#8]
000188 420a TST r2,r1
00018a d000 BEQ |L1.398|
;;;254 {
;;;255 bitstatus = (u8)Bit_SET;
00018c 2001 MOVS r0,#1
|L1.398|
;;;256 }
;;;257 else
;;;258 {
;;;259 bitstatus = (u8)Bit_RESET;
;;;260 }
;;;261 return bitstatus;
;;;262 }
00018e 4770 BX lr
;;;263
ENDP
GPIO_ReadInputData PROC
;;;275
;;;276 return ((u16)GPIOx->IDR);
000190 6880 LDR r0,[r0,#8]
000192 b280 UXTH r0,r0
;;;277 }
000194 4770 BX lr
;;;278
ENDP
GPIO_ReadOutputDataBit PROC
;;;288 u8 GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
;;;289 {
000196 4602 MOV r2,r0
;;;290 u8 bitstatus = 0x00;
000198 2000 MOVS r0,#0
;;;291
;;;292 /* Check the parameters */
;;;293 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;294 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
;;;295
;;;296 if ((GPIOx->ODR & GPIO_Pin) != (u32)Bit_RESET)
00019a 68d2 LDR r2,[r2,#0xc]
00019c 420a TST r2,r1
00019e d000 BEQ |L1.418|
;;;297 {
;;;298 bitstatus = (u8)Bit_SET;
0001a0 2001 MOVS r0,#1
|L1.418|
;;;299 }
;;;300 else
;;;301 {
;;;302 bitstatus = (u8)Bit_RESET;
;;;303 }
;;;304 return bitstatus;
;;;305 }
0001a2 4770 BX lr
;;;306
ENDP
GPIO_ReadOutputData PROC
;;;318
;;;319 return ((u16)GPIOx->ODR);
0001a4 68c0 LDR r0,[r0,#0xc]
0001a6 b280 UXTH r0,r0
;;;320 }
0001a8 4770 BX lr
;;;321
ENDP
GPIO_SetBits PROC
;;;337
;;;338 GPIOx->BSRR = GPIO_Pin;
0001aa 6101 STR r1,[r0,#0x10]
;;;339 }
0001ac 4770 BX lr
;;;340
ENDP
GPIO_ResetBits PROC
;;;356
;;;357 GPIOx->BRR = GPIO_Pin;
0001ae 6141 STR r1,[r0,#0x14]
;;;358 }
0001b0 4770 BX lr
;;;359
ENDP
GPIO_WriteBit PROC
;;;379
;;;380 if (BitVal != Bit_RESET)
0001b2 b10a CBZ r2,|L1.440|
;;;381 {
;;;382 GPIOx->BSRR = GPIO_Pin;
0001b4 6101 STR r1,[r0,#0x10]
;;;383 }
;;;384 else
;;;385 {
;;;386 GPIOx->BRR = GPIO_Pin;
;;;387 }
;;;388 }
0001b6 4770 BX lr
|L1.440|
0001b8 6141 STR r1,[r0,#0x14] ;386
0001ba 4770 BX lr
;;;389
ENDP
GPIO_Write PROC
;;;403
;;;404 GPIOx->ODR = PortVal;
0001bc 60c1 STR r1,[r0,#0xc]
;;;405 }
0001be 4770 BX lr
;;;406
ENDP
GPIO_PinLockConfig PROC
;;;424
;;;425 tmp |= GPIO_Pin;
0001c0 f441f441 ORR r2,r1,#0x10000
;;;426 /* Set LCKK bit */
;;;427 GPIOx->LCKR = tmp;
0001c4 6182 STR r2,[r0,#0x18]
;;;428 /* Reset LCKK bit */
;;;429 GPIOx->LCKR = GPIO_Pin;
0001c6 6181 STR r1,[r0,#0x18]
;;;430 /* Set LCKK bit */
;;;431 GPIOx->LCKR = tmp;
0001c8 6182 STR r2,[r0,#0x18]
;;;432 /* Read LCKK bit*/
;;;433 tmp = GPIOx->LCKR;
0001ca 6981 LDR r1,[r0,#0x18]
;;;434 /* Read LCKK bit*/
;;;435 tmp = GPIOx->LCKR;
0001cc 6980 LDR r0,[r0,#0x18]
;;;436 }
0001ce 4770 BX lr
;;;437
ENDP
GPIO_EventOutputConfig PROC
;;;450 void GPIO_EventOutputConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
;;;451 {
0001d0 b510 PUSH {r4,lr}
;;;452 u32 tmpreg = 0x00;
;;;453
;;;454 /* Check the parameters */
;;;455 assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
;;;456 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;457
;;;458 tmpreg = AFIO->EVCR;
0001d2 4b22 LDR r3,|L1.604|
0001d4 681a LDR r2,[r3,#0]
;;;459 /* Clear the PORT[6:4] and PIN[3:0] bits */
;;;460 tmpreg &= EVCR_PORTPINCONFIG_MASK;
0001d6 f64ff64f MOV r4,#0xff80
0001da 4022 ANDS r2,r2,r4
;;;461 tmpreg |= (u32)GPIO_PortSource << 0x04;
0001dc ea42ea42 ORR r0,r2,r0,LSL #4
;;;462 tmpreg |= GPIO_PinSource;
0001e0 4308 ORRS r0,r0,r1
;;;463
;;;464 AFIO->EVCR = tmpreg;
0001e2 6018 STR r0,[r3,#0]
;;;465 }
0001e4 bd10 POP {r4,pc}
;;;466
ENDP
GPIO_EventOutputCmd PROC
;;;479
;;;480 *(vu32 *) EVCR_EVOE_BB = (u32)NewState;
0001e6 491e LDR r1,|L1.608|
0001e8 61c8 STR r0,[r1,#0x1c]
;;;481 }
0001ea 4770 BX lr
;;;482
ENDP
GPIO_PinRemapConfig PROC
;;;518 void GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)
;;;519 {
0001ec b5f0 PUSH {r4-r7,lr}
;;;520 u32 tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
;;;521
;;;522 /* Check the parameters */
;;;523 assert_param(IS_GPIO_REMAP(GPIO_Remap));
;;;524 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;525
;;;526 tmpreg = AFIO->MAPR;
0001ee 4d1b LDR r5,|L1.604|
0001f0 686b LDR r3,[r5,#4]
;;;527
;;;528 tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
0001f2 f3c0f3c0 UBFX r6,r0,#16,#4
;;;529 tmp = GPIO_Remap & LSB_MASK;
;;;530
;;;531 if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
0001f6 0d42 LSRS r2,r0,#21
0001f8 0112 LSLS r2,r2,#4
0001fa b284 UXTH r4,r0
0001fc f3c0f3c0 UBFX r7,r0,#20,#2
000200 4094 LSLS r4,r4,r2
000202 2f03 CMP r7,#3
000204 d106 BNE |L1.532|
;;;532 {
;;;533 tmpreg &= DBGAFR_SWJCFG_MASK;
000206 f023f023 BIC r2,r3,#0xf000000
;;;534 AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
00020a 6868 LDR r0,[r5,#4]
00020c f020f020 BIC r0,r0,#0xf000000
000210 6068 STR r0,[r5,#4]
000212 e00a B |L1.554|
|L1.532|
;;;535 }
;;;536 else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
000214 02c0 LSLS r0,r0,#11
000216 d505 BPL |L1.548|
;;;537 {
;;;538 tmp1 = ((u32)0x03) << tmpmask;
000218 2003 MOVS r0,#3
00021a 40b0 LSLS r0,r0,r6
;;;539 tmpreg &= ~tmp1;
00021c 4383 BICS r3,r3,r0
;;;540 tmpreg |= ~DBGAFR_SWJCFG_MASK;
00021e f043f043 ORR r2,r3,#0xf000000
000222 e002 B |L1.554|
|L1.548|
;;;541 }
;;;542 else
;;;543 {
;;;544 tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
000224 43a3 BICS r3,r3,r4
;;;545 tmpreg |= ~DBGAFR_SWJCFG_MASK;
000226 f043f043 ORR r2,r3,#0xf000000
|L1.554|
;;;546 }
;;;547
;;;548 if (NewState != DISABLE)
00022a b101 CBZ r1,|L1.558|
;;;549 {
;;;550 tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
00022c 4322 ORRS r2,r2,r4
|L1.558|
;;;551 }
;;;552
;;;553 AFIO->MAPR = tmpreg;
00022e 606a STR r2,[r5,#4]
;;;554 }
000230 bdf0 POP {r4-r7,pc}
;;;555
ENDP
GPIO_EXTILineConfig PROC
;;;568 void GPIO_EXTILineConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
;;;569 {
000232 b510 PUSH {r4,lr}
;;;570 u32 tmp = 0x00;
;;;571
;;;572 /* Check the parameters */
;;;573 assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
;;;574 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;575
;;;576 tmp = ((u32)0x0F) << (0x04 * (GPIO_PinSource & (u8)0x03));
000234 078a LSLS r2,r1,#30
000236 0f12 LSRS r2,r2,#28
000238 230f MOVS r3,#0xf
00023a 4093 LSLS r3,r3,r2
;;;577
;;;578 AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
00023c f021f021 BIC r4,r1,#3
000240 4906 LDR r1,|L1.604|
000242 4421 ADD r1,r1,r4
000244 688c LDR r4,[r1,#8]
000246 439c BICS r4,r4,r3
000248 608c STR r4,[r1,#8]
;;;579 AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((u32)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (u8)0x03)));
00024a 688b LDR r3,[r1,#8]
00024c 4090 LSLS r0,r0,r2
00024e 4303 ORRS r3,r3,r0
000250 608b STR r3,[r1,#8]
;;;580 }
000252 bd10 POP {r4,pc}
;;;581
ENDP
|L1.596|
000254 40011400 DCD 0x40011400
|L1.600|
000258 bffef800 DCD 0xbffef800
|L1.604|
00025c 40010000 DCD 0x40010000
|L1.608|
000260 42200000 DCD 0x42200000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -