📄 xllp_gpio.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345
TTL F:\wm520\PLATFORM\intel_dbpxa27x\Public\CSP\ARM\INTEL\PXA27X\XLLP\SOURCE\.\xllp_gpio.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |XllpGpioGetState|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_gpio.c
00000 AREA |.text| { |XllpGpioGetState| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioGetState|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioGetState| } ; comdat associative
|$T1224| DCD |$L1223|
DCD 0x40000f01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioGetState| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioGetState| PROC
; 57 : {
00000 |$L1223|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1221|
; 58 : XLLP_UINT32_T aGpioPinMask;
; 59 :
; 60 : aGpioPinMask = 0x1 << (aGpioPin & 0x1F);
; 61 :
; 62 : if(aGpioPin > 95)
00004 e351005f cmp r1, #0x5F
; 63 : return (pGPIO->GPLR3 & aGpioPinMask);
00008 85903100 ldrhi r3, [r0, #0x100]
0000c e201201f and r2, r1, #0x1F
00010 e3a0e001 mov lr, #1
00014 8a000005 bhi |$L1220|
; 64 : else if(aGpioPin > 63)
00018 e351003f cmp r1, #0x3F
; 65 : return (pGPIO->GPLR2 & aGpioPinMask);
0001c 85903008 ldrhi r3, [r0, #8]
00020 8a000002 bhi |$L1220|
; 66 : else if(aGpioPin > 31)
00024 e351001f cmp r1, #0x1F
; 67 : return (pGPIO->GPLR1 & aGpioPinMask);
00028 85903004 ldrhi r3, [r0, #4]
; 68 : else return (pGPIO->GPLR0 & aGpioPinMask);
0002c 95903000 ldrls r3, [r0]
00030 |$L1220|
00030 e003021e and r0, r3, lr, lsl r2
; 69 : }
00034 e49de004 ldr lr, [sp], #4
00038 e12fff1e bx lr
0003c |$M1222|
ENDP ; |XllpGpioGetState|
EXPORT |XllpGpioGetDirection|
00000 AREA |.text| { |XllpGpioGetDirection| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioGetDirection|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioGetDirection| } ; comdat associative
|$T1237| DCD |$L1236|
DCD 0x40000f01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioGetDirection| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioGetDirection| PROC
; 81 : {
00000 |$L1236|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1234|
; 82 : XLLP_UINT32_T aGpioPinMask;
; 83 :
; 84 : aGpioPinMask = 0x1 << (aGpioPin & 0x1F);
; 85 :
; 86 : if(aGpioPin > 95)
00004 e351005f cmp r1, #0x5F
; 87 : return (pGPIO->GPDR3 & aGpioPinMask);
00008 8590310c ldrhi r3, [r0, #0x10C]
0000c e201201f and r2, r1, #0x1F
00010 e3a0e001 mov lr, #1
00014 8a000005 bhi |$L1233|
; 88 : else if(aGpioPin > 63)
00018 e351003f cmp r1, #0x3F
; 89 : return (pGPIO->GPDR2 & aGpioPinMask);
0001c 85903014 ldrhi r3, [r0, #0x14]
00020 8a000002 bhi |$L1233|
; 90 : else if(aGpioPin > 31)
00024 e351001f cmp r1, #0x1F
; 91 : return (pGPIO->GPDR1 & aGpioPinMask);
00028 85903010 ldrhi r3, [r0, #0x10]
; 92 : else return (pGPIO->GPDR0 & aGpioPinMask);
0002c 9590300c ldrls r3, [r0, #0xC]
00030 |$L1233|
00030 e003021e and r0, r3, lr, lsl r2
; 93 : }
00034 e49de004 ldr lr, [sp], #4
00038 e12fff1e bx lr
0003c |$M1235|
ENDP ; |XllpGpioGetDirection|
EXPORT |XllpGpioSetDirectionIn|
IMPORT |XllpLock|
IMPORT |XllpUnlock|
00000 AREA |.text| { |XllpGpioSetDirectionIn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioSetDirectionIn|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetDirectionIn| } ; comdat associative
|$T1262| DCD |$L1261|
DCD 0x40004902
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioSetDirectionIn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioSetDirectionIn| PROC
; 104 : {
00000 |$L1261|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1259|
00008 e1a04000 mov r4, r0
0000c e58d4000 str r4, [sp]
; 105 : XLLP_UINT32_T LockID;
; 106 : XLLP_UINT32_T aGpioPinMask;
; 107 : XLLP_UINT32_T aSizeArray;
; 108 : XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 109 : XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 110 : XLLP_UINT32_T i;
; 111 :
; 112 : //determine size of array
; 113 : aSizeArray = aGpioPinArray[0];
00010 e5910000 ldr r0, [r1]
; 114 : aMask0=aMask1=aMask2=aMask3=0;
00014 e3a0b000 mov r11, #0
00018 e3a07000 mov r7, #0
; 115 : aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 116 :
; 117 : 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 |$L754|
0003c e2811004 add r1, r1, #4
00040 e3a04001 mov r4, #1
00044 |$L742|
; 118 : {
; 119 : aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);
00044 e5913000 ldr r3, [r1]
00048 e203201f and r2, r3, #0x1F
; 120 : if(aGpioPinArray[i] > 95)
0004c e353005f cmp r3, #0x5F
; 121 : {
; 122 : aMask3 |= aGpioPinMask;
00050 818bb214 orrhi r11, r11, r4, lsl r2
; 123 : aSet3=XLLP_TRUE;
00054 83a0e001 movhi lr, #1
00058 8a000009 bhi |$L743|
; 124 : }
; 125 : else if(aGpioPinArray[i] > 63)
0005c e5913000 ldr r3, [r1]
00060 e353003f cmp r3, #0x3F
; 126 : {
; 127 : aMask2 |= aGpioPinMask;
00064 81877214 orrhi r7, r7, r4, lsl r2
; 128 : aSet2=XLLP_TRUE;
00068 83a05001 movhi r5, #1
0006c 8a000004 bhi |$L743|
; 129 : }
; 130 : else if(aGpioPinArray[i] > 31)
00070 e353001f cmp r3, #0x1F
; 131 : {
; 132 : aMask1 |= aGpioPinMask;
00074 81899214 orrhi r9, r9, r4, lsl r2
; 133 : aSet1=XLLP_TRUE;
00078 83a06001 movhi r6, #1
; 134 : }
; 135 : else
; 136 : {
; 137 : aMask0 |= aGpioPinMask;
0007c 918aa214 orrls r10, r10, r4, lsl r2
; 138 : aSet0=XLLP_TRUE;
00080 93a08001 movls r8, #1
00084 |$L743|
00084 e2811004 add r1, r1, #4
00088 e2500001 subs r0, r0, #1
0008c 1affffec bne |$L742|
; 139 : }
; 140 :
; 141 : }
; 142 :
; 143 : if(aSet3)
00090 e59d4000 ldr r4, [sp]
00094 e35e0000 cmp lr, #0
00098 0a000006 beq |$L751|
; 144 : {
; 145 : LockID = XllpLock(GPDR3);
0009c e3a0001f mov r0, #0x1F
000a0 eb000000 bl XllpLock
; 146 : pGPIO->GPDR3=((pGPIO->GPDR3&~aMask3)&~XLLP_GPIO_PIN_RESERVED_BITS);
000a4 e594310c ldr r3, [r4, #0x10C]
000a8 e1c3300b bic r3, r3, r11
000ac e3c334fe bic r3, r3, #0xFE, 8
000b0 e584310c str r3, [r4, #0x10C]
; 147 : XllpUnlock(LockID);
000b4 eb000000 bl XllpUnlock
000b8 |$L751|
; 148 : }
; 149 : if(aSet2)
000b8 e3550000 cmp r5, #0
000bc 0a000005 beq |$L752|
; 150 : {
; 151 : LockID = XllpLock(GPDR2);
000c0 e3a00006 mov r0, #6
000c4 eb000000 bl XllpLock
; 152 : pGPIO->GPDR2=((pGPIO->GPDR2)&~aMask2);
000c8 e5943014 ldr r3, [r4, #0x14]
000cc e1c33007 bic r3, r3, r7
000d0 e5843014 str r3, [r4, #0x14]
; 153 : XllpUnlock(LockID);
000d4 eb000000 bl XllpUnlock
000d8 |$L752|
; 154 : }
; 155 : if(aSet1)
000d8 e3560000 cmp r6, #0
000dc 0a000005 beq |$L753|
; 156 : {
; 157 : LockID = XllpLock(GPDR1);
000e0 e3a00005 mov r0, #5
000e4 eb000000 bl XllpLock
; 158 : pGPIO->GPDR1=((pGPIO->GPDR1)&~aMask1);
000e8 e5943010 ldr r3, [r4, #0x10]
000ec e1c33009 bic r3, r3, r9
000f0 e5843010 str r3, [r4, #0x10]
; 159 : XllpUnlock(LockID);
000f4 eb000000 bl XllpUnlock
000f8 |$L753|
; 160 : }
; 161 : if(aSet0)
000f8 e3580000 cmp r8, #0
000fc 0a000005 beq |$L754|
; 162 : {
; 163 : LockID = XllpLock(GPDR0);
00100 e3a00004 mov r0, #4
00104 eb000000 bl XllpLock
; 164 : pGPIO->GPDR0=((pGPIO->GPDR0)&~aMask0);
00108 e594300c ldr r3, [r4, #0xC]
0010c e1c3300a bic r3, r3, r10
00110 e584300c str r3, [r4, #0xC]
; 165 : XllpUnlock(LockID);
00114 eb000000 bl XllpUnlock
00118 |$L754|
; 166 : }
; 167 : }
00118 e28dd004 add sp, sp, #4
0011c e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00120 e12fff1e bx lr
00124 |$M1260|
ENDP ; |XllpGpioSetDirectionIn|
EXPORT |XllpGpioSetDirectionOut|
00000 AREA |.text| { |XllpGpioSetDirectionOut| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpGpioSetDirectionOut|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetDirectionOut| } ; comdat associative
|$T1287| DCD |$L1286|
DCD 0x40004902
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpGpioSetDirectionOut| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpGpioSetDirectionOut| PROC
; 178 : {
00000 |$L1286|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1284|
00008 e1a04000 mov r4, r0
0000c e58d4000 str r4, [sp]
; 179 : XLLP_UINT32_T LockID;
; 180 : XLLP_UINT32_T aGpioPinMask;
; 181 : XLLP_UINT32_T aSizeArray;
; 182 : XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 183 : XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 184 : XLLP_UINT32_T i;
; 185 :
; 186 : //determine size of array
; 187 : aSizeArray = aGpioPinArray[0];
00010 e5910000 ldr r0, [r1]
; 188 : aMask0=aMask1=aMask2=aMask3=0;
00014 e3a0b000 mov r11, #0
00018 e3a08000 mov r8, #0
; 189 : aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 190 :
; 191 : 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 |$L784|
0003c e2811004 add r1, r1, #4
00040 e3a04001 mov r4, #1
00044 |$L772|
; 192 : {
; 193 : aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);
00044 e5913000 ldr r3, [r1]
00048 e203201f and r2, r3, #0x1F
; 194 : if(aGpioPinArray[i] > 95)
0004c e353005f cmp r3, #0x5F
; 195 : {
; 196 : aMask3 |= aGpioPinMask;
00050 818bb214 orrhi r11, r11, r4, lsl r2
; 197 : aSet3=XLLP_TRUE;
00054 83a0e001 movhi lr, #1
00058 8a000009 bhi |$L773|
; 198 : }
; 199 : else if(aGpioPinArray[i] > 63)
0005c e5913000 ldr r3, [r1]
00060 e353003f cmp r3, #0x3F
; 200 : {
; 201 : aMask2 |= aGpioPinMask;
00064 81888214 orrhi r8, r8, r4, lsl r2
; 202 : aSet2=XLLP_TRUE;
00068 83a05001 movhi r5, #1
0006c 8a000004 bhi |$L773|
; 203 : }
; 204 : else if(aGpioPinArray[i] > 31)
00070 e353001f cmp r3, #0x1F
; 205 : {
; 206 : aMask1 |= aGpioPinMask;
00074 818aa214 orrhi r10, r10, r4, lsl r2
; 207 : aSet1=XLLP_TRUE;
00078 83a06001 movhi r6, #1
; 208 : }
; 209 : else
; 210 : {
; 211 : aMask0 |= aGpioPinMask;
0007c 91899214 orrls r9, r9, r4, lsl r2
; 212 : aSet0=XLLP_TRUE;
00080 93a07001 movls r7, #1
00084 |$L773|
00084 e2811004 add r1, r1, #4
00088 e2500001 subs r0, r0, #1
0008c 1affffec bne |$L772|
; 213 : }
; 214 : }
; 215 : if(aSet3)
00090 e59d4000 ldr r4, [sp]
00094 e35e0000 cmp lr, #0
00098 0a000006 beq |$L781|
; 216 : {
; 217 : LockID = XllpLock(GPDR3);
0009c e3a0001f mov r0, #0x1F
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -