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

📄 xllp_pccardsocket.cod

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