📄 xllp_gpio.cod
字号:
0002c 95903048 ldrls r3, [r0, #0x48]
00030 |$L1464|
00030 e003021e and r0, r3, lr, lsl r2
; 697 : }
00034 e49de004 ldr lr, [sp], #4
00038 e12fff1e bx lr
0003c |$M1466|
ENDP ; |XllpGpioGetEdgeDetectStatus|
EXPORT |XllpGpioClearEdgeDetectStatus|
00000 AREA |.text| { |XllpGpioClearEdgeDetectStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioClearEdgeDetectStatus|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioClearEdgeDetectStatus| } ; comdat associative
|$T1489| DCD |$L1488|
DCD 0x40002f02
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioClearEdgeDetectStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioClearEdgeDetectStatus| PROC
; 706 : {
00000 |$L1488|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1486|
00008 e58d0000 str r0, [sp]
; 707 : XLLP_UINT32_T aGpioPinMask;
; 708 : XLLP_UINT32_T aSizeArray;
; 709 : XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 710 : XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 711 : XLLP_UINT32_T i;
; 712 :
; 713 : //determine size of array
; 714 : aSizeArray = aGpioPinArray[0];
0000c e5917000 ldr r7, [r1]
; 715 : aMask0=aMask1=aMask2=aMask3=0;
00010 e3a05000 mov r5, #0
00014 e3a06000 mov r6, #0
; 716 : aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 717 :
; 718 : for(i=1; i<=aSizeArray; i++)
00018 e3570001 cmp r7, #1
0001c e3a04000 mov r4, #0
00020 e3a0e000 mov lr, #0
00024 e3a09000 mov r9, #0
00028 e3a0b000 mov r11, #0
0002c e3a0a000 mov r10, #0
00030 e3a08000 mov r8, #0
00034 3a00001d bcc |$L1027|
00038 e2811004 add r1, r1, #4
0003c e3a00001 mov r0, #1
00040 |$L1015|
; 719 : {
; 720 : aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);
00040 e5913000 ldr r3, [r1]
00044 e203201f and r2, r3, #0x1F
; 721 : if(aGpioPinArray[i] > 95)
00048 e353005f cmp r3, #0x5F
; 722 : {
; 723 : aMask3 |= aGpioPinMask;
0004c 81855210 orrhi r5, r5, r0, lsl r2
; 724 : aSet3=XLLP_TRUE;
00050 83a09001 movhi r9, #1
00054 8a000009 bhi |$L1016|
; 725 : }
; 726 : else if(aGpioPinArray[i] > 63)
00058 e5913000 ldr r3, [r1]
0005c e353003f cmp r3, #0x3F
; 727 : {
; 728 : aMask2 |= aGpioPinMask;
00060 81866210 orrhi r6, r6, r0, lsl r2
; 729 : aSet2=XLLP_TRUE;
00064 83a0b001 movhi r11, #1
00068 8a000004 bhi |$L1016|
; 730 : }
; 731 : else if(aGpioPinArray[i] > 31)
0006c e353001f cmp r3, #0x1F
; 732 : {
; 733 : aMask1 |= aGpioPinMask;
00070 81844210 orrhi r4, r4, r0, lsl r2
; 734 : aSet1=XLLP_TRUE;
00074 83a0a001 movhi r10, #1
; 735 : }
; 736 : else
; 737 : {
; 738 : aMask0 |= aGpioPinMask;
00078 918ee210 orrls lr, lr, r0, lsl r2
; 739 : aSet0=XLLP_TRUE;
0007c 93a08001 movls r8, #1
00080 |$L1016|
00080 e2811004 add r1, r1, #4
00084 e2577001 subs r7, r7, #1
00088 1affffec bne |$L1015|
; 740 : }
; 741 : }
; 742 : if(aSet3)
0008c e59d0000 ldr r0, [sp]
00090 e3590000 cmp r9, #0
; 743 : pGPIO->GEDR3= aMask3;
00094 15805148 strne r5, [r0, #0x148]
; 744 : if(aSet2)
00098 e35b0000 cmp r11, #0
; 745 : pGPIO->GEDR2= aMask2;
0009c 15806050 strne r6, [r0, #0x50]
; 746 : if(aSet1)
000a0 e35a0000 cmp r10, #0
; 747 : pGPIO->GEDR1= aMask1;
000a4 1580404c strne r4, [r0, #0x4C]
; 748 : if(aSet0)
000a8 e3580000 cmp r8, #0
; 749 : pGPIO->GEDR0= aMask0;
000ac 1580e048 strne lr, [r0, #0x48]
000b0 |$L1027|
; 750 : }
000b0 e28dd004 add sp, sp, #4
000b4 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
000b8 e12fff1e bx lr
000bc |$M1487|
ENDP ; |XllpGpioClearEdgeDetectStatus|
EXPORT |XllpGpioGetAlternateFn|
00000 AREA |.text| { |XllpGpioGetAlternateFn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioGetAlternateFn|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioGetAlternateFn| } ; comdat associative
|$T1502| DCD |$L1501|
DCD 0x40001c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioGetAlternateFn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioGetAlternateFn| PROC
; 762 : {
00000 |$L1501|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1499|
; 763 : XLLP_UINT32_T aGpioPinAFMask;
; 764 :
; 765 : aGpioPinAFMask = 0x3u << ((aGpioPin & 0xF)*2);
00004 e201300f and r3, r1, #0xF
; 766 :
; 767 : if (aGpioPin>111)
00008 e351006f cmp r1, #0x6F
0000c e1a02083 mov r2, r3, lsl #1
; 768 : return (pGPIO->GAFR3_U & aGpioPinAFMask);
00010 85903070 ldrhi r3, [r0, #0x70]
00014 e3a0e003 mov lr, #3
00018 8a000011 bhi |$L1498|
; 769 : else if (aGpioPin>95)
0001c e351005f cmp r1, #0x5F
; 770 : return (pGPIO->GAFR3_L & aGpioPinAFMask);
00020 8590306c ldrhi r3, [r0, #0x6C]
00024 8a00000e bhi |$L1498|
; 771 : else if (aGpioPin>79)
00028 e351004f cmp r1, #0x4F
; 772 : return (pGPIO->GAFR2_U & aGpioPinAFMask);
0002c 85903068 ldrhi r3, [r0, #0x68]
00030 8a00000b bhi |$L1498|
; 773 : else if (aGpioPin>63)
00034 e351003f cmp r1, #0x3F
; 774 : return (pGPIO->GAFR2_L & aGpioPinAFMask);
00038 85903064 ldrhi r3, [r0, #0x64]
0003c 8a000008 bhi |$L1498|
; 775 : else if (aGpioPin>47)
00040 e351002f cmp r1, #0x2F
; 776 : return (pGPIO->GAFR1_U & aGpioPinAFMask);
00044 85903060 ldrhi r3, [r0, #0x60]
00048 8a000005 bhi |$L1498|
; 777 : else if (aGpioPin>31)
0004c e351001f cmp r1, #0x1F
; 778 : return (pGPIO->GAFR1_L & aGpioPinAFMask);
00050 8590305c ldrhi r3, [r0, #0x5C]
00054 8a000002 bhi |$L1498|
; 779 : else if (aGpioPin>15)
00058 e351000f cmp r1, #0xF
; 780 : return (pGPIO->GAFR0_U & aGpioPinAFMask);
0005c 85903058 ldrhi r3, [r0, #0x58]
; 781 : else return (pGPIO->GAFR0_L & aGpioPinAFMask);
00060 95903054 ldrls r3, [r0, #0x54]
00064 |$L1498|
00064 e003021e and r0, r3, lr, lsl r2
; 782 : }
00068 e49de004 ldr lr, [sp], #4
0006c e12fff1e bx lr
00070 |$M1500|
ENDP ; |XllpGpioGetAlternateFn|
EXPORT |XllpGpioSetAlternateFn|
00000 AREA |.text| { |XllpGpioSetAlternateFn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioSetAlternateFn|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetAlternateFn| } ; comdat associative
|$T1549| DCD |$L1548|
DCD 0x4000ee02
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioSetAlternateFn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioSetAlternateFn| PROC
; 796 : {
00000 |$L1548|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd04c sub sp, sp, #0x4C
00008 |$M1546|
00008 e1a04000 mov r4, r0
0000c e58d4048 str r4, [sp, #0x48]
; 797 : XLLP_UINT32_T LockID;
; 798 : XLLP_UINT32_T aGpioPinAFMask;
; 799 : XLLP_UINT32_T aGpioPinAFValue;
; 800 : XLLP_UINT32_T aSizeArray;
; 801 : XLLP_UINT32_T aMask0_U, aMask0_L, aMask1_U, aMask1_L;
; 802 : XLLP_UINT32_T aMask2_U, aMask2_L, aMask3_U, aMask3_L;
; 803 : XLLP_UINT32_T aAFnV0_U, aAFnV0_L, aAFnV1_U, aAFnV1_L;
; 804 : XLLP_UINT32_T aAFnV2_U, aAFnV2_L, aAFnV3_U, aAFnV3_L;
; 805 : XLLP_BOOL_T aSet0_U, aSet0_L, aSet1_U, aSet1_L;
; 806 : XLLP_BOOL_T aSet2_U, aSet2_L, aSet3_U, aSet3_L;
; 807 : XLLP_UINT32_T i;
; 808 :
; 809 : //determine size of array
; 810 : aSizeArray = aGpioPinArray[0];
; 811 : aMask0_U=aMask0_L=aMask1_U=aMask1_L=0;
00010 e3a03000 mov r3, #0
00014 e58d3018 str r3, [sp, #0x18]
00018 e3a03000 mov r3, #0
0001c e58d3010 str r3, [sp, #0x10]
; 812 : aMask2_U=aMask2_L=aMask3_U=aMask3_L=0;
; 813 : aAFnV0_U=aAFnV0_L=aAFnV1_U=aAFnV1_L=0;
; 814 : aAFnV2_U=aAFnV2_L=aAFnV3_U=aAFnV3_L=0;
; 815 : aSet0_U=aSet0_L=aSet1_U=aSet1_L=XLLP_FALSE;
; 816 : aSet2_U=aSet2_L=aSet3_U=aSet3_L=XLLP_FALSE;
; 817 :
; 818 : for(i=1; i<=aSizeArray; i++)
00020 e3a03000 mov r3, #0
00024 e58d3028 str r3, [sp, #0x28]
00028 e3a03000 mov r3, #0
0002c e58d3020 str r3, [sp, #0x20]
00030 e3a03000 mov r3, #0
00034 e58d3008 str r3, [sp, #8]
00038 e3a03000 mov r3, #0
0003c e58d3000 str r3, [sp]
00040 e3a03000 mov r3, #0
00044 e58d301c str r3, [sp, #0x1C]
00048 e3a03000 mov r3, #0
0004c e58d3014 str r3, [sp, #0x14]
00050 e3a03000 mov r3, #0
00054 e58d302c str r3, [sp, #0x2C]
00058 e3a03000 mov r3, #0
0005c e58d3024 str r3, [sp, #0x24]
00060 e3a03000 mov r3, #0
00064 e58d3030 str r3, [sp, #0x30]
00068 e3a03000 mov r3, #0
0006c e58d300c str r3, [sp, #0xC]
00070 e3a03000 mov r3, #0
00074 e58d3004 str r3, [sp, #4]
00078 e3a03000 mov r3, #0
0007c e58d303c str r3, [sp, #0x3C]
00080 e3a03000 mov r3, #0
00084 e58d3038 str r3, [sp, #0x38]
00088 e3a03000 mov r3, #0
0008c e58d3044 str r3, [sp, #0x44]
00090 e591e000 ldr lr, [r1]
00094 e3a03000 mov r3, #0
00098 e58d3040 str r3, [sp, #0x40]
0009c e3a03000 mov r3, #0
000a0 e58d3034 str r3, [sp, #0x34]
000a4 e35e0001 cmp lr, #1
000a8 e3a0b000 mov r11, #0
000ac e3a07000 mov r7, #0
000b0 e3a08000 mov r8, #0
000b4 e3a06000 mov r6, #0
000b8 e3a05000 mov r5, #0
000bc e3a09000 mov r9, #0
000c0 3a0000b9 bcc |$L1108|
000c4 e2810004 add r0, r1, #4
000c8 e042a001 sub r10, r2, r1
000cc e3a04000 mov r4, #0
000d0 |$L1084|
; 819 : {
; 820 : aGpioPinAFMask = 0x3u << ((aGpioPinArray[i] & 0xF)*2);
000d0 e5902000 ldr r2, [r0]
; 821 : aGpioPinAFValue = aAfValueArray[i] << ((aGpioPinArray[i] & 0xF)*2);
000d4 e79a1000 ldr r1, [r10, +r0]
000d8 e202300f and r3, r2, #0xF
; 822 : if (aGpioPinArray[i]>111)
000dc e352006f cmp r2, #0x6F
000e0 e1a03083 mov r3, r3, lsl #1
; 823 : {
; 824 : aAFnV3_U |= aGpioPinAFValue;
; 825 : aMask3_U |= aGpioPinAFMask;
000e4 83a02003 movhi r2, #3
000e8 81888311 orrhi r8, r8, r1, lsl r3
000ec 81877312 orrhi r7, r7, r2, lsl r3
; 826 : aSet3_U=XLLP_TRUE;
000f0 83a05001 movhi r5, #1
000f4 8a00004a bhi |$L1085|
; 827 : }
; 828 : else if (aGpioPinArray[i]>95)
000f8 e5902000 ldr r2, [r0]
000fc e352005f cmp r2, #0x5F
; 829 : {
; 830 : aAFnV3_L |= aGpioPinAFValue;
; 831 : aMask3_L |= aGpioPinAFMask;
00100 83a02003 movhi r2, #3
00104 818bb312 orrhi r11, r11, r2, lsl r3
00108 81844311 orrhi r4, r4, r1, lsl r3
; 832 : aSet3_L=XLLP_TRUE;
0010c 83a06001 movhi r6, #1
00110 8a000043 bhi |$L1085|
; 833 : }
; 834 : else if (aGpioPinArray[i]>79)
00114 e352004f cmp r2, #0x4F
00118 9a000008 bls |$L1091|
; 835 : {
; 836 : aAFnV2_U |= aGpioPinAFValue;
0011c e59d2004 ldr r2, [sp, #4]
; 837 : aMask2_U |= aGpioPinAFMask;
; 838 : aSet2_U=XLLP_TRUE;
00120 e3a09001 mov r9, #1
00124 e1822311 orr r2, r2, r1, lsl r3
00128 e3a01003 mov r1, #3
0012c e58d2004 str r2, [sp, #4]
00130 e59d2000 ldr r2, [sp]
00134 e1822311 orr r2, r2, r1, lsl r3
00138 e58d2000 str r2, [sp]
; 839 : }
; 840 : else if (aGpioPinArray[i]>63)
0013c ea000038 b |$L1085|
00140 |$L1091|
00140 e352003f cmp r2, #0x3F
00144 9a000009 bls |$L1093|
; 841 : {
; 842 : aAFnV2_L |= aGpioPinAFValue;
00148 e59d200c ldr r2, [sp, #0xC]
0014c e1822311 orr r2, r2, r1, lsl r3
; 843 : aMask2_L |= aGpioPinAFMask;
00150 e3a01003 mov r1, #3
00154 e58d200c str r2, [sp, #0xC]
00158 e59d2008 ldr r2, [sp, #8]
0015c e1822311 orr r2, r2, r1, lsl r3
; 844 : aSet2_L=XLLP_TRUE;
00160 e3a03001 mov r3, #1
00164 e58d2008 str r2, [sp, #8]
00168 e58d3034 str r3, [sp, #0x34]
; 845 : }
; 846 : else if (aGpioPinArray[i]>47)
0016c ea00002c b |$L1085|
00170 |$L1093|
00170 e352002f cmp r2, #0x2F
00174 9a000009 bls |$L1095|
; 847 : {
; 848 : aAFnV1_U |= aGpioPinAFValue;
00178 e59d2014 ldr r2, [sp, #0x14]
0017c e1822311 orr r2, r2, r1, lsl r3
; 849 : aMask1_U |= aGpioPinAFMask;
00180 e3a01003 mov r1, #3
00184 e58d2014 str r2, [sp, #0x14]
00188 e59d2010 ldr r2, [sp, #0x10]
0018c e1822311 orr r2, r2, r1, lsl r3
; 850 : aSet1_U=XLLP_TRUE;
00190 e3a03001 mov r3, #1
00194 e58d2010 str r2, [sp, #0x10]
00198 e58d3038 str r3, [sp, #0x
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -