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

📄 mmcoem.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 4 页
字号:
			 ENDP  ; |stopMMCClock|

	EXPORT	|startMMCClock|

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

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

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

  00000		 |startMMCClock| PROC

; 265  : {

  00000		 |$M41459|

; 266  :     
; 267  : 	

; 268  :     WRITE_REGISTER_ULONG(&gSDMMCRegPtr->STR_STP_CLK, MMCI_START_CLK);

  00000	e59f000c	 ldr       r0, [pc, #0xC]
  00004	e3a02002	 mov       r2, #2
  00008	e5901000	 ldr       r1, [r0]
  0000c	e5812000	 str       r2, [r1]

; 269  : }

  00010	e1a0f00e	 mov       pc, lr
  00014		 |$L41463|
  00014	00000000	 DCD       |gSDMMCRegPtr|
  00018		 |$M41460|

			 ENDP  ; |startMMCClock|

	EXPORT	|setMMCClockRate|
	EXPORT	|??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@| [ DATA ] ; `string'

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

  00000			 AREA	 |.pdata$$setMMCClockRate|, PDATA, SELECTION=5, ASSOC=|.text| { |setMMCClockRate| } ; comdat associative
|$T41470| DCD	|setMMCClockRate|
	DCD	0x40001d01

  00000			 AREA	 |.rdata| { |??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@| DCB "f"
	DCB	0x0, "a", 0x0, "i", 0x0, "l", 0x0, " ", 0x0, "t", 0x0, "o"
	DCB	0x0, " ", 0x0, "s", 0x0, "t", 0x0, "o", 0x0, "p", 0x0, "M"
	DCB	0x0, "M", 0x0, "C", 0x0, "C", 0x0, "l", 0x0, "o", 0x0, "c"
	DCB	0x0, "k", 0x0, "(", 0x0, ")", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
	DCB	0x0					; `string'
; Function compile flags: /Ogsy

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

  00000		 |setMMCClockRate| PROC

; 291  : {

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

; 292  :     
; 293  :     if ( !stopMMCClock() )  

  00008	eb000000	 bl        stopMMCClock
  0000c	e3500000	 cmp       r0, #0
  00010	1a000003	 bne       |$L41138|

; 294  : 	{
; 295  : 		RETAILMSG(1, (TEXT("fail to stopMMCClock()\r\n")));

  00014	e59f0054	 ldr       r0, [pc, #0x54]
  00018	eb000000	 bl        NKDbgPrintfW

; 296  :         return NO;

  0001c	e3a00000	 mov       r0, #0

; 313  : }

  00020	e8bd8010	 ldmia     sp!, {r4, pc}
  00024		 |$L41138|

; 297  : 	}
; 298  : 
; 299  :     
; 300  : 	

; 301  :     WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CLK_RATE, ClockRate);

  00024	e59f3040	 ldr       r3, [pc, #0x40]
  00028	e1a00804	 mov       r0, r4, lsl #16
  0002c	e1a02820	 mov       r2, r0, lsr #16
  00030	e5930000	 ldr       r0, [r3]
  00034	e2801008	 add       r1, r0, #8
  00038	e5812000	 str       r2, [r1]

; 302  : 
; 303  : 	

; 304  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->RES_TO, MMCI_RESTO_RESET);

  0003c	e3a02040	 mov       r2, #0x40
  00040	e5930000	 ldr       r0, [r3]
  00044	e2801018	 add       r1, r0, #0x18
  00048	e5812000	 str       r2, [r1]

; 305  : 
; 306  : 	

; 307  :   	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->READ_TO, MMCI_READTO_RESET);

  0004c	e3a02cff	 mov       r2, #0xFF, 24
  00050	e5930000	 ldr       r0, [r3]
  00054	e38220ff	 orr       r2, r2, #0xFF
  00058	e280101c	 add       r1, r0, #0x1C
  0005c	e5812000	 str       r2, [r1]

; 308  : 
; 309  :     
; 310  :     startMMCClock();        

  00060	eb000000	 bl        startMMCClock

; 311  : 
; 312  :     return YES;

  00064	e3a00001	 mov       r0, #1

; 313  : }

  00068	e8bd8010	 ldmia     sp!, {r4, pc}
  0006c		 |$L41472|
  0006c	00000000	 DCD       |gSDMMCRegPtr|
  00070	00000000	 DCD       |??_C@_1DC@NEEI@?$AAf?$AAa?$AAi?$AAl?$AA?5?$AAt?$AAo?$AA?5?$AAs?$AAt?$AAo?$AAp?$AAM?$AAM?$AAC?$AAC?$AAl?$AAo?$AAc?$AAk@|
  00074		 |$M41469|

			 ENDP  ; |setMMCClockRate|

	EXPORT	|startMMC80Clocks|
	IMPORT	|platform_delayms|

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

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

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

  00000		 |startMMC80Clocks| PROC

; 335  : {

  00000	e92d4030	 stmdb     sp!, {r4, r5, lr}
  00004		 |$M41480|

; 336  : 	
; 337  : 	#define MMC_STATUS_END_COMMAND_RESPONSE  0x00002000
; 338  : 
; 339  :     UINT16  ij;
; 340  :     UINT32  dStatus;
; 341  : 
; 342  :     ij = (UINT16)ctrlNo;    
; 343  : 
; 344  :     

; 345  :  
; 346  : 	if ( !stopMMCClock() )  

  00004	eb000000	 bl        stopMMCClock
  00008	e3500000	 cmp       r0, #0
  0000c	0a00001c	 beq       |$L41145|

; 347  :         return;
; 348  : 
; 349  : 	

; 350  :   	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, GO_IDLE_STATE);

  00010	e59f4070	 ldr       r4, [pc, #0x70]
  00014	e3a05000	 mov       r5, #0

; 351  : 
; 352  : 	

; 353  :   	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, MMCI_RESFIFO_RESET);
; 354  : 
; 355  : 	

; 356  : 	

; 357  :   	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD_DATA_CONT, RESPONSE_TYPE_R0 |SEND_80_CLOCKS );

  00018	e3a02040	 mov       r2, #0x40
  0001c	e5940000	 ldr       r0, [r4]
  00020	e2801038	 add       r1, r0, #0x38
  00024	e5815000	 str       r5, [r1]
  00028	e5940000	 ldr       r0, [r4]
  0002c	e280103c	 add       r1, r0, #0x3C
  00030	e5815000	 str       r5, [r1]
  00034	e5940000	 ldr       r0, [r4]
  00038	e2801014	 add       r1, r0, #0x14
  0003c	e5812000	 str       r2, [r1]

; 358  : 
; 359  : 	

; 360  : 	startMMCClock();

  00040	eb000000	 bl        startMMCClock

; 361  : 
; 362  :     for (ij = 0; ij < 0x20000; ij++ )

  00044	e5940000	 ldr       r0, [r4]
  00048	e2803004	 add       r3, r0, #4
  0004c		 |$L41153|

; 363  :     {
; 364  :          

; 365  : 		 dStatus = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);

  0004c	e5930000	 ldr       r0, [r3]

; 366  : 
; 367  :          if ( dStatus & MMC_STATUS_END_COMMAND_RESPONSE )

  00050	e3100a02	 tst       r0, #2, 20
  00054	1a000008	 bne       |$L41476|
  00058	e1a00805	 mov       r0, r5, lsl #16
  0005c	e1a01820	 mov       r1, r0, lsr #16
  00060	e2812001	 add       r2, r1, #1
  00064	e1a00802	 mov       r0, r2, lsl #16
  00068	e1a05820	 mov       r5, r0, lsr #16
  0006c	e1a01805	 mov       r1, r5, lsl #16
  00070	e1a00821	 mov       r0, r1, lsr #16
  00074	e3500802	 cmp       r0, #2, 16
  00078	bafffff3	 blt       |$L41153|
  0007c		 |$L41476|

; 368  :          {
; 369  :               break;
; 370  :          }
; 371  :     }
; 372  :         
; 373  : 	

; 374  :     OS_WAIT(200);

  0007c	e3a000c8	 mov       r0, #0xC8
  00080	eb000000	 bl        platform_delayms
  00084		 |$L41145|

; 375  : }

  00084	e8bd8030	 ldmia     sp!, {r4, r5, pc}
  00088		 |$L41484|
  00088	00000000	 DCD       |gSDMMCRegPtr|
  0008c		 |$M41481|

			 ENDP  ; |startMMC80Clocks|

	EXPORT	|resetMMCController|

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

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

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

  00000		 |resetMMCController| PROC

; 396  : {

  00000		 |$M41487|

; 397  :  
; 398  : }

  00000	e1a0f00e	 mov       pc, lr
  00004		 |$M41488|

			 ENDP  ; |resetMMCController|

	EXPORT	|SetupMMCInterrupt|

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

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

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

  00000		 |SetupMMCInterrupt| PROC

; 417  : {

  00000		 |$M41493|

; 418  :     UINT32  dtmp;
; 419  : 
; 420  :     
; 421  : 	

; 422  : 	dtmp = READ_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK);

  00000	e59f0014	 ldr       r0, [pc, #0x14]
  00004	e5901000	 ldr       r1, [r0]
  00008	e2812034	 add       r2, r1, #0x34

; 423  : 
; 424  : #if (USE_INTERRUPTS)
; 425  :     dtmp &= 0x0F;
; 426  :     dtmp |= bitMask;
; 427  : #else
; 428  :     dtmp = bitMask;
; 429  :     dtmp &= 0;
; 430  : #endif
; 431  : 
; 432  : 	

; 433  : 	

; 434  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);

  0000c	e3a0103f	 mov       r1, #0x3F
  00010	e5920000	 ldr       r0, [r2]
  00014	e5821000	 str       r1, [r2]

; 435  : }

  00018	e1a0f00e	 mov       pc, lr
  0001c		 |$L41497|
  0001c	00000000	 DCD       |gSDMMCRegPtr|
  00020		 |$M41494|

			 ENDP  ; |SetupMMCInterrupt|

	EXPORT	|disableMMCInterrupt|

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

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

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

  00000		 |disableMMCInterrupt| PROC

; 453  : {

  00000		 |$M41500|

; 454  :     

; 455  : 
; 456  :     
; 457  :     

; 458  :     
; 459  :     

; 460  : 	

; 461  : 	

; 462  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->INT_MASK, 0x3F);

  00000	e59f0010	 ldr       r0, [pc, #0x10]
  00004	e5901000	 ldr       r1, [r0]
  00008	e3a0003f	 mov       r0, #0x3F
  0000c	e2812034	 add       r2, r1, #0x34
  00010	e5820000	 str       r0, [r2]

; 463  : }

  00014	e1a0f00e	 mov       pc, lr
  00018		 |$L41504|
  00018	00000000	 DCD       |gSDMMCRegPtr|
  0001c		 |$M41501|

			 ENDP  ; |disableMMCInterrupt|

	EXPORT	|MMCSendCommand|

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

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

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

  00000		 |MMCSendCommand| PROC

; 491  : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004		 |$M41509|
  00004	e1a02000	 mov       r2, r0
  00008	e1a03001	 mov       r3, r1

; 492  :             
; 493  :     UINT32 dtmp;
; 494  :     

; 495  :  	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->ARGUMENT, Arg);

  0000c	e59f4024	 ldr       r4, [pc, #0x24]
  00010	e5940000	 ldr       r0, [r4]
  00014	e280103c	 add       r1, r0, #0x3C

; 496  : 
; 497  :     
; 498  :     dtmp = (Cmd & 0x7F);
; 499  : 	

; 500  : 	WRITE_REGISTER_ULONG(&gSDMMCRegPtr->CMD, dtmp);

  00018	e1a00803	 mov       r0, r3, lsl #16
  0001c	e5812000	 str       r2, [r1]
  00020	e1a01820	 mov       r1, r0, lsr #16
  00024	e5940000	 ldr       r0, [r4]
  00028	e201207f	 and       r2, r1, #0x7F
  0002c	e2801038	 add       r1, r0, #0x38
  00030	e5812000	 str       r2, [r1]

; 501  : }

  00034	e8bd8010	 ldmia     sp!, {r4, pc}
  00038		 |$L41513|
  00038	00000000	 DCD       |gSDMMCRegPtr|
  0003c		 |$M41510|

			 ENDP  ; |MMCSendCommand|

	EXPORT	|getMMCResponseInfo|

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

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

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

  00000		 |getMMCResponseInfo| PROC

; 563  : {

  00000	e92d41f0	 stmdb     sp!, {r4 - r8, lr}
  00004		 |$M41534|
  00004	e1a08000	 mov       r8, r0
  00008	e1a03001	 mov       r3, r1

; 564  :     UINT32  dtmp, dtimer;
; 565  :     UINT16  i;
; 566  :     UINT32  dstat;
; 567  : 
; 568  :     i = respType;    
; 569  : 
; 570  :     
; 571  :     dtimer = 0xFFFF;
; 572  : 
; 573  :     
; 574  : 	

; 575  : 	dstat = READ_REGISTER_ULONG(&gSDMMCRegPtr->DATA_FIFO);

  0000c	e59f6100	 ldr       r6, [pc, #0x100]
  00010	e3a02cff	 mov       r2, #0xFF, 24
  00014	e5964000	 ldr       r4, [r6]
  00018	e38220ff	 orr       r2, r2, #0xFF
  0001c	e2840048	 add       r0, r4, #0x48
  00020	e5901000	 ldr       r1, [r0]
  00024	e2840004	 add       r0, r4, #4
  00028		 |$L41216|

; 577  :     {
; 578  :         
; 579  : 		

; 580  : 		dstat = READ_REGISTER_ULONG(&gSDMMCRegPtr->STATUS);

  00028	e5901000	 ldr       r1, [r0]

; 581  : 
; 582  :         dtimer--;

  0002c	e2422001	 sub       r2, r2, #1

; 583  : 
; 584  :         
; 585  :         if ( dstat & TIME_OUT_RESPONSE )

  00030	e3110002	 tst       r1, #2
  00034	1a00000c	 bne       |$L41518|

; 588  :         }
; 589  :         
; 590  :         else if ( dstat & RESP_CRC_ERR)

  00038	e3110020	 tst       r1, #0x20
  0003c	1a00000d	 bne       |$L41519|

; 593  :         }
; 594  :         else if ( dstat & CRC_WR_ERR )

  00040	e3110004	 tst       r1, #4
  00044	1a00000e	 bne       |$L41521|

; 595  :         {
; 596  :             return MMC_DATA_STATUS_CRC_ERROR;
; 597  :         }
; 598  :         
; 599  :         else if ( dstat & CRC_RD_ERR )

  00048	e3110008	 tst       r1, #8
  0004c	1a00000c	 bne       |$L41521|

⌨️ 快捷键说明

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