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

📄 mmcdrv.cod

📁 ARM读写SD卡程序
💻 COD
📖 第 1 页 / 共 4 页
字号:
  0000c	e59f6078	 ldr       r6, [pc, #0x78]

; 545  : #endif
; 546  : 
; 547  :     MMCSelectController(pc->controller_number, phys_drive);

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

; 548  : 
; 549  :         pc->drive_active = (((UINT16)phys_drive) | DRV_ACTIVE);

  0001c	e59f0064	 ldr       r0, [pc, #0x64]
  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

; 550  : 
; 551  :         
; 552  :     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

; 553  :     {
; 554  :         return (YES);

  00054	13a00001	 movne     r0, #1

; 569  : }

  00058	18bd8070	 ldmneia   sp!, {r4 - r6, pc}

; 555  :     }
; 556  : 
; 557  :         if ( dFlag )    

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

; 558  :     {
; 559  :                 
; 560  :                 if ( pc->mmcRdyState == YES )

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

; 561  :                         return NO;
; 562  :                 else
; 563  :                         
; 564  :                         return YES;

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

; 565  :     }
; 566  : 
; 567  :         
; 568  :         return NO;

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

; 569  : }

  00084	e8bd8070	 ldmia     sp!, {r4 - r6, pc}
  00088		 |$L36866|
  00088	ffff8000	 DCD       0xffff8000
  0008c	00000000	 DCD       |controller_s|
  00090		 |$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	0x40004e01
; Function compile flags: /Ogsy

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

  00000		 |setupMMcHostDataRegister| PROC

; 593  : {

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

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

  00008	e1a00800	 mov       r0, r0, lsl #16
  0000c	e1a01820	 mov       r1, r0, lsr #16
  00010	e3510014	 cmp       r1, #0x14
  00014	ca000020	 bgt       |$L36869|
  00018	0a000030	 beq       |$L36691|
  0001c	e351000c	 cmp       r1, #0xC
  00020	ca00000f	 bgt       |$L36870|
  00024	0a00000a	 beq       |$L36697|
  00028	e3510000	 cmp       r1, #0
  0002c	4a000040	 bmi       |$L36687|
  00030	e3510002	 cmp       r1, #2
  00034	da000013	 ble       |$L36700|
  00038	e3510008	 cmp       r1, #8
  0003c	da00003c	 ble       |$L36687|
  00040	e351000a	 cmp       r1, #0xA
  00044	da00000f	 ble       |$L36700|
  00048	e351000b	 cmp       r1, #0xB
  0004c	0a00000a	 beq       |$L36690|

; 671  :             break;
; 672  : 
; 673  :     } 
; 674  : }

  00050	e8bd8010	 ldmia     sp!, {r4, pc}
  00054		 |$L36697|

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

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

; 651  : 
; 652  : 
; 654  : 
; 655  :                                 *cmdDatContReg = NO;
; 656  :                         else                            
; 657  :                                 *cmdDatContReg = NO;
; 658  :                         *blkLength = NO;

  0005c	e1c300b0	 strh      r0, [r3]

; 671  :             break;
; 672  : 
; 673  :     } 
; 674  : }

  00060	e8bd8010	 ldmia     sp!, {r4, pc}
  00064		 |$L36870|

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

  00064	e351000d	 cmp       r1, #0xD
  00068	0a000006	 beq       |$L36700|
  0006c	e3510010	 cmp       r1, #0x10
  00070	da00002f	 ble       |$L36687|
  00074	e3510012	 cmp       r1, #0x12
  00078	ca00002d	 bgt       |$L36687|
  0007c		 |$L36690|

; 605  :         case    READ_BLOCK:             
; 606  :         case    READ_MULTIPLE_BLOCK:    
; 607  :         case    READ_DAT_UNTIL_STOP:    
; 608  :             *cmdDatContReg = DATA_ENABLE;
; 609  :             *blkLength = DEFAULT_BLK_LENGTH;

  0007c	e3a01c02	 mov       r1, #2, 24

; 618  :             break;
; 619  : 
; 620  :         case    SEND_WRITE_PROT:
; 621  :             *cmdDatContReg = DATA_ENABLE;

  00080	e3a00004	 mov       r0, #4

; 623  :             break;

  00084	ea000017	 b         |$L36882|
  00088		 |$L36700|

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

  00088	e3a00000	 mov       r0, #0
  0008c	e1c400b0	 strh      r0, [r4]

; 669  :                         *blkLength = NO;

  00090	e1c300b0	 strh      r0, [r3]

; 670  :                         *noBlocks = NO;

  00094	e1c200b0	 strh      r0, [r2]

; 671  :             break;
; 672  : 
; 673  :     } 
; 674  : }

  00098	e8bd8010	 ldmia     sp!, {r4, pc}
  0009c		 |$L36869|

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

  0009c	e3510026	 cmp       r1, #0x26
  000a0	ca000013	 bgt       |$L36871|
  000a4	0affffea	 beq       |$L36697|
  000a8	e3510018	 cmp       r1, #0x18
  000ac	ba000020	 blt       |$L36687|
  000b0	e3510019	 cmp       r1, #0x19
  000b4	da000009	 ble       |$L36691|
  000b8	e351001b	 cmp       r1, #0x1B
  000bc	da000004	 ble       |$L36695|
  000c0	e351001e	 cmp       r1, #0x1E
  000c4	1a00001a	 bne       |$L36687|

; 622  :                         *blkLength = NO;

  000c8	e3a01000	 mov       r1, #0
  000cc	e3a00004	 mov       r0, #4

; 623  :             break;

  000d0	ea000004	 b         |$L36882|
  000d4		 |$L36695|

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

  000d4	e3a0000c	 mov       r0, #0xC

; 640  :                         *blkLength = 16;

  000d8	e3a01010	 mov       r1, #0x10

; 641  :             *noBlocks = 1;
; 642  :             break;

  000dc	ea000010	 b         |$L36876|
  000e0		 |$L36691|

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

  000e0	e3a0000c	 mov       r0, #0xC

; 616  : 
; 617  :             *blkLength = DEFAULT_BLK_LENGTH;

  000e4	e3a01c02	 mov       r1, #2, 24
  000e8		 |$L36882|

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

  000e8	e1c400b0	 strh      r0, [r4]

; 616  : 
; 617  :             *blkLength = DEFAULT_BLK_LENGTH;

  000ec	e1c310b0	 strh      r1, [r3]

; 671  :             break;
; 672  : 
; 673  :     } 
; 674  : }

  000f0	e8bd8010	 ldmia     sp!, {r4, pc}
  000f4		 |$L36871|

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

  000f4	e3a00f53	 mov       r0, #0x53, 30
  000f8	e3800001	 orr       r0, r0, #1
  000fc	e1510000	 cmp       r1, r0
  00100	0a000005	 beq       |$L36693|
  00104	e3a00e17	 mov       r0, #0x17, 28
  00108	e3800003	 orr       r0, r0, #3
  0010c	e1510000	 cmp       r1, r0
  00110	1a000007	 bne       |$L36687|

; 629  :             break;
; 630  : 
; 631  :                 case    SD_SEND_SCR:
; 632  :             *cmdDatContReg = DATA_ENABLE;
; 633  :                         *blkLength = 8;

  00114	e3a01008	 mov       r1, #8

; 634  :             *noBlocks = 1;
; 635  :                         break;

  00118	ea000000	 b         |$L36877|
  0011c		 |$L36693|

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

  0011c	e3a01040	 mov       r1, #0x40
  00120		 |$L36877|

; 624  : #if (USE_SD)
; 625  :                 case    SD_STATUS:
; 626  :             *cmdDatContReg = DATA_ENABLE;

  00120	e3a00004	 mov       r0, #4
  00124		 |$L36876|
  00124	e1c400b0	 strh      r0, [r4]

; 628  :             *noBlocks = 1;

  00128	e3a00001	 mov       r0, #1
  0012c	e1c310b0	 strh      r1, [r3]
  00130	e1c200b0	 strh      r0, [r2]
  00134		 |$L36687|

; 671  :             break;
; 672  : 
; 673  :     } 
; 674  : }

  00134	e8bd8010	 ldmia     sp!, {r4, pc}
  00138		 |$M36884|

			 ENDP  ; |setupMMcHostDataRegister|

	END

⌨️ 快捷键说明

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