⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xllp_pccardsocket.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 4 页
字号:
; 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 + -