📄 mmcdrv.cod
字号:
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 + -