📄 xllp_pccardsocket.cod
字号:
; 319 : pstrSocketHandle->pstrPCCardSocketState->blSocket0BVD1State = XLLP_FALSE;
000dc e5903008 ldr r3, [r0, #8]
000e0 15c31001 strneb r1, [r3, #1]
; 320 : }
; 321 : else
; 322 : {
; 323 : pstrSocketHandle->pstrPCCardSocketState->blSocket0BVD1State = XLLP_TRUE;
000e4 05c32001 streqb r2, [r3, #1]
; 324 : }
; 325 :
; 326 : //
; 327 : //Check the BVD2 status bit[9] of the Socket 0 Status Register. If set, then it
; 328 : //indicates that the card status has not changed. If clear, then it indicates that
; 329 : //a card status change event has occurred.
; 330 : //
; 331 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) & (XLLP_BCR_PCMCIA_SCR_S0_nSPKR_BVD2))
000e8 e5903004 ldr r3, [r0, #4]
000ec e59330e0 ldr r3, [r3, #0xE0]
000f0 e3130c02 tst r3, #2, 24
; 332 : {
; 333 : pstrSocketHandle->pstrPCCardSocketState->blSocket0BVD2State = XLLP_FALSE;
000f4 e5903008 ldr r3, [r0, #8]
000f8 15c31002 strneb r1, [r3, #2]
; 334 : }
; 335 : else
; 336 : {
; 337 : pstrSocketHandle->pstrPCCardSocketState->blSocket0BVD2State = XLLP_TRUE;
000fc 05c32002 streqb r2, [r3, #2]
; 338 : }
; 339 :
; 340 : //
; 341 : //Check the IREQ status bit[10] of the Socket 0 Status Register. If set, then it
; 342 : //indicates that the card is READY (i.e. no interrupt request is pending). If clear,
; 343 : //it indicates that the card is BUSY, pending an interrupt request.
; 344 : //
; 345 : if((pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) & (XLLP_BCR_PCMCIA_SCR_S0_nIRQ))
00100 e5903004 ldr r3, [r0, #4]
00104 e59330e0 ldr r3, [r3, #0xE0]
00108 e3130b01 tst r3, #1, 22
; 346 : {
; 347 : pstrSocketHandle->pstrPCCardSocketState->blSocket0IREQState = XLLP_TRUE;
0010c e5903008 ldr r3, [r0, #8]
00110 15c32003 strneb r2, [r3, #3]
; 348 : }
; 349 : else
; 350 : {
; 351 : pstrSocketHandle->pstrPCCardSocketState->blSocket0IREQState = XLLP_FALSE;
00114 05c31003 streqb r1, [r3, #3]
00118 |$L954|
; 415 :
; 416 : default:
; 417 : break;
; 418 :
; 419 : } //end switch(uSocket)
; 420 :
; 421 : } //end if
; 422 :
; 423 : return ReturnValue;
00118 e1a0000e mov r0, lr
; 424 :
; 425 : } //end XllpPCCardGetSocketState()
0011c e89d6000 ldmia sp, {sp, lr}
00120 e12fff1e bx lr
00124 |$M1142|
ENDP ; |XllpPCCardGetSocketState|
EXPORT |XllpPCCardResetSocket|
IMPORT |XllpOstDelayMilliSeconds|
00000 AREA |.text| { |XllpPCCardResetSocket| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPCCardResetSocket|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPCCardResetSocket| } ; comdat associative
|$T1163| DCD |$L1162|
DCD 0x40004d03
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPCCardResetSocket| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPCCardResetSocket| PROC
; 446 : {
00000 |$L1162|
00000 e1a0c00d mov r12, sp
00004 e92d0002 stmdb sp!, {r1}
00008 e92d5070 stmdb sp!, {r4 - r6, r12, lr}
0000c |$M1160|
0000c e1a04000 mov r4, r0
; 447 : XLLP_STATUS_T ReturnValue = XLLP_STATUS_SUCCESS;
; 448 : XLLP_BOOL_T blCDStatus = XLLP_FALSE;
; 449 : XLLP_BOOL_T blRDYStatus = XLLP_FALSE;
; 450 : XLLP_UINT16_T t; //loop counter
; 451 :
; 452 : //Check the validity of the input arguments to the function
; 453 : if((ushSocketNumber > XLLP_MAINSTONE_MAX_PCCARD_SOCKETS) ||
; 454 : (pstrSocketHandle == XLLP_NULL_PTR))
00010 e1dd31b4 ldrh r3, [sp, #0x14]
00014 e3a05000 mov r5, #0
00018 e3530002 cmp r3, #2
0001c 8a000040 bhi |$L983|
00020 e3540000 cmp r4, #0
; 455 : {
; 456 : ReturnValue = XLLP_STATUS_PCCARD_FAILURE;
; 457 : }
; 458 :
; 459 : if(ReturnValue != XLLP_STATUS_PCCARD_FAILURE)
00024 0a00003e beq |$L983|
; 460 : {
; 461 : switch(ushSocketNumber)
00028 e1dd31b4 ldrh r3, [sp, #0x14]
0002c e3530000 cmp r3, #0
00030 0a00001e beq |$L982|
00034 e3530001 cmp r3, #1
; 559 :
; 560 : default:
; 561 : //TBD. Should not be here at all!!
; 562 : ReturnValue = XLLP_STATUS_PCCARD_FAILURE;
; 563 :
; 564 : break;
00038 1a000039 bne |$L983|
0003c e5943004 ldr r3, [r4, #4]
00040 e59330e4 ldr r3, [r3, #0xE4]
00044 e2133020 ands r3, r3, #0x20
00048 1a000035 bne |$L983|
0004c e5942004 ldr r2, [r4, #4]
00050 e3a01014 mov r1, #0x14
00054 e59230e4 ldr r3, [r2, #0xE4]
00058 e3833010 orr r3, r3, #0x10
0005c e58230e4 str r3, [r2, #0xE4]
00060 e5942004 ldr r2, [r4, #4]
00064 e59230e4 ldr r3, [r2, #0xE4]
00068 e3c33010 bic r3, r3, #0x10
0006c e58230e4 str r3, [r2, #0xE4]
00070 e594000c ldr r0, [r4, #0xC]
00074 eb000000 bl XllpOstDelayMilliSeconds
00078 e3a06000 mov r6, #0
0007c |$L992|
0007c e5943004 ldr r3, [r4, #4]
00080 e59330e4 ldr r3, [r3, #0xE4]
00084 e2133b01 ands r3, r3, #1, 22
00088 1a000026 bne |$L989|
0008c e594000c ldr r0, [r4, #0xC]
00090 e3a01032 mov r1, #0x32
00094 eb000000 bl XllpOstDelayMilliSeconds
00098 e2863032 add r3, r6, #0x32
0009c e1a06803 mov r6, r3, lsl #16
000a0 e1a06826 mov r6, r6, lsr #16
000a4 e3560e7d cmp r6, #0x7D, 28
000a8 3afffff3 bcc |$L992|
; 508 : }
; 509 :
; 510 : break;
; 511 :
; 512 : case XLLP_PCCARD_SOCKET1:
; 513 : //Check if a card is inserted in the socket
; 514 : blCDStatus = ((pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) &
; 515 : (XLLP_BCR_PCMCIA_SCR_S1_nCD));
; 516 :
; 517 : //If the CD status bit is *not* set in the PC Card Status register,
; 518 : //it implies that a card is properly inserted. Reset the socket
; 519 : //in that case.
; 520 : if(!blCDStatus)
; 521 : {
; 522 : //Assert reset
; 523 : (pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) |=
; 524 : (XLLP_BCR_PCMCIA_SCR_S1_RESET);
; 525 : //Clear reset
; 526 : (pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) &=
; 527 : ~(XLLP_BCR_PCMCIA_SCR_S1_RESET);
; 528 : XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle,20);
; 529 :
; 530 :
; 531 : //Wait for the READY signal to be set.This will indicate that the socket
; 532 : //is interrupt-ready and can function normally now.
; 533 : for(t = 0; t < XLLP_PCCARD_MAX_READY_WAIT_TIME; t += XLLP_PCCARD_READY_POLL_INTERVAL)
; 534 : {
; 535 : blRDYStatus = ((pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR) &
; 536 : (XLLP_BCR_PCMCIA_SCR_S1_nIRQ));
; 537 :
; 538 : if(!blRDYStatus)
; 539 : {
; 540 : XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle,
; 541 : XLLP_PCCARD_READY_POLL_INTERVAL);
; 542 : }
; 543 : else
; 544 : {
; 545 : break;
; 546 : }
; 547 : } //end for loop
; 548 :
; 549 : }
; 550 : //If no card is inserted or if a card is not properly inserted, then tri-
; 551 : //state the socket.
; 552 : else
; 553 : {
; 554 : //Tri-state the socket here
; 555 : ReturnValue = XLLP_STATUS_PCCARD_FAILURE;
; 556 : }
; 557 :
; 558 : break;
000ac ea00001d b |$L989|
000b0 |$L982|
; 462 : {
; 463 : case XLLP_PCCARD_SOCKET0:
; 464 :
; 465 : //
; 466 : //Check if a card is inserted in the socket
; 467 : //
; 468 : blCDStatus = ((pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) & (XLLP_BCR_PCMCIA_SCR_S0_nCD));
000b0 e5943004 ldr r3, [r4, #4]
000b4 e59330e0 ldr r3, [r3, #0xE0]
000b8 e2133020 ands r3, r3, #0x20
; 469 :
; 470 : //
; 471 : //If the CD status bit is *not* set in the PC Card Status register,
; 472 : //it implies that a card is properly inserted. Reset the socket
; 473 : //in that case.
; 474 : //
; 475 : if(!blCDStatus)
000bc 1a000018 bne |$L983|
; 476 : {
; 477 : //Assert reset
; 478 : (pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) |= (XLLP_BCR_PCMCIA_SCR_S0_RESET);
000c0 e5942004 ldr r2, [r4, #4]
; 479 : //Clear reset
; 480 : (pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) &= ~(XLLP_BCR_PCMCIA_SCR_S0_RESET);
; 481 :
; 482 : //Wait for the READY signal to be set.This will indicate that the socket
; 483 : XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle,20);
000c4 e3a01014 mov r1, #0x14
000c8 e59230e0 ldr r3, [r2, #0xE0]
000cc e3833010 orr r3, r3, #0x10
000d0 e58230e0 str r3, [r2, #0xE0]
000d4 e5942004 ldr r2, [r4, #4]
000d8 e59230e0 ldr r3, [r2, #0xE0]
000dc e3c33010 bic r3, r3, #0x10
000e0 e58230e0 str r3, [r2, #0xE0]
000e4 e594000c ldr r0, [r4, #0xC]
000e8 eb000000 bl XllpOstDelayMilliSeconds
; 484 : //is interrupt-ready and can function normally now.
; 485 : for(t = 0; t < XLLP_PCCARD_MAX_READY_WAIT_TIME; t += XLLP_PCCARD_READY_POLL_INTERVAL)
000ec e3a06000 mov r6, #0
000f0 |$L984|
; 486 : {
; 487 : blRDYStatus = ((pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR) &
; 488 : (XLLP_BCR_PCMCIA_SCR_S0_nIRQ));
000f0 e5943004 ldr r3, [r4, #4]
000f4 e59330e0 ldr r3, [r3, #0xE0]
000f8 e2133b01 ands r3, r3, #1, 22
; 489 :
; 490 : if(!blRDYStatus)
000fc 1a000009 bne |$L989|
; 491 : {
; 492 : XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle,
; 493 : XLLP_PCCARD_READY_POLL_INTERVAL);
00100 e594000c ldr r0, [r4, #0xC]
00104 e3a01032 mov r1, #0x32
00108 eb000000 bl XllpOstDelayMilliSeconds
0010c e2863032 add r3, r6, #0x32
00110 e1a06803 mov r6, r3, lsl #16
00114 e1a06826 mov r6, r6, lsr #16
00118 e3560e7d cmp r6, #0x7D, 28
0011c 3afffff3 bcc |$L984|
; 494 : }
; 495 : else
; 496 : {
; 497 : break;
; 498 : }
; 499 : } //end for loop
; 500 :
; 501 : }
; 502 : //If no card is inserted or if a card is not properly inserted, then tri-
; 503 : //state the socket.
; 504 : else
00120 ea000000 b |$L989|
00124 |$L983|
; 505 : {
; 506 : //Tri-state the socket here.
; 507 : ReturnValue = XLLP_STATUS_PCCARD_FAILURE;
00124 e3a0500f mov r5, #0xF
00128 |$L989|
; 565 : } //end switch
; 566 :
; 567 : } //end if
; 568 :
; 569 : return ReturnValue;
00128 e1a00005 mov r0, r5
; 570 :
; 571 : } //end XllpPCCardResetSocket()
0012c e89d6070 ldmia sp, {r4 - r6, sp, lr}
00130 e12fff1e bx lr
00134 |$M1161|
ENDP ; |XllpPCCardResetSocket|
EXPORT |XllpPCCardPowerOn|
00000 AREA |.text| { |XllpPCCardPowerOn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPCCardPowerOn|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPCCardPowerOn| } ; comdat associative
|$T1178| DCD |$L1177|
DCD 0x40004c03
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPCCardPowerOn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPCCardPowerOn| PROC
; 594 : {
00000 |$L1177|
00000 e1a0c00d mov r12, sp
00004 e92d0002 stmdb sp!, {r1}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c |$M1175|
0000c e1a01000 mov r1, r0
; 595 : XLLP_STATUS_T ReturnValue = XLLP_STATUS_SUCCESS;
; 596 :
; 597 :
; 598 :
; 599 : //
; 600 : //Check the validity of the input arguments to the function
; 601 : //
; 602 : if((ushSocketNumber > XLLP_MAINSTONE_MAX_PCCARD_SOCKETS) ||
; 603 : (pstrSocketHandle == XLLP_NULL_PTR))
00010 e1dd30b8 ldrh r3, [sp, #8]
00014 e3a00000 mov r0, #0
00018 e3530002 cmp r3, #2
0001c 8a000001 bhi |$L1009|
00020 e3510000 cmp r1, #0
00024 1a000002 bne |$L1167|
00028 |$L1009|
; 604 : {
; 605 : ReturnValue = XLLP_STATUS_PCCARD_FAILURE;
00028 e3a0000f mov r0, #0xF
; 670 : } //end switch
; 671 : }
; 672 :
; 673 : return ReturnValue;
; 674 :
; 675 : } //end XllpPCCardEnableSocket()
0002c e89d6000 ldmia sp, {sp, lr}
00030 e12fff1e bx lr
00034 |$L1167|
; 606 : }
; 607 :
; 608 : if(ReturnValue != XLLP_STATUS_PCCARD_FAILURE)
; 609 : {
; 610 : switch(ushSocketNumber)
00034 e1dd30b8 ldrh r3, [sp, #8]
00038 e3530000 cmp r3, #0
0003c 0a00001e beq |$L1015|
00040 e3530001 cmp r3, #1
; 663 : break;
; 664 :
; 665 : default:
; 666 : //TBD. Should not be here at all!!
; 667 : ReturnValue = XLLP_STATUS_PCCARD_FAILURE;
; 668 :
; 669 : break;
00044 1afffff7 bne |$L1009|
; 638 :
; 639 : break;
; 640 :
; 641 : case XLLP_PCCARD_SOCKET1:
; 642 :
; 643 : if(uiCardVoltage == XLLP_PCCARD_5_00VOLTS)
00048 e3520002 cmp r2, #2
0004c 1a000008 bne |$L1021|
; 644 : {
; 645 : //5V card detected; set bit[2] of the status register
; 646 : pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR |= (XLLP_BIT_2);
00050 e5912004 ldr r2, [r1, #4]
; 647 : pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR &= ~(XLLP_BIT_3);
00054 e59230e4 ldr r3, [r2, #0xE4]
00058 e3833004 orr r3, r3, #4
0005c e58230e4 str r3, [r2, #0xE4]
00060 e5912004 ldr r2, [r1, #4]
00064 e59230e4 ldr r3, [r2, #0xE4]
00068 e3c33008 bic r3, r3, #8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -