📄 sd.lst
字号:
000000B4 BC08 POP {R3}
000000B6 4718 BX R3
000000B8 ENDP ; 'sd_Init?T'
*** CODE SEGMENT '?PR?sd_Command?T?sd':
72: void sd_Command(hwInterface *iface,euint8 cmd, euint16 paramx, euint16 paramy)
00000000 B5F0 PUSH {R4-R7,LR}
00000002 1C1D MOV R5,R3 ; paramy
00000004 ---- Variable 'paramy' assigned to Register 'R5' ----
00000004 1C16 MOV R6,R2 ; paramx
00000006 ---- Variable 'paramx' assigned to Register 'R6' ----
00000006 1C0F MOV R7,R1 ; cmd
00000008 ---- Variable 'cmd' assigned to Register 'R7' ----
00000008 1C04 MOV R4,R0 ; iface
0000000A ---- Variable 'iface' assigned to Register 'R4' ----
74: if_spiSend(iface,0xff);
0000000A 1C20 MOV R0,R4 ; iface
0000000C 21FF MOV R1,#0xFF
0000000E F7FF BL if_spiSend?T ; T=0x0001 (1)
00000010 FFF7 BL if_spiSend?T ; T=0x0001 (2)
76: if_spiSend(iface,0x40 | cmd);
00000012 1C38 MOV R0,R7 ; cmd
00000014 0601 LSL R1,R0,#0x18 ; cmd
00000016 0E09 LSR R1,R1,#0x18
00000018 2040 MOV R0,#0x40
0000001A 4301 ORR R1,R0
0000001C 1C20 MOV R0,R4 ; iface
0000001E F7FF BL if_spiSend?T ; T=0x0001 (1)
00000020 FFEF BL if_spiSend?T ; T=0x0001 (2)
77: if_spiSend(iface,(euint8) (paramx >> 8)); /* MSB of parameter x */
00000022 1C30 MOV R0,R6 ; paramx
00000024 0400 LSL R0,R0,#0x10 ; paramx
00000026 0C00 LSR R0,R0,#0x10
00000028 0A00 LSR R0,R0,#0x8
0000002A 0600 LSL R0,R0,#0x18
0000002C 0E00 LSR R0,R0,#0x18
0000002E 0601 LSL R1,R0,#0x18
00000030 0E09 LSR R1,R1,#0x18
00000032 1C20 MOV R0,R4 ; iface
00000034 F7FF BL if_spiSend?T ; T=0x0001 (1)
00000036 FFE4 BL if_spiSend?T ; T=0x0001 (2)
78: if_spiSend(iface,(euint8) (paramx)); /* LSB of parameter x */
00000038 1C30 MOV R0,R6 ; paramx
0000003A 0600 LSL R0,R0,#0x18 ; paramx
0000003C 0E00 LSR R0,R0,#0x18
0000003E 0601 LSL R1,R0,#0x18
00000040 0E09 LSR R1,R1,#0x18
00000042 1C20 MOV R0,R4 ; iface
00000044 F7FF BL if_spiSend?T ; T=0x0001 (1)
00000046 FFDC BL if_spiSend?T ; T=0x0001 (2)
79: if_spiSend(iface,(euint8) (paramy >> 8)); /* MSB of parameter y */
00000048 1C28 MOV R0,R5 ; paramy
0000004A 0400 LSL R0,R0,#0x10 ; paramy
0000004C 0C00 LSR R0,R0,#0x10
0000004E 0A00 LSR R0,R0,#0x8
00000050 0600 LSL R0,R0,#0x18
00000052 0E00 LSR R0,R0,#0x18
00000054 0601 LSL R1,R0,#0x18
00000056 0E09 LSR R1,R1,#0x18
00000058 1C20 MOV R0,R4 ; iface
0000005A F7FF BL if_spiSend?T ; T=0x0001 (1)
0000005C FFD1 BL if_spiSend?T ; T=0x0001 (2)
80: if_spiSend(iface,(euint8) (paramy)); /* LSB of parameter y */
0000005E 1C28 MOV R0,R5 ; paramy
00000060 0600 LSL R0,R0,#0x18 ; paramy
00000062 0E00 LSR R0,R0,#0x18
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 11
00000064 0601 LSL R1,R0,#0x18
00000066 0E09 LSR R1,R1,#0x18
00000068 1C20 MOV R0,R4 ; iface
0000006A F7FF BL if_spiSend?T ; T=0x0001 (1)
0000006C FFC9 BL if_spiSend?T ; T=0x0001 (2)
82: if_spiSend(iface,0x95); /* Checksum (should be only valid for first command (0) */
0000006E 1C20 MOV R0,R4 ; iface
00000070 2195 MOV R1,#0x95
00000072 F7FF BL if_spiSend?T ; T=0x0001 (1)
00000074 FFC5 BL if_spiSend?T ; T=0x0001 (2)
84: if_spiSend(iface,0xff); /* eat empty command - response */
00000076 1C20 MOV R0,R4 ; iface
00000078 21FF MOV R1,#0xFF
0000007A F7FF BL if_spiSend?T ; T=0x0001 (1)
0000007C FFC1 BL if_spiSend?T ; T=0x0001 (2)
85: }
0000007E BCF0 POP {R4-R7}
00000080 BC08 POP {R3}
00000082 4718 BX R3
00000084 ENDP ; 'sd_Command?T'
*** CODE SEGMENT '?PR?sd_Resp8b?T?sd':
88: euint8 sd_Resp8b(hwInterface *iface)
00000000 B570 PUSH {R4-R6,LR}
00000002 1C06 MOV R6,R0 ; iface
00000004 ---- Variable 'iface' assigned to Register 'R6' ----
89: {
00000004 ; SCOPE-START
94: for(i=0;i<8;i++){
00000004 2500 MOV R5,#0x0
00000006 ---- Variable 'i' assigned to Register 'R5' ----
00000006 E010 B L_19 ; T=0x0000002A
00000008 L_20:
95: resp = if_spiSend(iface,0xff);
00000008 1C30 MOV R0,R6 ; iface
0000000A 21FF MOV R1,#0xFF
0000000C F7FF BL if_spiSend?T ; T=0x0001 (1)
0000000E FFF8 BL if_spiSend?T ; T=0x0001 (2)
00000010 1C04 MOV R4,R0 ; resp
00000012 ---- Variable 'resp' assigned to Register 'R4' ----
96: if(resp != 0xff)
00000012 1C20 MOV R0,R4 ; resp
00000014 0600 LSL R0,R0,#0x18 ; resp
00000016 0E00 LSR R0,R0,#0x18
00000018 28FF CMP R0,#0xFF
0000001A D003 BEQ L_17 ; T=0x00000024
97: return(resp);
0000001C 1C20 MOV R0,R4 ; resp
0000001E 0600 LSL R0,R0,#0x18 ; resp
00000020 0E00 LSR R0,R0,#0x18
00000022 E00A B L_23 ; T=0x0000003A
98: }
00000024 L_17:
00000024 3501 ADD R5,#0x1
00000026 062D LSL R5,R5,#0x18
00000028 0E2D LSR R5,R5,#0x18
0000002A L_19:
0000002A 1C28 MOV R0,R5 ; i
0000002C 0600 LSL R0,R0,#0x18 ; i
0000002E 0E00 LSR R0,R0,#0x18
00000030 2808 CMP R0,#0x8
00000032 DBE9 BLT L_20 ; T=0x00000008
100: return(resp);
00000034 1C20 MOV R0,R4 ; resp
00000036 0600 LSL R0,R0,#0x18 ; resp
00000038 0E00 LSR R0,R0,#0x18
0000003A ; SCOPE-END
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 12
101: }
0000003A L_23:
0000003A BC70 POP {R4-R6}
0000003C BC08 POP {R3}
0000003E 4718 BX R3
00000040 ENDP ; 'sd_Resp8b?T'
*** CODE SEGMENT '?PR?sd_Resp16b?T?sd':
104: euint16 sd_Resp16b(hwInterface *iface)
00000000 B530 PUSH {R4-R5,LR}
00000002 1C05 MOV R5,R0 ; iface
00000004 ---- Variable 'iface' assigned to Register 'R5' ----
105: {
00000004 ; SCOPE-START
108: resp = ( sd_Resp8b(iface) << 8 ) & 0xff00;
00000004 1C28 MOV R0,R5 ; iface
00000006 F7FF BL sd_Resp8b?T ; T=0x0001 (1)
00000008 FFFB BL sd_Resp8b?T ; T=0x0001 (2)
0000000A 0604 LSL R4,R0,#0x18 ; sd_Resp8b?T
0000000C 0E24 LSR R4,R4,#0x18
0000000E 0224 LSL R4,R4,#0x8
00000010 4800 LDR R0,=0xFF00
00000012 4004 AND R4,R0
00000014 0424 LSL R4,R4,#0x10
00000016 0C24 LSR R4,R4,#0x10
00000018 ---- Variable 'resp' assigned to Register 'R4' ----
109: resp |= if_spiSend(iface,0xff);
00000018 1C28 MOV R0,R5 ; iface
0000001A 21FF MOV R1,#0xFF
0000001C F7FF BL if_spiSend?T ; T=0x0001 (1)
0000001E FFF0 BL if_spiSend?T ; T=0x0001 (2)
00000020 0600 LSL R0,R0,#0x18 ; if_spiSend?T
00000022 0E00 LSR R0,R0,#0x18
00000024 4304 ORR R4,R0
111: return(resp);
00000026 1C20 MOV R0,R4 ; resp
00000028 0400 LSL R0,R0,#0x10 ; resp
0000002A 0C00 LSR R0,R0,#0x10
0000002C ; SCOPE-END
112: }
0000002C BC30 POP {R4-R5}
0000002E BC08 POP {R3}
00000030 4718 BX R3
00000032 ENDP ; 'sd_Resp16b?T'
*** CODE SEGMENT '?PR?sd_Resp8bError?T?sd':
115: void sd_Resp8bError(hwInterface *iface,euint8 value)
00000000 B510 PUSH {R4,LR}
00000002 1C0C MOV R4,R1 ; value
00000004 ---- Variable 'value' assigned to Register 'R4' ----
117: switch(value)
00000004 1C20 MOV R0,R4 ; value
00000006 2801 CMP R0,#0x1 ; value
00000008 D023 BEQ L_26 ; T=0x00000052
0000000A 2802 CMP R0,#0x2 ; value
0000000C D01D BEQ L_28 ; T=0x0000004A
0000000E 2804 CMP R0,#0x4 ; value
00000010 D017 BEQ L_29 ; T=0x00000042
00000012 2808 CMP R0,#0x8 ; value
00000014 D011 BEQ L_30 ; T=0x0000003A
00000016 2810 CMP R0,#0x10 ; value
00000018 D00B BEQ L_31 ; T=0x00000032
0000001A 2820 CMP R0,#0x20 ; value
0000001C D005 BEQ L_32 ; T=0x0000002A
0000001E 2840 CMP R0,#0x40 ; value
00000020 D11B BNE L_27 ; T=0x0000005A
119: case 0x40:
00000022 L_33:
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 13
120: DBG((TXT("Argument out of bounds.\n")));
00000022 4800 LDR R0,=??S_1 ; ??S_1
00000024 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000026 FFEC BL lpc2000_debug_printf?T ; T=0x0001 (2)
121: break;
00000028 E01D B L_25 ; T=0x00000066
122: case 0x20:
0000002A L_32:
123: DBG((TXT("Address out of bounds.\n")));
0000002A 4800 LDR R0,=??S_2 ; ??S_2
0000002C F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
0000002E FFE8 BL lpc2000_debug_printf?T ; T=0x0001 (2)
124: break;
00000030 E019 B L_25 ; T=0x00000066
125: case 0x10:
00000032 L_31:
126: DBG((TXT("Error during erase sequence.\n")));
00000032 4800 LDR R0,=??S_3 ; ??S_3
00000034 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000036 FFE4 BL lpc2000_debug_printf?T ; T=0x0001 (2)
127: break;
00000038 E015 B L_25 ; T=0x00000066
128: case 0x08:
0000003A L_30:
129: DBG((TXT("CRC failed.\n")));
0000003A 4800 LDR R0,=??S_4 ; ??S_4
0000003C F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
0000003E FFE0 BL lpc2000_debug_printf?T ; T=0x0001 (2)
130: break;
00000040 E011 B L_25 ; T=0x00000066
131: case 0x04:
00000042 L_29:
132: DBG((TXT("Illegal command.\n")));
00000042 4800 LDR R0,=??S_5 ; ??S_5
00000044 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000046 FFDC BL lpc2000_debug_printf?T ; T=0x0001 (2)
133: break;
00000048 E00D B L_25 ; T=0x00000066
134: case 0x02:
0000004A L_28:
135: DBG((TXT("Erase reset (see SanDisk docs p5-13).\n")));
0000004A 4800 LDR R0,=??S_6 ; ??S_6
0000004C F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
0000004E FFD8 BL lpc2000_debug_printf?T ; T=0x0001 (2)
136: break;
00000050 E009 B L_25 ; T=0x00000066
137: case 0x01:
00000052 L_26:
138: DBG((TXT("Card is initialising.\n")));
00000052 4800 LDR R0,=??S_7 ; ??S_7
00000054 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000056 FFD4 BL lpc2000_debug_printf?T ; T=0x0001 (2)
139: break;
00000058 E005 B L_25 ; T=0x00000066
140: default:
0000005A L_27:
141: DBG((TXT("Unknown error 0x%x (see SanDisk docs p5-13).\n"),value));
0000005A 1C20 MOV R0,R4 ; value
0000005C 0601 LSL R1,R0,#0x18 ; value
0000005E 0E09 LSR R1,R1,#0x18
00000060 4800 LDR R0,=??S_8 ; ??S_8
00000062 F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
00000064 FFCD BL lpc2000_debug_printf?T ; T=0x0001 (2)
143: }
00000066 L_25:
144: }
ARM COMPILER V2.42, sd 27/03/06 10:45:52 PAGE 14
00000066 BC10 POP {R4}
00000068 BC08 POP {R3}
0000006A 4718 BX R3
0000006C ENDP ; 'sd_Resp8bError?T'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -