📄 mmc_sd.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--debug -c --asm --interleave -ommc_sd.o --depend=mmc_sd.d --device=DARMP --apcs=interwork -O3 -IC:\Keil\ARM\INC\Philips --omf_browse=mmc_sd.crf MMC_SD.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
SPI_Low PROC
000000 e59f1558 LDR r1,|L1.1376|
000004 e3a00080 MOV r0,#0x80
000008 e5810010 STR r0,[r1,#0x10]
00000c e12fff1e BX lr
ENDP
SPI_High PROC
000010 e59f1548 LDR r1,|L1.1376|
000014 e3a00004 MOV r0,#4
000018 e5810010 STR r0,[r1,#0x10]
00001c e12fff1e BX lr
ENDP
SPI_WriteByte PROC
000020 e59f1538 LDR r1,|L1.1376|
000024 e5810008 STR r0,[r1,#8]
|L1.40|
000028 e591000c LDR r0,[r1,#0xc]
00002c e3100001 TST r0,#1
000030 0afffffc BEQ |L1.40|
000034 e5910008 LDR r0,[r1,#8]
000038 e20000ff AND r0,r0,#0xff
00003c e12fff1e BX lr
ENDP
MMC_SD_SendCommand PROC
;;;91 uint8 MMC_SD_SendCommand(uint8 cmd, uint32 arg)
;;;92 {
000040 e92d4010 PUSH {r4,lr}
000044 e1a04000 MOV r4,r0
000048 e1a03001 MOV r3,r1
;;;93 uint8 r1;
;;;94 uint16 retry=0;
00004c e3a02000 MOV r2,#0
;;;95
;;;96 //SPI_CS_Deassert;
;;;97 SPI_WriteByte(0xff);
000050 e3a000ff MOV r0,#0xff
000054 ebfffffe BL SPI_WriteByte
;;;98 SPI_WriteByte(0xff);
000058 e3a000ff MOV r0,#0xff
00005c ebfffffe BL SPI_WriteByte
;;;99 SPI_CS_Assert;
000060 e59fc4fc LDR r12,|L1.1380|
000064 e59c000c LDR r0,[r12,#0xc]
000068 e3800602 ORR r0,r0,#0x200000
00006c e58c000c STR r0,[r12,#0xc]
;;;100
;;;101 SPI_WriteByte(cmd | 0x40); /* send command */
000070 e3840040 ORR r0,r4,#0x40
000074 ebfffffe BL SPI_WriteByte
;;;102 SPI_WriteByte(arg>>24);
000078 e1a00c23 LSR r0,r3,#24
00007c ebfffffe BL SPI_WriteByte
;;;103 SPI_WriteByte(arg>>16);
000080 e1a00403 LSL r0,r3,#8
000084 e1a00c20 LSR r0,r0,#24
000088 ebfffffe BL SPI_WriteByte
;;;104 SPI_WriteByte(arg>>8);
00008c e1a00803 LSL r0,r3,#16
000090 e1a00c20 LSR r0,r0,#24
000094 ebfffffe BL SPI_WriteByte
;;;105 SPI_WriteByte(arg);
000098 e20300ff AND r0,r3,#0xff
00009c ebfffffe BL SPI_WriteByte
;;;106 SPI_WriteByte(0x95);
0000a0 e3a00095 MOV r0,#0x95
0000a4 ebfffffe BL SPI_WriteByte
;;;107
;;;108 while((r1 = SPI_WriteByte(0xff)) == 0xff) /* wait response */
0000a8 ea000004 B |L1.192|
|L1.172|
;;;109 if(retry++ > CMD_TIMOUT) break; /* time out error */
0000ac e1a00002 MOV r0,r2
0000b0 e2821001 ADD r1,r2,#1
0000b4 e3500d7d CMP r0,#0x1f40
0000b8 e3c12801 BIC r2,r1,#0x10000
0000bc 8a000004 BHI |L1.212|
|L1.192|
0000c0 e3a000ff MOV r0,#0xff ;108
0000c4 ebfffffe BL SPI_WriteByte
0000c8 e35000ff CMP r0,#0xff ;108
0000cc e1a03000 MOV r3,r0 ;108
0000d0 0afffff5 BEQ |L1.172|
|L1.212|
;;;110
;;;111 SPI_CS_Deassert;
0000d4 e59c0004 LDR r0,[r12,#4]
0000d8 e3800602 ORR r0,r0,#0x200000
0000dc e58c0004 STR r0,[r12,#4]
;;;112 SPI_WriteByte(0xff); // extra 8 CLK
0000e0 e3a000ff MOV r0,#0xff
0000e4 ebfffffe BL SPI_WriteByte
;;;113
;;;114 return r1; /* return state */
0000e8 e8bd4010 POP {r4,lr}
0000ec e1a00003 MOV r0,r3
;;;115 }
0000f0 e12fff1e BX lr
;;;116
ENDP
MMC_SD_SendCommandCRC PROC
;;;118 uint8 MMC_SD_SendCommandCRC(uint8 cmd, uint32 arg, uint8 crc)
;;;119 {
0000f4 e92d4030 PUSH {r4,r5,lr}
0000f8 e1a05000 MOV r5,r0
0000fc e1a0c001 MOV r12,r1
;;;120 uint8 r1;
;;;121 uint16 retry=0;
000100 e3a03000 MOV r3,#0
;;;122
;;;123 //SPI_CS_Deassert;
;;;124 SPI_WriteByte(0xff);
000104 e3a000ff MOV r0,#0xff
000108 ebfffffe BL SPI_WriteByte
;;;125 SPI_WriteByte(0xff);
00010c e3a000ff MOV r0,#0xff
000110 ebfffffe BL SPI_WriteByte
;;;126 SPI_CS_Assert;
000114 e59f4448 LDR r4,|L1.1380|
000118 e594000c LDR r0,[r4,#0xc]
00011c e3800602 ORR r0,r0,#0x200000
000120 e584000c STR r0,[r4,#0xc]
;;;127
;;;128 SPI_WriteByte(cmd | 0x40); /* send command */
000124 e3850040 ORR r0,r5,#0x40
000128 ebfffffe BL SPI_WriteByte
;;;129 SPI_WriteByte(arg>>24);
00012c e1a00c2c LSR r0,r12,#24
000130 ebfffffe BL SPI_WriteByte
;;;130 SPI_WriteByte(arg>>16);
000134 e1a0040c LSL r0,r12,#8
000138 e1a00c20 LSR r0,r0,#24
00013c ebfffffe BL SPI_WriteByte
;;;131 SPI_WriteByte(arg>>8);
000140 e1a0080c LSL r0,r12,#16
000144 e1a00c20 LSR r0,r0,#24
000148 ebfffffe BL SPI_WriteByte
;;;132 SPI_WriteByte(arg);
00014c e20c00ff AND r0,r12,#0xff
000150 ebfffffe BL SPI_WriteByte
;;;133 SPI_WriteByte(crc);
000154 e1a00002 MOV r0,r2
000158 ebfffffe BL SPI_WriteByte
;;;134
;;;135 while((r1 = SPI_WriteByte(0xff)) == 0xff) /* wait response */
00015c ea000004 B |L1.372|
|L1.352|
;;;136 if(retry++ > CMD_TIMOUT) break; /* time out error */
000160 e1a00003 MOV r0,r3
000164 e2831001 ADD r1,r3,#1
000168 e3500d7d CMP r0,#0x1f40
00016c e3c13801 BIC r3,r1,#0x10000
000170 8a000004 BHI |L1.392|
|L1.372|
000174 e3a000ff MOV r0,#0xff ;135
000178 ebfffffe BL SPI_WriteByte
00017c e35000ff CMP r0,#0xff ;135
000180 e1a02000 MOV r2,r0 ;135
000184 0afffff5 BEQ |L1.352|
|L1.392|
;;;137
;;;138 SPI_CS_Deassert;
000188 e5940004 LDR r0,[r4,#4]
00018c e3800602 ORR r0,r0,#0x200000
000190 e5840004 STR r0,[r4,#4]
;;;139 SPI_WriteByte(0xff); // extra 8 CLK
000194 e3a000ff MOV r0,#0xff
000198 ebfffffe BL SPI_WriteByte
;;;140
;;;141
;;;142 return r1; /* return state */
00019c e8bd4030 POP {r4,r5,lr}
0001a0 e1a00002 MOV r0,r2
;;;143 }
0001a4 e12fff1e BX lr
;;;144
ENDP
MMC_SD_SendCommandCRC_NoDeassert PROC
;;;147 uint8 MMC_SD_SendCommandCRC_NoDeassert(uint8 cmd, uint32 arg, uint8 crc)
;;;148 {
0001a8 e92d4010 PUSH {r4,lr}
0001ac e1a04000 MOV r4,r0
0001b0 e1a0c001 MOV r12,r1
;;;149 uint8 r1;
;;;150 uint16 retry=0;
0001b4 e3a03000 MOV r3,#0
;;;151
;;;152 //SPI_CS_Deassert;
;;;153 SPI_WriteByte(0xff);
0001b8 e3a000ff MOV r0,#0xff
0001bc ebfffffe BL SPI_WriteByte
;;;154 SPI_WriteByte(0xff);
0001c0 e3a000ff MOV r0,#0xff
0001c4 ebfffffe BL SPI_WriteByte
;;;155 SPI_CS_Assert;
0001c8 e59f0394 LDR r0,|L1.1380|
0001cc e590100c LDR r1,[r0,#0xc]
0001d0 e3811602 ORR r1,r1,#0x200000
0001d4 e580100c STR r1,[r0,#0xc]
;;;156
;;;157 SPI_WriteByte(cmd | 0x40); /* send command */
0001d8 e3840040 ORR r0,r4,#0x40
0001dc ebfffffe BL SPI_WriteByte
;;;158 SPI_WriteByte(arg>>24);
0001e0 e1a00c2c LSR r0,r12,#24
0001e4 ebfffffe BL SPI_WriteByte
;;;159 SPI_WriteByte(arg>>16);
0001e8 e1a0040c LSL r0,r12,#8
0001ec e1a00c20 LSR r0,r0,#24
0001f0 ebfffffe BL SPI_WriteByte
;;;160 SPI_WriteByte(arg>>8);
0001f4 e1a0080c LSL r0,r12,#16
0001f8 e1a00c20 LSR r0,r0,#24
0001fc ebfffffe BL SPI_WriteByte
;;;161 SPI_WriteByte(arg);
000200 e20c00ff AND r0,r12,#0xff
000204 ebfffffe BL SPI_WriteByte
;;;162 SPI_WriteByte(crc);
000208 e1a00002 MOV r0,r2
00020c ebfffffe BL SPI_WriteByte
;;;163
;;;164 while((r1 = SPI_WriteByte(0xff)) == 0xff) /* wait response */
000210 ea000004 B |L1.552|
|L1.532|
;;;165 if(retry++ > CMD_TIMOUT) break; /* time out error */
000214 e1a01003 MOV r1,r3
000218 e2832001 ADD r2,r3,#1
00021c e3510d7d CMP r1,#0x1f40
000220 e3c23801 BIC r3,r2,#0x10000
000224 8a000003 BHI |L1.568|
|L1.552|
000228 e3a000ff MOV r0,#0xff ;164
00022c ebfffffe BL SPI_WriteByte
000230 e35000ff CMP r0,#0xff ;164
000234 0afffff6 BEQ |L1.532|
|L1.568|
000238 e8bd4010 POP {r4,lr} ;164
;;;166
;;;167 return r1; /* return state */
;;;168 }
00023c e12fff1e BX lr
;;;169
ENDP
MMC_SD_Init PROC
;;;172 uint8 MMC_SD_Init(void)
;;;173 {
000240 e92d4ff8 PUSH {r3-r11,lr}
;;;174 uint8 i;
;;;175 uint16 retry = 0;
;;;176 uint8 r1 = 0;
;;;177
;;;178 // uint16 j;
;;;179
;;;180 uint8 buffer[4];
;;;181
;;;182 SPI1_CS_GPIO();
000244 e59f031c LDR r0,|L1.1384|
000248 e3a04000 MOV r4,#0 ;175
00024c e5901004 LDR r1,[r0,#4]
000250 e3c11b03 BIC r1,r1,#0xc00
000254 e5801004 STR r1,[r0,#4]
;;;183 SPI1_CS_OUT();
000258 e2408901 SUB r8,r0,#0x4000
00025c e5981008 LDR r1,[r8,#8]
000260 e3811602 ORR r1,r1,#0x200000
000264 e5881008 STR r1,[r8,#8]
;;;184 SPI_CS_Deassert;
000268 e5981004 LDR r1,[r8,#4]
00026c e3811602 ORR r1,r1,#0x200000
000270 e5881004 STR r1,[r8,#4]
;;;185
;;;186 PINSEL1 &= ~((0x01 << 2) + (0x03 << 4) + (0x03 << 6));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -