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

📄 crc.cod

📁 ARM读写SD卡程序
💻 COD
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.20.9615 

	TTL	d:\wince420\platform\sdklh7a404\drivers\sdmmc\driver\.\crc.c
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "

	EXPORT	|calculateDataCRC16|
; File d:\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	0x40002501
; 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	e8bd81f0	 ldmia     sp!, {r4 - r8, pc}
  00094		 |$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	0x40003801
; 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	e8bd87f0	 ldmia     sp!, {r4 - r10, pc}
  000e0		 |$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	0x40001401
; 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	e8bd8030	 ldmia     sp!, {r4, r5, pc}
  00050		 |$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	0x40000c01
; 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	e8bd8000	 ldmia     sp!, {pc}
  00030		 |$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	0x40001702
; 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	e8bd8000	 ldmia     sp!, {pc}
  0005c		 |$M36293|

			 ENDP  ; |calculateCmdCRC|

	END

⌨️ 快捷键说明

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