ARM GAS /tmp/ccYOHnte.s page 1 1 .cpu cortex-m7 2 .arch armv7e-m 3 .fpu fpv5-d16 4 .eabi_attribute 28, 1 5 .eabi_attribute 20, 1 6 .eabi_attribute 21, 1 7 .eabi_attribute 23, 3 8 .eabi_attribute 24, 1 9 .eabi_attribute 25, 1 10 .eabi_attribute 26, 1 11 .eabi_attribute 30, 1 12 .eabi_attribute 34, 1 13 .eabi_attribute 18, 4 14 .file "sd_diskio.c" 15 .text 16 .Ltext0: 17 .cfi_sections .debug_frame 18 .file 1 "Src/sd_diskio.c" 19 .section .text.SD_CheckStatus,"ax",%progbits 20 .align 1 21 .syntax unified 22 .thumb 23 .thumb_func 25 SD_CheckStatus: 26 .LVL0: 27 .LFB1183: 1:Src/sd_diskio.c **** /* USER CODE BEGIN Header */ 2:Src/sd_diskio.c **** /** 3:Src/sd_diskio.c **** ****************************************************************************** 4:Src/sd_diskio.c **** * @file sd_diskio.c 5:Src/sd_diskio.c **** * @brief SD Disk I/O driver 6:Src/sd_diskio.c **** ****************************************************************************** 7:Src/sd_diskio.c **** * @attention 8:Src/sd_diskio.c **** * 9:Src/sd_diskio.c **** * Copyright (c) 2023 STMicroelectronics. 10:Src/sd_diskio.c **** * All rights reserved. 11:Src/sd_diskio.c **** * 12:Src/sd_diskio.c **** * This software is licensed under terms that can be found in the LICENSE file 13:Src/sd_diskio.c **** * in the root directory of this software component. 14:Src/sd_diskio.c **** * If no LICENSE file comes with this software, it is provided AS-IS. 15:Src/sd_diskio.c **** * 16:Src/sd_diskio.c **** ****************************************************************************** 17:Src/sd_diskio.c **** */ 18:Src/sd_diskio.c **** /* USER CODE END Header */ 19:Src/sd_diskio.c **** 20:Src/sd_diskio.c **** /* Note: code generation based on sd_diskio_template_bspv1.c v2.1.4 21:Src/sd_diskio.c **** as "Use dma template" is disabled. */ 22:Src/sd_diskio.c **** 23:Src/sd_diskio.c **** /* USER CODE BEGIN firstSection */ 24:Src/sd_diskio.c **** /* can be used to modify / undefine following code or add new definitions */ 25:Src/sd_diskio.c **** /* USER CODE END firstSection*/ 26:Src/sd_diskio.c **** 27:Src/sd_diskio.c **** /* Includes ------------------------------------------------------------------*/ 28:Src/sd_diskio.c **** #include "ff_gen_drv.h" 29:Src/sd_diskio.c **** #include "sd_diskio.h" 30:Src/sd_diskio.c **** 31:Src/sd_diskio.c **** /* Private typedef -----------------------------------------------------------*/ ARM GAS /tmp/ccYOHnte.s page 2 32:Src/sd_diskio.c **** /* Private define ------------------------------------------------------------*/ 33:Src/sd_diskio.c **** /* use the default SD timout as defined in the platform BSP driver*/ 34:Src/sd_diskio.c **** #if defined(SDMMC_DATATIMEOUT) 35:Src/sd_diskio.c **** #define SD_TIMEOUT SDMMC_DATATIMEOUT 36:Src/sd_diskio.c **** #elif defined(SD_DATATIMEOUT) 37:Src/sd_diskio.c **** #define SD_TIMEOUT SD_DATATIMEOUT 38:Src/sd_diskio.c **** #else 39:Src/sd_diskio.c **** #define SD_TIMEOUT 30 * 1000 40:Src/sd_diskio.c **** #endif 41:Src/sd_diskio.c **** 42:Src/sd_diskio.c **** #define SD_DEFAULT_BLOCK_SIZE 512 43:Src/sd_diskio.c **** 44:Src/sd_diskio.c **** /* 45:Src/sd_diskio.c **** * Depending on the use case, the SD card initialization could be done at the 46:Src/sd_diskio.c **** * application level: if it is the case define the flag below to disable 47:Src/sd_diskio.c **** * the BSP_SD_Init() call in the SD_Initialize() and add a call to 48:Src/sd_diskio.c **** * BSP_SD_Init() elsewhere in the application. 49:Src/sd_diskio.c **** */ 50:Src/sd_diskio.c **** /* USER CODE BEGIN disableSDInit */ 51:Src/sd_diskio.c **** /* #define DISABLE_SD_INIT */ 52:Src/sd_diskio.c **** /* USER CODE END disableSDInit */ 53:Src/sd_diskio.c **** 54:Src/sd_diskio.c **** /* Private variables ---------------------------------------------------------*/ 55:Src/sd_diskio.c **** /* Disk status */ 56:Src/sd_diskio.c **** static volatile DSTATUS Stat = STA_NOINIT; 57:Src/sd_diskio.c **** 58:Src/sd_diskio.c **** /* Private function prototypes -----------------------------------------------*/ 59:Src/sd_diskio.c **** static DSTATUS SD_CheckStatus(BYTE lun); 60:Src/sd_diskio.c **** DSTATUS SD_initialize (BYTE); 61:Src/sd_diskio.c **** DSTATUS SD_status (BYTE); 62:Src/sd_diskio.c **** DRESULT SD_read (BYTE, BYTE*, DWORD, UINT); 63:Src/sd_diskio.c **** #if _USE_WRITE == 1 64:Src/sd_diskio.c **** DRESULT SD_write (BYTE, const BYTE*, DWORD, UINT); 65:Src/sd_diskio.c **** #endif /* _USE_WRITE == 1 */ 66:Src/sd_diskio.c **** #if _USE_IOCTL == 1 67:Src/sd_diskio.c **** DRESULT SD_ioctl (BYTE, BYTE, void*); 68:Src/sd_diskio.c **** #endif /* _USE_IOCTL == 1 */ 69:Src/sd_diskio.c **** 70:Src/sd_diskio.c **** const Diskio_drvTypeDef SD_Driver = 71:Src/sd_diskio.c **** { 72:Src/sd_diskio.c **** SD_initialize, 73:Src/sd_diskio.c **** SD_status, 74:Src/sd_diskio.c **** SD_read, 75:Src/sd_diskio.c **** #if _USE_WRITE == 1 76:Src/sd_diskio.c **** SD_write, 77:Src/sd_diskio.c **** #endif /* _USE_WRITE == 1 */ 78:Src/sd_diskio.c **** 79:Src/sd_diskio.c **** #if _USE_IOCTL == 1 80:Src/sd_diskio.c **** SD_ioctl, 81:Src/sd_diskio.c **** #endif /* _USE_IOCTL == 1 */ 82:Src/sd_diskio.c **** }; 83:Src/sd_diskio.c **** 84:Src/sd_diskio.c **** /* USER CODE BEGIN beforeFunctionSection */ 85:Src/sd_diskio.c **** /* can be used to modify / undefine following code or add new code */ 86:Src/sd_diskio.c **** /* USER CODE END beforeFunctionSection */ 87:Src/sd_diskio.c **** 88:Src/sd_diskio.c **** /* Private functions ---------------------------------------------------------*/ ARM GAS /tmp/ccYOHnte.s page 3 89:Src/sd_diskio.c **** 90:Src/sd_diskio.c **** static DSTATUS SD_CheckStatus(BYTE lun) 91:Src/sd_diskio.c **** { 28 .loc 1 91 1 view -0 29 .cfi_startproc 30 @ args = 0, pretend = 0, frame = 0 31 @ frame_needed = 0, uses_anonymous_args = 0 32 .loc 1 91 1 is_stmt 0 view .LVU1 33 0000 08B5 push {r3, lr} 34 .LCFI0: 35 .cfi_def_cfa_offset 8 36 .cfi_offset 3, -8 37 .cfi_offset 14, -4 92:Src/sd_diskio.c **** Stat = STA_NOINIT; 38 .loc 1 92 3 is_stmt 1 view .LVU2 39 .loc 1 92 8 is_stmt 0 view .LVU3 40 0002 074B ldr r3, .L4 41 0004 0122 movs r2, #1 42 0006 1A70 strb r2, [r3] 93:Src/sd_diskio.c **** 94:Src/sd_diskio.c **** if(BSP_SD_GetCardState() == MSD_OK) 43 .loc 1 94 3 is_stmt 1 view .LVU4 44 .loc 1 94 6 is_stmt 0 view .LVU5 45 0008 FFF7FEFF bl BSP_SD_GetCardState 46 .LVL1: 47 .loc 1 94 5 discriminator 1 view .LVU6 48 000c 20B9 cbnz r0, .L2 95:Src/sd_diskio.c **** { 96:Src/sd_diskio.c **** Stat &= ~STA_NOINIT; 49 .loc 1 96 5 is_stmt 1 view .LVU7 50 .loc 1 96 10 is_stmt 0 view .LVU8 51 000e 044A ldr r2, .L4 52 0010 1378 ldrb r3, [r2] @ zero_extendqisi2 53 0012 03F0FE03 and r3, r3, #254 54 0016 1370 strb r3, [r2] 55 .L2: 97:Src/sd_diskio.c **** } 98:Src/sd_diskio.c **** 99:Src/sd_diskio.c **** return Stat; 56 .loc 1 99 3 is_stmt 1 view .LVU9 57 .loc 1 99 10 is_stmt 0 view .LVU10 58 0018 014B ldr r3, .L4 59 001a 1878 ldrb r0, [r3] @ zero_extendqisi2 100:Src/sd_diskio.c **** } 60 .loc 1 100 1 view .LVU11 61 001c 08BD pop {r3, pc} 62 .L5: 63 001e 00BF .align 2 64 .L4: 65 0020 00000000 .word Stat 66 .cfi_endproc 67 .LFE1183: 69 .section .text.SD_initialize,"ax",%progbits 70 .align 1 71 .global SD_initialize 72 .syntax unified 73 .thumb ARM GAS /tmp/ccYOHnte.s page 4 74 .thumb_func 76 SD_initialize: 77 .LVL2: 78 .LFB1184: 101:Src/sd_diskio.c **** 102:Src/sd_diskio.c **** /** 103:Src/sd_diskio.c **** * @brief Initializes a Drive 104:Src/sd_diskio.c **** * @param lun : not used 105:Src/sd_diskio.c **** * @retval DSTATUS: Operation status 106:Src/sd_diskio.c **** */ 107:Src/sd_diskio.c **** DSTATUS SD_initialize(BYTE lun) 108:Src/sd_diskio.c **** { 79 .loc 1 108 1 is_stmt 1 view -0 80 .cfi_startproc 81 @ args = 0, pretend = 0, frame = 0 82 @ frame_needed = 0, uses_anonymous_args = 0 83 .loc 1 108 1 is_stmt 0 view .LVU13 84 0000 10B5 push {r4, lr} 85 .LCFI1: 86 .cfi_def_cfa_offset 8 87 .cfi_offset 4, -8 88 .cfi_offset 14, -4 89 0002 0446 mov r4, r0 109:Src/sd_diskio.c **** Stat = STA_NOINIT; 90 .loc 1 109 1 is_stmt 1 view .LVU14 91 .loc 1 109 6 is_stmt 0 view .LVU15 92 0004 074B ldr r3, .L10 93 0006 0122 movs r2, #1 94 0008 1A70 strb r2, [r3] 110:Src/sd_diskio.c **** 111:Src/sd_diskio.c **** #if !defined(DISABLE_SD_INIT) 112:Src/sd_diskio.c **** 113:Src/sd_diskio.c **** if(BSP_SD_Init() == MSD_OK) 95 .loc 1 113 3 is_stmt 1 view .LVU16 96 .loc 1 113 6 is_stmt 0 view .LVU17 97 000a FFF7FEFF bl BSP_SD_Init 98 .LVL3: 99 .loc 1 113 5 discriminator 1 view .LVU18 100 000e 10B1 cbz r0, .L9 101 .L7: 114:Src/sd_diskio.c **** { 115:Src/sd_diskio.c **** Stat = SD_CheckStatus(lun); 116:Src/sd_diskio.c **** } 117:Src/sd_diskio.c **** 118:Src/sd_diskio.c **** #else 119:Src/sd_diskio.c **** Stat = SD_CheckStatus(lun); 120:Src/sd_diskio.c **** #endif 121:Src/sd_diskio.c **** 122:Src/sd_diskio.c **** return Stat; 102 .loc 1 122 3 is_stmt 1 view .LVU19 103 .loc 1 122 10 is_stmt 0 view .LVU20 104 0010 044B ldr r3, .L10 105 0012 1878 ldrb r0, [r3] @ zero_extendqisi2 123:Src/sd_diskio.c **** } 106 .loc 1 123 1 view .LVU21 107 0014 10BD pop {r4, pc} 108 .LVL4: ARM GAS /tmp/ccYOHnte.s page 5 109 .L9: 115:Src/sd_diskio.c **** } 110 .loc 1 115 5 is_stmt 1 view .LVU22 115:Src/sd_diskio.c **** } 111 .loc 1 115 12 is_stmt 0 view .LVU23 112 0016 2046 mov r0, r4 113 0018 FFF7FEFF bl SD_CheckStatus 114 .LVL5: 115:Src/sd_diskio.c **** } 115 .loc 1 115 10 discriminator 1 view .LVU24 116 001c 014B ldr r3, .L10 117 001e 1870 strb r0, [r3] 118 0020 F6E7 b .L7 119 .L11: 120 0022 00BF .align 2 121 .L10: 122 0024 00000000 .word Stat 123 .cfi_endproc 124 .LFE1184: 126 .section .text.SD_status,"ax",%progbits 127 .align 1 128 .global SD_status 129 .syntax unified 130 .thumb 131 .thumb_func 133 SD_status: 134 .LVL6: 135 .LFB1185: 124:Src/sd_diskio.c **** 125:Src/sd_diskio.c **** /** 126:Src/sd_diskio.c **** * @brief Gets Disk Status 127:Src/sd_diskio.c **** * @param lun : not used 128:Src/sd_diskio.c **** * @retval DSTATUS: Operation status 129:Src/sd_diskio.c **** */ 130:Src/sd_diskio.c **** DSTATUS SD_status(BYTE lun) 131:Src/sd_diskio.c **** { 136 .loc 1 131 1 is_stmt 1 view -0 137 .cfi_startproc 138 @ args = 0, pretend = 0, frame = 0 139 @ frame_needed = 0, uses_anonymous_args = 0 140 .loc 1 131 1 is_stmt 0 view .LVU26 141 0000 08B5 push {r3, lr} 142 .LCFI2: 143 .cfi_def_cfa_offset 8 144 .cfi_offset 3, -8 145 .cfi_offset 14, -4 132:Src/sd_diskio.c **** return SD_CheckStatus(lun); 146 .loc 1 132 3 is_stmt 1 view .LVU27 147 .loc 1 132 10 is_stmt 0 view .LVU28 148 0002 FFF7FEFF bl SD_CheckStatus 149 .LVL7: 133:Src/sd_diskio.c **** } 150 .loc 1 133 1 view .LVU29 151 0006 08BD pop {r3, pc} 152 .cfi_endproc 153 .LFE1185: 155 .section .text.SD_read,"ax",%progbits ARM GAS /tmp/ccYOHnte.s page 6 156 .align 1 157 .global SD_read 158 .syntax unified 159 .thumb 160 .thumb_func 162 SD_read: 163 .LVL8: 164 .LFB1186: 134:Src/sd_diskio.c **** 135:Src/sd_diskio.c **** /* USER CODE BEGIN beforeReadSection */ 136:Src/sd_diskio.c **** /* can be used to modify previous code / undefine following code / add new code */ 137:Src/sd_diskio.c **** /* USER CODE END beforeReadSection */ 138:Src/sd_diskio.c **** /** 139:Src/sd_diskio.c **** * @brief Reads Sector(s) 140:Src/sd_diskio.c **** * @param lun : not used 141:Src/sd_diskio.c **** * @param *buff: Data buffer to store read data 142:Src/sd_diskio.c **** * @param sector: Sector address (LBA) 143:Src/sd_diskio.c **** * @param count: Number of sectors to read (1..128) 144:Src/sd_diskio.c **** * @retval DRESULT: Operation result 145:Src/sd_diskio.c **** */ 146:Src/sd_diskio.c **** 147:Src/sd_diskio.c **** DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count) 148:Src/sd_diskio.c **** { 165 .loc 1 148 1 is_stmt 1 view -0 166 .cfi_startproc 167 @ args = 0, pretend = 0, frame = 0 168 @ frame_needed = 0, uses_anonymous_args = 0 169 .loc 1 148 1 is_stmt 0 view .LVU31 170 0000 08B5 push {r3, lr} 171 .LCFI3: 172 .cfi_def_cfa_offset 8 173 .cfi_offset 3, -8 174 .cfi_offset 14, -4 175 0002 0846 mov r0, r1 176 .LVL9: 177 .loc 1 148 1 view .LVU32 178 0004 1146 mov r1, r2 179 .LVL10: 180 .loc 1 148 1 view .LVU33 181 0006 1A46 mov r2, r3 182 .LVL11: 149:Src/sd_diskio.c **** DRESULT res = RES_ERROR; 183 .loc 1 149 3 is_stmt 1 view .LVU34 150:Src/sd_diskio.c **** 151:Src/sd_diskio.c **** if(BSP_SD_ReadBlocks((uint32_t*)buff, 184 .loc 1 151 3 view .LVU35 185 .loc 1 151 6 is_stmt 0 view .LVU36 186 0008 4FF0FF33 mov r3, #-1 187 .LVL12: 188 .loc 1 151 6 view .LVU37 189 000c FFF7FEFF bl BSP_SD_ReadBlocks 190 .LVL13: 191 .loc 1 151 5 discriminator 1 view .LVU38 192 0010 30B9 cbnz r0, .L17 193 .L16: 152:Src/sd_diskio.c **** (uint32_t) (sector), 153:Src/sd_diskio.c **** count, SD_TIMEOUT) == MSD_OK) ARM GAS /tmp/ccYOHnte.s page 7 154:Src/sd_diskio.c **** { 155:Src/sd_diskio.c **** /* wait until the read operation is finished */ 156:Src/sd_diskio.c **** while(BSP_SD_GetCardState()!= MSD_OK) 157:Src/sd_diskio.c **** { 158:Src/sd_diskio.c **** } 194 .loc 1 158 5 is_stmt 1 view .LVU39 156:Src/sd_diskio.c **** { 195 .loc 1 156 32 discriminator 1 view .LVU40 156:Src/sd_diskio.c **** { 196 .loc 1 156 11 is_stmt 0 discriminator 1 view .LVU41 197 0012 FFF7FEFF bl BSP_SD_GetCardState 198 .LVL14: 156:Src/sd_diskio.c **** { 199 .loc 1 156 32 discriminator 1 view .LVU42 200 0016 0346 mov r3, r0 201 0018 0028 cmp r0, #0 202 001a FAD1 bne .L16 203 .L15: 204 .LVL15: 159:Src/sd_diskio.c **** res = RES_OK; 160:Src/sd_diskio.c **** } 161:Src/sd_diskio.c **** 162:Src/sd_diskio.c **** return res; 205 .loc 1 162 3 is_stmt 1 view .LVU43 163:Src/sd_diskio.c **** } 206 .loc 1 163 1 is_stmt 0 view .LVU44 207 001c 1846 mov r0, r3 208 001e 08BD pop {r3, pc} 209 .LVL16: 210 .L17: 149:Src/sd_diskio.c **** 211 .loc 1 149 11 view .LVU45 212 0020 0123 movs r3, #1 213 0022 FBE7 b .L15 214 .cfi_endproc 215 .LFE1186: 217 .section .text.SD_write,"ax",%progbits 218 .align 1 219 .global SD_write 220 .syntax unified 221 .thumb 222 .thumb_func 224 SD_write: 225 .LVL17: 226 .LFB1187: 164:Src/sd_diskio.c **** 165:Src/sd_diskio.c **** /* USER CODE BEGIN beforeWriteSection */ 166:Src/sd_diskio.c **** /* can be used to modify previous code / undefine following code / add new code */ 167:Src/sd_diskio.c **** /* USER CODE END beforeWriteSection */ 168:Src/sd_diskio.c **** /** 169:Src/sd_diskio.c **** * @brief Writes Sector(s) 170:Src/sd_diskio.c **** * @param lun : not used 171:Src/sd_diskio.c **** * @param *buff: Data to be written 172:Src/sd_diskio.c **** * @param sector: Sector address (LBA) 173:Src/sd_diskio.c **** * @param count: Number of sectors to write (1..128) 174:Src/sd_diskio.c **** * @retval DRESULT: Operation result 175:Src/sd_diskio.c **** */ ARM GAS /tmp/ccYOHnte.s page 8 176:Src/sd_diskio.c **** #if _USE_WRITE == 1 177:Src/sd_diskio.c **** 178:Src/sd_diskio.c **** DRESULT SD_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count) 179:Src/sd_diskio.c **** { 227 .loc 1 179 1 is_stmt 1 view -0 228 .cfi_startproc 229 @ args = 0, pretend = 0, frame = 0 230 @ frame_needed = 0, uses_anonymous_args = 0 231 .loc 1 179 1 is_stmt 0 view .LVU47 232 0000 08B5 push {r3, lr} 233 .LCFI4: 234 .cfi_def_cfa_offset 8 235 .cfi_offset 3, -8 236 .cfi_offset 14, -4 237 0002 0846 mov r0, r1 238 .LVL18: 239 .loc 1 179 1 view .LVU48 240 0004 1146 mov r1, r2 241 .LVL19: 242 .loc 1 179 1 view .LVU49 243 0006 1A46 mov r2, r3 244 .LVL20: 180:Src/sd_diskio.c **** DRESULT res = RES_ERROR; 245 .loc 1 180 3 is_stmt 1 view .LVU50 181:Src/sd_diskio.c **** 182:Src/sd_diskio.c **** if(BSP_SD_WriteBlocks((uint32_t*)buff, 246 .loc 1 182 3 view .LVU51 247 .loc 1 182 6 is_stmt 0 view .LVU52 248 0008 4FF0FF33 mov r3, #-1 249 .LVL21: 250 .loc 1 182 6 view .LVU53 251 000c FFF7FEFF bl BSP_SD_WriteBlocks 252 .LVL22: 253 .loc 1 182 5 discriminator 1 view .LVU54 254 0010 30B9 cbnz r0, .L22 255 .L21: 183:Src/sd_diskio.c **** (uint32_t)(sector), 184:Src/sd_diskio.c **** count, SD_TIMEOUT) == MSD_OK) 185:Src/sd_diskio.c **** { 186:Src/sd_diskio.c **** /* wait until the Write operation is finished */ 187:Src/sd_diskio.c **** while(BSP_SD_GetCardState() != MSD_OK) 188:Src/sd_diskio.c **** { 189:Src/sd_diskio.c **** } 256 .loc 1 189 5 is_stmt 1 view .LVU55 187:Src/sd_diskio.c **** { 257 .loc 1 187 33 discriminator 1 view .LVU56 187:Src/sd_diskio.c **** { 258 .loc 1 187 11 is_stmt 0 discriminator 1 view .LVU57 259 0012 FFF7FEFF bl BSP_SD_GetCardState 260 .LVL23: 187:Src/sd_diskio.c **** { 261 .loc 1 187 33 discriminator 1 view .LVU58 262 0016 0346 mov r3, r0 263 0018 0028 cmp r0, #0 264 001a FAD1 bne .L21 265 .L20: 266 .LVL24: ARM GAS /tmp/ccYOHnte.s page 9 190:Src/sd_diskio.c **** res = RES_OK; 191:Src/sd_diskio.c **** } 192:Src/sd_diskio.c **** 193:Src/sd_diskio.c **** return res; 267 .loc 1 193 3 is_stmt 1 view .LVU59 194:Src/sd_diskio.c **** } 268 .loc 1 194 1 is_stmt 0 view .LVU60 269 001c 1846 mov r0, r3 270 001e 08BD pop {r3, pc} 271 .LVL25: 272 .L22: 180:Src/sd_diskio.c **** 273 .loc 1 180 11 view .LVU61 274 0020 0123 movs r3, #1 275 0022 FBE7 b .L20 276 .cfi_endproc 277 .LFE1187: 279 .section .text.SD_ioctl,"ax",%progbits 280 .align 1 281 .global SD_ioctl 282 .syntax unified 283 .thumb 284 .thumb_func 286 SD_ioctl: 287 .LVL26: 288 .LFB1188: 195:Src/sd_diskio.c **** #endif /* _USE_WRITE == 1 */ 196:Src/sd_diskio.c **** 197:Src/sd_diskio.c **** /* USER CODE BEGIN beforeIoctlSection */ 198:Src/sd_diskio.c **** /* can be used to modify previous code / undefine following code / add new code */ 199:Src/sd_diskio.c **** /* USER CODE END beforeIoctlSection */ 200:Src/sd_diskio.c **** /** 201:Src/sd_diskio.c **** * @brief I/O control operation 202:Src/sd_diskio.c **** * @param lun : not used 203:Src/sd_diskio.c **** * @param cmd: Control code 204:Src/sd_diskio.c **** * @param *buff: Buffer to send/receive control data 205:Src/sd_diskio.c **** * @retval DRESULT: Operation result 206:Src/sd_diskio.c **** */ 207:Src/sd_diskio.c **** #if _USE_IOCTL == 1 208:Src/sd_diskio.c **** DRESULT SD_ioctl(BYTE lun, BYTE cmd, void *buff) 209:Src/sd_diskio.c **** { 289 .loc 1 209 1 is_stmt 1 view -0 290 .cfi_startproc 291 @ args = 0, pretend = 0, frame = 32 292 @ frame_needed = 0, uses_anonymous_args = 0 293 .loc 1 209 1 is_stmt 0 view .LVU63 294 0000 30B5 push {r4, r5, lr} 295 .LCFI5: 296 .cfi_def_cfa_offset 12 297 .cfi_offset 4, -12 298 .cfi_offset 5, -8 299 .cfi_offset 14, -4 300 0002 89B0 sub sp, sp, #36 301 .LCFI6: 302 .cfi_def_cfa_offset 48 210:Src/sd_diskio.c **** DRESULT res = RES_ERROR; 303 .loc 1 210 3 is_stmt 1 view .LVU64 ARM GAS /tmp/ccYOHnte.s page 10 304 .LVL27: 211:Src/sd_diskio.c **** BSP_SD_CardInfo CardInfo; 305 .loc 1 211 3 view .LVU65 212:Src/sd_diskio.c **** 213:Src/sd_diskio.c **** if (Stat & STA_NOINIT) return RES_NOTRDY; 306 .loc 1 213 3 view .LVU66 307 .loc 1 213 12 is_stmt 0 view .LVU67 308 0004 134B ldr r3, .L34 309 0006 1878 ldrb r0, [r3] @ zero_extendqisi2 310 .LVL28: 311 .loc 1 213 6 view .LVU68 312 0008 10F00104 ands r4, r0, #1 313 000c 1BD1 bne .L31 314 000e 1546 mov r5, r2 214:Src/sd_diskio.c **** 215:Src/sd_diskio.c **** switch (cmd) 315 .loc 1 215 3 is_stmt 1 view .LVU69 316 0010 0329 cmp r1, #3 317 0012 1CD8 bhi .L32 318 0014 DFE801F0 tbb [pc, r1] 319 .L27: 320 0018 02 .byte (.L30-.L27)/2 321 0019 04 .byte (.L29-.L27)/2 322 001a 0A .byte (.L28-.L27)/2 323 001b 10 .byte (.L26-.L27)/2 324 .p2align 1 325 .L30: 326 001c 0C46 mov r4, r1 327 001e 13E0 b .L25 328 .L29: 216:Src/sd_diskio.c **** { 217:Src/sd_diskio.c **** /* Make sure that no pending write process */ 218:Src/sd_diskio.c **** case CTRL_SYNC : 219:Src/sd_diskio.c **** res = RES_OK; 220:Src/sd_diskio.c **** break; 221:Src/sd_diskio.c **** 222:Src/sd_diskio.c **** /* Get number of sectors on the disk (DWORD) */ 223:Src/sd_diskio.c **** case GET_SECTOR_COUNT : 224:Src/sd_diskio.c **** BSP_SD_GetCardInfo(&CardInfo); 329 .loc 1 224 5 view .LVU70 330 0020 6846 mov r0, sp 331 0022 FFF7FEFF bl BSP_SD_GetCardInfo 332 .LVL29: 225:Src/sd_diskio.c **** *(DWORD*)buff = CardInfo.LogBlockNbr; 333 .loc 1 225 5 view .LVU71 334 .loc 1 225 29 is_stmt 0 view .LVU72 335 0026 069B ldr r3, [sp, #24] 336 .loc 1 225 19 view .LVU73 337 0028 2B60 str r3, [r5] 226:Src/sd_diskio.c **** res = RES_OK; 338 .loc 1 226 5 is_stmt 1 view .LVU74 339 .LVL30: 227:Src/sd_diskio.c **** break; 340 .loc 1 227 5 view .LVU75 341 002a 0DE0 b .L25 342 .LVL31: 343 .L28: ARM GAS /tmp/ccYOHnte.s page 11 228:Src/sd_diskio.c **** 229:Src/sd_diskio.c **** /* Get R/W sector size (WORD) */ 230:Src/sd_diskio.c **** case GET_SECTOR_SIZE : 231:Src/sd_diskio.c **** BSP_SD_GetCardInfo(&CardInfo); 344 .loc 1 231 5 view .LVU76 345 002c 6846 mov r0, sp 346 002e FFF7FEFF bl BSP_SD_GetCardInfo 347 .LVL32: 232:Src/sd_diskio.c **** *(WORD*)buff = CardInfo.LogBlockSize; 348 .loc 1 232 5 view .LVU77 349 .loc 1 232 28 is_stmt 0 view .LVU78 350 0032 079B ldr r3, [sp, #28] 351 .loc 1 232 18 view .LVU79 352 0034 2B80 strh r3, [r5] @ movhi 233:Src/sd_diskio.c **** res = RES_OK; 353 .loc 1 233 5 is_stmt 1 view .LVU80 354 .LVL33: 234:Src/sd_diskio.c **** break; 355 .loc 1 234 5 view .LVU81 356 0036 07E0 b .L25 357 .LVL34: 358 .L26: 235:Src/sd_diskio.c **** 236:Src/sd_diskio.c **** /* Get erase block size in unit of sector (DWORD) */ 237:Src/sd_diskio.c **** case GET_BLOCK_SIZE : 238:Src/sd_diskio.c **** BSP_SD_GetCardInfo(&CardInfo); 359 .loc 1 238 5 view .LVU82 360 0038 6846 mov r0, sp 361 003a FFF7FEFF bl BSP_SD_GetCardInfo 362 .LVL35: 239:Src/sd_diskio.c **** *(DWORD*)buff = CardInfo.LogBlockSize / SD_DEFAULT_BLOCK_SIZE; 363 .loc 1 239 5 view .LVU83 364 .loc 1 239 29 is_stmt 0 view .LVU84 365 003e 079B ldr r3, [sp, #28] 366 .loc 1 239 43 view .LVU85 367 0040 5B0A lsrs r3, r3, #9 368 .loc 1 239 19 view .LVU86 369 0042 2B60 str r3, [r5] 240:Src/sd_diskio.c **** res = RES_OK; 370 .loc 1 240 5 is_stmt 1 view .LVU87 371 .LVL36: 241:Src/sd_diskio.c **** break; 372 .loc 1 241 5 view .LVU88 373 0044 00E0 b .L25 374 .LVL37: 375 .L31: 213:Src/sd_diskio.c **** 376 .loc 1 213 33 is_stmt 0 discriminator 1 view .LVU89 377 0046 0324 movs r4, #3 378 .LVL38: 379 .L25: 242:Src/sd_diskio.c **** 243:Src/sd_diskio.c **** default: 244:Src/sd_diskio.c **** res = RES_PARERR; 245:Src/sd_diskio.c **** } 246:Src/sd_diskio.c **** 247:Src/sd_diskio.c **** return res; ARM GAS /tmp/ccYOHnte.s page 12 248:Src/sd_diskio.c **** } 380 .loc 1 248 1 view .LVU90 381 0048 2046 mov r0, r4 382 004a 09B0 add sp, sp, #36 383 .LCFI7: 384 .cfi_remember_state 385 .cfi_def_cfa_offset 12 386 @ sp needed 387 004c 30BD pop {r4, r5, pc} 388 .LVL39: 389 .L32: 390 .LCFI8: 391 .cfi_restore_state 244:Src/sd_diskio.c **** } 392 .loc 1 244 9 view .LVU91 393 004e 0424 movs r4, #4 394 0050 FAE7 b .L25 395 .L35: 396 0052 00BF .align 2 397 .L34: 398 0054 00000000 .word Stat 399 .cfi_endproc 400 .LFE1188: 402 .global SD_Driver 403 .section .rodata.SD_Driver,"a" 404 .align 2 407 SD_Driver: 408 0000 00000000 .word SD_initialize 409 0004 00000000 .word SD_status 410 0008 00000000 .word SD_read 411 000c 00000000 .word SD_write 412 0010 00000000 .word SD_ioctl 413 .section .data.Stat,"aw" 416 Stat: 417 0000 01 .byte 1 418 .text 419 .Letext0: 420 .file 2 "Middlewares/Third_Party/FatFs/src/integer.h" 421 .file 3 "Middlewares/Third_Party/FatFs/src/diskio.h" 422 .file 4 "/usr/lib/gcc/arm-none-eabi/13.2.1/include/stdint.h" 423 .file 5 "Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_sd.h" 424 .file 6 "Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_dma.h" 425 .file 7 "Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_tim.h" 426 .file 8 "Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_rcc.h" 427 .file 9 "Middlewares/Third_Party/FatFs/src/ff_gen_drv.h" 428 .file 10 "Inc/bsp_driver_sd.h" 429 .file 11 "Inc/sd_diskio.h" ARM GAS /tmp/ccYOHnte.s page 13 DEFINED SYMBOLS *ABS*:00000000 sd_diskio.c /tmp/ccYOHnte.s:20 .text.SD_CheckStatus:00000000 $t /tmp/ccYOHnte.s:25 .text.SD_CheckStatus:00000000 SD_CheckStatus /tmp/ccYOHnte.s:65 .text.SD_CheckStatus:00000020 $d /tmp/ccYOHnte.s:416 .data.Stat:00000000 Stat /tmp/ccYOHnte.s:70 .text.SD_initialize:00000000 $t /tmp/ccYOHnte.s:76 .text.SD_initialize:00000000 SD_initialize /tmp/ccYOHnte.s:122 .text.SD_initialize:00000024 $d /tmp/ccYOHnte.s:127 .text.SD_status:00000000 $t /tmp/ccYOHnte.s:133 .text.SD_status:00000000 SD_status /tmp/ccYOHnte.s:156 .text.SD_read:00000000 $t /tmp/ccYOHnte.s:162 .text.SD_read:00000000 SD_read /tmp/ccYOHnte.s:218 .text.SD_write:00000000 $t /tmp/ccYOHnte.s:224 .text.SD_write:00000000 SD_write /tmp/ccYOHnte.s:280 .text.SD_ioctl:00000000 $t /tmp/ccYOHnte.s:286 .text.SD_ioctl:00000000 SD_ioctl /tmp/ccYOHnte.s:320 .text.SD_ioctl:00000018 $d /tmp/ccYOHnte.s:324 .text.SD_ioctl:0000001c $t /tmp/ccYOHnte.s:398 .text.SD_ioctl:00000054 $d /tmp/ccYOHnte.s:407 .rodata.SD_Driver:00000000 SD_Driver /tmp/ccYOHnte.s:404 .rodata.SD_Driver:00000000 $d UNDEFINED SYMBOLS BSP_SD_GetCardState BSP_SD_Init BSP_SD_ReadBlocks BSP_SD_WriteBlocks BSP_SD_GetCardInfo