📄 xllp_gpio.cod
字号:
00000 AREA |.text| { |XllpGpioSetFallingEdgeDetectDisable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioSetFallingEdgeDetectDisable|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetFallingEdgeDetectDisable| } ; comdat associative
|$T1430| DCD |$L1429|
DCD 0x40004902
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioSetFallingEdgeDetectDisable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioSetFallingEdgeDetectDisable| PROC
; 543 : {
00000 |$L1429|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1427|
00008 e1a04000 mov r4, r0
0000c e58d4000 str r4, [sp]
; 544 : XLLP_UINT32_T LockID;
; 545 : XLLP_UINT32_T aGpioPinMask;
; 546 : XLLP_UINT32_T aSizeArray;
; 547 : XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 548 : XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 549 : XLLP_UINT32_T i;
; 550 :
; 551 : //determine size of array
; 552 : aSizeArray = aGpioPinArray[0];
00010 e5910000 ldr r0, [r1]
; 553 : aMask0=aMask1=aMask2=aMask3=0;
00014 e3a0b000 mov r11, #0
00018 e3a07000 mov r7, #0
; 554 : aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 555 :
; 556 : 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 |$L956|
0003c e2811004 add r1, r1, #4
00040 e3a04001 mov r4, #1
00044 |$L944|
; 557 : {
; 558 : aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);
00044 e5913000 ldr r3, [r1]
00048 e203201f and r2, r3, #0x1F
; 559 : if(aGpioPinArray[i] > 95)
0004c e353005f cmp r3, #0x5F
; 560 : {
; 561 : aMask3 |= aGpioPinMask;
00050 818bb214 orrhi r11, r11, r4, lsl r2
; 562 : aSet3=XLLP_TRUE;
00054 83a0e001 movhi lr, #1
00058 8a000009 bhi |$L945|
; 563 : }
; 564 : else if(aGpioPinArray[i] > 63)
0005c e5913000 ldr r3, [r1]
00060 e353003f cmp r3, #0x3F
; 565 : {
; 566 : aMask2 |= aGpioPinMask;
00064 81877214 orrhi r7, r7, r4, lsl r2
; 567 : aSet2=XLLP_TRUE;
00068 83a05001 movhi r5, #1
0006c 8a000004 bhi |$L945|
; 568 : }
; 569 : else if(aGpioPinArray[i] > 31)
00070 e353001f cmp r3, #0x1F
; 570 : {
; 571 : aMask1 |= aGpioPinMask;
00074 81899214 orrhi r9, r9, r4, lsl r2
; 572 : aSet1=XLLP_TRUE;
00078 83a06001 movhi r6, #1
; 573 : }
; 574 : else
; 575 : {
; 576 : aMask0 |= aGpioPinMask;
0007c 918aa214 orrls r10, r10, r4, lsl r2
; 577 : aSet0=XLLP_TRUE;
00080 93a08001 movls r8, #1
00084 |$L945|
00084 e2811004 add r1, r1, #4
00088 e2500001 subs r0, r0, #1
0008c 1affffec bne |$L944|
; 578 : }
; 579 : }
; 580 : if(aSet3)
00090 e59d4000 ldr r4, [sp]
00094 e35e0000 cmp lr, #0
00098 0a000006 beq |$L953|
; 581 : {
; 582 : LockID = XllpLock(GFER3);
0009c e3a00023 mov r0, #0x23
000a0 eb000000 bl XllpLock
; 583 : pGPIO->GFER3=((pGPIO->GFER3&~aMask3)&~XLLP_GPIO_PIN_RESERVED_BITS);
000a4 e594313c ldr r3, [r4, #0x13C]
000a8 e1c3300b bic r3, r3, r11
000ac e3c334fe bic r3, r3, #0xFE, 8
000b0 e584313c str r3, [r4, #0x13C]
; 584 : XllpUnlock(LockID);
000b4 eb000000 bl XllpUnlock
000b8 |$L953|
; 585 : }
; 586 : if(aSet2)
000b8 e3550000 cmp r5, #0
000bc 0a000005 beq |$L954|
; 587 : {
; 588 : LockID = XllpLock(GFER2);
000c0 e3a00012 mov r0, #0x12
000c4 eb000000 bl XllpLock
; 589 : pGPIO->GFER2=((pGPIO->GFER2)&~aMask2);
000c8 e5943044 ldr r3, [r4, #0x44]
000cc e1c33007 bic r3, r3, r7
000d0 e5843044 str r3, [r4, #0x44]
; 590 : XllpUnlock(LockID);
000d4 eb000000 bl XllpUnlock
000d8 |$L954|
; 591 : }
; 592 : if(aSet1)
000d8 e3560000 cmp r6, #0
000dc 0a000005 beq |$L955|
; 593 : {
; 594 : LockID = XllpLock(GFER1);
000e0 e3a00011 mov r0, #0x11
000e4 eb000000 bl XllpLock
; 595 : pGPIO->GFER1=((pGPIO->GFER1)&~aMask1);
000e8 e5943040 ldr r3, [r4, #0x40]
000ec e1c33009 bic r3, r3, r9
000f0 e5843040 str r3, [r4, #0x40]
; 596 : XllpUnlock(LockID);
000f4 eb000000 bl XllpUnlock
000f8 |$L955|
; 597 : }
; 598 : if(aSet0)
000f8 e3580000 cmp r8, #0
000fc 0a000005 beq |$L956|
; 599 : {
; 600 : LockID = XllpLock(GFER0);
00100 e3a00010 mov r0, #0x10
00104 eb000000 bl XllpLock
; 601 : pGPIO->GFER0=((pGPIO->GFER0)&~aMask0);
00108 e594303c ldr r3, [r4, #0x3C]
0010c e1c3300a bic r3, r3, r10
00110 e584303c str r3, [r4, #0x3C]
; 602 : XllpUnlock(LockID);
00114 eb000000 bl XllpUnlock
00118 |$L956|
; 603 : }
; 604 : }
00118 e28dd004 add sp, sp, #4
0011c e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00120 e12fff1e bx lr
00124 |$M1428|
ENDP ; |XllpGpioSetFallingEdgeDetectDisable|
EXPORT |XllpGpioSetFallingEdgeDetectEnable|
00000 AREA |.text| { |XllpGpioSetFallingEdgeDetectEnable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioSetFallingEdgeDetectEnable|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetFallingEdgeDetectEnable| } ; comdat associative
|$T1455| DCD |$L1454|
DCD 0x40004902
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioSetFallingEdgeDetectEnable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioSetFallingEdgeDetectEnable| PROC
; 613 : {
00000 |$L1454|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1452|
00008 e1a04000 mov r4, r0
0000c e58d4000 str r4, [sp]
; 614 : XLLP_UINT32_T LockID;
; 615 : XLLP_UINT32_T aGpioPinMask;
; 616 : XLLP_UINT32_T aSizeArray;
; 617 : XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 618 : XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 619 : XLLP_UINT32_T i;
; 620 :
; 621 : //determine size of array
; 622 : aSizeArray = aGpioPinArray[0];
00010 e5910000 ldr r0, [r1]
; 623 : aMask0=aMask1=aMask2=aMask3=0;
00014 e3a0b000 mov r11, #0
00018 e3a08000 mov r8, #0
; 624 : aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 625 :
; 626 : 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 |$L986|
0003c e2811004 add r1, r1, #4
00040 e3a04001 mov r4, #1
00044 |$L974|
; 627 : {
; 628 : aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);
00044 e5913000 ldr r3, [r1]
00048 e203201f and r2, r3, #0x1F
; 629 : if(aGpioPinArray[i] > 95)
0004c e353005f cmp r3, #0x5F
; 630 : {
; 631 : aMask3 |= aGpioPinMask;
00050 818bb214 orrhi r11, r11, r4, lsl r2
; 632 : aSet3=XLLP_TRUE;
00054 83a0e001 movhi lr, #1
00058 8a000009 bhi |$L975|
; 633 : }
; 634 : else if(aGpioPinArray[i] > 63)
0005c e5913000 ldr r3, [r1]
00060 e353003f cmp r3, #0x3F
; 635 : {
; 636 : aMask2 |= aGpioPinMask;
00064 81888214 orrhi r8, r8, r4, lsl r2
; 637 : aSet2=XLLP_TRUE;
00068 83a05001 movhi r5, #1
0006c 8a000004 bhi |$L975|
; 638 : }
; 639 : else if(aGpioPinArray[i] > 31)
00070 e353001f cmp r3, #0x1F
; 640 : {
; 641 : aMask1 |= aGpioPinMask;
00074 818aa214 orrhi r10, r10, r4, lsl r2
; 642 : aSet1=XLLP_TRUE;
00078 83a06001 movhi r6, #1
; 643 : }
; 644 : else
; 645 : {
; 646 : aMask0 |= aGpioPinMask;
0007c 91899214 orrls r9, r9, r4, lsl r2
; 647 : aSet0=XLLP_TRUE;
00080 93a07001 movls r7, #1
00084 |$L975|
00084 e2811004 add r1, r1, #4
00088 e2500001 subs r0, r0, #1
0008c 1affffec bne |$L974|
; 648 : }
; 649 : }
; 650 : if(aSet3)
00090 e59d4000 ldr r4, [sp]
00094 e35e0000 cmp lr, #0
00098 0a000006 beq |$L983|
; 651 : {
; 652 : LockID = XllpLock(GFER3);
0009c e3a00023 mov r0, #0x23
000a0 eb000000 bl XllpLock
; 653 : pGPIO->GFER3=((pGPIO->GFER3|aMask3)&~XLLP_GPIO_PIN_RESERVED_BITS);
000a4 e594313c ldr r3, [r4, #0x13C]
000a8 e183300b orr r3, r3, r11
000ac e3c334fe bic r3, r3, #0xFE, 8
000b0 e584313c str r3, [r4, #0x13C]
; 654 : XllpUnlock(LockID);
000b4 eb000000 bl XllpUnlock
000b8 |$L983|
; 655 : }
; 656 : if(aSet2)
000b8 e3550000 cmp r5, #0
000bc 0a000005 beq |$L984|
; 657 : {
; 658 : LockID = XllpLock(GFER2);
000c0 e3a00012 mov r0, #0x12
000c4 eb000000 bl XllpLock
; 659 : pGPIO->GFER2=((pGPIO->GFER2)|aMask2);
000c8 e5943044 ldr r3, [r4, #0x44]
; 660 : XllpUnlock(LockID);
000cc e1833008 orr r3, r3, r8
000d0 e5843044 str r3, [r4, #0x44]
000d4 eb000000 bl XllpUnlock
000d8 |$L984|
; 661 : }
; 662 : if(aSet1)
000d8 e3560000 cmp r6, #0
000dc 0a000005 beq |$L985|
; 663 : {
; 664 : LockID = XllpLock(GFER1);
000e0 e3a00011 mov r0, #0x11
000e4 eb000000 bl XllpLock
; 665 : pGPIO->GFER1=((pGPIO->GFER1)|aMask1);
000e8 e5943040 ldr r3, [r4, #0x40]
; 666 : XllpUnlock(LockID);
000ec e183300a orr r3, r3, r10
000f0 e5843040 str r3, [r4, #0x40]
000f4 eb000000 bl XllpUnlock
000f8 |$L985|
; 667 : }
; 668 : if(aSet0)
000f8 e3570000 cmp r7, #0
000fc 0a000005 beq |$L986|
; 669 : {
; 670 : LockID = XllpLock(GFER0);
00100 e3a00010 mov r0, #0x10
00104 eb000000 bl XllpLock
; 671 : pGPIO->GFER0=((pGPIO->GFER0)|aMask0);
00108 e594303c ldr r3, [r4, #0x3C]
; 672 : XllpUnlock(LockID);
0010c e1833009 orr r3, r3, r9
00110 e584303c str r3, [r4, #0x3C]
00114 eb000000 bl XllpUnlock
00118 |$L986|
; 673 : }
; 674 : }
00118 e28dd004 add sp, sp, #4
0011c e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00120 e12fff1e bx lr
00124 |$M1453|
ENDP ; |XllpGpioSetFallingEdgeDetectEnable|
EXPORT |XllpGpioGetEdgeDetectStatus|
00000 AREA |.text| { |XllpGpioGetEdgeDetectStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioGetEdgeDetectStatus|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioGetEdgeDetectStatus| } ; comdat associative
|$T1468| DCD |$L1467|
DCD 0x40000f01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioGetEdgeDetectStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioGetEdgeDetectStatus| PROC
; 685 : {
00000 |$L1467|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1465|
; 686 : XLLP_UINT32_T aGpioPinMask;
; 687 :
; 688 : aGpioPinMask = 0x1 << (aGpioPin & 0x1F);
; 689 :
; 690 : if(aGpioPin > 95)
00004 e351005f cmp r1, #0x5F
; 691 : return (pGPIO->GEDR3& aGpioPinMask);
00008 85903148 ldrhi r3, [r0, #0x148]
0000c e201201f and r2, r1, #0x1F
00010 e3a0e001 mov lr, #1
00014 8a000005 bhi |$L1464|
; 692 : else if(aGpioPin > 63)
00018 e351003f cmp r1, #0x3F
; 693 : return (pGPIO->GEDR2 & aGpioPinMask);
0001c 85903050 ldrhi r3, [r0, #0x50]
00020 8a000002 bhi |$L1464|
; 694 : else if(aGpioPin > 31)
00024 e351001f cmp r1, #0x1F
; 695 : return (pGPIO->GEDR1 & aGpioPinMask);
00028 8590304c ldrhi r3, [r0, #0x4C]
; 696 : else return (pGPIO->GEDR0 & aGpioPinMask);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -