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

📄 mmcdrv.cod

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

  00000		 |send_data| PROC

; 224  : {

  00000		 |$M36796|

; 225  :     
; 226  :         return (MMCTransmit((UCHAR *)pc->user_address, dLength, noBlocks, xferMode));

  00000	e5900004	 ldr       r0, [r0, #4]
  00004	ea000000	 b         MMCTransmit
  00008		 |$M36797|

			 ENDP  ; |send_data|

	EXPORT	|MMCReceivedResponse|
	IMPORT	|getMMCResponseInfo|

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

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

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

  00000		 |MMCReceivedResponse| PROC

; 246  : {

  00000	e52de004	 str       lr, [sp, #-4]!
  00004		 |$M36806|
  00004	e1a03000	 mov       r3, r0
  00008	e1a02001	 mov       r2, r1

; 247  :     UINT08  *respBuff;
; 248  :     UINT16  respLength;
; 249  : 
; 250  : 
; 251  :     if ( Resp == R0 )

  0000c	e3520000	 cmp       r2, #0

; 252  :         return (MMC_NO_ERROR);

  00010	03a00000	 moveq     r0, #0

; 264  : }

  00014	08bd8000	 ldmeqia   sp!, {pc}

; 253  : 
; 254  :     respLength = BYTE_LENGTH;               

  00018	e3a01006	 mov       r1, #6

; 255  : 	if ( Resp == R2 ) {

  0001c	e3520002	 cmp       r2, #2

; 256  : 		respLength = CID_BYTE_LENGTH -1;

  00020	03a01010	 moveq     r1, #0x10

; 261  : 
; 262  :     
; 263  :     return (getMMCResponseInfo(respBuff, respLength, (UINT16)Resp));

  00024	e1a00802	 mov       r0, r2, lsl #16
  00028	e1a02820	 mov       r2, r0, lsr #16

; 257  : 		

; 258  : 	}
; 259  : 
; 260  :     respBuff = (UINT08 *)pc->LastResponse;

  0002c	e2830028	 add       r0, r3, #0x28

; 261  : 
; 262  :     
; 263  :     return (getMMCResponseInfo(respBuff, respLength, (UINT16)Resp));

  00030	e8bd4000	 ldmia     sp!, {lr}
  00034	ea000000	 b         getMMCResponseInfo
  00038		 |$M36807|

			 ENDP  ; |MMCReceivedResponse|

	EXPORT	|MMCAnalysisResponse|

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

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

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

  00000		 |MMCAnalysisResponse| PROC

; 285  : {

  00000	e92d40f0	 stmdb     sp!, {r4 - r7, lr}
  00004		 |$M36817|
  00004	e1a07000	 mov       r7, r0

; 286  :     UINT32  statusInfo;
; 287  :         UINT08  *respBuff;
; 288  :         UINT16  ij, tt;
; 289  : 
; 290  :     respBuff = (UINT08 *)pc->LastResponse;

  00008	e2876028	 add       r6, r7, #0x28

; 291  :         if (respType == R6)

  0000c	e3510006	 cmp       r1, #6
  00010	1a00001e	 bne       |$L36596|

; 292  :         {
; 293  :                 ij = (UINT16)respBuff[1];
; 294  :                 ij <<= 8;
; 295  :                 ij |= (UINT16)respBuff[2];
; 296  :                 pc->LastResponse[4] = ij;

  00014	e5d60002	 ldrb      r0, [r6, #2]
  00018	e5d61001	 ldrb      r1, [r6, #1]

; 297  : #if (LITTLE_ENDIAN)
; 298  :                 
; 299  :                 pc->LastResponse[0] &= 0x00FF;
; 300  : 
; 301  :                  
; 302  :                 ij = (pc->LastResponse[1] & 0xC000);
; 303  :                  
; 304  :                 tt = (pc->LastResponse[1] & 0x0800) << 2;
; 305  :                 ij |= tt;
; 306  :                 
; 307  :                 pc->LastResponse[1] = ij;
; 308  : 
; 309  :                 ij = pc->LastResponse[2] & 0x001F;

  0001c	e1d752bc	 ldrh      r5, [r7, #0x2C]
  00020	e1801401	 orr       r1, r0, r1, lsl #8
  00024	e1d742ba	 ldrh      r4, [r7, #0x2A]
  00028	e1a02801	 mov       r2, r1, lsl #16
  0002c	e1d712b8	 ldrh      r1, [r7, #0x28]
  00030	e1a00822	 mov       r0, r2, lsr #16
  00034	e1c703b0	 strh      r0, [r7, #0x30]
  00038	e1a00801	 mov       r0, r1, lsl #16
  0003c	e1a02820	 mov       r2, r0, lsr #16
  00040	e20210ff	 and       r1, r2, #0xFF

; 310  :                  
; 311  :                 pc->LastResponse[1] |= (ij << 8);

  00044	e1a00805	 mov       r0, r5, lsl #16
  00048	e1c712b8	 strh      r1, [r7, #0x28]
  0004c	e1a01820	 mov       r1, r0, lsr #16
  00050	e1a00804	 mov       r0, r4, lsl #16
  00054	e201301f	 and       r3, r1, #0x1F
  00058	e1a01820	 mov       r1, r0, lsr #16
  0005c	e1a00804	 mov       r0, r4, lsl #16
  00060	e2012b02	 and       r2, r1, #2, 22
  00064	e1a01820	 mov       r1, r0, lsr #16
  00068	e1823303	 orr       r3, r2, r3, lsl #6
  0006c	e2012903	 and       r2, r1, #3, 18
  00070	e1820103	 orr       r0, r2, r3, lsl #2
  00074	e1a01800	 mov       r1, r0, lsl #16
  00078	e1a00805	 mov       r0, r5, lsl #16
  0007c	e1a02821	 mov       r2, r1, lsr #16
  00080	e1a01820	 mov       r1, r0, lsr #16
  00084	e1c722ba	 strh      r2, [r7, #0x2A]

; 312  : 
; 313  :                 ij = pc->LastResponse[2] >> 8;

  00088	e1a02421	 mov       r2, r1, lsr #8

; 314  :                  
; 315  :                 pc->LastResponse[2] = ij;

  0008c	e1c722bc	 strh      r2, [r7, #0x2C]
  00090		 |$L36596|

; 316  : #else
; 317  :                 
; 318  :                 pc->LastResponse[0] &= 0xFF00;
; 319  : 
; 320  :                  
; 321  :                 ij = pc->LastResponse[1] & 0x00C0;
; 322  :                  
; 323  :                 tt = (pc->LastResponse[1] & 0x0008) << 2;
; 324  :                 ij |= tt;
; 325  :                 
; 326  :                 pc->LastResponse[1] = ij;
; 327  : 
; 328  :                  
; 329  :                 ij = (pc->LastResponse[2] >> 8) & 0x1F;
; 330  :                  
; 331  :                 pc->LastResponse[1] |= ij;
; 332  : 
; 333  :                 ij = pc->LastResponse[2] & 0x00FF;
; 334  :                  
; 335  :                 pc->LastResponse[2] = (ij << 8);
; 336  : #endif
; 337  :         }
; 338  : 
; 339  :     
; 340  :     statusInfo = (UINT32)(respBuff[1] & 0xFF);
; 341  :     statusInfo <<= 8;
; 342  :     statusInfo |= (UINT32)(respBuff[2] & 0xFF);
; 343  :     statusInfo <<= 8;
; 344  :     statusInfo |= (UINT32)(respBuff[3] & 0xE0);
; 345  :     statusInfo <<= 8;

  00090	e5d61001	 ldrb      r1, [r6, #1]
  00094	e5d60002	 ldrb      r0, [r6, #2]

; 414  : #endif
; 415  : 
; 416  :     return MMC_CARD_IS_NOT_RESPONDING;

  00098	e5d63003	 ldrb      r3, [r6, #3]
  0009c	e1802401	 orr       r2, r0, r1, lsl #8
  000a0	e20310e0	 and       r1, r3, #0xE0
  000a4	e1810402	 orr       r0, r1, r2, lsl #8
  000a8	e203101f	 and       r1, r3, #0x1F
  000ac	e1c712b2	 strh      r1, [r7, #0x22]
  000b0	e1b04400	 movs      r4, r0, lsl #8
  000b4	e1d732b2	 ldrh      r3, [r7, #0x22]
  000b8	e5874038	 str       r4, [r7, #0x38]
  000bc	e1a00803	 mov       r0, r3, lsl #16
  000c0	e1a01820	 mov       r1, r0, lsr #16
  000c4	e1a00803	 mov       r0, r3, lsl #16
  000c8	e2012001	 and       r2, r1, #1
  000cc	e1a01820	 mov       r1, r0, lsr #16
  000d0	e1c722b4	 strh      r2, [r7, #0x24]
  000d4	e1a020a1	 mov       r2, r1, lsr #1
  000d8	e1c722b2	 strh      r2, [r7, #0x22]
  000dc	03a00000	 moveq     r0, #0

; 417  : }

  000e0	08bd80f0	 ldmeqia   sp!, {r4 - r7, pc}

; 346  : 
; 347  :     
; 348  :     pc->currentState = (UINT16)(respBuff[3] & 0x1F);
; 349  :     pc->mmcStatus = statusInfo;
; 350  :     pc->mmcRdyState = pc->currentState & 01;
; 351  :     pc->currentState >>= 1;
; 352  : 
; 353  :     
; 354  :     if (statusInfo == 0)
; 355  :         return MMC_NO_ERROR;
; 356  : 
; 357  :     if (statusInfo & OUT_OF_RANGE_ERROR)

  000e4	e3140102	 tst       r4, #2, 2

; 358  :         return  MMC_OUT_OF_RANGE;

  000e8	13a000e4	 movne     r0, #0xE4

; 417  : }

  000ec	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 359  : 
; 360  :     if (statusInfo & ADDRESS_ERROR)

  000f0	e3140101	 tst       r4, #1, 2

; 361  :         return  MMC_ADDRESS_ERROR;

  000f4	13a000d5	 movne     r0, #0xD5

; 417  : }

  000f8	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 362  : 
; 363  :     if (statusInfo & BLK_LENGTH_ERROR)

  000fc	e3140202	 tst       r4, #2, 4

; 364  :         return  MMC_DATA_LENGTH_ERROR;

  00100	13a000e2	 movne     r0, #0xE2

; 417  : }

  00104	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 365  : 
; 366  :     if (statusInfo & ERASE_SEQ_ERROR)

  00108	e3140201	 tst       r4, #1, 4

; 367  :         return  MMC_ERASE_SEQ_ERROR;

  0010c	13a000da	 movne     r0, #0xDA

; 417  : }

  00110	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 368  : 
; 369  :     if (statusInfo & ERASE_PARAM)

  00114	e3140302	 tst       r4, #2, 6

; 370  :         return  MMC_ERASE_PARAM;

  00118	13a000d1	 movne     r0, #0xD1

; 417  : }

  0011c	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 371  : 
; 372  :     if (statusInfo & WP_VIOLATION)

  00120	e3140301	 tst       r4, #1, 6

; 373  :         return  MMC_WP_VIOLATION;

  00124	13a000d2	 movne     r0, #0xD2

; 417  : }

  00128	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 374  : 
; 375  :     if (statusInfo & CMD_CRC_ERROR)

  0012c	e3140502	 tst       r4, #2, 10

; 376  :         return MMC_CMD_CRC_ERROR;

  00130	13a000ca	 movne     r0, #0xCA

; 417  : }

  00134	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 377  : 
; 378  :     if (statusInfo & COMUNC_ILLEG_COM)

  00138	e3140501	 tst       r4, #1, 10

; 379  :         return  MMC_COMUNC_ILLEG_COM;

  0013c	13a000d0	 movne     r0, #0xD0

; 417  : }

  00140	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 380  : 
; 381  :     if (statusInfo & CARD_ECC_FAILED)

  00144	e3140602	 tst       r4, #2, 12

; 382  :         return  MMC_CARD_ECC_FAILED;

  00148	13a000e5	 movne     r0, #0xE5

; 417  : }

  0014c	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 383  : 
; 384  :     if (statusInfo & CONTROLLER_ERROR)

  00150	e3140601	 tst       r4, #1, 12

; 385  :         return  MMC_INTERFACE_ERROR;

  00154	13a000d7	 movne     r0, #0xD7

; 417  : }

  00158	18bd80f0	 ldmneia   sp!, {r4 - r7, pc}

; 386  : 
; 387  :     if (statusInfo & EERROR)

  0015c	e3140702	 tst       r4, #2, 14

; 388  :         return  MMC_ERROR;

  00160	13a000d3	 movne     r0, #0xD3

; 417  : }

⌨️ 快捷键说明

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