📄 xllp_gpio.cod
字号:
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1364|
00008 e1a04000 mov r4, r0
0000c e58d4000 str r4, [sp]
; 381 : XLLP_UINT32_T LockID;
; 382 : XLLP_UINT32_T aGpioPinMask;
; 383 : XLLP_UINT32_T aSizeArray;
; 384 : XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 385 : XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 386 : XLLP_UINT32_T i;
; 387 :
; 388 : //determine size of array
; 389 : aSizeArray = aGpioPinArray[0];
00010 e5910000 ldr r0, [r1]
; 390 : aMask0=aMask1=aMask2=aMask3=0;
00014 e3a0b000 mov r11, #0
00018 e3a07000 mov r7, #0
; 391 : aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 392 :
; 393 : for(i=1; i<=aSizeArray; i++)
0001c e3500001 cmp r0, #1
00020 e3a09000 mov r9, #0
00024 e3a0a000 mov r10, #0
00028 e3a0e000 mov lr, #0
0002c e3a05000 mov r5, #0
00030 e3a06000 mov r6, #0
00034 e3a08000 mov r8, #0
00038 3a000036 bcc |$L884|
0003c e2811004 add r1, r1, #4
00040 e3a04001 mov r4, #1
00044 |$L872|
; 394 : {
; 395 : aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);
00044 e5913000 ldr r3, [r1]
00048 e203201f and r2, r3, #0x1F
; 396 : if(aGpioPinArray[i] > 95)
0004c e353005f cmp r3, #0x5F
; 397 : {
; 398 : aMask3 |= aGpioPinMask;
00050 818bb214 orrhi r11, r11, r4, lsl r2
; 399 : aSet3=XLLP_TRUE;
00054 83a0e001 movhi lr, #1
00058 8a000009 bhi |$L873|
; 400 : }
; 401 : else if(aGpioPinArray[i] > 63)
0005c e5913000 ldr r3, [r1]
00060 e353003f cmp r3, #0x3F
; 402 : {
; 403 : aMask2 |= aGpioPinMask;
00064 81877214 orrhi r7, r7, r4, lsl r2
; 404 : aSet2=XLLP_TRUE;
00068 83a05001 movhi r5, #1
0006c 8a000004 bhi |$L873|
; 405 : }
; 406 : else if(aGpioPinArray[i] > 31)
00070 e353001f cmp r3, #0x1F
; 407 : {
; 408 : aMask1 |= aGpioPinMask;
00074 81899214 orrhi r9, r9, r4, lsl r2
; 409 : aSet1=XLLP_TRUE;
00078 83a06001 movhi r6, #1
; 410 : }
; 411 : else
; 412 : {
; 413 : aMask0 |= aGpioPinMask;
0007c 918aa214 orrls r10, r10, r4, lsl r2
; 414 : aSet0=XLLP_TRUE;
00080 93a08001 movls r8, #1
00084 |$L873|
00084 e2811004 add r1, r1, #4
00088 e2500001 subs r0, r0, #1
0008c 1affffec bne |$L872|
; 415 : }
; 416 : }
; 417 : if(aSet3)
00090 e59d4000 ldr r4, [sp]
00094 e35e0000 cmp lr, #0
00098 0a000006 beq |$L881|
; 418 : {
; 419 : LockID = XllpLock(GRER3);
0009c e3a00022 mov r0, #0x22
000a0 eb000000 bl XllpLock
; 420 : pGPIO->GRER3=((pGPIO->GRER3&~aMask3)&~XLLP_GPIO_PIN_RESERVED_BITS);
000a4 e5943130 ldr r3, [r4, #0x130]
000a8 e1c3300b bic r3, r3, r11
000ac e3c334fe bic r3, r3, #0xFE, 8
000b0 e5843130 str r3, [r4, #0x130]
; 421 : XllpUnlock(LockID);
000b4 eb000000 bl XllpUnlock
000b8 |$L881|
; 422 : }
; 423 : if(aSet2)
000b8 e3550000 cmp r5, #0
000bc 0a000005 beq |$L882|
; 424 : {
; 425 : LockID = XllpLock(GRER2);
000c0 e3a0000f mov r0, #0xF
000c4 eb000000 bl XllpLock
; 426 : pGPIO->GRER2=((pGPIO->GRER2)&~aMask2);
000c8 e5943038 ldr r3, [r4, #0x38]
000cc e1c33007 bic r3, r3, r7
000d0 e5843038 str r3, [r4, #0x38]
; 427 : XllpUnlock(LockID);
000d4 eb000000 bl XllpUnlock
000d8 |$L882|
; 428 : }
; 429 : if(aSet1)
000d8 e3560000 cmp r6, #0
000dc 0a000005 beq |$L883|
; 430 : {
; 431 : LockID = XllpLock(GRER1);
000e0 e3a0000e mov r0, #0xE
000e4 eb000000 bl XllpLock
; 432 : pGPIO->GRER1=((pGPIO->GRER1)&~aMask1);
000e8 e5943034 ldr r3, [r4, #0x34]
000ec e1c33009 bic r3, r3, r9
000f0 e5843034 str r3, [r4, #0x34]
; 433 : XllpUnlock(LockID);
000f4 eb000000 bl XllpUnlock
000f8 |$L883|
; 434 : }
; 435 : if(aSet0)
000f8 e3580000 cmp r8, #0
000fc 0a000005 beq |$L884|
; 436 : {
; 437 : LockID = XllpLock(GRER0);
00100 e3a0000d mov r0, #0xD
00104 eb000000 bl XllpLock
; 438 : pGPIO->GRER0=((pGPIO->GRER0)&~aMask0);
00108 e5943030 ldr r3, [r4, #0x30]
0010c e1c3300a bic r3, r3, r10
00110 e5843030 str r3, [r4, #0x30]
; 439 : XllpUnlock(LockID);
00114 eb000000 bl XllpUnlock
00118 |$L884|
; 440 : }
; 441 : }
00118 e28dd004 add sp, sp, #4
0011c e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00120 e12fff1e bx lr
00124 |$M1365|
ENDP ; |XllpGpioSetRisingDetectDisable|
EXPORT |XllpGpioSetRisingDetectEnable|
00000 AREA |.text| { |XllpGpioSetRisingDetectEnable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioSetRisingDetectEnable|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetRisingDetectEnable| } ; comdat associative
|$T1392| DCD |$L1391|
DCD 0x40004902
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioSetRisingDetectEnable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioSetRisingDetectEnable| PROC
; 450 : {
00000 |$L1391|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1389|
00008 e1a04000 mov r4, r0
0000c e58d4000 str r4, [sp]
; 451 : XLLP_UINT32_T LockID;
; 452 : XLLP_UINT32_T aGpioPinMask;
; 453 : XLLP_UINT32_T aSizeArray;
; 454 : XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 455 : XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 456 : XLLP_UINT32_T i;
; 457 :
; 458 : //determine size of array
; 459 : aSizeArray = aGpioPinArray[0];
00010 e5910000 ldr r0, [r1]
; 460 : aMask0=aMask1=aMask2=aMask3=0;
00014 e3a0b000 mov r11, #0
00018 e3a08000 mov r8, #0
; 461 : aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 462 :
; 463 : for(i=1; i<=aSizeArray; i++)
0001c e3500001 cmp r0, #1
00020 e3a0a000 mov r10, #0
00024 e3a09000 mov r9, #0
00028 e3a0e000 mov lr, #0
0002c e3a05000 mov r5, #0
00030 e3a06000 mov r6, #0
00034 e3a07000 mov r7, #0
00038 3a000036 bcc |$L914|
0003c e2811004 add r1, r1, #4
00040 e3a04001 mov r4, #1
00044 |$L902|
; 464 : {
; 465 : aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);
00044 e5913000 ldr r3, [r1]
00048 e203201f and r2, r3, #0x1F
; 466 : if(aGpioPinArray[i] > 95)
0004c e353005f cmp r3, #0x5F
; 467 : {
; 468 : aMask3 |= aGpioPinMask;
00050 818bb214 orrhi r11, r11, r4, lsl r2
; 469 : aSet3=XLLP_TRUE;
00054 83a0e001 movhi lr, #1
00058 8a000009 bhi |$L903|
; 470 : }
; 471 : else if(aGpioPinArray[i] > 63)
0005c e5913000 ldr r3, [r1]
00060 e353003f cmp r3, #0x3F
; 472 : {
; 473 : aMask2 |= aGpioPinMask;
00064 81888214 orrhi r8, r8, r4, lsl r2
; 474 : aSet2=XLLP_TRUE;
00068 83a05001 movhi r5, #1
0006c 8a000004 bhi |$L903|
; 475 : }
; 476 : else if(aGpioPinArray[i] > 31)
00070 e353001f cmp r3, #0x1F
; 477 : {
; 478 : aMask1 |= aGpioPinMask;
00074 818aa214 orrhi r10, r10, r4, lsl r2
; 479 : aSet1=XLLP_TRUE;
00078 83a06001 movhi r6, #1
; 480 : }
; 481 : else
; 482 : {
; 483 : aMask0 |= aGpioPinMask;
0007c 91899214 orrls r9, r9, r4, lsl r2
; 484 : aSet0=XLLP_TRUE;
00080 93a07001 movls r7, #1
00084 |$L903|
00084 e2811004 add r1, r1, #4
00088 e2500001 subs r0, r0, #1
0008c 1affffec bne |$L902|
; 485 : }
; 486 : }
; 487 : if(aSet3)
00090 e59d4000 ldr r4, [sp]
00094 e35e0000 cmp lr, #0
00098 0a000006 beq |$L911|
; 488 : {
; 489 : LockID = XllpLock(GRER3);
0009c e3a00022 mov r0, #0x22
000a0 eb000000 bl XllpLock
; 490 : pGPIO->GRER3=((pGPIO->GRER3|aMask3)&~XLLP_GPIO_PIN_RESERVED_BITS);
000a4 e5943130 ldr r3, [r4, #0x130]
000a8 e183300b orr r3, r3, r11
000ac e3c334fe bic r3, r3, #0xFE, 8
000b0 e5843130 str r3, [r4, #0x130]
; 491 : XllpUnlock(LockID);
000b4 eb000000 bl XllpUnlock
000b8 |$L911|
; 492 : }
; 493 : if(aSet2)
000b8 e3550000 cmp r5, #0
000bc 0a000005 beq |$L912|
; 494 : {
; 495 : LockID = XllpLock(GRER2);
000c0 e3a0000f mov r0, #0xF
000c4 eb000000 bl XllpLock
; 496 : pGPIO->GRER2=((pGPIO->GRER2)|aMask2);
000c8 e5943038 ldr r3, [r4, #0x38]
; 497 : XllpUnlock(LockID);
000cc e1833008 orr r3, r3, r8
000d0 e5843038 str r3, [r4, #0x38]
000d4 eb000000 bl XllpUnlock
000d8 |$L912|
; 498 : }
; 499 : if(aSet1)
000d8 e3560000 cmp r6, #0
000dc 0a000005 beq |$L913|
; 500 : {
; 501 : LockID = XllpLock(GRER1);
000e0 e3a0000e mov r0, #0xE
000e4 eb000000 bl XllpLock
; 502 : pGPIO->GRER1=((pGPIO->GRER1)|aMask1);
000e8 e5943034 ldr r3, [r4, #0x34]
; 503 : XllpUnlock(LockID);
000ec e183300a orr r3, r3, r10
000f0 e5843034 str r3, [r4, #0x34]
000f4 eb000000 bl XllpUnlock
000f8 |$L913|
; 504 : }
; 505 : if(aSet0)
000f8 e3570000 cmp r7, #0
000fc 0a000005 beq |$L914|
; 506 : {
; 507 : LockID = XllpLock(GRER0);
00100 e3a0000d mov r0, #0xD
00104 eb000000 bl XllpLock
; 508 : pGPIO->GRER0=((pGPIO->GRER0)|aMask0);
00108 e5943030 ldr r3, [r4, #0x30]
; 509 : XllpUnlock(LockID);
0010c e1833009 orr r3, r3, r9
00110 e5843030 str r3, [r4, #0x30]
00114 eb000000 bl XllpUnlock
00118 |$L914|
; 510 : }
; 511 : }
00118 e28dd004 add sp, sp, #4
0011c e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00120 e12fff1e bx lr
00124 |$M1390|
ENDP ; |XllpGpioSetRisingDetectEnable|
EXPORT |XllpGpioGetFallingDetectEnable|
00000 AREA |.text| { |XllpGpioGetFallingDetectEnable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioGetFallingDetectEnable|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioGetFallingDetectEnable| } ; comdat associative
|$T1405| DCD |$L1404|
DCD 0x40000f01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioGetFallingDetectEnable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioGetFallingDetectEnable| PROC
; 522 : {
00000 |$L1404|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1402|
; 523 : XLLP_UINT32_T aGpioPinMask;
; 524 :
; 525 : aGpioPinMask = 0x1 << (aGpioPin & 0x1F);
; 526 :
; 527 : if(aGpioPin > 95)
00004 e351005f cmp r1, #0x5F
; 528 : return (pGPIO->GFER3 & aGpioPinMask);
00008 8590313c ldrhi r3, [r0, #0x13C]
0000c e201201f and r2, r1, #0x1F
00010 e3a0e001 mov lr, #1
00014 8a000005 bhi |$L1401|
; 529 : else if(aGpioPin > 63)
00018 e351003f cmp r1, #0x3F
; 530 : return (pGPIO->GFER2 & aGpioPinMask);
0001c 85903044 ldrhi r3, [r0, #0x44]
00020 8a000002 bhi |$L1401|
; 531 : else if(aGpioPin > 31)
00024 e351001f cmp r1, #0x1F
; 532 : return (pGPIO->GFER1 & aGpioPinMask);
00028 85903040 ldrhi r3, [r0, #0x40]
; 533 : else return (pGPIO->GFER0 & aGpioPinMask);
0002c 9590303c ldrls r3, [r0, #0x3C]
00030 |$L1401|
00030 e003021e and r0, r3, lr, lsl r2
; 534 : }
00034 e49de004 ldr lr, [sp], #4
00038 e12fff1e bx lr
0003c |$M1403|
ENDP ; |XllpGpioGetFallingDetectEnable|
EXPORT |XllpGpioSetFallingEdgeDetectDisable|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -