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

📄 diskio.txt

📁 stm32-SDIO+FatFS文件系统txt-int-ascii
💻 TXT
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 561]
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Flash\Obj\diskio.o --depend=.\Flash\Obj\diskio.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=870 -I..\..\Libraries\CMSIS\CM3\CoreSupport -I..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\User\bsp -I..\..\User\fatfs -I..\..\User -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\User\fatfs\diskio.c]
                          THUMB

                          AREA ||i.disk_initialize||, CODE, READONLY, ALIGN=2

                  disk_initialize PROC
;;;33     
;;;34     DSTATUS disk_initialize (
000000  b5f0              PUSH     {r4-r7,lr}
;;;35     	BYTE drv				/* Physical drive nmuber (0..) */
;;;36     )
;;;37     {
000002  b095              SUB      sp,sp,#0x54
000004  4607              MOV      r7,r0
;;;38     	SD_CardInfo mSDCardInfo;	/* 定义SD卡状态信息结构体 */
;;;39     	uint32_t DeviceSizeMul = 0, NumberOfBlocks = 0;	
000006  2500              MOVS     r5,#0
000008  2600              MOVS     r6,#0
;;;40     	uint16_t Status;
;;;41     
;;;42     	Status = SD_Init();
00000a  f7fffffe          BL       SD_Init
00000e  4604              MOV      r4,r0
;;;43     	if (Status != SD_OK)	
000010  2c2a              CMP      r4,#0x2a
000012  d000              BEQ      |L1.22|
;;;44     	{
;;;45     		fs_printf("SD_Init() fail (%d) : file %s on line %d\r\n", Status, __FILE__, __LINE__);
;;;46     		goto retfail;
000014  e042              B        |L1.156|
                  |L1.22|
;;;47     	}
;;;48     
;;;49     	SD_GetCardInfo(&mSDCardInfo);	/* 读取SD卡的信息 */
000016  a801              ADD      r0,sp,#4
000018  f7fffffe          BL       SD_GetCardInfo
;;;50     	SD_SelectDeselect((uint32_t) (mSDCardInfo.RCA << 16));
00001c  f8bd1050          LDRH     r1,[sp,#0x50]
000020  0408              LSLS     r0,r1,#16
000022  f7fffffe          BL       SD_SelectDeselect
;;;51     	DeviceSizeMul = (mSDCardInfo.SD_csd.DeviceSizeMul + 2);
000026  f89d001c          LDRB     r0,[sp,#0x1c]
00002a  1c85              ADDS     r5,r0,#2
;;;52     	
;;;53     	if (mSDCardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	/* 高容量SD卡 SDHC */
00002c  f89d0052          LDRB     r0,[sp,#0x52]
000030  2802              CMP      r0,#2
000032  d105              BNE      |L1.64|
;;;54     	{
;;;55     		Mass_Block_Count = (mSDCardInfo.SD_csd.DeviceSize + 1) * 1024;
000034  9805              LDR      r0,[sp,#0x14]
000036  1c40              ADDS     r0,r0,#1
000038  0280              LSLS     r0,r0,#10
00003a  4919              LDR      r1,|L1.160|
00003c  6008              STR      r0,[r1,#0]  ; Mass_Block_Count
00003e  e011              B        |L1.100|
                  |L1.64|
;;;56     	}
;;;57     	else	/* 普通SD卡, 最大4G */
;;;58     	{
;;;59     		NumberOfBlocks  = ((1 << (mSDCardInfo.SD_csd.RdBlockLen)) / 512);
000040  f89d200c          LDRB     r2,[sp,#0xc]
000044  2101              MOVS     r1,#1
000046  fa01f002          LSL      r0,r1,r2
00004a  17c1              ASRS     r1,r0,#31
00004c  eb0051d1          ADD      r1,r0,r1,LSR #23
000050  124e              ASRS     r6,r1,#9
;;;60     		Mass_Block_Count = ((mSDCardInfo.SD_csd.DeviceSize + 1) * (1 << DeviceSizeMul) << (NumberOfBlocks/2));
000052  9805              LDR      r0,[sp,#0x14]
000054  1c40              ADDS     r0,r0,#1
000056  2101              MOVS     r1,#1
000058  40a9              LSLS     r1,r1,r5
00005a  4348              MULS     r0,r1,r0
00005c  0871              LSRS     r1,r6,#1
00005e  4088              LSLS     r0,r0,r1
000060  490f              LDR      r1,|L1.160|
000062  6008              STR      r0,[r1,#0]  ; Mass_Block_Count
                  |L1.100|
;;;61     	}
;;;62     	
;;;63     	Status = SD_SelectDeselect((uint32_t) (mSDCardInfo.RCA << 16)); 
000064  f8bd1050          LDRH     r1,[sp,#0x50]
000068  0408              LSLS     r0,r1,#16
00006a  f7fffffe          BL       SD_SelectDeselect
00006e  4604              MOV      r4,r0
;;;64     	Status = SD_EnableWideBusOperation(SDIO_BusWide_4b); 
000070  f44f6000          MOV      r0,#0x800
000074  f7fffffe          BL       SD_EnableWideBusOperation
000078  4604              MOV      r4,r0
;;;65     	if (Status != SD_OK)
00007a  2c2a              CMP      r4,#0x2a
00007c  d000              BEQ      |L1.128|
;;;66     	{
;;;67     		fs_printf("SD_EnableWideBusOperation(SDIO_BusWide_4b) Fail (%d)\r\n", Status);
;;;68     		goto retfail;
00007e  e00d              B        |L1.156|
                  |L1.128|
;;;69     	}
;;;70     	
;;;71     	Status = SD_SetDeviceMode(SD_DMA_MODE);    /* 设置SD卡工作模式为DMA, 其它模式由中断、轮询 */     
000080  2000              MOVS     r0,#0
000082  f7fffffe          BL       SD_SetDeviceMode
000086  4604              MOV      r4,r0
;;;72     	if (Status != SD_OK)
000088  2c2a              CMP      r4,#0x2a
00008a  d000              BEQ      |L1.142|
;;;73     	{
;;;74     		fs_printf("SD_SetDeviceMode(SD_DMA_MODE) Fail (%d)\r\n", Status);				
;;;75     		goto retfail;
00008c  e006              B        |L1.156|
                  |L1.142|
;;;76     	} 
;;;77     
;;;78     	/* 显示容量 */
;;;79     	Mass_Block_Size  = 512;
00008e  f44f7000          MOV      r0,#0x200
000092  4904              LDR      r1,|L1.164|
000094  6008              STR      r0,[r1,#0]  ; Mass_Block_Size
;;;80     	if (mSDCardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD)	/* 高容量SD卡 SDHC */
;;;81     	{	
;;;82     		fs_printf("SDHC Card, Memory Size = %uMB\r\n", Mass_Block_Count / (1024 * 4));
;;;83     	}
;;;84     	else
;;;85     	{
;;;86     		fs_printf("Normal Card, Memory Size = %uMB\r\n", (Mass_Block_Count * Mass_Block_Size) /(1024*1024));
;;;87     	}
;;;88     			
;;;89     	return RES_OK;
000096  2000              MOVS     r0,#0
                  |L1.152|
;;;90     retfail:	
;;;91     	return RES_ERROR;
;;;92     }
000098  b015              ADD      sp,sp,#0x54
00009a  bdf0              POP      {r4-r7,pc}
                  |L1.156|
00009c  2001              MOVS     r0,#1                 ;91
00009e  e7fb              B        |L1.152|
;;;93     
                          ENDP

                  |L1.160|
                          DCD      Mass_Block_Count
                  |L1.164|
                          DCD      Mass_Block_Size

                          AREA ||i.disk_ioctl||, CODE, READONLY, ALIGN=1

                  disk_ioctl PROC
;;;198    
;;;199    DRESULT disk_ioctl (
000000  4603              MOV      r3,r0
;;;200    	BYTE drv,		/* Physical drive nmuber (0..) */
;;;201    	BYTE ctrl,		/* Control code */
;;;202    	void *buff		/* Buffer to send/receive control data */
;;;203    )
;;;204    {
;;;205    	return RES_OK;
000002  2000              MOVS     r0,#0
;;;206    }
000004  4770              BX       lr
;;;207    
                          ENDP


                          AREA ||i.disk_read||, CODE, READONLY, ALIGN=2

                          REQUIRE _printf_percent
                          REQUIRE _printf_d
                          REQUIRE _printf_int_dec
                  disk_read PROC
;;;110    
;;;111    DRESULT disk_read (
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;112    	BYTE drv,		/* Physical drive nmuber (0..) */
;;;113    	BYTE *buff,		/* Data buffer to store read data */
;;;114    	DWORD sector,	/* Sector address (LBA) */
;;;115    	BYTE count		/* Number of sectors to read (1..255) */
;;;116    )
;;;117    {
000004  4680              MOV      r8,r0
000006  460e              MOV      r6,r1
000008  4614              MOV      r4,r2
00000a  461d              MOV      r5,r3
;;;118    	SD_Error Status = SD_OK;
00000c  272a              MOVS     r7,#0x2a
;;;119    
;;;120    	if (count == 1) 
00000e  2d01              CMP      r5,#1
000010  d106              BNE      |L3.32|
;;;121    	{
;;;122    		Status = SD_ReadBlock(buff, sector << 9 , SECTOR_SIZE);
000012  0261              LSLS     r1,r4,#9
000014  025a              LSLS     r2,r3,#9
000016  4630              MOV      r0,r6
000018  f7fffffe          BL       SD_ReadBlock
00001c  4607              MOV      r7,r0
00001e  e007              B        |L3.48|
                  |L3.32|
;;;123    	} 
;;;124    	else 
;;;125    	{
;;;126    		Status = SD_ReadMultiBlocks(buff, sector << 9 , SECTOR_SIZE, count);
000020  0261              LSLS     r1,r4,#9
000022  462b              MOV      r3,r5
000024  f44f7200          MOV      r2,#0x200
000028  4630              MOV      r0,r6
00002a  f7fffffe          BL       SD_ReadMultiBlocks
00002e  4607              MOV      r7,r0
                  |L3.48|
;;;127    	}
;;;128    
;;;129    	if (Status == SD_OK) 
000030  2f2a              CMP      r7,#0x2a
000032  d102              BNE      |L3.58|
;;;130    	{
;;;131    		return RES_OK;
000034  2000              MOVS     r0,#0
                  |L3.54|
;;;132    	} 
;;;133    	else
;;;134    	{
;;;135    		printf("Err: SD_ReadMultiBlocks(,%d,%d)\r\n",sector,count);
;;;136    		return RES_ERROR;
;;;137    	}
;;;138    }
000036  e8bd81f0          POP      {r4-r8,pc}
                  |L3.58|
00003a  462a              MOV      r2,r5                 ;135
00003c  4621              MOV      r1,r4                 ;135
00003e  a002              ADR      r0,|L3.72|
000040  f7fffffe          BL       __2printf
000044  2001              MOVS     r0,#1                 ;136
000046  e7f6              B        |L3.54|
;;;139    
                          ENDP

                  |L3.72|
000048  4572723a          DCB      "Err: SD_ReadMultiBlocks(,%d,%d)\r\n",0
00004c  2053445f
000050  52656164
000054  4d756c74
000058  69426c6f
00005c  636b7328
000060  2c25642c
000064  2564290d
000068  0a00    
00006a  00                DCB      0
00006b  00                DCB      0

                          AREA ||i.disk_status||, CODE, READONLY, ALIGN=1

                  disk_status PROC
;;;97     
;;;98     DSTATUS disk_status (
000000  4601              MOV      r1,r0
;;;99     	BYTE drv		/* Physical drive nmuber (0..) */
;;;100    )
;;;101    {
;;;102    	return 0;
000002  2000              MOVS     r0,#0
;;;103    }
000004  4770              BX       lr
;;;104    
                          ENDP


                          AREA ||i.disk_write||, CODE, READONLY, ALIGN=2

                          REQUIRE _printf_percent
                          REQUIRE _printf_d
                          REQUIRE _printf_int_dec
                  disk_write PROC
;;;151    #if _READONLY == 0
;;;152    DRESULT disk_write (
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;153    	BYTE drv,			/* Physical drive nmuber (0..) */
;;;154    	const BYTE *buff,	/* Data to be written */
;;;155    	DWORD sector,		/* Sector address (LBA) */
;;;156    	BYTE count			/* Number of sectors to write (1..255) */
;;;157    )
;;;158    {
000004  4680              MOV      r8,r0
000006  460e              MOV      r6,r1
000008  4614              MOV      r4,r2
00000a  461d              MOV      r5,r3
;;;159    	SD_Error Status = SD_OK;
00000c  272a              MOVS     r7,#0x2a
;;;160    	
;;;161    #if 1
;;;162    	while (count--)
00000e  e009              B        |L5.36|
                  |L5.16|
;;;163    	{
;;;164    		Status = SD_WriteBlock((uint8_t *)buff, sector << 9 ,SECTOR_SIZE);
000010  0261              LSLS     r1,r4,#9
000012  f44f7200          MOV      r2,#0x200
000016  4630              MOV      r0,r6
000018  f7fffffe          BL       SD_WriteBlock
00001c  4607              MOV      r7,r0
;;;165    		if (Status != SD_OK)
00001e  2f2a              CMP      r7,#0x2a
000020  d000              BEQ      |L5.36|
;;;166    		{
;;;167    			break;
000022  e004              B        |L5.46|
                  |L5.36|
000024  0028              MOVS     r0,r5                 ;162
000026  f1a50101          SUB      r1,r5,#1              ;162
00002a  b2cd              UXTB     r5,r1                 ;162
00002c  d1f0              BNE      |L5.16|
                  |L5.46|
00002e  bf00              NOP      
;;;168    		}
;;;169    	}
;;;170    #else		/* SD_WriteMultiBlocks() 偶尔会执行出错 */	
;;;171    	if (count == 1) 
;;;172    	{
;;;173    		Status = SD_WriteBlock((uint8_t *)buff, sector << 9 ,SECTOR_SIZE);
;;;174    	} 
;;;175    	else 
;;;176    	{
;;;177    		Status = SD_WriteMultiBlocks((uint8_t *)buff, sector << 9 ,SECTOR_SIZE, count);	
;;;178    	}
;;;179    #endif	
;;;180    
;;;181    	if (Status == SD_OK) 
000030  2f2a              CMP      r7,#0x2a
000032  d102              BNE      |L5.58|
;;;182    	{
;;;183    		return RES_OK;
000034  2000              MOVS     r0,#0
                  |L5.54|
;;;184    	} 
;;;185    	else
;;;186    	{
;;;187    		printf("Err: SD_WriteBlocks(,%d,%d)\r\n",sector,count);
;;;188    		return RES_ERROR;
;;;189    	}
;;;190    }
000036  e8bd81f0          POP      {r4-r8,pc}
                  |L5.58|
00003a  462a              MOV      r2,r5                 ;187
00003c  4621              MOV      r1,r4                 ;187
00003e  a002              ADR      r0,|L5.72|
000040  f7fffffe          BL       __2printf
000044  2001              MOVS     r0,#1                 ;188
000046  e7f6              B        |L5.54|
;;;191    #endif /* _READONLY */
                          ENDP

                  |L5.72|
000048  4572723a          DCB      "Err: SD_WriteBlocks(,%d,%d)\r\n",0
00004c  2053445f
000050  57726974
000054  65426c6f
000058  636b7328
00005c  2c25642c
000060  2564290d
000064  0a00    
000066  00                DCB      0
000067  00                DCB      0

                          AREA ||.data||, DATA, ALIGN=2

                  Mass_Block_Size
                          DCD      0x00000000
                  Mass_Block_Count
                          DCD      0x00000000

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -