📄 stm32f10x_gpio.txt
字号:
;;;224 }
0001bc 4770 BX lr
ENDP
GPIO_ReadInputDataBit PROC
;;;235 u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
;;;236 {
0001be 4602 MOV r2,r0
;;;237 u8 bitstatus = 0x00;
0001c0 2000 MOVS r0,#0
;;;238
;;;239 /* Check the parameters */
;;;240 assert(IS_GET_GPIO_PIN(GPIO_Pin));
;;;241
;;;242 if ((GPIOx->IDR & GPIO_Pin) != (u32)Bit_RESET)
0001c2 6893 LDR r3,[r2,#8]
0001c4 420b TST r3,r1
0001c6 d001 BEQ |L1.460|
;;;243 {
;;;244 bitstatus = (u8)Bit_SET;
0001c8 2001 MOVS r0,#1
0001ca e000 B |L1.462|
|L1.460|
;;;245 }
;;;246 else
;;;247 {
;;;248 bitstatus = (u8)Bit_RESET;
0001cc 2000 MOVS r0,#0
|L1.462|
;;;249 }
;;;250 return bitstatus;
;;;251 }
0001ce 4770 BX lr
ENDP
GPIO_ReadInputData PROC
;;;260 u16 GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
;;;261 {
0001d0 4601 MOV r1,r0
;;;262 return ((u16)GPIOx->IDR);
0001d2 6888 LDR r0,[r1,#8]
0001d4 b280 UXTH r0,r0
;;;263 }
0001d6 4770 BX lr
ENDP
GPIO_ReadOutputDataBit PROC
;;;274 u8 GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
;;;275 {
0001d8 4602 MOV r2,r0
;;;276 u8 bitstatus = 0x00;
0001da 2000 MOVS r0,#0
;;;277
;;;278 /* Check the parameters */
;;;279 assert(IS_GET_GPIO_PIN(GPIO_Pin));
;;;280
;;;281 if ((GPIOx->ODR & GPIO_Pin) != (u32)Bit_RESET)
0001dc 68d3 LDR r3,[r2,#0xc]
0001de 420b TST r3,r1
0001e0 d001 BEQ |L1.486|
;;;282 {
;;;283 bitstatus = (u8)Bit_SET;
0001e2 2001 MOVS r0,#1
0001e4 e000 B |L1.488|
|L1.486|
;;;284 }
;;;285 else
;;;286 {
;;;287 bitstatus = (u8)Bit_RESET;
0001e6 2000 MOVS r0,#0
|L1.488|
;;;288 }
;;;289 return bitstatus;
;;;290 }
0001e8 4770 BX lr
ENDP
GPIO_ReadOutputData PROC
;;;299 u16 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
;;;300 {
0001ea 4601 MOV r1,r0
;;;301 return ((u16)GPIOx->ODR);
0001ec 68c8 LDR r0,[r1,#0xc]
0001ee b280 UXTH r0,r0
;;;302 }
0001f0 4770 BX lr
ENDP
GPIO_SetBits PROC
;;;317 assert(IS_GPIO_PIN(GPIO_Pin));
;;;318 GPIOx->BSRR = GPIO_Pin;
0001f2 6101 STR r1,[r0,#0x10]
;;;319 }
0001f4 4770 BX lr
ENDP
GPIO_ResetBits PROC
;;;334 assert(IS_GPIO_PIN(GPIO_Pin));
;;;335 GPIOx->BRR = GPIO_Pin;
0001f6 6141 STR r1,[r0,#0x14]
;;;336 }
0001f8 4770 BX lr
ENDP
GPIO_WriteBit PROC
;;;356
;;;357 if (BitVal != Bit_RESET)
0001fa b10a CBZ r2,|L1.512|
;;;358 {
;;;359 GPIOx->BSRR = GPIO_Pin;
0001fc 6101 STR r1,[r0,#0x10]
0001fe e000 B |L1.514|
|L1.512|
;;;360 }
;;;361 else
;;;362 {
;;;363 GPIOx->BRR = GPIO_Pin;
000200 6141 STR r1,[r0,#0x14]
|L1.514|
;;;364 }
;;;365 }
000202 4770 BX lr
ENDP
GPIO_Write PROC
;;;377 {
;;;378 GPIOx->ODR = PortVal;
000204 60c1 STR r1,[r0,#0xc]
;;;379 }
000206 4770 BX lr
ENDP
GPIO_PinLockConfig PROC
;;;392 {
;;;393 u32 tmp = 0x00010000;
000208 f44ff44f MOV r2,#0x10000
;;;394
;;;395 /* Check the parameters */
;;;396 assert(IS_GPIO_PIN(GPIO_Pin));
;;;397
;;;398 tmp |= GPIO_Pin;
00020c 430a ORRS r2,r2,r1
;;;399 /* Set LCKK bit */
;;;400 GPIOx->LCKR = tmp;
00020e 6182 STR r2,[r0,#0x18]
;;;401 /* Reset LCKK bit */
;;;402 GPIOx->LCKR = GPIO_Pin;
000210 6181 STR r1,[r0,#0x18]
;;;403 /* Set LCKK bit */
;;;404 GPIOx->LCKR = tmp;
000212 6182 STR r2,[r0,#0x18]
;;;405 /* Read LCKK bit*/
;;;406 tmp = GPIOx->LCKR;
000214 6982 LDR r2,[r0,#0x18]
;;;407 /* Read LCKK bit*/
;;;408 tmp = GPIOx->LCKR;
000216 6982 LDR r2,[r0,#0x18]
;;;409 }
000218 4770 BX lr
ENDP
GPIO_EventOutputConfig PROC
;;;424 {
;;;425 u32 tmpreg = 0x00;
00021a 2200 MOVS r2,#0
;;;426
;;;427 /* Check the parameters */
;;;428 assert(IS_GPIO_PORT_SOURCE(GPIO_PortSource));
;;;429 assert(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;430
;;;431 tmpreg = AFIO->EVCR;
00021c 4b2c LDR r3,|L1.720|
00021e 681a LDR r2,[r3,#0]
;;;432 /* Clear the PORT[6:4] and PIN[3:0] bits */
;;;433 tmpreg &= EVCR_PORTPINCONFIG_MASK;
000220 f64ff64f MOV r3,#0xff80
000224 401a ANDS r2,r2,r3
;;;434 tmpreg |= (u32)GPIO_PortSource << 0x04;
000226 ea42ea42 ORR r2,r2,r0,LSL #4
;;;435 tmpreg |= GPIO_PinSource;
00022a 430a ORRS r2,r2,r1
;;;436
;;;437 AFIO->EVCR = tmpreg;
00022c 4b28 LDR r3,|L1.720|
00022e 601a STR r2,[r3,#0]
;;;438 }
000230 4770 BX lr
ENDP
GPIO_EventOutputCmd PROC
;;;452
;;;453 *(vu32 *) EVCR_EVOE_BB = (u32)NewState;
000232 4928 LDR r1,|L1.724|
000234 61c8 STR r0,[r1,#0x1c]
;;;454 }
000236 4770 BX lr
ENDP
GPIO_PinRemapConfig PROC
;;;486 void GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)
;;;487 {
000238 b570 PUSH {r4-r6,lr}
;;;488 u32 tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
00023a 2200 MOVS r2,#0
00023c 2500 MOVS r5,#0
00023e 2300 MOVS r3,#0
000240 2400 MOVS r4,#0
;;;489
;;;490 /* Check the parameters */
;;;491 assert(IS_GPIO_REMAP(GPIO_Remap));
;;;492 assert(IS_FUNCTIONAL_STATE(NewState));
;;;493
;;;494 tmpreg = AFIO->MAPR;
000242 4e23 LDR r6,|L1.720|
000244 6873 LDR r3,[r6,#4]
;;;495
;;;496 tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
000246 f3c0f3c0 UBFX r4,r0,#16,#4
;;;497 tmp = GPIO_Remap & LSB_MASK;
00024a b282 UXTH r2,r0
;;;498
;;;499 if ((GPIO_Remap & DBGAFR_LOCATION_MASK) == DBGAFR_LOCATION_MASK)
00024c f400f400 AND r6,r0,#0x200000
000250 f5b6f5b6 CMP r6,#0x200000
000254 d102 BNE |L1.604|
;;;500 {
;;;501 tmpreg &= DBGAFR_SWJCFG_MASK;
000256 f023f023 BIC r3,r3,#0x7000000
00025a e00a B |L1.626|
|L1.604|
;;;502 }
;;;503 else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
00025c f400f400 AND r6,r0,#0x100000
000260 f5b6f5b6 CMP r6,#0x100000
000264 d104 BNE |L1.624|
;;;504 {
;;;505 tmp1 = ((u32)0x03) << tmpmask;
000266 2603 MOVS r6,#3
000268 fa06fa06 LSL r5,r6,r4
;;;506 tmpreg &= ~tmp1;
00026c 43ab BICS r3,r3,r5
00026e e000 B |L1.626|
|L1.624|
;;;507 }
;;;508 else
;;;509 {
;;;510 tmpreg &= ~tmp;
000270 4393 BICS r3,r3,r2
|L1.626|
;;;511 }
;;;512
;;;513 if (NewState != DISABLE)
000272 b141 CBZ r1,|L1.646|
;;;514 {
;;;515 if ((GPIO_Remap & DBGAFR_LOCATION_MASK) == DBGAFR_LOCATION_MASK)
000274 f400f400 AND r6,r0,#0x200000
000278 f5b6f5b6 CMP r6,#0x200000
00027c d102 BNE |L1.644|
;;;516 {
;;;517 tmpreg |= (tmp << 0x10);
00027e ea43ea43 ORR r3,r3,r2,LSL #16
000282 e000 B |L1.646|
|L1.644|
;;;518 }
;;;519 else
;;;520 {
;;;521 tmpreg |= tmp;
000284 4313 ORRS r3,r3,r2
|L1.646|
;;;522 }
;;;523 }
;;;524 AFIO->MAPR = tmpreg;
000286 4e12 LDR r6,|L1.720|
000288 6073 STR r3,[r6,#4]
;;;525 }
00028a bd70 POP {r4-r6,pc}
ENDP
GPIO_EXTILineConfig PROC
;;;537 void GPIO_EXTILineConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
;;;538 {
00028c b530 PUSH {r4,r5,lr}
;;;539 u32 tmp = 0x00;
00028e 2200 MOVS r2,#0
;;;540
;;;541 /* Check the parameters */
;;;542 assert(IS_GPIO_PORT_SOURCE(GPIO_PortSource));
;;;543 assert(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;544
;;;545 tmp = ((u32)0x0F) << (0x04 * (GPIO_PinSource & (u8)0x03));
000290 078b LSLS r3,r1,#30
000292 0f1c LSRS r4,r3,#28
000294 230f MOVS r3,#0xf
000296 fa03fa03 LSL r2,r3,r4
;;;546
;;;547 AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
00029a 4b0d LDR r3,|L1.720|
00029c 3308 ADDS r3,r3,#8
00029e 108c ASRS r4,r1,#2
0002a0 f853f853 LDR r4,[r3,r4,LSL #2]
0002a4 4394 BICS r4,r4,r2
0002a6 108d ASRS r5,r1,#2
0002a8 f843f843 STR r4,[r3,r5,LSL #2]
;;;548 AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((u32)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (u8)0x03)));
0002ac 108c ASRS r4,r1,#2
0002ae f853f853 LDR r3,[r3,r4,LSL #2]
0002b2 078c LSLS r4,r1,#30
0002b4 0f24 LSRS r4,r4,#28
0002b6 fa00fa00 LSL r4,r0,r4
0002ba 4323 ORRS r3,r3,r4
0002bc 4c04 LDR r4,|L1.720|
0002be 3408 ADDS r4,r4,#8
0002c0 108d ASRS r5,r1,#2
0002c2 f844f844 STR r3,[r4,r5,LSL #2]
;;;549 }
0002c6 bd30 POP {r4,r5,pc}
ENDP
|L1.712|
0002c8 40011000 DCD 0x40011000
|L1.716|
0002cc bffef800 DCD 0xbffef800
|L1.720|
0002d0 40010000 DCD 0x40010000
|L1.724|
0002d4 42200000 DCD 0x42200000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -