📄 stm32f10x_gpio.txt
字号:
GPIO_ReadInputDataBit PROC
;;;243 u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
;;;244 {
000000 4602 MOV r2,r0
;;;245 u8 bitstatus = 0x00;
;;;246
;;;247 /* Check the parameters */
;;;248 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;249 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
;;;250
;;;251 if ((GPIOx->IDR & GPIO_Pin) != (u32)Bit_RESET)
000002 6892 LDR r2,[r2,#8]
000004 2000 MOVS r0,#0 ;245
000006 420a TST r2,r1
000008 d000 BEQ |L5.12|
;;;252 {
;;;253 bitstatus = (u8)Bit_SET;
00000a 2001 MOVS r0,#1
|L5.12|
;;;254 }
;;;255 else
;;;256 {
;;;257 bitstatus = (u8)Bit_RESET;
;;;258 }
;;;259 return bitstatus;
;;;260 }
00000c 4770 BX lr
;;;261
ENDP
AREA ||i.GPIO_ReadInputData||, CODE, READONLY, ALIGN=1
GPIO_ReadInputData PROC
;;;273
;;;274 return ((u16)GPIOx->IDR);
000000 6880 LDR r0,[r0,#8]
000002 b280 UXTH r0,r0
;;;275 }
000004 4770 BX lr
;;;276
ENDP
AREA ||i.GPIO_ReadOutputDataBit||, CODE, READONLY, ALIGN=1
GPIO_ReadOutputDataBit PROC
;;;286 u8 GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
;;;287 {
000000 4602 MOV r2,r0
;;;288 u8 bitstatus = 0x00;
;;;289
;;;290 /* Check the parameters */
;;;291 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;292 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
;;;293
;;;294 if ((GPIOx->ODR & GPIO_Pin) != (u32)Bit_RESET)
000002 68d2 LDR r2,[r2,#0xc]
000004 2000 MOVS r0,#0 ;288
000006 420a TST r2,r1
000008 d000 BEQ |L7.12|
;;;295 {
;;;296 bitstatus = (u8)Bit_SET;
00000a 2001 MOVS r0,#1
|L7.12|
;;;297 }
;;;298 else
;;;299 {
;;;300 bitstatus = (u8)Bit_RESET;
;;;301 }
;;;302 return bitstatus;
;;;303 }
00000c 4770 BX lr
;;;304
ENDP
AREA ||i.GPIO_ReadOutputData||, CODE, READONLY, ALIGN=1
GPIO_ReadOutputData PROC
;;;316
;;;317 return ((u16)GPIOx->ODR);
000000 68c0 LDR r0,[r0,#0xc]
000002 b280 UXTH r0,r0
;;;318 }
000004 4770 BX lr
;;;319
ENDP
AREA ||i.GPIO_SetBits||, CODE, READONLY, ALIGN=1
GPIO_SetBits PROC
;;;335
;;;336 GPIOx->BSRR = GPIO_Pin;
000000 6101 STR r1,[r0,#0x10]
;;;337 }
000002 4770 BX lr
;;;338
ENDP
AREA ||i.GPIO_ResetBits||, CODE, READONLY, ALIGN=1
GPIO_ResetBits PROC
;;;354
;;;355 GPIOx->BRR = GPIO_Pin;
000000 6141 STR r1,[r0,#0x14]
;;;356 }
000002 4770 BX lr
;;;357
ENDP
AREA ||i.GPIO_WriteBit||, CODE, READONLY, ALIGN=1
GPIO_WriteBit PROC
;;;377
;;;378 if (BitVal != Bit_RESET)
000000 b10a CBZ r2,|L11.6|
;;;379 {
;;;380 GPIOx->BSRR = GPIO_Pin;
000002 6101 STR r1,[r0,#0x10]
;;;381 }
;;;382 else
;;;383 {
;;;384 GPIOx->BRR = GPIO_Pin;
;;;385 }
;;;386 }
000004 4770 BX lr
|L11.6|
000006 6141 STR r1,[r0,#0x14] ;384
000008 4770 BX lr
;;;387
ENDP
AREA ||i.GPIO_Write||, CODE, READONLY, ALIGN=1
GPIO_Write PROC
;;;401
;;;402 GPIOx->ODR = PortVal;
000000 60c1 STR r1,[r0,#0xc]
;;;403 }
000002 4770 BX lr
;;;404
ENDP
AREA ||i.GPIO_PinLockConfig||, CODE, READONLY, ALIGN=1
GPIO_PinLockConfig PROC
;;;422
;;;423 tmp |= GPIO_Pin;
000000 f441f441 ORR r2,r1,#0x10000
;;;424 /* Set LCKK bit */
;;;425 GPIOx->LCKR = tmp;
000004 6182 STR r2,[r0,#0x18]
;;;426 /* Reset LCKK bit */
;;;427 GPIOx->LCKR = GPIO_Pin;
000006 6181 STR r1,[r0,#0x18]
;;;428 /* Set LCKK bit */
;;;429 GPIOx->LCKR = tmp;
000008 6182 STR r2,[r0,#0x18]
;;;430 /* Read LCKK bit*/
;;;431 tmp = GPIOx->LCKR;
00000a 6981 LDR r1,[r0,#0x18]
;;;432 /* Read LCKK bit*/
;;;433 tmp = GPIOx->LCKR;
00000c 6980 LDR r0,[r0,#0x18]
;;;434 }
00000e 4770 BX lr
;;;435
ENDP
AREA ||i.GPIO_EventOutputConfig||, CODE, READONLY, ALIGN=2
GPIO_EventOutputConfig PROC
;;;448 void GPIO_EventOutputConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
;;;449 {
000000 b510 PUSH {r4,lr}
;;;450 u32 tmpreg = 0x00;
;;;451
;;;452 /* Check the parameters */
;;;453 assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
;;;454 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;455
;;;456 tmpreg = AFIO->EVCR;
000002 4b05 LDR r3,|L14.24|
000004 681a LDR r2,[r3,#0]
;;;457 /* Clear the PORT[6:4] and PIN[3:0] bits */
;;;458 tmpreg &= EVCR_PORTPINCONFIG_MASK;
000006 f64ff64f MOV r4,#0xff80
00000a 4022 ANDS r2,r2,r4
;;;459 tmpreg |= (u32)GPIO_PortSource << 0x04;
00000c ea42ea42 ORR r0,r2,r0,LSL #4
;;;460 tmpreg |= GPIO_PinSource;
000010 4308 ORRS r0,r0,r1
;;;461
;;;462 AFIO->EVCR = tmpreg;
000012 6018 STR r0,[r3,#0]
;;;463 }
000014 bd10 POP {r4,pc}
;;;464
ENDP
000016 0000 DCW 0x0000
|L14.24|
000018 40010000 DCD 0x40010000
AREA ||i.GPIO_EventOutputCmd||, CODE, READONLY, ALIGN=2
GPIO_EventOutputCmd PROC
;;;477
;;;478 *(vu32 *) EVCR_EVOE_BB = (u32)NewState;
000000 4901 LDR r1,|L15.8|
000002 61c8 STR r0,[r1,#0x1c]
;;;479 }
000004 4770 BX lr
;;;480
ENDP
000006 0000 DCW 0x0000
|L15.8|
000008 42200000 DCD 0x42200000
AREA ||i.GPIO_PinRemapConfig||, CODE, READONLY, ALIGN=2
GPIO_PinRemapConfig PROC
;;;516 void GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)
;;;517 {
000000 b5f0 PUSH {r4-r7,lr}
;;;518 u32 tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
;;;519
;;;520 /* Check the parameters */
;;;521 assert_param(IS_GPIO_REMAP(GPIO_Remap));
;;;522 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;523
;;;524 tmpreg = AFIO->MAPR;
000002 4d10 LDR r5,|L16.68|
000004 686b LDR r3,[r5,#4]
;;;525
;;;526 tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
;;;527 tmp = GPIO_Remap & LSB_MASK;
;;;528
;;;529 if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
000006 0d44 LSRS r4,r0,#21
000008 0126 LSLS r6,r4,#4
00000a b284 UXTH r4,r0
00000c f3c0f3c0 UBFX r7,r0,#20,#2
000010 40b4 LSLS r4,r4,r6
000012 f3c0f3c0 UBFX r2,r0,#16,#4 ;526
000016 2f03 CMP r7,#3
000018 d106 BNE |L16.40|
;;;530 {
;;;531 tmpreg &= DBGAFR_SWJCFG_MASK;
;;;532 AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
00001a 6868 LDR r0,[r5,#4]
00001c f023f023 BIC r2,r3,#0xf000000 ;531
000020 f020f020 BIC r0,r0,#0xf000000
000024 6068 STR r0,[r5,#4]
000026 e008 B |L16.58|
|L16.40|
;;;533 }
;;;534 else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
000028 02c0 LSLS r0,r0,#11
00002a d503 BPL |L16.52|
;;;535 {
;;;536 tmp1 = ((u32)0x03) << tmpmask;
00002c 2003 MOVS r0,#3
00002e 4090 LSLS r0,r0,r2
;;;537 tmpreg &= ~tmp1;
000030 4383 BICS r3,r3,r0
;;;538 tmpreg |= ~DBGAFR_SWJCFG_MASK;
000032 e000 B |L16.54|
|L16.52|
;;;539 }
;;;540 else
;;;541 {
;;;542 tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
000034 43a3 BICS r3,r3,r4
|L16.54|
000036 f043f043 ORR r2,r3,#0xf000000 ;538
|L16.58|
;;;543 tmpreg |= ~DBGAFR_SWJCFG_MASK;
;;;544 }
;;;545
;;;546 if (NewState != DISABLE)
00003a b101 CBZ r1,|L16.62|
;;;547 {
;;;548 tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
00003c 4322 ORRS r2,r2,r4
|L16.62|
;;;549 }
;;;550
;;;551 AFIO->MAPR = tmpreg;
00003e 606a STR r2,[r5,#4]
;;;552 }
000040 bdf0 POP {r4-r7,pc}
;;;553
ENDP
000042 0000 DCW 0x0000
|L16.68|
000044 40010000 DCD 0x40010000
AREA ||i.GPIO_EXTILineConfig||, CODE, READONLY, ALIGN=2
GPIO_EXTILineConfig PROC
;;;566 void GPIO_EXTILineConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
;;;567 {
000000 b510 PUSH {r4,lr}
;;;568 u32 tmp = 0x00;
;;;569
;;;570 /* Check the parameters */
;;;571 assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
;;;572 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;573
;;;574 tmp = ((u32)0x0F) << (0x04 * (GPIO_PinSource & (u8)0x03));
000002 078a LSLS r2,r1,#30
;;;575
;;;576 AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
000004 f021f021 BIC r4,r1,#3
000008 4906 LDR r1,|L17.36|
00000a 0f12 LSRS r2,r2,#28 ;574
00000c 4421 ADD r1,r1,r4
00000e 230f MOVS r3,#0xf ;574
000010 688c LDR r4,[r1,#8]
000012 4093 LSLS r3,r3,r2 ;574
000014 439c BICS r4,r4,r3
000016 608c STR r4,[r1,#8]
;;;577 AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((u32)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (u8)0x03)));
000018 688b LDR r3,[r1,#8]
00001a 4090 LSLS r0,r0,r2
00001c 4303 ORRS r3,r3,r0
00001e 608b STR r3,[r1,#8]
;;;578 }
000020 bd10 POP {r4,pc}
;;;579
ENDP
000022 0000 DCW 0x0000
|L17.36|
000024 40010000 DCD 0x40010000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -