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

📄 mmcdrv.cod

📁 ARM读写SD卡程序
💻 COD
📖 第 1 页 / 共 4 页
字号:
; 542  :     pc = drno_to_controller(driveno);
; 543  :     phys_drive = drno_to_phys(driveno);
; 544  : #else
; 545  :     phys_drive = driveno;
; 546  :     pc = &controller_s[0];

  0000c	e59f6080	 ldr       r6, [pc, #0x80]

; 547  : #endif
; 548  : 
; 549  :     MMCSelectController(pc->controller_number, phys_drive);

  00010	e1a01004	 mov       r1, r4
  00014	e1d601f4	 ldrsh     r0, [r6, #0x14]
  00018	eb000000	 bl        MMCSelectController

; 550  : 
; 551  :         pc->drive_active = (((UINT16)phys_drive) | DRV_ACTIVE);

  0001c	e59f006c	 ldr       r0, [pc, #0x6C]
  00020	e1a03804	 mov       r3, r4, lsl #16
  00024	e1800843	 orr       r0, r0, r3, asr #16
  00028	e1a01800	 mov       r1, r0, lsl #16
  0002c	e1a02841	 mov       r2, r1, asr #16

; 552  : 
; 553  :         
; 554  :     if ( MMC_NO_ERROR != mmcGetStatus ( pc, pc->drive[phys_drive].RCA) )

  00030	e5961000	 ldr       r1, [r6]
  00034	e1a00804	 mov       r0, r4, lsl #16
  00038	e1c621be	 strh      r2, [r6, #0x1E]
  0003c	e1a02820	 mov       r2, r0, lsr #16
  00040	e0810282	 add       r0, r1, r2, lsl #5
  00044	e1d010be	 ldrh      r1, [r0, #0xE]
  00048	e1a00006	 mov       r0, r6
  0004c	eb000000	 bl        mmcGetStatus
  00050	e3500000	 cmp       r0, #0

; 555  :     {
; 556  :         return (YES);

  00054	13a00001	 movne     r0, #1

; 571  : }

  00058	18bd4070	 ldmneia   sp!, {r4 - r6, lr}
  0005c	112fff1e	 bxne      lr

; 557  :     }
; 558  : 
; 559  :         if ( dFlag )    

  00060	e1a00805	 mov       r0, r5, lsl #16
  00064	e1b01820	 movs      r1, r0, lsr #16
  00068	0a000005	 beq       |$L36675|

; 560  :     {
; 561  :                 
; 562  :                 if ( pc->mmcRdyState == YES )

  0006c	e1d602b4	 ldrh      r0, [r6, #0x24]
  00070	e1a01800	 mov       r1, r0, lsl #16
  00074	e1a02821	 mov       r2, r1, lsr #16
  00078	e3520001	 cmp       r2, #1

; 563  :                         return NO;
; 564  :                 else
; 565  :                         
; 566  :                         return YES;

  0007c	e3a00001	 mov       r0, #1
  00080	1a000000	 bne       |$L36668|
  00084		 |$L36675|

; 567  :     }
; 568  : 
; 569  :         
; 570  :         return NO;

  00084	e3a00000	 mov       r0, #0
  00088		 |$L36668|

; 571  : }

  00088	e8bd4070	 ldmia     sp!, {r4 - r6, lr}
  0008c	e12fff1e	 bx        lr
  00090		 |$L36866|
  00090	ffff8000	 DCD       0xffff8000
  00094	00000000	 DCD       |controller_s|
  00098		 |$M36863|

			 ENDP  ; |getDeviceStatus|

	EXPORT	|setupMMcHostDataRegister|

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

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

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

  00000		 |setupMMcHostDataRegister| PROC

; 595  : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004		 |$M36883|
  00004	e1a04001	 mov       r4, r1

; 596  : #if (USE_SECURITY)
; 597  :         if ( cmdIndex & SECURITY_CMD_BIT )
; 598  :         {
; 599  :                 SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600  :                 return;
; 601  :         }
; 602  : #endif
; 603  : 
; 604  :         
; 605  :     switch ( cmdIndex )
; 606  :     { 

  00008	e1a00800	 mov       r0, r0, lsl #16
  0000c	e1a01820	 mov       r1, r0, lsr #16
  00010	e3510014	 cmp       r1, #0x14
  00014	ca000023	 bgt       |$L36869|
  00018	0a000033	 beq       |$L36691|
  0001c	e351000c	 cmp       r1, #0xC
  00020	ca000011	 bgt       |$L36870|
  00024	0a00000b	 beq       |$L36697|
  00028	e3510000	 cmp       r1, #0
  0002c	4a000044	 bmi       |$L36687|
  00030	e3510002	 cmp       r1, #2
  00034	da000015	 ble       |$L36700|
  00038	e3510008	 cmp       r1, #8
  0003c	da000040	 ble       |$L36687|
  00040	e351000a	 cmp       r1, #0xA
  00044	da000011	 ble       |$L36700|
  00048	e351000b	 cmp       r1, #0xB
  0004c	0a00000c	 beq       |$L36690|

; 673  :             break;
; 674  : 
; 675  :     } 
; 676  : }

  00050	e8bd4010	 ldmia     sp!, {r4, lr}
  00054	e12fff1e	 bx        lr
  00058		 |$L36697|

; 645  : 
; 646  :         case    ERASE_SECTORS:
; 647  :             *cmdDatContReg = NO;
; 648  :                         *blkLength = NO;
; 649  :             break;
; 650  : 
; 651  :         case    STOP_TRANSMISSION:
; 652  :                         if ( multipleRdWr == RCV)       

  00058	e3a00000	 mov       r0, #0
  0005c	e1c400b0	 strh      r0, [r4]

; 653  : 
; 654  : 
; 656  : 
; 657  :                                 *cmdDatContReg = NO;
; 658  :                         else                            
; 659  :                                 *cmdDatContReg = NO;
; 660  :                         *blkLength = NO;

  00060	e1c300b0	 strh      r0, [r3]

; 673  :             break;
; 674  : 
; 675  :     } 
; 676  : }

  00064	e8bd4010	 ldmia     sp!, {r4, lr}
  00068	e12fff1e	 bx        lr
  0006c		 |$L36870|

; 596  : #if (USE_SECURITY)
; 597  :         if ( cmdIndex & SECURITY_CMD_BIT )
; 598  :         {
; 599  :                 SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600  :                 return;
; 601  :         }
; 602  : #endif
; 603  : 
; 604  :         
; 605  :     switch ( cmdIndex )
; 606  :     { 

  0006c	e351000d	 cmp       r1, #0xD
  00070	0a000006	 beq       |$L36700|
  00074	e3510010	 cmp       r1, #0x10
  00078	da000031	 ble       |$L36687|
  0007c	e3510012	 cmp       r1, #0x12
  00080	ca00002f	 bgt       |$L36687|
  00084		 |$L36690|

; 607  :         case    READ_BLOCK:             
; 608  :         case    READ_MULTIPLE_BLOCK:    
; 609  :         case    READ_DAT_UNTIL_STOP:    
; 610  :             *cmdDatContReg = DATA_ENABLE;
; 611  :             *blkLength = DEFAULT_BLK_LENGTH;

  00084	e3a01c02	 mov       r1, #2, 24

; 620  :             break;
; 621  : 
; 622  :         case    SEND_WRITE_PROT:
; 623  :             *cmdDatContReg = DATA_ENABLE;

  00088	e3a00004	 mov       r0, #4

; 625  :             break;

  0008c	ea000018	 b         |$L36882|
  00090		 |$L36700|

; 661  :             break;
; 662  : 
; 663  :         
; 664  :         case    GO_IDLE_STATE:
; 665  :         case    SEND_OP_COND:
; 666  :         case    ALL_SEND_CID:
; 667  :         case    SEND_CID:
; 668  :         case    SEND_CSD:
; 669  :         case    SEND_STATUS:
; 670  :             *cmdDatContReg = NO;

  00090	e3a00000	 mov       r0, #0
  00094	e1c400b0	 strh      r0, [r4]

; 671  :                         *blkLength = NO;

  00098	e1c300b0	 strh      r0, [r3]

; 672  :                         *noBlocks = NO;

  0009c	e1c200b0	 strh      r0, [r2]

; 673  :             break;
; 674  : 
; 675  :     } 
; 676  : }

  000a0	e8bd4010	 ldmia     sp!, {r4, lr}
  000a4	e12fff1e	 bx        lr
  000a8		 |$L36869|

; 596  : #if (USE_SECURITY)
; 597  :         if ( cmdIndex & SECURITY_CMD_BIT )
; 598  :         {
; 599  :                 SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600  :                 return;
; 601  :         }
; 602  : #endif
; 603  : 
; 604  :         
; 605  :     switch ( cmdIndex )
; 606  :     { 

  000a8	e3510026	 cmp       r1, #0x26
  000ac	ca000014	 bgt       |$L36871|
  000b0	0affffe8	 beq       |$L36697|
  000b4	e3510018	 cmp       r1, #0x18
  000b8	ba000021	 blt       |$L36687|
  000bc	e3510019	 cmp       r1, #0x19
  000c0	da000009	 ble       |$L36691|
  000c4	e351001b	 cmp       r1, #0x1B
  000c8	da000004	 ble       |$L36695|
  000cc	e351001e	 cmp       r1, #0x1E
  000d0	1a00001b	 bne       |$L36687|

; 624  :                         *blkLength = NO;

  000d4	e3a01000	 mov       r1, #0
  000d8	e3a00004	 mov       r0, #4

; 625  :             break;

  000dc	ea000004	 b         |$L36882|
  000e0		 |$L36695|

; 638  : #endif
; 639  :         case    PROGRAM_CSD:
; 640  :         case    PROGRAM_CID:
; 641  :             *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);

  000e0	e3a0000c	 mov       r0, #0xC

; 642  :                         *blkLength = 16;

  000e4	e3a01010	 mov       r1, #0x10

; 643  :             *noBlocks = 1;
; 644  :             break;

  000e8	ea000011	 b         |$L36876|
  000ec		 |$L36691|

; 612  :             break;
; 613  : 
; 614  :         case    WRITE_BLOCK:            
; 615  :         case    WRITE_MULTIPLE_BLOCK:   
; 616  :         case    WRITE_DAT_UNTIL_STOP:   
; 617  :             *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);

  000ec	e3a0000c	 mov       r0, #0xC

; 618  : 
; 619  :             *blkLength = DEFAULT_BLK_LENGTH;

  000f0	e3a01c02	 mov       r1, #2, 24
  000f4		 |$L36882|

; 612  :             break;
; 613  : 
; 614  :         case    WRITE_BLOCK:            
; 615  :         case    WRITE_MULTIPLE_BLOCK:   
; 616  :         case    WRITE_DAT_UNTIL_STOP:   
; 617  :             *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);

  000f4	e1c400b0	 strh      r0, [r4]

; 618  : 
; 619  :             *blkLength = DEFAULT_BLK_LENGTH;

  000f8	e1c310b0	 strh      r1, [r3]

; 673  :             break;
; 674  : 
; 675  :     } 
; 676  : }

  000fc	e8bd4010	 ldmia     sp!, {r4, lr}
  00100	e12fff1e	 bx        lr
  00104		 |$L36871|

; 596  : #if (USE_SECURITY)
; 597  :         if ( cmdIndex & SECURITY_CMD_BIT )
; 598  :         {
; 599  :                 SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 600  :                 return;
; 601  :         }
; 602  : #endif
; 603  : 
; 604  :         
; 605  :     switch ( cmdIndex )
; 606  :     { 

  00104	e3a00f53	 mov       r0, #0x53, 30
  00108	e3800001	 orr       r0, r0, #1
  0010c	e1510000	 cmp       r1, r0
  00110	0a000005	 beq       |$L36693|
  00114	e3a00e17	 mov       r0, #0x17, 28
  00118	e3800003	 orr       r0, r0, #3
  0011c	e1510000	 cmp       r1, r0
  00120	1a000007	 bne       |$L36687|

; 631  :             break;
; 632  : 
; 633  :                 case    SD_SEND_SCR:
; 634  :             *cmdDatContReg = DATA_ENABLE;
; 635  :                         *blkLength = 8;

  00124	e3a01008	 mov       r1, #8

; 636  :             *noBlocks = 1;
; 637  :                         break;

  00128	ea000000	 b         |$L36877|
  0012c		 |$L36693|

; 629  :                         *blkLength = (DEFAULT_BLK_LENGTH >> 3);

  0012c	e3a01040	 mov       r1, #0x40
  00130		 |$L36877|

; 626  : #if (USE_SD)
; 627  :                 case    SD_STATUS:
; 628  :             *cmdDatContReg = DATA_ENABLE;

  00130	e3a00004	 mov       r0, #4
  00134		 |$L36876|
  00134	e1c400b0	 strh      r0, [r4]

; 630  :             *noBlocks = 1;

  00138	e3a00001	 mov       r0, #1
  0013c	e1c310b0	 strh      r1, [r3]
  00140	e1c200b0	 strh      r0, [r2]
  00144		 |$L36687|

; 673  :             break;
; 674  : 
; 675  :     } 
; 676  : }

  00144	e8bd4010	 ldmia     sp!, {r4, lr}
  00148	e12fff1e	 bx        lr
  0014c		 |$M36884|

			 ENDP  ; |setupMMcHostDataRegister|

	END

⌨️ 快捷键说明

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