📄 sd.lst
字号:
*** CODE SEGMENT '?PR?sd_State?T?sd':
147: esint8 sd_State(hwInterface *iface)
00000000 B530 PUSH {R4-R5,LR}
00000002 1C05 MOV R5,R0 ; iface
00000004 ---- Variable 'iface' assigned to Register 'R5' ----
148: {
00000004 ; SCOPE-START
151: sd_Command(iface,13, 0, 0);
00000004 1C28 MOV R0,R5 ; iface
00000006 210D MOV R1,#0xD
00000008 2300 MOV R3,#0x0
0000000A 1C1A MOV R2,R3
0000000C F7FF BL sd_Command?T ; T=0x0001 (1)
0000000E FFF8 BL sd_Command?T ; T=0x0001 (2)
152: value=sd_Resp16b(iface);
00000010 1C28 MOV R0,R5 ; iface
00000012 F7FF BL sd_Resp16b?T ; T=0x0001 (1)
00000014 FFF5 BL sd_Resp16b?T ; T=0x0001 (2)
00000016 0404 LSL R4,R0,#0x10 ; sd_Resp16b?T
00000018 0C24 LSR R4,R4,#0x10
0000001A ---- Variable 'value' assigned to Register 'R4' ----
154: switch(value)
0000001A 1C20 MOV R0,R4 ; value
0000001C 2801 CMP R0,#0x1 ; value
0000001E D011 BEQ L_37 ; T=0x00000044
00000020 2802 CMP R0,#0x2 ; value
00000022 D013 BEQ L_38 ; T=0x0000004C
00000024 2804 CMP R0,#0x4 ; value
00000026 D015 BEQ L_39 ; T=0x00000054
00000028 2808 CMP R0,#0x8 ; value
0000002A D017 BEQ L_40 ; T=0x0000005C
0000002C 2810 CMP R0,#0x10 ; value
0000002E D019 BEQ L_41 ; T=0x00000064
00000030 2820 CMP R0,#0x20 ; value
00000032 D01B BEQ L_42 ; T=0x0000006C
00000034 2840 CMP R0,#0x40 ; value
00000036 D01D BEQ L_43 ; T=0x00000074
00000038 2880 CMP R0,#0x80 ; value
0000003A D01F BEQ L_44 ; T=0x0000007C
0000003C 2800 CMP R0,#0x0 ; value
0000003E D121 BNE L_36 ; T=0x00000084
156: case 0x000:
00000040 L_35:
157: return(1);
00000040 2001 MOV R0,#0x1
00000042 E037 B L_45 ; T=0x000000B4
159: case 0x0001:
00000044 L_37:
160: DBG((TXT("Card is Locked.\n")));
00000044 4800 LDR R0,=??S_9 ; ??S_9
00000046 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000048 FFDB BL lpc2000_debug_printf?T ; T=0x0001 (2)
161: break;
0000004A E032 B L_34 ; T=0x000000B2
162: case 0x0002:
0000004C L_38:
163: DBG((TXT("WP Erase Skip, Lock/Unlock Cmd Failed.\n")));
0000004C 4800 LDR R0,=??S_10 ; ??S_10
0000004E F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000050 FFD7 BL lpc2000_debug_printf?T ; T=0x0001 (2)
164: break;
00000052 E02E B L_34 ; T=0x000000B2
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 15
165: case 0x0004:
00000054 L_39:
166: DBG((TXT("General / Unknown error -- card broken?.\n")));
00000054 4800 LDR R0,=??S_11 ; ??S_11
00000056 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000058 FFD3 BL lpc2000_debug_printf?T ; T=0x0001 (2)
167: break;
0000005A E02A B L_34 ; T=0x000000B2
168: case 0x0008:
0000005C L_40:
169: DBG((TXT("Internal card controller error.\n")));
0000005C 4800 LDR R0,=??S_12 ; ??S_12
0000005E F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000060 FFCF BL lpc2000_debug_printf?T ; T=0x0001 (2)
170: break;
00000062 E026 B L_34 ; T=0x000000B2
171: case 0x0010:
00000064 L_41:
172: DBG((TXT("Card internal ECC was applied, but failed to correct the data.\n")));
00000064 4800 LDR R0,=??S_13 ; ??S_13
00000066 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000068 FFCB BL lpc2000_debug_printf?T ; T=0x0001 (2)
173: break;
0000006A E022 B L_34 ; T=0x000000B2
174: case 0x0020:
0000006C L_42:
175: DBG((TXT("Write protect violation.\n")));
0000006C 4800 LDR R0,=??S_14 ; ??S_14
0000006E F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000070 FFC7 BL lpc2000_debug_printf?T ; T=0x0001 (2)
176: break;
00000072 E01E B L_34 ; T=0x000000B2
177: case 0x0040:
00000074 L_43:
178: DBG((TXT("An invalid selection, sectors for erase.\n")));
00000074 4800 LDR R0,=??S_15 ; ??S_15
00000076 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000078 FFC3 BL lpc2000_debug_printf?T ; T=0x0001 (2)
179: break;
0000007A E01A B L_34 ; T=0x000000B2
180: case 0x0080:
0000007C L_44:
181: DBG((TXT("Out of Range, CSD_Overwrite.\n")));
0000007C 4800 LDR R0,=??S_16 ; ??S_16
0000007E F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000080 FFBF BL lpc2000_debug_printf?T ; T=0x0001 (2)
182: break;
00000082 E016 B L_34 ; T=0x000000B2
183: default:
00000084 L_36:
184: if(value>0x00FF)
00000084 1C20 MOV R0,R4 ; value
00000086 0400 LSL R0,R0,#0x10 ; value
00000088 1400 ASR R0,R0,#0x10
0000008A 28FF CMP R0,#0xFF
0000008C DD0B BLE L_46 ; T=0x000000A6
185: sd_Resp8bError(iface,(euint8) (value>>8));
0000008E 1C20 MOV R0,R4 ; value
00000090 0400 LSL R0,R0,#0x10 ; value
00000092 1400 ASR R0,R0,#0x10
00000094 1200 ASR R0,R0,#0x8
00000096 0600 LSL R0,R0,#0x18
00000098 0E00 LSR R0,R0,#0x18
0000009A 0601 LSL R1,R0,#0x18
0000009C 0E09 LSR R1,R1,#0x18
0000009E 1C28 MOV R0,R5 ; iface
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 16
000000A0 F7FF BL sd_Resp8bError?T ; T=0x0001 (1)
000000A2 FFAE BL sd_Resp8bError?T ; T=0x0001 (2)
000000A4 E005 B L_34 ; T=0x000000B2
000000A6 L_46:
187: DBG((TXT("Unknown error: 0x%x (see SanDisk docs p5-14).\n"),value));
000000A6 1C20 MOV R0,R4 ; value
000000A8 0401 LSL R1,R0,#0x10 ; value
000000AA 1409 ASR R1,R1,#0x10
000000AC 4800 LDR R0,=??S_17 ; ??S_17
000000AE F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
000000B0 FFA7 BL lpc2000_debug_printf?T ; T=0x0001 (2)
189: }
000000B2 L_34:
190: return(-1);
000000B2 4800 LDR R0,=0xFFFFFFFF
000000B4 ; SCOPE-END
191: }
000000B4 L_45:
000000B4 BC30 POP {R4-R5}
000000B6 BC08 POP {R3}
000000B8 4718 BX R3
000000BA ENDP ; 'sd_State?T'
*** CODE SEGMENT '?PR?sd_writeSector?T?sd':
207: esint8 sd_writeSector(hwInterface *iface,euint32 address, euint8* buf)
00000000 B5F0 PUSH {R4-R7,LR}
00000002 1C17 MOV R7,R2 ; buf
00000004 ---- Variable 'buf' assigned to Register 'R7' ----
00000004 1C0A MOV R2,R1 ; address
00000006 ---- Variable 'address' assigned to Register 'R2' ----
00000006 1C05 MOV R5,R0 ; iface
00000008 ---- Variable 'iface' assigned to Register 'R5' ----
208: {
00000008 ; SCOPE-START
211: euint16 t=0;
00000008 2400 MOV R4,#0x0
0000000A ---- Variable 't' assigned to Register 'R4' ----
214: place=512*address;
0000000A 1C11 MOV R1,R2 ; address
0000000C 0249 LSL R1,R1,#0x9 ; address
0000000E ---- Variable 'place' assigned to Register 'R1' ----
215: sd_Command(iface,CMDWRITE, (euint16) (place >> 16), (euint16) place);
0000000E 1C08 MOV R0,R1 ; place
00000010 0C00 LSR R0,R0,#0x10 ; place
00000012 0400 LSL R0,R0,#0x10
00000014 0C00 LSR R0,R0,#0x10
00000016 0402 LSL R2,R0,#0x10
00000018 0C12 LSR R2,R2,#0x10
0000001A 1C08 MOV R0,R1 ; place
0000001C 0400 LSL R0,R0,#0x10 ; place
0000001E 0C00 LSR R0,R0,#0x10
00000020 0403 LSL R3,R0,#0x10
00000022 0C1B LSR R3,R3,#0x10
00000024 1C28 MOV R0,R5 ; iface
00000026 2118 MOV R1,#0x18
00000028 F7FF BL sd_Command?T ; T=0x0001 (1)
0000002A FFEA BL sd_Command?T ; T=0x0001 (2)
217: sd_Resp8b(iface); /* Card response */
0000002C 1C28 MOV R0,R5 ; iface
0000002E F7FF BL sd_Resp8b?T ; T=0x0001 (1)
00000030 FFE7 BL sd_Resp8b?T ; T=0x0001 (2)
219: if_spiSend(iface,0xfe); /* Start block */
00000032 1C28 MOV R0,R5 ; iface
00000034 21FE MOV R1,#0xFE
00000036 F7FF BL if_spiSend?T ; T=0x0001 (1)
00000038 FFE3 BL if_spiSend?T ; T=0x0001 (2)
220: for(i=0;i<512;i++)
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 17
0000003A 2600 MOV R6,#0x0
0000003C ---- Variable 'i' assigned to Register 'R6' ----
0000003C E00B B L_50 ; T=0x00000056
0000003E L_51:
221: if_spiSend(iface,buf[i]); /* Send data */
0000003E 1C30 MOV R0,R6 ; i
00000040 0401 LSL R1,R0,#0x10 ; i
00000042 0C09 LSR R1,R1,#0x10
00000044 1C38 MOV R0,R7 ; buf
00000046 5C40 LDRB R0,[R0,R1]
00000048 1C01 MOV R1,R0
0000004A 1C28 MOV R0,R5 ; iface
0000004C F7FF BL if_spiSend?T ; T=0x0001 (1)
0000004E FFD8 BL if_spiSend?T ; T=0x0001 (2)
00000050 3601 ADD R6,#0x1
00000052 0436 LSL R6,R6,#0x10
00000054 0C36 LSR R6,R6,#0x10
00000056 L_50:
00000056 1C30 MOV R0,R6 ; i
00000058 0400 LSL R0,R0,#0x10 ; i
0000005A 0C00 LSR R0,R0,#0x10
0000005C 4980 LDR R1,=0x200
0000005E 4288 CMP R0,R1
00000060 D3ED BCC L_51 ; T=0x0000003E
222: if_spiSend(iface,0xff); /* Checksum part 1 */
00000062 1C28 MOV R0,R5 ; iface
00000064 21FF MOV R1,#0xFF
00000066 F7FF BL if_spiSend?T ; T=0x0001 (1)
00000068 FFCB BL if_spiSend?T ; T=0x0001 (2)
223: if_spiSend(iface,0xff); /* Checksum part 2 */
0000006A 1C28 MOV R0,R5 ; iface
0000006C 21FF MOV R1,#0xFF
0000006E F7FF BL if_spiSend?T ; T=0x0001 (1)
00000070 FFC7 BL if_spiSend?T ; T=0x0001 (2)
225: if_spiSend(iface,0xff);
00000072 1C28 MOV R0,R5 ; iface
00000074 21FF MOV R1,#0xFF
00000076 F7FF BL if_spiSend?T ; T=0x0001 (1)
00000078 FFC3 BL if_spiSend?T ; T=0x0001 (2)
227: while(if_spiSend(iface,0xff)!=0xff){
0000007A E002 B L_53 ; T=0x00000082
0000007C L_55:
228: t++;
0000007C 3401 ADD R4,#0x1
0000007E 0424 LSL R4,R4,#0x10
00000080 0C24 LSR R4,R4,#0x10
230: }
00000082 L_53:
00000082 1C28 MOV R0,R5 ; iface
00000084 21FF MOV R1,#0xFF
00000086 F7FF BL if_spiSend?T ; T=0x0001 (1)
00000088 FFBB BL if_spiSend?T ; T=0x0001 (2)
0000008A 0600 LSL R0,R0,#0x18 ; if_spiSend?T
0000008C 0E00 LSR R0,R0,#0x18
0000008E 28FF CMP R0,#0xFF
00000090 D1F4 BNE L_55 ; T=0x0000007C
233: return(0);
00000092 2000 MOV R0,#0x0
00000094 ; SCOPE-END
234: }
00000094 BCF0 POP {R4-R7}
00000096 BC08 POP {R3}
00000098 4718 BX R3
0000009A ENDP ; 'sd_writeSector?T'
*** CODE SEGMENT '?PR?sd_readSector?T?sd':
249: esint8 sd_readSector(hwInterface *iface,euint32 address, euint8* buf, euint16 len)
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 18
00000000 B5F0 PUSH {R4-R7,LR}
00000002 1C1F MOV R7,R3 ; len
00000004 ---- Variable 'len' assigned to Register 'R7' ----
00000004 1C16 MOV R6,R2 ; buf
00000006 ---- Variable 'buf' assigned to Register 'R6' ----
00000006 1C0A MOV R2,R1 ; address
00000008 ---- Variable 'address' assigned to Register 'R2' ----
00000008 1C04 MOV R4,R0 ; iface
0000000A ---- Variable 'iface' assigned to Register 'R4' ----
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -