📄 xllp_pccardsocket.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_pccardsocket.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |XllpPCCardConfigureGPIOs|
IMPORT |XllpLock|
IMPORT |XllpUnlock|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_pccardsocket.c
00000 AREA |.text| { |XllpPCCardConfigureGPIOs| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPCCardConfigureGPIOs|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPCCardConfigureGPIOs| } ; comdat associative
|$T1132| DCD |$L1131|
DCD 0x40004801
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPCCardConfigureGPIOs| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPCCardConfigureGPIOs| PROC
; 182 : {
00000 |$L1131|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M1129|
00004 e1a03000 mov r3, r0
; 183 : XLLP_UINT32_T ulLockID;
; 184 : volatile XLLP_GPIO_T *vpstrBvdGPIORegs = (volatile XLLP_GPIO_T *)pstrSocketHandle->pstrGpioRegsHandle;
; 185 :
; 186 :
; 187 : //
; 188 : //Configure GPIO Output Set registers for active-low, output GPIO pins.This is a required
; 189 : //step for programming Bulverde GPIOs.
; 190 : //
; 191 : ulLockID = XllpLock(GPSR1);
00008 e5934000 ldr r4, [r3]
0000c e3a00008 mov r0, #8
00010 eb000000 bl XllpLock
; 192 : vpstrBvdGPIORegs->GPSR1 |= (XLLP_GPIO_BIT_PCMCIA_nPOE |
; 193 : XLLP_GPIO_BIT_nPWE |
; 194 : XLLP_GPIO_BIT_PCMCIA_nPIOR |
; 195 : XLLP_GPIO_BIT_PCMCIA_nPIOW |
; 196 : XLLP_GPIO_BIT_PCMCIA_nPCE2 |
; 197 : XLLP_GPIO_BIT_PCMCIA_nPREG);
00014 e594301c ldr r3, [r4, #0x1C]
; 198 : XllpUnlock(ulLockID);
00018 e38338cf orr r3, r3, #0xCF, 16
0001c e584301c str r3, [r4, #0x1C]
00020 eb000000 bl XllpUnlock
; 199 :
; 200 : ulLockID = XllpLock(GPSR2);
00024 e3a00009 mov r0, #9
00028 eb000000 bl XllpLock
; 201 : vpstrBvdGPIORegs->GPSR2 |= (XLLP_GPIO_BIT_PCMCIA_PSKTSEL |
; 202 : XLLP_GPIO_BIT_PCMCIA_nPCE1);
0002c e5943020 ldr r3, [r4, #0x20]
; 203 : XllpUnlock(ulLockID);
00030 e3833982 orr r3, r3, #0x82, 18
00034 e5843020 str r3, [r4, #0x20]
00038 eb000000 bl XllpUnlock
; 204 :
; 205 : //
; 206 : //Configure GPIO pin directions
; 207 : //
; 208 : //PC Card interface GPIO Output pins: GPIO 48, 49, 50, 51, 55, 78 and 79
; 209 : //PC Card interface GPIO Input pins: GPIO 56 and 57
; 210 : ulLockID = XllpLock(GPDR1);
0003c e3a00005 mov r0, #5
00040 eb000000 bl XllpLock
; 211 : vpstrBvdGPIORegs->GPDR1 |= (XLLP_GPIO_BIT_PCMCIA_nPOE |
; 212 : XLLP_GPIO_BIT_nPWE |
; 213 : XLLP_GPIO_BIT_PCMCIA_nPIOR |
; 214 : XLLP_GPIO_BIT_PCMCIA_nPIOW |
; 215 : XLLP_GPIO_BIT_PCMCIA_nPCE2 |
; 216 : XLLP_GPIO_BIT_PCMCIA_nPREG);
00044 e5943010 ldr r3, [r4, #0x10]
; 217 :
; 218 : vpstrBvdGPIORegs->GPDR1 &= ~(XLLP_GPIO_BIT_PCMCIA_nPWAIT);
; 219 : vpstrBvdGPIORegs->GPDR1 &= ~(XLLP_GPIO_BIT_PCMCIA_nIOIS16);
00048 e38338cf orr r3, r3, #0xCF, 16
0004c e5843010 str r3, [r4, #0x10]
00050 e5943010 ldr r3, [r4, #0x10]
; 220 : XllpUnlock(ulLockID);
00054 e3c33401 bic r3, r3, #1, 8
00058 e5843010 str r3, [r4, #0x10]
0005c e5943010 ldr r3, [r4, #0x10]
00060 e3c33402 bic r3, r3, #2, 8
00064 e5843010 str r3, [r4, #0x10]
00068 eb000000 bl XllpUnlock
; 221 :
; 222 : ulLockID = XllpLock(GPDR2);
0006c e3a00006 mov r0, #6
00070 eb000000 bl XllpLock
; 223 : vpstrBvdGPIORegs->GPDR2 |= XLLP_GPIO_BIT_PCMCIA_PSKTSEL;
00074 e5943014 ldr r3, [r4, #0x14]
; 224 : vpstrBvdGPIORegs->GPDR2 |= XLLP_GPIO_BIT_PCMCIA_nPCE1;
; 225 : XllpUnlock(ulLockID);
00078 e3833902 orr r3, r3, #2, 18
0007c e5843014 str r3, [r4, #0x14]
00080 e5943014 ldr r3, [r4, #0x14]
00084 e3833602 orr r3, r3, #2, 12
00088 e5843014 str r3, [r4, #0x14]
0008c eb000000 bl XllpUnlock
; 226 :
; 227 : //
; 228 : //Configure GPIO pin alternate functions
; 229 : //
; 230 : ulLockID = XllpLock(GAFR1_U);
00090 e3a00019 mov r0, #0x19
00094 eb000000 bl XllpLock
; 231 : vpstrBvdGPIORegs->GAFR1_U &= 0xFFF00F00; //Clear the alternate function bits
00098 e5942060 ldr r2, [r4, #0x60]
0009c e3a03c0f mov r3, #0xF, 24
000a0 e2433601 sub r3, r3, #1, 12
; 232 : //for GPIO 48, 49, 50, 51, 55, 56 and 57
; 233 : //Set Alternate Function 2 for GPIO 48, 49, 50, 51 and 55
; 234 : vpstrBvdGPIORegs->GAFR1_U |= (XLLP_GPIO_AF_BIT_PCMCIA_nPOE |
; 235 : XLLP_GPIO_AF_BIT_nPWE |
; 236 : XLLP_GPIO_AF_BIT_PCMCIA_nPIOR |
; 237 : XLLP_GPIO_AF_BIT_PCMCIA_nPIOW |
; 238 : XLLP_GPIO_AF_BIT_PCMCIA_nPCE2 |
; 239 : XLLP_GPIO_AF_BIT_PCMCIA_nPREG);
000a4 e0023003 and r3, r2, r3
000a8 e5843060 str r3, [r4, #0x60]
000ac e5943060 ldr r3, [r4, #0x60]
000b0 e3a01a0a mov r1, #0xA, 20
000b4 e38110aa orr r1, r1, #0xAA
; 240 :
; 241 : //Set Alternate Function 1 for GPIO 56 and 57
; 242 : vpstrBvdGPIORegs->GAFR1_U |= (XLLP_GPIO_AF_BIT_PCMCIA_nPWAIT |
; 243 : XLLP_GPIO_AF_BIT_PCMCIA_nIOIS16);
; 244 : XllpUnlock(ulLockID);
000b8 e1833001 orr r3, r3, r1
000bc e5843060 str r3, [r4, #0x60]
000c0 e5943060 ldr r3, [r4, #0x60]
000c4 e3833805 orr r3, r3, #5, 16
000c8 e5843060 str r3, [r4, #0x60]
000cc eb000000 bl XllpUnlock
; 245 :
; 246 : ulLockID = XllpLock(GAFR2_L);
000d0 e3a0001a mov r0, #0x1A
000d4 eb000000 bl XllpLock
; 247 : vpstrBvdGPIORegs->GAFR2_L &= 0x3FFFFFFF; //Clear the alternate function bits
000d8 e5943064 ldr r3, [r4, #0x64]
000dc e3c33103 bic r3, r3, #3, 2
000e0 e5843064 str r3, [r4, #0x64]
; 248 : //for GPIO 79
; 249 : //Set Alternate Function 1 for GPIO 79
; 250 : vpstrBvdGPIORegs->GAFR2_L |= XLLP_GPIO_AF_BIT_PCMCIA_PSKTSEL;
000e4 e5943064 ldr r3, [r4, #0x64]
; 251 : XllpUnlock(ulLockID);
000e8 e3833101 orr r3, r3, #1, 2
000ec e5843064 str r3, [r4, #0x64]
000f0 eb000000 bl XllpUnlock
; 252 :
; 253 : ulLockID = XllpLock(GAFR2_U);
000f4 e3a0001b mov r0, #0x1B
000f8 eb000000 bl XllpLock
; 254 : vpstrBvdGPIORegs->GAFR2_U &= 0xFFFFF3FF; //Clear the alternate function bits for GPIO 85
000fc e5943068 ldr r3, [r4, #0x68]
; 255 : vpstrBvdGPIORegs->GAFR2_U |= XLLP_GPIO_AF_BIT_PCMCIA_nPCE1;
; 256 : XllpUnlock(ulLockID);
00100 e3c33b03 bic r3, r3, #3, 22
00104 e5843068 str r3, [r4, #0x68]
00108 e5943068 ldr r3, [r4, #0x68]
0010c e3833b01 orr r3, r3, #1, 22
00110 e5843068 str r3, [r4, #0x68]
00114 eb000000 bl XllpUnlock
; 257 :
; 258 : } //end XllpPCCardConfigureGPIOs()
00118 e8bd4010 ldmia sp!, {r4, lr}
0011c e12fff1e bx lr
00120 |$M1130|
ENDP ; |XllpPCCardConfigureGPIOs|
EXPORT |XllpPCCardGetSocketState|
00000 AREA |.text| { |XllpPCCardGetSocketState| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPCCardGetSocketState|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPCCardGetSocketState| } ; comdat associative
|$T1144| DCD |$L1143|
DCD 0x40004903
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPCCardGetSocketState| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPCCardGetSocketState| PROC
; 280 : {
00000 |$L1143|
00000 e1a0c00d mov r12, sp
00004 e92d0002 stmdb sp!, {r1}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c |$M1141|
; 281 :
; 282 : XLLP_STATUS_T ReturnValue = XLLP_STATUS_SUCCESS;
; 283 :
; 284 :
; 285 : //Check the validity of the input arguments to the function
; 286 : if((ushSocketNumber > XLLP_MAINSTONE_MAX_PCCARD_SOCKETS) ||
; 287 : (pstrSocketHandle == XLLP_NULL_PTR))
0000c e1dd30b8 ldrh r3, [sp, #8]
00010 e3a0e000 mov lr, #0
00014 e3530002 cmp r3, #2
00018 8a000001 bhi |$L940|
0001c e3500000 cmp r0, #0
00020 1a000001 bne |$L1136|
00024 |$L940|
; 288 : {
; 289 : ReturnValue = XLLP_STATUS_PCCARD_FAILURE;
00024 e3a0e00f mov lr, #0xF
; 290 : }
; 291 :
; 292 : if(ReturnValue != XLLP_STATUS_PCCARD_FAILURE)
00028 ea00003a b |$L954|
0002c |$L1136|
; 293 : {
; 294 : switch(ushSocketNumber)
0002c e1dd30b8 ldrh r3, [sp, #8]
00030 e3530000 cmp r3, #0
00034 0a00001d beq |$L946|
00038 e3530001 cmp r3, #1
0003c 1a000035 bne |$L954|
; 352 : }
; 353 :
; 354 : break;
; 355 :
; 356 : case XLLP_PCCARD_SOCKET1:
; 357 :
; 358 : //
; 359 : //Check the CD status bit[5] of the Socket 1 Status Register. If set, it indicates
; 360 : //that a card is either not present or is not properly inserted in the socket. If clear,
; 361 : //it indicates that a card is present in the socket.
; 362 : //
; 363 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) & (XLLP_BCR_PCMCIA_SCR_S1_nCD))
00040 e5903004 ldr r3, [r0, #4]
00044 e3a01000 mov r1, #0
00048 e3a02001 mov r2, #1
0004c e59330e4 ldr r3, [r3, #0xE4]
00050 e3130020 tst r3, #0x20
; 364 : {
; 365 : pstrSocketHandle->pstrPCCardSocketState->blSocket1CDState = XLLP_FALSE;
00054 e5903008 ldr r3, [r0, #8]
00058 15c31004 strneb r1, [r3, #4]
; 366 : }
; 367 : else
; 368 : {
; 369 : pstrSocketHandle->pstrPCCardSocketState->blSocket1CDState = XLLP_TRUE;
0005c 05c32004 streqb r2, [r3, #4]
; 370 : }
; 371 :
; 372 : //
; 373 : //Check the BVD1 status bit[8] of the Socket 1 Status Register. If set, then it
; 374 : //indicates that the card status has not changed. If clear, then it indicates that
; 375 : //a card status change event has occurred.
; 376 : //
; 377 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) & (XLLP_BCR_PCMCIA_SCR_S1_nSTSCHG_BVD1))
00060 e5903004 ldr r3, [r0, #4]
00064 e59330e4 ldr r3, [r3, #0xE4]
00068 e3130c01 tst r3, #1, 24
; 378 : {
; 379 : pstrSocketHandle->pstrPCCardSocketState->blSocket1BVD1State = XLLP_FALSE;
0006c e5903008 ldr r3, [r0, #8]
00070 15c31005 strneb r1, [r3, #5]
; 380 : }
; 381 : else
; 382 : {
; 383 : pstrSocketHandle->pstrPCCardSocketState->blSocket1BVD1State = XLLP_TRUE;
00074 05c32005 streqb r2, [r3, #5]
; 384 : }
; 385 :
; 386 : //
; 387 : //Check the BVD2 status bit[9] of the Socket 1 Status Register. If set, then it
; 388 : //indicates that the card status has not changed. If clear, then it indicates that
; 389 : //a card status change event has occurred.
; 390 : //
; 391 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) & (XLLP_BCR_PCMCIA_SCR_S1_nSPKR_BVD2))
00078 e5903004 ldr r3, [r0, #4]
0007c e59330e4 ldr r3, [r3, #0xE4]
00080 e3130c02 tst r3, #2, 24
; 392 : {
; 393 : pstrSocketHandle->pstrPCCardSocketState->blSocket1BVD2State = XLLP_FALSE;
00084 e5903008 ldr r3, [r0, #8]
00088 15c31006 strneb r1, [r3, #6]
; 394 : }
; 395 : else
; 396 : {
; 397 : pstrSocketHandle->pstrPCCardSocketState->blSocket1BVD2State = XLLP_TRUE;
0008c 05c32006 streqb r2, [r3, #6]
; 398 : }
; 399 :
; 400 : //
; 401 : //Check the IREQ status bit[10] of the Socket 1 Status Register. If set, then it
; 402 : //indicates that the card is READY (i.e. no interrupt request is pending). If clear,
; 403 : //it indicates that the card is BUSY, pending an interrupt request.
; 404 : //
; 405 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) & (XLLP_BCR_PCMCIA_SCR_S1_nIRQ))
00090 e5903004 ldr r3, [r0, #4]
00094 e59330e4 ldr r3, [r3, #0xE4]
00098 e3130b01 tst r3, #1, 22
; 406 : {
; 407 : pstrSocketHandle->pstrPCCardSocketState->blSocket1IREQState = XLLP_TRUE;
0009c e5903008 ldr r3, [r0, #8]
000a0 15c32007 strneb r2, [r3, #7]
000a4 1a00001b bne |$L954|
; 408 : }
; 409 : else
; 410 : {
; 411 : pstrSocketHandle->pstrPCCardSocketState->blSocket1IREQState = XLLP_FALSE;
000a8 e5c31007 strb r1, [r3, #7]
; 412 : }
; 413 :
; 414 : break;
000ac ea000019 b |$L954|
000b0 |$L946|
; 295 : {
; 296 : case XLLP_PCCARD_SOCKET0:
; 297 :
; 298 : //
; 299 : //Check the CD status bit[5] of the Socket 0 Status Register. If set, it indicates
; 300 : //that a card is either not present or is not properly inserted in the socket. If clear,
; 301 : //it indicates that a card is present in the socket.
; 302 : //
; 303 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) & (XLLP_BCR_PCMCIA_SCR_S0_nCD))
000b0 e5903004 ldr r3, [r0, #4]
000b4 e3a01000 mov r1, #0
000b8 e3a02001 mov r2, #1
000bc e59330e0 ldr r3, [r3, #0xE0]
000c0 e3130020 tst r3, #0x20
; 304 : {
; 305 : pstrSocketHandle->pstrPCCardSocketState->blSocket0CDState = XLLP_FALSE;
000c4 e5903008 ldr r3, [r0, #8]
000c8 15c31000 strneb r1, [r3]
; 306 : }
; 307 : else
; 308 : {
; 309 : pstrSocketHandle->pstrPCCardSocketState->blSocket0CDState = XLLP_TRUE;
000cc 05c32000 streqb r2, [r3]
; 310 : }
; 311 :
; 312 : //
; 313 : //Check the BVD1 status bit[8] of the Socket 0 Status Register. If set, then it
; 314 : //indicates that the card status has not changed. If clear, then it indicates that
; 315 : //a card status change event has occurred.
; 316 : //
; 317 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) & (XLLP_BCR_PCMCIA_SCR_S0_nSTSCHG_BVD1))
000d0 e5903004 ldr r3, [r0, #4]
000d4 e59330e0 ldr r3, [r3, #0xE0]
000d8 e3130c01 tst r3, #1, 24
; 318 : {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -