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

📄 diskio.cod

📁 ARM读写SD卡程序
💻 COD
📖 第 1 页 / 共 5 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.20.9615 

	TTL	d:\wince420\platform\sdklh7a404\drivers\sdmmc\driver\.\diskio.c
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "


  00000			 AREA	 |.data|, DATA
	 COMMON	|multipleRdWr|, 0x2

	EXPORT	|CloseDisk|
	IMPORT	|EnterCriticalSection|
	IMPORT	|LeaveCriticalSection|
	IMPORT	|DeleteCriticalSection|
	IMPORT	|v_DiskCrit|
	IMPORT	|v_DiskList|
	IMPORT	|LocalFree|
; File d:\wince420\platform\sdklh7a404\drivers\sdmmc\driver\diskio.c

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

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

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

  00000		 |CloseDisk| PROC

; 84   : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004		 |$M36981|
  00004	e1a04000	 mov       r4, r0

; 85   :     PDISK pd;
; 86   : 
; 87   :     DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:CloseDisk closing 0x%x\r\n"), pDisk));
; 88   : 
; 89   :     

; 90   :     

; 91   :     

; 92   :     EnterCriticalSection(&v_DiskCrit);

  00008	e59f007c	 ldr       r0, [pc, #0x7C]
  0000c	eb000000	 bl        EnterCriticalSection

; 93   :     if (pDisk == v_DiskList) {

  00010	e59f3078	 ldr       r3, [pc, #0x78]
  00014	e5931000	 ldr       r1, [r3]
  00018	e1540001	 cmp       r4, r1
  0001c	1a000006	 bne       |$L36688|

; 94   :     v_DiskList = pDisk->d_next;

  00020	e5940000	 ldr       r0, [r4]
  00024	e5830000	 str       r0, [r3]

; 95   :     } else {

  00028	ea000009	 b         |$L36693|
  0002c		 |$L36692|

; 98   :         if (pd->d_next == pDisk) {

  0002c	e5910000	 ldr       r0, [r1]
  00030	e1500004	 cmp       r0, r4
  00034	0a000004	 beq       |$L36976|

; 100  :         break;
; 101  :         }
; 102  :         pd = pd->d_next;

  00038	e1a01000	 mov       r1, r0
  0003c		 |$L36688|

; 96   :     pd = v_DiskList;
; 97   :     while (pd->d_next != NULL) {

  0003c	e5910000	 ldr       r0, [r1]
  00040	e3500000	 cmp       r0, #0
  00044	1afffff8	 bne       |$L36692|

; 98   :         if (pd->d_next == pDisk) {

  00048	ea000001	 b         |$L36693|
  0004c		 |$L36976|

; 99   :         pd->d_next = pDisk->d_next;

  0004c	e5940000	 ldr       r0, [r4]
  00050	e5810000	 str       r0, [r1]
  00054		 |$L36693|

; 103  :     }
; 104  :     }
; 105  :     LeaveCriticalSection(&v_DiskCrit);

  00054	e59f0030	 ldr       r0, [pc, #0x30]
  00058	eb000000	 bl        LeaveCriticalSection

; 106  : 
; 107  :     DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:CloseDisk - freeing resources\r\n")));
; 108  : 
; 109  :     DeleteCriticalSection(&(pDisk->d_DiskCardCrit));

  0005c	e2840004	 add       r0, r4, #4
  00060	eb000000	 bl        DeleteCriticalSection

; 110  :     if (pDisk->d_AlignBuf) {

  00064	e5943040	 ldr       r3, [r4, #0x40]
  00068	e3530000	 cmp       r3, #0

; 111  :     LocalFree(pDisk->d_AlignBuf);

  0006c	11a00003	 movne     r0, r3
  00070	1b000000	 blne      LocalFree

; 112  :     }
; 113  : 
; 114  :     if (pDisk->d_ActivePath) {

  00074	e5940044	 ldr       r0, [r4, #0x44]
  00078	e3500000	 cmp       r0, #0

; 115  :     LocalFree(pDisk->d_ActivePath);

  0007c	1b000000	 blne      LocalFree

; 116  :     }
; 117  :         
; 118  :     LocalFree(pDisk);

  00080	e1a00004	 mov       r0, r4
  00084	e8bd4010	 ldmia     sp!, {r4, lr}
  00088	ea000000	 b         LocalFree
  0008c		 |$L36985|
  0008c	00000000	 DCD       |v_DiskCrit|
  00090	00000000	 DCD       |v_DiskList|
  00094		 |$M36982|

			 ENDP  ; |CloseDisk|

	EXPORT	|CheckMedia|
	IMPORT	|IsCardInserted|

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

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

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

  00000		 |CheckMedia| PROC

; 139  : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004		 |$M36990|
  00004	e1a04000	 mov       r4, r0

; 140  : 
; 141  :     if (!IsCardInserted(pDisk)) {

  00008	eb000000	 bl        IsCardInserted
  0000c	e31000ff	 tst       r0, #0xFF
  00010	1a000005	 bne       |$L36703|

; 142  :     DEBUGMSG(ZONE_WARNING|ZONE_ERROR|ZONE_IO, 
; 143  :         (TEXT("MMCDISK:CheckMedia - Built-in CF Card no longer present!\r\n")));
; 144  :     if (pDisk->d_DiskCardState != STATE_DEAD) {

  00014	e594001c	 ldr       r0, [r4, #0x1C]
  00018	e3500004	 cmp       r0, #4

; 145  :         pDisk->d_DiskCardState = STATE_REMOVED;

  0001c	13a00005	 movne     r0, #5
  00020	1584001c	 strne     r0, [r4, #0x1C]

; 146  :     }
; 147  :     return DISK_REMOVED_ERROR;

  00024	e3a00014	 mov       r0, #0x14

; 151  : }    


  00028	e8bd8010	 ldmia     sp!, {r4, pc}
  0002c		 |$L36703|

; 148  :     }
; 149  : 
; 150  :     return ERROR_SUCCESS;

  0002c	e3a00000	 mov       r0, #0

; 151  : }    


  00030	e8bd8010	 ldmia     sp!, {r4, pc}
  00034		 |$M36991|

			 ENDP  ; |CheckMedia|

	EXPORT	|MMCREAD|
	IMPORT	|__C_specific_handler|
	IMPORT	|mmc_read|
	IMPORT	|MapPtrToProcess|
	IMPORT	|GetCallerProcess|

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

  00000			 AREA	 |.xdata$$MMCREAD|, DATA, SELECTION=5, ASSOC=|.text| { |MMCREAD| } ; comdat associative
|$T37020| DCD	0x1
	DCD	|$L37003|
	DCD	|$L37004|
	DCD	|$L36999|
	DCD	|$L37000|

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

  00000			 AREA	 |.pdata$$MMCREAD|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCREAD| } ; comdat associative
|$T37021| DCD	|MMCREAD|
	DCD	0xc0002204

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

  00000			 AREA	 |.pdata$$MMCREAD|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCREAD| } ; comdat associative
|$T37023| DCD	|$L36999|
	DCD	0x40000600
; Function compile flags: /Ogsy

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

  00000	00000000	 DCD       |__C_specific_handler|
  00004	00000000	 DCD       |$T37020|

  00008		 |MMCREAD| PROC

; 162  : {

  00008	e1a0c00d	 mov       r12, sp
  0000c	e92d59f0	 stmdb     sp!, {r4 - r8, r11, r12, lr}
  00010	e28db020	 add       r11, sp, #0x20
  00014	e24dd008	 sub       sp, sp, #8
  00018		 |$L37018|
  00018	e1a06000	 mov       r6, r0
  0001c	e1a05001	 mov       r5, r1

; 163  : 	
; 164  :    

; 165  :     DWORD num_sg;
; 166  :   

; 167  :     DWORD bytes_this_sg;
; 168  : 	unsigned short num_of_sector;
; 169  : 	

; 170  :     PSG_BUF pSg;
; 171  :     UCHAR *pBuf16;
; 172  :    

; 173  :     DWORD sectno;
; 174  :     DWORD endsect;
; 175  :     DWORD error;
; 176  :    
; 177  : 
; 178  : 

; 179  :     num_sg = pSgr->sr_num_sg;
; 180  : 

; 181  :     pSg = &(pSgr->sr_sglist[0]);

  00020	e1a04005	 mov       r4, r5

; 182  :     bytes_this_sg = pSg->sb_len;
; 183  : 

; 184  :     pBuf16 = (UCHAR *)  MapPtrToProcess((LPVOID)pSg->sb_buf, GetCallerProcess());

  00024	eb000000	 bl        GetCallerProcess
  00028	e1a01000	 mov       r1, r0
  0002c	e5b40014	 ldr       r0, [r4, #0x14]!
  00030	eb000000	 bl        MapPtrToProcess
  00034	e1a07000	 mov       r7, r0

; 185  :     
; 186  :     sectno = pSgr->sr_start;

  00038	e5958000	 ldr       r8, [r5]

; 187  : 

; 188  :     endsect = sectno + pSgr->sr_num_sec;
; 189  : 

; 190  : 	num_of_sector = (unsigned short) pSgr->sr_num_sec;

  0003c	e5950004	 ldr       r0, [r5, #4]
  00040	e1a01800	 mov       r1, r0, lsl #16
  00044	e1a04821	 mov       r4, r1, lsr #16
  00048		 |$L37003|

; 191  :     error = ERROR_SUCCESS;
; 192  :     

; 193  :     

; 194  :     

; 195  :     

; 196  :     

; 197  : 

; 198  : #ifdef USE_INTERRUPT
; 199  :     ResetEvent(pDisk->d_IRQEvent);
; 200  : #endif
; 201  : 
; 202  :     try {
; 203  :         error = CheckMedia(pDisk);

  00048	e1a00006	 mov       r0, r6
  0004c	eb000000	 bl        CheckMedia
  00050	e1a05000	 mov       r5, r0
  00054	e50b5028	 str       r5, [r11, #-0x28]

; 204  : 
; 205  :     if ( error == ERROR_SUCCESS)

  00058	e3550000	 cmp       r5, #0
  0005c	1a000007	 bne       |$L37004|

; 206  : 
; 207  : 
; 208  : #if (USE_SPI || USE_SPI_EMULATION)
; 209  :         if (spi_read(0, sectno, WorkBuf, 1) == 0)
; 210  :                      error = ERROR_READ_FAULT;
; 211  : 
; 212  : #else
; 213  : 		     
; 214  :        

; 215  : 			

; 216  : 			

; 217  :              if (mmc_read(0, sectno, pBuf16, num_of_sector) == 0)

  00060	e1a03004	 mov       r3, r4
  00064	e1a02007	 mov       r2, r7
  00068	e1a01008	 mov       r1, r8
  0006c	e3a00000	 mov       r0, #0
  00070	eb000000	 bl        mmc_read
  00074	e3500000	 cmp       r0, #0

; 218  :                      error = ERROR_READ_FAULT;

  00078	03a0501e	 moveq     r5, #0x1E
  0007c	050b5028	 streq     r5, [r11, #-0x28]
  00080		 |$L37004|
  00080	ea000000	 b         |$L36727|
  00084		 |$L37000|

; 231  :         error = ERROR_READ_FAULT;

  00084	e3a0501e	 mov       r5, #0x1E
  00088		 |$L36727|

; 232  :     }
; 233  :     if (error != ERROR_SUCCESS) {

  00088	e1a00005	 mov       r0, r5

; 234  :         return error;
; 235  :     }
; 236  : 
; 237  : #ifdef USE_INTERRUPT
; 238  :     if (pDisk->d_DiskCardState == STATE_OPENED) {
; 239  :         WaitForSingleObject(pDisk->d_IRQEvent, DISK_IO_TIME_OUT);
; 240  :     }
; 241  :     if (pDisk->d_DiskCardState != STATE_OPENED) {
; 242  :         return GetDiskStateError(pDisk->d_DiskCardState);
; 243  :     }
; 244  : #endif
; 245  : 
; 246  : 
; 247  :  
; 248  :  
; 249  :  
; 250  :     return 0;
; 251  : }    


  0008c	e91ba9f0	 ldmdb     r11, {r4 - r8, r11, sp, pc}

			 ENDP  ; |MMCREAD|

  00090		 |$L37002|
  00090		 |$L37019|
  00090		 |$L36999|

; 219  : 
; 220  :              
; 221  : 
; 222  : #endif
; 223  : 
; 224  : 
; 225  : 
; 226  : 
; 227  :        

; 228  : 
; 229  :     } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
; 230  :         EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {

  00090	e5901000	 ldr       r1, [r0]
  00094	e5912000	 ldr       r2, [r1]
  00098	e3520117	 cmp       r2, #0x17, 2
  0009c	e3a00001	 mov       r0, #1
  000a0	13a00000	 movne     r0, #0
  000a4		 |$L37001|
  000a4	e1a0f00e	 mov       pc, lr
  000a8		 |$L37022|
	EXPORT	|MMCWRITE|
	IMPORT	|GetDiskStateError|
	IMPORT	|mmc_write|

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

  00000			 AREA	 |.xdata$$MMCWRITE|, DATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37074| DCD	0x2
	DCD	|$L37047|
	DCD	|$L37048|
	DCD	|$L37043|
	DCD	|$L37044|
	DCD	|$L37040|
	DCD	|$L37041|
	DCD	|$L37036|
	DCD	|$L37037|

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

  00000			 AREA	 |.pdata$$MMCWRITE|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37075| DCD	|MMCWRITE|
	DCD	0xc0009205

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

  00000			 AREA	 |.pdata$$MMCWRITE|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37077| DCD	|$L37043|
	DCD	0x40000600

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

  00000			 AREA	 |.pdata$$MMCWRITE|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37079| DCD	|$L37036|
	DCD	0x40000600

⌨️ 快捷键说明

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