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

📄 sdmmc_load.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 5 页
字号:
; 402  :     PHYSICAL_ADDRESS PhysAddr;
; 403  :     

; 404  :     

; 405  :     

; 406  : 
; 407  :     

; 408  :     

; 409  :     

; 410  : 	if (GpioRegPtr==NULL) {

  00004	e59f40dc	 ldr       r4, [pc, #0xDC]
  00008	e3a07000	 mov       r7, #0
  0000c	e5940000	 ldr       r0, [r4]
  00010	e1a06007	 mov       r6, r7
  00014	e3500000	 cmp       r0, #0
  00018	1a000008	 bne       |$L40596|

; 411  : 		PhysAddr.QuadPart = APB_GPIO_REGS_BASE;

  0001c	e3a00102	 mov       r0, #2, 2
  00020	e3800c0e	 orr       r0, r0, #0xE, 24

; 412  : 
; 413  : 		GpioRegPtr = MmMapIoSpace(PhysAddr,
; 414  : 								  sizeof(*GpioRegPtr),
; 415  : 								  FALSE);

  00024	e3a03000	 mov       r3, #0
  00028	e3a02088	 mov       r2, #0x88
  0002c	e1a01007	 mov       r1, r7
  00030	eb000000	 bl        MmMapIoSpace
  00034	e3500000	 cmp       r0, #0
  00038	e5840000	 str       r0, [r4]

; 416  : 		if (GpioRegPtr == NULL) {

  0003c	0a000024	 beq       |$L40850|
  00040		 |$L40596|

; 417  : 			DEBUGMSG(1, (
; 418  : 					 TEXT("PCMCIA: Failed to map GPIO registers.\r\n")));
; 419  : 			return;
; 420  : 		}
; 421  : 	}
; 422  : 
; 423  : 	

; 424  : 	SDMMC_GpioInit();

  00040	eb000000	 bl        SDMMC_GpioInit

; 425  : 	

; 426  : 	
; 435  : 	SDMMC_SmcInit();

  00044	eb000000	 bl        SDMMC_SmcInit
  00048	e59f4094	 ldr       r4, [pc, #0x94]
  0004c	e59f508c	 ldr       r5, [pc, #0x8C]
  00050		 |$L40599|

; 436  : 	
; 437  : 	
; 438  : 	
; 439  : 	

; 440  : 	

; 441  : 	
; 442  : 	

; 443  : 
; 444  : 	

; 445  : 	

; 446  : 	

; 447  :  		

; 448  : 	

; 449  :     

; 450  : 	while(1)
; 451  : 	 {
; 452  : 		Sleep(1000);

  00050	e3a00ffa	 mov       r0, #0xFA, 30
  00054	eb000000	 bl        Sleep

; 453  : 		if (gSDMMC_Detected == FALSE)

  00058	e5953000	 ldr       r3, [r5]
  0005c	e3530000	 cmp       r3, #0
  00060	1a000010	 bne       |$L40852|

; 454  : 		{
; 455  : 			

; 456  : 			

; 457  : 			

; 458  : #if 0
; 459  : 			if( ( v_pGPIOReg->pfdr & 0x02 ) ==0x00 ) 
; 460  : 		       {
; 461  :                                  v_pGPIOReg->peddr |= 1<<4;      

; 462  :                                  v_pGPIOReg->pedr |= 1<<4;      

; 463  :                                  Sleep(1);        
; 464  : 						
; 465  : 				gSDMMC_Detected = TRUE;
; 466  : 				
; 467  : 				

; 468  : 				

; 469  : 
; 470  : 				DoRegSetup(szRegKey);
; 471  : 				hDevice = ActivateDevice( szRegKey, 0);
; 472  : 				DoSetHandleValue( szRegKey, hDevice);
; 473  : 			}	
; 474  : #else
; 475  : 			if (SDMMC_CardInserted()) {

  00064	eb000000	 bl        SDMMC_CardInserted
  00068	e31000ff	 tst       r0, #0xFF
  0006c	0afffff7	 beq       |$L40599|

; 476  : 				RETAILMSG(1, (TEXT("SDMMC card inserted\r\n")));

  00070	e59f0064	 ldr       r0, [pc, #0x64]
  00074	eb000000	 bl        NKDbgPrintfW

; 477  : 				gSDMMC_Detected = TRUE;
; 478  : 				DoRegSetup(szRegKey);

  00078	e5940000	 ldr       r0, [r4]
  0007c	e3a03001	 mov       r3, #1
  00080	e5853000	 str       r3, [r5]
  00084	eb000000	 bl        DoRegSetup

; 479  : 				hDevice = ActivateDevice( szRegKey, 0);

  00088	e5940000	 ldr       r0, [r4]
  0008c	e3a01000	 mov       r1, #0
  00090	eb000000	 bl        ActivateDevice
  00094	e1a06000	 mov       r6, r0

; 480  : 				DoSetHandleValue( szRegKey, hDevice);

  00098	e5940000	 ldr       r0, [r4]
  0009c	e1a01006	 mov       r1, r6
  000a0	eb000000	 bl        DoSetHandleValue

; 481  : 			}
; 482  : #endif
; 483  : 		
; 484  : 		}
; 485  : 		else if (gSDMMC_Detected)

  000a4	eaffffe9	 b         |$L40599|
  000a8		 |$L40852|

; 486  : 		{
; 487  : 			

; 488  : 			if (!SDMMC_CardInserted())

  000a8	eb000000	 bl        SDMMC_CardInserted
  000ac	e31000ff	 tst       r0, #0xFF
  000b0	1affffe6	 bne       |$L40599|

; 489  : 			{
; 490  : 				

; 491  : 				RETAILMSG(1, (TEXT("SDMMC card deserted\r\n")));							  

  000b4	e59f001c	 ldr       r0, [pc, #0x1C]
  000b8	eb000000	 bl        NKDbgPrintfW

; 492  : 				DeactivateDevice( hDevice);

  000bc	e1a00006	 mov       r0, r6
  000c0	eb000000	 bl        DeactivateDevice

; 493  : 				DoDeleteHandleValue(szRegKey);

  000c4	e5940000	 ldr       r0, [r4]
  000c8	eb000000	 bl        DoDeleteHandleValue

; 494  : 				gSDMMC_Detected = FALSE;

  000cc	e5857000	 str       r7, [r5]

; 495  : 				

; 496  : 				

; 497  : 			}
; 498  : 		 }
; 499  : 	 }

  000d0	eaffffde	 b         |$L40599|
  000d4		 |$L40850|

; 500  : }

  000d4	e8bd80f0	 ldmia     sp!, {r4 - r7, pc}
  000d8		 |$L40860|
  000d8	00000000	 DCD       |??_C@_1CM@IHDK@?$AAS?$AAD?$AAM?$AAM?$AAC?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAd?$AAe?$AAs?$AAe?$AAr?$AAt?$AAe?$AAd?$AA?$AN@|
  000dc	00000000	 DCD       |??_C@_1CM@CGPI@?$AAS?$AAD?$AAM?$AAM?$AAC?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAn?$AAs?$AAe?$AAr?$AAt?$AAe?$AAd?$AA?$AN@|
  000e0	00000000	 DCD       |gSDMMC_Detected|
  000e4	00000000	 DCD       |szRegKey|
  000e8	00000000	 DCD       |GpioRegPtr|
  000ec		 |$M40857|

			 ENDP  ; |SDMMCDetectThread|

	IMPORT	|KernelIoControl|

  00000			 AREA	 |.text| { |SDMMC_GpioInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$SDMMC_GpioInit|, PDATA, SELECTION=5, ASSOC=|.text| { |SDMMC_GpioInit| } ; comdat associative
|$T40865| DCD	|SDMMC_GpioInit|
	DCD	0x40002f02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |SDMMC_GpioInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |SDMMC_GpioInit| PROC

; 238  : {

  00000	e92d4030	 stmdb     sp!, {r4, r5, lr}
  00004	e24dd01c	 sub       sp, sp, #0x1C
  00008		 |$M40863|

; 239  :     ULONG_MODIFY GpioReg;
; 240  :     DWORD BytesReturned;
; 241  :     
; 242  :     DEBUGMSG(1, (TEXT("SDMMC_GpioInit entered.\r\n")) );
; 243  : 
; 244  : 	

; 245  : 	

; 246  : 
; 247  : 	

; 248  :     

; 249  :     

; 250  :     

; 251  :     GpioReg.Address = &(((PAPB_GPIO_REGS) APB_GPIO_REGS_BASE)->PFDDR);

  00008	e59f00a8	 ldr       r0, [pc, #0xA8]

; 252  :     GpioReg.Value = 0x00; 


  0000c	e3a05000	 mov       r5, #0
  00010	e58d0010	 str       r0, [sp, #0x10]

; 253  :     GpioReg.Mask  = GPIO_SDMMC_CD; 

; 254  :     KernelIoControl(IOCTL_HAL_REGISTER_MODIFY,
; 255  :                     &GpioReg,
; 256  :                     sizeof(GpioReg),
; 257  :                     NULL,
; 258  :                     0,
; 259  :                     &BytesReturned);

  00014	e28d0008	 add       r0, sp, #8
  00018	e58d0004	 str       r0, [sp, #4]
  0001c	e3a04004	 mov       r4, #4
  00020	e59f0084	 ldr       r0, [pc, #0x84]
  00024	e3a03000	 mov       r3, #0
  00028	e3a0200c	 mov       r2, #0xC
  0002c	e58d5014	 str       r5, [sp, #0x14]
  00030	e28d1010	 add       r1, sp, #0x10
  00034	e58d4018	 str       r4, [sp, #0x18]
  00038	e58d5000	 str       r5, [sp]
  0003c	eb000000	 bl        KernelIoControl

; 260  :      
; 261  :     GpioReg.Address = &(((PAPB_GPIO_REGS) APB_GPIO_REGS_BASE)->PCDDR);
; 262  :     GpioReg.Value = GPIO_SDMMC_WP; 


  00040	e3a00020	 mov       r0, #0x20
  00044	e59f3068	 ldr       r3, [pc, #0x68]
  00048	e58d0014	 str       r0, [sp, #0x14]

; 263  :     GpioReg.Mask  = GPIO_SDMMC_WP; 

; 264  :     KernelIoControl(IOCTL_HAL_REGISTER_MODIFY,
; 265  :                     &GpioReg,
; 266  :                     sizeof(GpioReg),
; 267  :                     NULL,
; 268  :                     0,
; 269  :                     &BytesReturned);

  0004c	e3a0200c	 mov       r2, #0xC
  00050	e58d0018	 str       r0, [sp, #0x18]
  00054	e28d0008	 add       r0, sp, #8
  00058	e58d0004	 str       r0, [sp, #4]
  0005c	e28d1010	 add       r1, sp, #0x10
  00060	e58d3010	 str       r3, [sp, #0x10]
  00064	e3a03000	 mov       r3, #0
  00068	e59f003c	 ldr       r0, [pc, #0x3C]
  0006c	e58d5000	 str       r5, [sp]
  00070	eb000000	 bl        KernelIoControl

; 270  : 
; 271  :     

; 272  :     

; 273  :     

; 274  :     GpioReg.Address = &(((PAPB_GPIO_REGS) APB_GPIO_REGS_BASE)->GPIOINTEN);

  00074	e59f3034	 ldr       r3, [pc, #0x34]

; 275  :     GpioReg.Value = GPIO_SDMMC_CD; 

; 276  :     GpioReg.Mask  = GPIO_SDMMC_CD; 

; 277  :     KernelIoControl(IOCTL_HAL_REGISTER_MODIFY,
; 278  :                     &GpioReg,
; 279  :                     sizeof(GpioReg),
; 280  :                     NULL,
; 281  :                     0,
; 282  :                     &BytesReturned);

  00078	e28d0008	 add       r0, sp, #8
  0007c	e58d4014	 str       r4, [sp, #0x14]
  00080	e58d0004	 str       r0, [sp, #4]
  00084	e3a0200c	 mov       r2, #0xC
  00088	e58d3010	 str       r3, [sp, #0x10]
  0008c	e28d1010	 add       r1, sp, #0x10
  00090	e59f0014	 ldr       r0, [pc, #0x14]
  00094	e3a03000	 mov       r3, #0
  00098	e58d4018	 str       r4, [sp, #0x18]
  0009c	e58d5000	 str       r5, [sp]
  000a0	eb000000	 bl        KernelIoControl

; 283  : }

  000a4	e28dd01c	 add       sp, sp, #0x1C
  000a8	e8bd8030	 ldmia     sp!, {r4, r5, pc}
  000ac		 |$L40867|
  000ac	010127e3	 DCD       0x10127e3
  000b0	80000e58	 DCD       0x80000e58
  000b4	80000e18	 DCD       0x80000e18
  000b8	80000e34	 DCD       0x80000e34
  000bc		 |$M40864|

			 ENDP  ; |SDMMC_GpioInit|


  00000			 AREA	 |.text| { |SDMMC_SmcInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$SDMMC_SmcInit|, PDATA, SELECTION=5, ASSOC=|.text| { |SDMMC_SmcInit| } ; comdat associative
|$T40872| DCD	|SDMMC_SmcInit|
	DCD	0x40000100
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |SDMMC_SmcInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |SDMMC_SmcInit| PROC

; 294  : {

  00000		 |$M40870|

; 295  : #if 0
; 296  : #define PRE_CHARGE_NS       200     

; 297  : #define HOLD_TIME_NS        200     

; 298  : #define ACCESS_TIME_NS      600     

; 299  : #define WIDTH               16      

; 300  : 
; 301  :     BUS_CLKS BusClks;               

; 302  : 
; 303  :     DWORD   BytesReturned = 0;
; 304  : 
; 305  :     ULONG   HClk = 50;              

; 306  : 
; 307  :     if (KernelIoControl(IOCTL_HAL_GET_BUS_CLKS,
; 308  :                         &BusClks,
; 309  :                         sizeof(BusClks),
; 310  :                         NULL,
; 311  :                         0,
; 312  :                         &BytesReturned)) {
; 313  : 
; 314  :         HClk                = ((BusClks.HClk + 500000) / 1000000);
; 315  :     }
; 316  : #endif
; 317  : }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -