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

📄 mmc_sd.txt

📁 mp3量不要让站长把时间都花费在为您修正说明上。压缩包解压时不能有密码。系统会自动删除debug和release目录
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; 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 + -