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

📄 mmcdrv.cod

📁 ARM读写SD卡程序
💻 COD
📖 第 1 页 / 共 4 页
字号:
  00184	112fff1e	 bxne      lr

; 388  : 
; 389  :     if (statusInfo & EERROR)

  00188	e3140702	 tst       r4, #2, 14

; 390  :         return  MMC_ERROR;

  0018c	13a000d3	 movne     r0, #0xD3

; 419  : }

  00190	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  00194	112fff1e	 bxne      lr

; 391  : 
; 392  :     if (statusInfo & UNDERRUN)

  00198	e3140701	 tst       r4, #1, 14

; 393  :         return  MMC_UNDERRUN;

  0019c	13a000de	 movne     r0, #0xDE

; 419  : }

  001a0	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  001a4	112fff1e	 bxne      lr

; 394  : 
; 395  :     if (statusInfo & OVERRUN)

  001a8	e3140802	 tst       r4, #2, 16

; 396  :         return  MMC_OVERRUN;

  001ac	13a000dd	 movne     r0, #0xDD

; 419  : }

  001b0	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  001b4	112fff1e	 bxne      lr

; 397  : 
; 398  :     if (statusInfo & CIDCSD_OVERWRITE)

  001b8	e3140801	 tst       r4, #1, 16

; 399  :         return  MMC_CIDCSD_OVERWRITE;

  001bc	13a000df	 movne     r0, #0xDF

; 419  : }

  001c0	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  001c4	112fff1e	 bxne      lr

; 400  : 
; 401  :     if (statusInfo & WP_ERASE_SKIP)

  001c8	e3140902	 tst       r4, #2, 18

; 402  :         return  MMC_WP_ERASE_SKIP;

  001cc	13a000d4	 movne     r0, #0xD4

; 419  : }

  001d0	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  001d4	112fff1e	 bxne      lr

; 403  : 
; 404  :     if (statusInfo & CARD_ECC_DISABLED)

  001d8	e3140901	 tst       r4, #1, 18

; 405  :         return  MMC_CARD_ECC_DISABLED;

  001dc	13a000e0	 movne     r0, #0xE0

; 419  : }

  001e0	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  001e4	112fff1e	 bxne      lr

; 406  : 
; 407  :     if (statusInfo & ERASE_RESET)

  001e8	e3140a02	 tst       r4, #2, 20

; 408  :         return  MMC_ERASE_RESET;

  001ec	13a000db	 movne     r0, #0xDB

; 419  : }

  001f0	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  001f4	112fff1e	 bxne      lr

; 409  : 
; 410  : #if (USE_SD)
; 411  :         if (statusInfo & CARD_IS_LOCKED)

  001f8	e3140402	 tst       r4, #2, 8

; 412  :                 return  MMC_CARD_IS_LOCKED;

  001fc	13a000e6	 movne     r0, #0xE6

; 419  : }

  00200	18bd40f0	 ldmneia   sp!, {r4 - r7, lr}
  00204	112fff1e	 bxne      lr

; 413  : 
; 414  :         if (statusInfo & LOCK_UNLOCK_FAILED)

  00208	e3140401	 tst       r4, #1, 8

; 415  :                 return  MMC_LOCK_UNLOCK_FAILED;

  0020c	e3a000e7	 mov       r0, #0xE7

; 416  : #endif
; 417  : 
; 418  :     return MMC_CARD_IS_NOT_RESPONDING;

  00210	03a000c9	 moveq     r0, #0xC9

; 419  : }

  00214	e8bd40f0	 ldmia     sp!, {r4 - r7, lr}
  00218	e12fff1e	 bx        lr
  0021c		 |$M36818|

			 ENDP  ; |MMCAnalysisResponse|

	EXPORT	|mmcCommandAndResponse|
	IMPORT	|MMCPrepareAndSetup|

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

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

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

  00000		 |mmcCommandAndResponse| PROC

; 443  : {

  00000	e92d43f0	 stmdb     sp!, {r4 - r9, lr}
  00004		 |$M36835|
  00004	e1a08000	 mov       r8, r0
  00008	e1a06001	 mov       r6, r1
  0000c	e1a05002	 mov       r5, r2
  00010	e1a04003	 mov       r4, r3

; 444  :     MMC_CC  resErr;
; 445  :     INT16   i;
; 446  : 
; 447  :         
; 448  :         if ( Cmd == STOP_TRANSMISSION)

  00014	e1a00805	 mov       r0, r5, lsl #16
  00018	e1a01820	 mov       r1, r0, lsr #16
  0001c	e3a09000	 mov       r9, #0
  00020	e351000c	 cmp       r1, #0xC
  00024	1a00000e	 bne       |$L36640|

; 449  :         {
; 450  :                 if ( (pc->mode & READ_MODE) == READ_MODE )

  00028	e1d802b0	 ldrh      r0, [r8, #0x20]
  0002c	e1a01800	 mov       r1, r0, lsl #16
  00030	e1a02821	 mov       r2, r1, lsr #16
  00034	e2020080	 and       r0, r2, #0x80
  00038	e3500080	 cmp       r0, #0x80

; 451  :                         multipleRdWr = DATA;      

  0003c	059f00dc	 ldreq     r0, [pc, #0xDC]
  00040	03a01005	 moveq     r1, #5
  00044	01c010b0	 streqh    r1, [r0]
  00048	0a000005	 beq       |$L36640|

; 452  :                 else if ( (pc->mode & WRITE_MODE) == WRITE_MODE )

  0004c	e2020c01	 and       r0, r2, #1, 24
  00050	e3500c01	 cmp       r0, #1, 24

; 453  :                         multipleRdWr = RCV;                      

  00054	e59f00c4	 ldr       r0, [pc, #0xC4]
  00058	03a01006	 moveq     r1, #6
  0005c	01c010b0	 streqh    r1, [r0]

; 454  :                 else
; 455  :                         multipleRdWr = NO;

  00060	11c090b0	 strneh    r9, [r0]
  00064		 |$L36640|

; 456  :         }
; 457  : 
; 458  :     
; 459  :         if ( Resp == R6 )

  00064	e59d701c	 ldr       r7, [sp, #0x1C]

; 460  :         {
; 461  :                 if ( !MMCPrepareAndSetup(Arg, Cmd, noBlocks, R1) )

  00068	e1a01005	 mov       r1, r5
  0006c	e1a02004	 mov       r2, r4
  00070	e3570006	 cmp       r7, #6
  00074	1a000006	 bne       |$L36641|
  00078	e3a03001	 mov       r3, #1
  0007c	e1a00006	 mov       r0, r6
  00080	eb000000	 bl        MMCPrepareAndSetup
  00084	e3500000	 cmp       r0, #0
  00088	1a00000a	 bne       |$L36646|

; 467  :                         return MMC_INTERFACE_ERROR;

  0008c	e3a090d7	 mov       r9, #0xD7
  00090	ea00001f	 b         |$L36633|
  00094		 |$L36641|

; 463  :         }
; 464  :         else
; 465  :         {
; 466  :                 if ( !MMCPrepareAndSetup(Arg, Cmd, noBlocks, (UINT16)Resp) )

  00094	e1a00807	 mov       r0, r7, lsl #16
  00098	e1a03820	 mov       r3, r0, lsr #16
  0009c	e1a00006	 mov       r0, r6
  000a0	eb000000	 bl        MMCPrepareAndSetup
  000a4	e3500000	 cmp       r0, #0

; 467  :                         return MMC_INTERFACE_ERROR;

  000a8	03a090d7	 moveq     r9, #0xD7
  000ac	0a000018	 beq       |$L36633|

; 468  :         }
; 469  :     if ( !Resp )                    

  000b0	e3570000	 cmp       r7, #0

; 470  :         return MMC_NO_ERROR;

  000b4	0a000016	 beq       |$L36633|
  000b8		 |$L36646|

; 471  : 
; 472  :     for (i = 0; i < (CID_BYTE_LENGTH>>1); i++)

  000b8	e1a01009	 mov       r1, r9
  000bc		 |$L36647|

; 473  :         pc->LastResponse[i] = 0;

  000bc	e0880081	 add       r0, r8, r1, lsl #1
  000c0	e2811001	 add       r1, r1, #1
  000c4	e1c092b8	 strh      r9, [r0, #0x28]
  000c8	e1a00801	 mov       r0, r1, lsl #16
  000cc	e1a02840	 mov       r2, r0, asr #16
  000d0	e1a01802	 mov       r1, r2, lsl #16
  000d4	e1a01841	 mov       r1, r1, asr #16
  000d8	e3510008	 cmp       r1, #8
  000dc	bafffff6	 blt       |$L36647|

; 474  : 
; 475  :     
; 476  :     resErr = MMCReceivedResponse( pc, Resp );

  000e0	e1a01007	 mov       r1, r7
  000e4	e1a00008	 mov       r0, r8
  000e8	eb000000	 bl        MMCReceivedResponse
  000ec	e1b09000	 movs      r9, r0

; 477  : 
; 478  :     if ( resErr == MMC_NO_ERROR)

  000f0	1a000007	 bne       |$L36633|

; 479  :     {
; 480  :             if ( (Resp == R1) || (Resp == R6) )

  000f4	e3570001	 cmp       r7, #1
  000f8	0a000001	 beq       |$L36652|
  000fc	e3570006	 cmp       r7, #6
  00100	1a000003	 bne       |$L36633|
  00104		 |$L36652|

; 481  :                     resErr = MMCAnalysisResponse(pc, Resp);

  00104	e1a01007	 mov       r1, r7
  00108	e1a00008	 mov       r0, r8
  0010c	eb000000	 bl        MMCAnalysisResponse
  00110	e1a09000	 mov       r9, r0
  00114		 |$L36633|

; 462  :                         return MMC_INTERFACE_ERROR;

  00114	e1a00009	 mov       r0, r9

; 482  :     }
; 483  : 
; 484  :     return resErr;
; 485  : }

  00118	e8bd43f0	 ldmia     sp!, {r4 - r9, lr}
  0011c	e12fff1e	 bx        lr
  00120		 |$L36839|
  00120	00000000	 DCD       |multipleRdWr|
  00124		 |$M36836|

			 ENDP  ; |mmcCommandAndResponse|

	EXPORT	|IsCardBusy|

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

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

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

  00000		 |IsCardBusy| PROC

; 507  : {

  00000	e52de004	 str       lr, [sp, #-4]!
  00004		 |$M36844|

; 508  :         
; 509  :         return (getDeviceStatus(driveno, 1));

  00004	e3a01001	 mov       r1, #1
  00008	eb000000	 bl        getDeviceStatus

; 510  : }

  0000c	e8bd4000	 ldmia     sp!, {lr}
  00010	e12fff1e	 bx        lr
  00014		 |$M36845|

			 ENDP  ; |IsCardBusy|

	EXPORT	|is_device_changed|

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

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

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

  00000		 |is_device_changed| PROC

; 531  : {

  00000	e52de004	 str       lr, [sp, #-4]!
  00004		 |$M36852|

; 532  :         return (getDeviceStatus(driveno, 0));

  00004	e3a01000	 mov       r1, #0
  00008	eb000000	 bl        getDeviceStatus

; 533  : }

  0000c	e8bd4000	 ldmia     sp!, {lr}
  00010	e12fff1e	 bx        lr
  00014		 |$M36853|

			 ENDP  ; |is_device_changed|

	IMPORT	|MMCSelectController|
	IMPORT	|mmcGetStatus|

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

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

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

  00000		 |getDeviceStatus| PROC

; 537  : {

  00000	e92d4070	 stmdb     sp!, {r4 - r6, lr}
  00004		 |$M36862|
  00004	e1a04000	 mov       r4, r0
  00008	e1a05001	 mov       r5, r1

; 538  :     PDEVICE_CONTROLLER pc;
; 539  :     UINT16  phys_drive;
; 540  : 
; 541  : #if (N_INTERFACES > 1)

⌨️ 快捷键说明

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