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

📄 sd.lst

📁 Philips LPC2138 Demo Application with Keil C
💻 LST
📖 第 1 页 / 共 5 页
字号:


*** 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 + -