📄 crc.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.20.9615
TTL c:\wince420\platform\sdklh7a404\drivers\sdmmc\driver\.\crc.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |calculateDataCRC16|
; File c:\wince420\platform\sdklh7a404\drivers\sdmmc\driver\crc.c
00000 AREA |.text| { |calculateDataCRC16| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$calculateDataCRC16|, PDATA, SELECTION=5, ASSOC=|.text| { |calculateDataCRC16| } ; comdat associative
|$T36236| DCD |calculateDataCRC16|
DCD 0x40002601
; Function compile flags: /Ogsy
00000 AREA |.text| { |calculateDataCRC16| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |calculateDataCRC16| PROC
; 81 : {
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 |$M36234|
00004 e1a03000 mov r3, r0
; 82 : UCHAR *ppData;
; 83 : UINT32 rreg, rtemp;
; 84 : UINT16 ibyte, ibit;
; 85 :
; 86 : rreg = 0L;
; 87 : ppData = (UCHAR *)pData;
; 88 :
; 89 : for (ibyte = 0; ibyte < data_length; ibyte++)
00008 e1a00801 mov r0, r1, lsl #16
0000c e3a08000 mov r8, #0
00010 e1a06820 mov r6, r0, lsr #16
00014 e1a07008 mov r7, r8
00018 e3560000 cmp r6, #0
0001c 9a000019 bls |$L36144|
00020 e1a05008 mov r5, r8
00024 |$L36142|
; 90 : {
; 91 : rtemp = ((UINT32)ppData[ibyte]) << (D_CRC_LEN - 7);
00024 e7d50003 ldrb r0, [r5, +r3]
; 92 : for (ibit = 0; ibit < 8; ibit++)
00028 e1a02008 mov r2, r8
0002c e1a04480 mov r4, r0, lsl #9
00030 |$L36146|
; 93 : {
; 94 : rreg <<= 1;
00030 e1a01087 mov r1, r7, lsl #1
; 95 : rreg ^= ( ((rtemp ^ rreg) & D_CRC_HIGHBIT) ? D_CRC_POLYN : 0);
00034 e0240001 eor r0, r4, r1
00038 e3100801 tst r0, #1, 16
0003c 13a00a11 movne r0, #0x11, 20
00040 13800021 orrne r0, r0, #0x21
00044 01a00008 moveq r0, r8
00048 e0207001 eor r7, r0, r1
0004c e2820001 add r0, r2, #1
00050 e1a01800 mov r1, r0, lsl #16
00054 e1a02821 mov r2, r1, lsr #16
00058 e1a00802 mov r0, r2, lsl #16
0005c e1a02820 mov r2, r0, lsr #16
; 96 : rtemp <<= 1;
00060 e1a04084 mov r4, r4, lsl #1
00064 e3520008 cmp r2, #8
00068 3afffff0 bcc |$L36146|
0006c e2850001 add r0, r5, #1
00070 e1a01800 mov r1, r0, lsl #16
00074 e1a02821 mov r2, r1, lsr #16
00078 e1a00802 mov r0, r2, lsl #16
0007c e1a05820 mov r5, r0, lsr #16
00080 e1550006 cmp r5, r6
00084 3affffe6 bcc |$L36142|
00088 |$L36144|
; 97 : }
; 98 : }
; 99 :
; 100 : return ((UINT16)(rreg & D_CRC_BITS));
00088 e1a00807 mov r0, r7, lsl #16
0008c e1a00820 mov r0, r0, lsr #16
; 101 : }
00090 e8bd41f0 ldmia sp!, {r4 - r8, lr}
00094 e12fff1e bx lr
00098 |$M36235|
ENDP ; |calculateDataCRC16|
EXPORT |calculateCRC7|
00000 AREA |.text| { |calculateCRC7| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$calculateCRC7|, PDATA, SELECTION=5, ASSOC=|.text| { |calculateCRC7| } ; comdat associative
|$T36262| DCD |calculateCRC7|
DCD 0x40003901
; Function compile flags: /Ogsy
00000 AREA |.text| { |calculateCRC7| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |calculateCRC7| PROC
; 105 : {
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 |$M36260|
00004 e1a05000 mov r5, r0
00008 e1a04001 mov r4, r1
; 106 : UINT16 ibyte, ibit;
; 107 : UINT16 rreg, crc_byte, dtmp;
; 108 :
; 109 : if ( cmdORresp )
; 110 : crc_byte = CRC_POLYN;
; 111 : else
; 112 : crc_byte = 0x09;
; 113 :
; 114 : rreg = 0;
; 115 : for (ibyte = offset; ibyte < (dLength - 1); ibyte++)
0000c e1a00802 mov r0, r2, lsl #16
00010 e3530000 cmp r3, #0
00014 e1a01820 mov r1, r0, lsr #16
00018 e3a0a000 mov r10, #0
0001c e3a07089 mov r7, #0x89
00020 03a07009 moveq r7, #9
00024 e1a0300a mov r3, r10
00028 e2419001 sub r9, r1, #1
0002c e1a00804 mov r0, r4, lsl #16
00030 ea000023 b |$L36259|
00034 |$L36166|
; 116 : {
; 117 : dtmp = (UINT16)(dBuff[ibyte]);
00034 e7d84005 ldrb r4, [r8, +r5]
; 118 : for (ibit = 0; ibit < 8; ibit++)
00038 e1a0600a mov r6, r10
0003c |$L36170|
; 119 : {
; 120 : rreg <<= 1;
0003c e1a00803 mov r0, r3, lsl #16
00040 e1a01820 mov r1, r0, lsr #16
00044 e1a02081 mov r2, r1, lsl #1
00048 e1a00802 mov r0, r2, lsl #16
; 121 : dtmp &= 0xFF;
0004c e1a01804 mov r1, r4, lsl #16
00050 e1a03820 mov r3, r0, lsr #16
00054 e1a00821 mov r0, r1, lsr #16
00058 e20020ff and r2, r0, #0xFF
; 122 : rreg ^= (((dtmp ^ rreg) & CRC_HIGHBIT) ? crc_byte : 0);
0005c e1a01802 mov r1, r2, lsl #16
00060 e1a00803 mov r0, r3, lsl #16
00064 e1a04821 mov r4, r1, lsr #16
00068 e1a02820 mov r2, r0, lsr #16
0006c e0241002 eor r1, r4, r2
00070 e3110080 tst r1, #0x80
00074 11a00807 movne r0, r7, lsl #16
00078 11a01820 movne r1, r0, lsr #16
0007c 01a0100a moveq r1, r10
00080 e0220001 eor r0, r2, r1
00084 e1a01800 mov r1, r0, lsl #16
; 123 : dtmp <<= 1;
00088 e1a00084 mov r0, r4, lsl #1
0008c e1a03821 mov r3, r1, lsr #16
00090 e1a01800 mov r1, r0, lsl #16
00094 e2860001 add r0, r6, #1
00098 e1a04821 mov r4, r1, lsr #16
0009c e1a01800 mov r1, r0, lsl #16
000a0 e1a02821 mov r2, r1, lsr #16
000a4 e1a00802 mov r0, r2, lsl #16
000a8 e1a06820 mov r6, r0, lsr #16
000ac e3560008 cmp r6, #8
000b0 3affffe1 bcc |$L36170|
000b4 e2880001 add r0, r8, #1
000b8 e1a01800 mov r1, r0, lsl #16
000bc e1a02821 mov r2, r1, lsr #16
000c0 e1a00802 mov r0, r2, lsl #16
000c4 |$L36259|
000c4 e1a08820 mov r8, r0, lsr #16
000c8 e1580009 cmp r8, r9
000cc baffffd8 blt |$L36166|
; 124 : }
; 125 : }
; 126 :
; 127 : return (rreg&0xFF);
000d0 e1a00803 mov r0, r3, lsl #16
000d4 e1a01820 mov r1, r0, lsr #16
000d8 e20100ff and r0, r1, #0xFF
; 128 : }
000dc e8bd47f0 ldmia sp!, {r4 - r10, lr}
000e0 e12fff1e bx lr
000e4 |$M36261|
ENDP ; |calculateCRC7|
EXPORT |checkResponseCRC|
00000 AREA |.text| { |checkResponseCRC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$checkResponseCRC|, PDATA, SELECTION=5, ASSOC=|.text| { |checkResponseCRC| } ; comdat associative
|$T36273| DCD |checkResponseCRC|
DCD 0x40001501
; Function compile flags: /Ogsy
00000 AREA |.text| { |checkResponseCRC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |checkResponseCRC| PROC
; 156 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M36271|
00004 e1a05000 mov r5, r0
00008 e1a04002 mov r4, r2
; 157 : UINT16 crc_byte;
; 158 :
; 159 : crc_byte = calculateCRC7(response, offset, response_length, YES);
0000c e3a03001 mov r3, #1
00010 eb000000 bl calculateCRC7
; 160 : crc_byte = (((crc_byte & CRC_BITS) << 1) | 0x01);
00014 e1a03800 mov r3, r0, lsl #16
00018 e1a00823 mov r0, r3, lsr #16
0001c e200107f and r1, r0, #0x7F
00020 e1a02081 mov r2, r1, lsl #1
00024 e3820001 orr r0, r2, #1
00028 e1a01800 mov r1, r0, lsl #16
; 161 :
; 162 : if ( crc_byte != response[(response_length - 1)])
0002c e1a00804 mov r0, r4, lsl #16
00030 e1a03821 mov r3, r1, lsr #16
00034 e0851820 add r1, r5, r0, lsr #16
00038 e5512001 ldrb r2, [r1, #-1]
0003c e1a00803 mov r0, r3, lsl #16
00040 e1520820 cmp r2, r0, lsr #16
; 163 : return WRONG_CMD_RESPONSE;
00044 e3a00004 mov r0, #4
; 164 :
; 165 : return (MMC_NO_ERROR);
00048 03a00000 moveq r0, #0
; 166 : }
0004c e8bd4030 ldmia sp!, {r4, r5, lr}
00050 e12fff1e bx lr
00054 |$M36272|
ENDP ; |checkResponseCRC|
EXPORT |appendCmdCRC|
00000 AREA |.text| { |appendCmdCRC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$appendCmdCRC|, PDATA, SELECTION=5, ASSOC=|.text| { |appendCmdCRC| } ; comdat associative
|$T36282| DCD |appendCmdCRC|
DCD 0x40000d01
; Function compile flags: /Ogsy
00000 AREA |.text| { |appendCmdCRC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |appendCmdCRC| PROC
; 189 : {
00000 e52de004 str lr, [sp, #-4]!
00004 |$M36280|
; 190 : UINT16 rreg;
; 191 :
; 192 : rreg = calculateCRC7(cmd_bytes, 0, Length, NO);
00004 e1a02001 mov r2, r1
00008 e3a03000 mov r3, #0
0000c e3a01000 mov r1, #0
00010 eb000000 bl calculateCRC7
; 193 : return (((rreg << 1) | 0x01));
00014 e1a03800 mov r3, r0, lsl #16
00018 e1a00823 mov r0, r3, lsr #16
0001c e1a01080 mov r1, r0, lsl #1
00020 e3812001 orr r2, r1, #1
00024 e1a00802 mov r0, r2, lsl #16
00028 e1a00820 mov r0, r0, lsr #16
; 194 :
; 195 : }
0002c e8bd4000 ldmia sp!, {lr}
00030 e12fff1e bx lr
00034 |$M36281|
ENDP ; |appendCmdCRC|
EXPORT |calculateCmdCRC|
00000 AREA |.text| { |calculateCmdCRC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$calculateCmdCRC|, PDATA, SELECTION=5, ASSOC=|.text| { |calculateCmdCRC| } ; comdat associative
|$T36294| DCD |calculateCmdCRC|
DCD 0x40001802
; Function compile flags: /Ogsy
00000 AREA |.text| { |calculateCmdCRC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |calculateCmdCRC| PROC
; 221 : {
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd008 sub sp, sp, #8
00008 |$M36292|
00008 e1a03000 mov r3, r0
; 222 : UINT16 i;
; 223 : UCHAR cmd_bytes[CMD_BYTE_LENGTH];
; 224 :
; 225 :
; 226 : cmd_bytes[0] = (UCHAR)(cmd_index);
0000c e5cd1000 strb r1, [sp]
00010 e20100ff and r0, r1, #0xFF
; 227 :
; 228 :
; 229 : for (i = 4; i > 0; i--)
00014 e3a01004 mov r1, #4
00018 |$L36196|
; 230 : {
; 231 : cmd_bytes[i] = (UCHAR)(args & 0xFFL);
00018 e20300ff and r0, r3, #0xFF
0001c e28d2000 add r2, sp, #0
00020 e7c10002 strb r0, [r1, +r2]
00024 e2810cff add r0, r1, #0xFF, 24
00028 e28010ff add r1, r0, #0xFF
0002c e1a02801 mov r2, r1, lsl #16
00030 e1a00822 mov r0, r2, lsr #16
00034 e1a01800 mov r1, r0, lsl #16
00038 e1a01821 mov r1, r1, lsr #16
; 232 : args >>= 8;
0003c e1a03423 mov r3, r3, lsr #8
00040 e3510000 cmp r1, #0
00044 8afffff3 bhi |$L36196|
; 233 : }
; 234 :
; 235 : #if (!USE_SET_FEATURES && (USE_SPI || USE_SPI_EMULATION))
; 236 : if ( cmd_index == 0x40 )
; 237 : i = 0x95;
; 238 : else
; 239 : i = 0xFF;
; 240 : #else
; 241 : i = appendCmdCRC(cmd_bytes, CMD_BYTE_LENGTH);
00048 e3a01006 mov r1, #6
0004c e28d0000 add r0, sp, #0
00050 eb000000 bl appendCmdCRC
; 242 : #endif
; 243 :
; 244 : return i;
; 245 : }
00054 e28dd008 add sp, sp, #8
00058 e8bd4000 ldmia sp!, {lr}
0005c e12fff1e bx lr
00060 |$M36293|
ENDP ; |calculateCmdCRC|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -