From 82980c4cdc3e0ed1276b40682d76cbd20d30c0d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E9=97=BB=E9=A3=8E?= <53944749+wuwenfengmi1998@users.noreply.github.com> Date: Sat, 13 Mar 2021 17:10:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=86=E5=9B=A0=E4=B8=BA?= =?UTF-8?q?=E6=B1=89=E5=AD=97=E5=9C=A8=E4=B8=A4=E4=B8=AA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=9D=97=E7=9B=B4=E6=8E=A5=E5=AF=BC=E8=87=B4=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B5=81=E4=B9=B1=E7=A0=81=EF=BC=8C=20=E4=B8=8B?= =?UTF-8?q?=E4=B8=AA=E7=89=88=E6=9C=AC=E6=89=93=E7=AE=97=E4=B8=A4=E5=AD=97?= =?UTF-8?q?=E8=8A=82=E4=B8=A4=E4=B8=AA=E5=AD=97=E8=8A=82=E7=9A=84=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=EF=BC=8C=E8=BF=99=E6=A0=B7=E5=B0=B1=E5=B0=B1=E4=B8=8D?= =?UTF-8?q?=E6=80=95=E6=95=B0=E6=8D=AE=E5=9D=97=E4=B8=AD=20=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C=E5=A4=AA=E5=A4=9A=E5=AF=BC=E8=87=B4=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=8D=E4=B8=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 无闻风 <53944749+wuwenfengmi1998@users.noreply.github.com> --- 103ze/.settings/language.settings.xml | 4 +- 103ze/.settings/stm32cubeide.project.prefs | 4 +- 103ze/103ze_code.ioc | 84 +- 103ze/Core/Inc/main.h | 6 + 103ze/Core/Src/main.c | 8 +- 103ze/Debug/103ze_code.bin | Bin 27352 -> 30240 bytes 103ze/Debug/103ze_code.elf | Bin 1011288 -> 1021956 bytes 103ze/Debug/103ze_code.list | 21921 ++++++++-------- 103ze/Debug/103ze_code.map | 1549 +- 103ze/Debug/Core/Src/main.o | Bin 807692 -> 807960 bytes 103ze/Debug/Core/Src/main.su | 4 +- 103ze/Debug/Core/Src/stm32f1xx_hal_msp.o | Bin 800472 -> 800696 bytes 103ze/Debug/Core/Src/stm32f1xx_it.o | Bin 793956 -> 794176 bytes 103ze/Debug/Core/Src/syscalls.o | Bin 81376 -> 81376 bytes 103ze/Debug/Core/Src/sysmem.o | Bin 51292 -> 51292 bytes 103ze/Debug/Core/Src/system_stm32f1xx.o | Bin 792692 -> 792692 bytes .../Core/Startup/startup_stm32f103zetx.o | Bin 6176 -> 6176 bytes .../STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o | Bin 804364 -> 804364 bytes .../Src/stm32f1xx_hal_cortex.o | Bin 808120 -> 808120 bytes .../Src/stm32f1xx_hal_dma.o | Bin 806336 -> 806336 bytes .../Src/stm32f1xx_hal_exti.o | Bin 797452 -> 797452 bytes .../Src/stm32f1xx_hal_flash.o | Bin 800200 -> 800200 bytes .../Src/stm32f1xx_hal_flash_ex.o | Bin 803448 -> 803448 bytes .../Src/stm32f1xx_hal_gpio.o | Bin 798956 -> 798956 bytes .../Src/stm32f1xx_hal_gpio_ex.o | Bin 792200 -> 792200 bytes .../Src/stm32f1xx_hal_pwr.o | Bin 800848 -> 800848 bytes .../Src/stm32f1xx_hal_rcc.o | Bin 804552 -> 804552 bytes .../Src/stm32f1xx_hal_rcc_ex.o | Bin 795404 -> 795404 bytes .../Src/stm32f1xx_hal_spi.o | Bin 832848 -> 832848 bytes .../Src/stm32f1xx_hal_sram.o | Bin 806256 -> 806256 bytes .../Src/stm32f1xx_hal_tim.o | Bin 790332 -> 790332 bytes .../Src/stm32f1xx_hal_tim_ex.o | Bin 790340 -> 790340 bytes .../Src/stm32f1xx_ll_fsmc.o | Bin 804288 -> 804288 bytes 103ze/Debug/FATFS/App/fatfs.o | Bin 798344 -> 798564 bytes 103ze/Debug/FATFS/Target/user_diskio.o | Bin 824468 -> 824688 bytes .../Third_Party/FatFs/src/diskio.o | Bin 799400 -> 799620 bytes .../Middlewares/Third_Party/FatFs/src/ff.o | Bin 860344 -> 860564 bytes .../Third_Party/FatFs/src/ff_gen_drv.o | Bin 799316 -> 799536 bytes .../Third_Party/FatFs/src/option/syscall.o | Bin 818924 -> 819144 bytes 103ze/Debug/makefile | 4 +- 103ze/Debug/mycode/c.o | Bin 804348 -> 805712 bytes 103ze/Debug/mycode/c.su | 2 +- 103ze/Debug/mycode/falsh.o | Bin 795236 -> 795460 bytes 103ze/Debug/mycode/fatfs_sd.o | Bin 810192 -> 810456 bytes 103ze/Debug/mycode/fatfs_sd.su | 34 +- 103ze/Debug/mycode/lcd.o | Bin 811728 -> 811948 bytes 103ze/Debug/mycode/text.o | Bin 806572 -> 806820 bytes 103ze/mycode/c.c | 56 +- 103ze/mycode/fatfs_sd.c | 25 +- 103ze/mycode/text.c | 16 +- 50 files changed, 12650 insertions(+), 11067 deletions(-) diff --git a/103ze/.settings/language.settings.xml b/103ze/.settings/language.settings.xml index af83ebf..87ef363 100644 --- a/103ze/.settings/language.settings.xml +++ b/103ze/.settings/language.settings.xml @@ -13,7 +13,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/103ze/.settings/stm32cubeide.project.prefs b/103ze/.settings/stm32cubeide.project.prefs index 5c690d3..ce30672 100644 --- a/103ze/.settings/stm32cubeide.project.prefs +++ b/103ze/.settings/stm32cubeide.project.prefs @@ -1,4 +1,4 @@ 66BE74F758C12D739921AEA421D593D3=3 -8DF89ED150041C4CBC7CB9A9CAA90856=DE78FCE0BA5B3294914EFBF8CCE3C6CE -DC22A860405A8BF2F2C095E5B6529F12=C0E5DD146C4FCAF07F69BC2160CDF33F +8DF89ED150041C4CBC7CB9A9CAA90856=C51B2B4ECCDABDF7BBEE78EFB628823D +DC22A860405A8BF2F2C095E5B6529F12=C51B2B4ECCDABDF7BBEE78EFB628823D eclipse.preferences.version=1 diff --git a/103ze/103ze_code.ioc b/103ze/103ze_code.ioc index 776d7a4..91964bf 100644 --- a/103ze/103ze_code.ioc +++ b/103ze/103ze_code.ioc @@ -31,6 +31,7 @@ Mcu.IP3=RCC RCC.SDIOHCLKDiv2FreqValue=36000000 Mcu.IP0=FATFS Mcu.IP1=FSMC +PE4.GPIOParameters=GPIO_PuPd,GPIO_Label Mcu.UserConstants= Mcu.ThirdPartyNb=0 RCC.SDIOFreq_Value=72000000 @@ -39,25 +40,25 @@ Mcu.IPNb=6 ProjectManager.PreviousToolchain= PD4.Signal=FSMC_NOE RCC.APB2TimFreq_Value=72000000 -Mcu.Pin6=PE9 +Mcu.Pin6=PG0 PD0.Signal=FSMC_D2_DA2 +Mcu.Pin7=PE7 PD8.Signal=FSMC_D13_DA13 -Mcu.Pin7=PE10 -Mcu.Pin8=PE11 +Mcu.Pin8=PE8 OSC_OUT.Mode=HSE-External-Oscillator -Mcu.Pin9=PE12 +Mcu.Pin9=PE9 SH.FSMC_A10.0=FSMC_A10,A10_1 OSC_OUT.Signal=RCC_OSC_OUT RCC.AHBFreq_Value=72000000 -Mcu.Pin0=OSC_IN -Mcu.Pin1=OSC_OUT +Mcu.Pin0=PE2 +Mcu.Pin1=PE3 GPIO.groupedBy=Group By Peripherals -Mcu.Pin2=PB0 -Mcu.Pin3=PG0 +Mcu.Pin2=PE4 +Mcu.Pin3=OSC_IN SH.FSMC_D4_DA4.ConfNb=1 SH.FSMC_D12_DA12.ConfNb=1 -Mcu.Pin4=PE7 -Mcu.Pin5=PE8 +Mcu.Pin4=OSC_OUT +Mcu.Pin5=PB0 ProjectManager.ProjectBuild=false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false @@ -78,10 +79,15 @@ PA14.Mode=Serial_Wire PB14.Mode=Full_Duplex_Master SH.FSMC_D6_DA6.0=FSMC_D6,16b-d1 File.Version=6 +PE4.GPIO_Label=KEY_DOWN SPI2.CalculateBaudRate=18.0 MBits/s +PE3.GPIOParameters=GPIO_PuPd,GPIO_Label SH.FSMC_D9_DA9.ConfNb=1 +PE2.Signal=GPIO_Input +PE3.Locked=true NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false PE10.Signal=FSMC_D7_DA7 +PE4.Signal=GPIO_Input SH.FSMC_D5_DA5.0=FSMC_D5,16b-d1 ProjectManager.HalAssertFull=false PB0.Locked=true @@ -107,13 +113,14 @@ SPI2.Direction=SPI_DIRECTION_2LINES PB13.Mode=Full_Duplex_Master PE7.Signal=FSMC_D4_DA4 SH.FSMC_D7_DA7.ConfNb=1 +PE2.GPIO_Label=KEY_UP PD15.Signal=FSMC_D1_DA1 ProjectManager.CustomerFirmwarePackage= PG12.Signal=FSMC_NE4 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE ProjectManager.ProjectFileName=103ze_code.ioc SH.FSMC_D12_DA12.0=FSMC_D12,16b-d1 -Mcu.PinsNb=32 +Mcu.PinsNb=35 ProjectManager.NoMain=false SH.FSMC_D8_DA8.ConfNb=1 PD1.Signal=FSMC_D3_DA3 @@ -135,7 +142,9 @@ ProjectManager.TargetToolchain=STM32CubeIDE FSMC.DataSetupTime1=1 SH.FSMC_D5_DA5.ConfNb=1 SH.FSMC_A10.ConfNb=1 +PE4.Locked=true SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate +PE2.GPIOParameters=GPIO_PuPd,GPIO_Label ProjectManager.RegisterCallBack= OSC_IN.Signal=RCC_OSC_IN RCC.USBFreq_Value=72000000 @@ -143,6 +152,7 @@ PE11.Signal=FSMC_D8_DA8 PB12.GPIO_Speed=GPIO_SPEED_FREQ_HIGH VP_FATFS_VS_Generic.Mode=User_defined PB14.Signal=SPI2_MISO +PE2.GPIO_PuPd=GPIO_PULLUP SH.FSMC_D7_DA7.0=FSMC_D7,16b-d1 board=custom PG12.Mode=NorPsramChipSelect4_1 @@ -156,9 +166,13 @@ PE14.Signal=FSMC_D11_DA11 PE15.Signal=FSMC_D12_DA12 MxCube.Version=6.2.0 PE8.Signal=FSMC_D5_DA5 -Mcu.Pin30=VP_FATFS_VS_Generic +Mcu.Pin30=PD4 VP_SYS_VS_Systick.Mode=SysTick -Mcu.Pin31=VP_SYS_VS_Systick +Mcu.Pin33=VP_FATFS_VS_Generic +PE3.GPIO_PuPd=GPIO_PULLUP +Mcu.Pin34=VP_SYS_VS_Systick +Mcu.Pin31=PD5 +Mcu.Pin32=PG12 NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false PA13.Mode=Serial_Wire ProjectManager.FreePins=false @@ -166,22 +180,23 @@ RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1Ti ProjectManager.AskForMigrate=true Mcu.Name=STM32F103Z(C-D-E)Tx PE12.Signal=FSMC_D9_DA9 -Mcu.Pin26=PD2 -Mcu.Pin27=PD4 -Mcu.Pin24=PD0 +Mcu.Pin26=PA14 +Mcu.Pin27=PD0 +Mcu.Pin24=PD15 ProjectManager.UnderRoot=true -Mcu.Pin25=PD1 +PE4.GPIO_PuPd=GPIO_PULLUP +Mcu.Pin25=PA13 PD14.Signal=FSMC_D0_DA0 -Mcu.Pin28=PD5 +Mcu.Pin28=PD1 RCC.FSMCFreq_Value=72000000 -Mcu.Pin29=PG12 +Mcu.Pin29=PD2 ProjectManager.CoupleFile=false RCC.SYSCLKFreq_VALUE=72000000 -Mcu.Pin22=PA13 -Mcu.Pin23=PA14 +Mcu.Pin22=PD10 +Mcu.Pin23=PD14 RCC.TimSysFreq_Value=72000000 -Mcu.Pin20=PD14 -Mcu.Pin21=PD15 +Mcu.Pin20=PD8 +Mcu.Pin21=PD9 NVIC.ForceEnableDMAVector=true KeepUserPlacement=false OSC_IN.Mode=HSE-External-Oscillator @@ -190,23 +205,26 @@ ProjectManager.CompilerOptimize=6 SH.FSMC_D15_DA15.0=FSMC_D15,16b-d1 PA14.Signal=SYS_JTCK-SWCLK ProjectManager.HeapSize=0x800 -Mcu.Pin15=PB14 +Mcu.Pin15=PE15 NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false -Mcu.Pin16=PB15 +Mcu.Pin16=PB12 +Mcu.Pin13=PE13 SH.FSMC_D11_DA11.0=FSMC_D11,16b-d1 -Mcu.Pin13=PB12 -Mcu.Pin14=PB13 -Mcu.Pin19=PD10 +Mcu.Pin14=PE14 +Mcu.Pin19=PB15 SH.FSMC_NOE.0=FSMC_NOE,Lcd1 ProjectManager.ComputerToolchain=false -Mcu.Pin17=PD8 +Mcu.Pin17=PB13 SH.FSMC_D2_DA2.ConfNb=1 -Mcu.Pin18=PD9 +Mcu.Pin18=PB14 SH.FSMC_D1_DA1.ConfNb=1 NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 -Mcu.Pin11=PE14 -Mcu.Pin12=PE15 -Mcu.Pin10=PE13 +Mcu.Pin11=PE11 +Mcu.Pin12=PE12 +Mcu.Pin10=PE10 +PE3.Signal=GPIO_Input +PE2.Locked=true +PE3.GPIO_Label=KEY_B PD2.Signal=GPIO_Output RCC.APB1Freq_Value=36000000 PB0.Signal=GPIO_Output diff --git a/103ze/Core/Inc/main.h b/103ze/Core/Inc/main.h index 949eb16..193031e 100644 --- a/103ze/Core/Inc/main.h +++ b/103ze/Core/Inc/main.h @@ -58,6 +58,12 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ +#define KEY_UP_Pin GPIO_PIN_2 +#define KEY_UP_GPIO_Port GPIOE +#define KEY_B_Pin GPIO_PIN_3 +#define KEY_B_GPIO_Port GPIOE +#define KEY_DOWN_Pin GPIO_PIN_4 +#define KEY_DOWN_GPIO_Port GPIOE #define LCD_BL_Pin GPIO_PIN_0 #define LCD_BL_GPIO_Port GPIOB #define FLASH_E_Pin GPIO_PIN_12 diff --git a/103ze/Core/Src/main.c b/103ze/Core/Src/main.c index 835e581..9648f16 100644 --- a/103ze/Core/Src/main.c +++ b/103ze/Core/Src/main.c @@ -196,9 +196,9 @@ static void MX_GPIO_Init(void) GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); @@ -208,6 +208,12 @@ static void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(SD_E_GPIO_Port, SD_E_Pin, GPIO_PIN_RESET); + /*Configure GPIO pins : KEY_UP_Pin KEY_B_Pin KEY_DOWN_Pin */ + GPIO_InitStruct.Pin = KEY_UP_Pin|KEY_B_Pin|KEY_DOWN_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLUP; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + /*Configure GPIO pin : LCD_BL_Pin */ GPIO_InitStruct.Pin = LCD_BL_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; diff --git a/103ze/Debug/103ze_code.bin b/103ze/Debug/103ze_code.bin index e29b4d69b4c5cd2d754029cc3cbbe4b97025073c..680542d7c5af17f07a6234df77e8cea74d9662b7 100644 GIT binary patch delta 6483 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%0D}7hVKV@-^SGx0Y9(_uR#H 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: 8000208: b508 push {r3, lr} @@ -73,8 +73,8 @@ Disassembly of section .text: 8000212: f3af 8000 nop.w 8000216: bd08 pop {r3, pc} 8000218: 00000000 .word 0x00000000 - 800021c: 20000028 .word 0x20000028 - 8000220: 08005f34 .word 0x08005f34 + 800021c: 2000008c .word 0x2000008c + 8000220: 080069e0 .word 0x080069e0 08000224

: /** @@ -91,7 +91,7 @@ int main(void) /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); - 8000228: f000 faa8 bl 800077c + 8000228: f000 faec bl 8000804 /* USER CODE BEGIN Init */ /* USER CODE END Init */ @@ -107,14 +107,14 @@ int main(void) MX_GPIO_Init(); 8000230: f000 f884 bl 800033c MX_FSMC_Init(); - 8000234: f000 f908 bl 8000448 + 8000234: f000 f916 bl 8000464 MX_SPI2_Init(); 8000238: f000 f84a bl 80002d0 MX_FATFS_Init(); - 800023c: f002 f838 bl 80022b0 + 800023c: f002 f894 bl 8002368 /* USER CODE BEGIN 2 */ my_main(); - 8000240: f004 fa4e bl 80046e0 + 8000240: f004 faaa bl 8004798 /* USER CODE END 2 */ @@ -138,7 +138,7 @@ void SystemClock_Config(void) 8000250: 2228 movs r2, #40 ; 0x28 8000252: 2100 movs r1, #0 8000254: 4618 mov r0, r3 - 8000256: f005 fe65 bl 8005f24 + 8000256: f005 ff81 bl 800615c RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; 800025a: 1d3b adds r3, r7, #4 800025c: 2200 movs r2, #0 @@ -175,13 +175,13 @@ void SystemClock_Config(void) if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 800028a: f107 0318 add.w r3, r7, #24 800028e: 4618 mov r0, r3 - 8000290: f000 fd8a bl 8000da8 + 8000290: f000 fde6 bl 8000e60 8000294: 4603 mov r3, r0 8000296: 2b00 cmp r3, #0 8000298: d001 beq.n 800029e { Error_Handler(); - 800029a: f000 f939 bl 8000510 + 800029a: f000 f947 bl 800052c } /** Initializes the CPU, AHB and APB buses clocks */ @@ -206,13 +206,13 @@ void SystemClock_Config(void) 80002b4: 1d3b adds r3, r7, #4 80002b6: 2102 movs r1, #2 80002b8: 4618 mov r0, r3 - 80002ba: f000 fff5 bl 80012a8 + 80002ba: f001 f851 bl 8001360 80002be: 4603 mov r3, r0 80002c0: 2b00 cmp r3, #0 80002c2: d001 beq.n 80002c8 { Error_Handler(); - 80002c4: f000 f924 bl 8000510 + 80002c4: f000 f932 bl 800052c } } 80002c8: bf00 nop @@ -284,13 +284,13 @@ static void MX_SPI2_Init(void) 800031e: 62da str r2, [r3, #44] ; 0x2c if (HAL_SPI_Init(&hspi2) != HAL_OK) 8000320: 4804 ldr r0, [pc, #16] ; (8000334 ) - 8000322: f001 f929 bl 8001578 + 8000322: f001 f985 bl 8001630 8000326: 4603 mov r3, r0 8000328: 2b00 cmp r3, #0 800032a: d001 beq.n 8000330 { Error_Handler(); - 800032c: f000 f8f0 bl 8000510 + 800032c: f000 f8fe bl 800052c } /* USER CODE BEGIN SPI2_Init 2 */ @@ -299,7 +299,7 @@ static void MX_SPI2_Init(void) } 8000330: bf00 nop 8000332: bd80 pop {r7, pc} - 8000334: 20000074 .word 0x20000074 + 8000334: 200000e4 .word 0x200000e4 8000338: 40003800 .word 0x40003800 0800033c : @@ -321,57 +321,57 @@ static void MX_GPIO_Init(void) 800034e: 60da str r2, [r3, #12] /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOB_CLK_ENABLE(); - 8000350: 4b3a ldr r3, [pc, #232] ; (800043c ) + __HAL_RCC_GPIOE_CLK_ENABLE(); + 8000350: 4b40 ldr r3, [pc, #256] ; (8000454 ) 8000352: 699b ldr r3, [r3, #24] - 8000354: 4a39 ldr r2, [pc, #228] ; (800043c ) - 8000356: f043 0308 orr.w r3, r3, #8 + 8000354: 4a3f ldr r2, [pc, #252] ; (8000454 ) + 8000356: f043 0340 orr.w r3, r3, #64 ; 0x40 800035a: 6193 str r3, [r2, #24] - 800035c: 4b37 ldr r3, [pc, #220] ; (800043c ) + 800035c: 4b3d ldr r3, [pc, #244] ; (8000454 ) 800035e: 699b ldr r3, [r3, #24] - 8000360: f003 0308 and.w r3, r3, #8 + 8000360: f003 0340 and.w r3, r3, #64 ; 0x40 8000364: 617b str r3, [r7, #20] 8000366: 697b ldr r3, [r7, #20] - __HAL_RCC_GPIOG_CLK_ENABLE(); - 8000368: 4b34 ldr r3, [pc, #208] ; (800043c ) + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8000368: 4b3a ldr r3, [pc, #232] ; (8000454 ) 800036a: 699b ldr r3, [r3, #24] - 800036c: 4a33 ldr r2, [pc, #204] ; (800043c ) - 800036e: f443 7380 orr.w r3, r3, #256 ; 0x100 + 800036c: 4a39 ldr r2, [pc, #228] ; (8000454 ) + 800036e: f043 0308 orr.w r3, r3, #8 8000372: 6193 str r3, [r2, #24] - 8000374: 4b31 ldr r3, [pc, #196] ; (800043c ) + 8000374: 4b37 ldr r3, [pc, #220] ; (8000454 ) 8000376: 699b ldr r3, [r3, #24] - 8000378: f403 7380 and.w r3, r3, #256 ; 0x100 + 8000378: f003 0308 and.w r3, r3, #8 800037c: 613b str r3, [r7, #16] 800037e: 693b ldr r3, [r7, #16] - __HAL_RCC_GPIOE_CLK_ENABLE(); - 8000380: 4b2e ldr r3, [pc, #184] ; (800043c ) + __HAL_RCC_GPIOG_CLK_ENABLE(); + 8000380: 4b34 ldr r3, [pc, #208] ; (8000454 ) 8000382: 699b ldr r3, [r3, #24] - 8000384: 4a2d ldr r2, [pc, #180] ; (800043c ) - 8000386: f043 0340 orr.w r3, r3, #64 ; 0x40 + 8000384: 4a33 ldr r2, [pc, #204] ; (8000454 ) + 8000386: f443 7380 orr.w r3, r3, #256 ; 0x100 800038a: 6193 str r3, [r2, #24] - 800038c: 4b2b ldr r3, [pc, #172] ; (800043c ) + 800038c: 4b31 ldr r3, [pc, #196] ; (8000454 ) 800038e: 699b ldr r3, [r3, #24] - 8000390: f003 0340 and.w r3, r3, #64 ; 0x40 + 8000390: f403 7380 and.w r3, r3, #256 ; 0x100 8000394: 60fb str r3, [r7, #12] 8000396: 68fb ldr r3, [r7, #12] __HAL_RCC_GPIOD_CLK_ENABLE(); - 8000398: 4b28 ldr r3, [pc, #160] ; (800043c ) + 8000398: 4b2e ldr r3, [pc, #184] ; (8000454 ) 800039a: 699b ldr r3, [r3, #24] - 800039c: 4a27 ldr r2, [pc, #156] ; (800043c ) + 800039c: 4a2d ldr r2, [pc, #180] ; (8000454 ) 800039e: f043 0320 orr.w r3, r3, #32 80003a2: 6193 str r3, [r2, #24] - 80003a4: 4b25 ldr r3, [pc, #148] ; (800043c ) + 80003a4: 4b2b ldr r3, [pc, #172] ; (8000454 ) 80003a6: 699b ldr r3, [r3, #24] 80003a8: f003 0320 and.w r3, r3, #32 80003ac: 60bb str r3, [r7, #8] 80003ae: 68bb ldr r3, [r7, #8] __HAL_RCC_GPIOA_CLK_ENABLE(); - 80003b0: 4b22 ldr r3, [pc, #136] ; (800043c ) + 80003b0: 4b28 ldr r3, [pc, #160] ; (8000454 ) 80003b2: 699b ldr r3, [r3, #24] - 80003b4: 4a21 ldr r2, [pc, #132] ; (800043c ) + 80003b4: 4a27 ldr r2, [pc, #156] ; (8000454 ) 80003b6: f043 0304 orr.w r3, r3, #4 80003ba: 6193 str r3, [r2, #24] - 80003bc: 4b1f ldr r3, [pc, #124] ; (800043c ) + 80003bc: 4b25 ldr r3, [pc, #148] ; (8000454 ) 80003be: 699b ldr r3, [r3, #24] 80003c0: f003 0304 and.w r3, r3, #4 80003c4: 607b str r3, [r7, #4] @@ -381,15021 +381,16284 @@ static void MX_GPIO_Init(void) HAL_GPIO_WritePin(GPIOB, LCD_BL_Pin|FLASH_E_Pin, GPIO_PIN_RESET); 80003c8: 2200 movs r2, #0 80003ca: f241 0101 movw r1, #4097 ; 0x1001 - 80003ce: 481c ldr r0, [pc, #112] ; (8000440 ) - 80003d0: f000 fcd2 bl 8000d78 + 80003ce: 4822 ldr r0, [pc, #136] ; (8000458 ) + 80003d0: f000 fd2d bl 8000e2e /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(SD_E_GPIO_Port, SD_E_Pin, GPIO_PIN_RESET); 80003d4: 2200 movs r2, #0 80003d6: 2104 movs r1, #4 - 80003d8: 481a ldr r0, [pc, #104] ; (8000444 ) - 80003da: f000 fccd bl 8000d78 + 80003d8: 4820 ldr r0, [pc, #128] ; (800045c ) + 80003da: f000 fd28 bl 8000e2e + + /*Configure GPIO pins : KEY_UP_Pin KEY_B_Pin KEY_DOWN_Pin */ + GPIO_InitStruct.Pin = KEY_UP_Pin|KEY_B_Pin|KEY_DOWN_Pin; + 80003de: 231c movs r3, #28 + 80003e0: 61bb str r3, [r7, #24] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 80003e2: 2300 movs r3, #0 + 80003e4: 61fb str r3, [r7, #28] + GPIO_InitStruct.Pull = GPIO_PULLUP; + 80003e6: 2301 movs r3, #1 + 80003e8: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 80003ea: f107 0318 add.w r3, r7, #24 + 80003ee: 4619 mov r1, r3 + 80003f0: 481b ldr r0, [pc, #108] ; (8000460 ) + 80003f2: f000 fb71 bl 8000ad8 /*Configure GPIO pin : LCD_BL_Pin */ GPIO_InitStruct.Pin = LCD_BL_Pin; - 80003de: 2301 movs r3, #1 - 80003e0: 61bb str r3, [r7, #24] + 80003f6: 2301 movs r3, #1 + 80003f8: 61bb str r3, [r7, #24] GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 80003e2: 2301 movs r3, #1 - 80003e4: 61fb str r3, [r7, #28] + 80003fa: 2301 movs r3, #1 + 80003fc: 61fb str r3, [r7, #28] GPIO_InitStruct.Pull = GPIO_NOPULL; - 80003e6: 2300 movs r3, #0 - 80003e8: 623b str r3, [r7, #32] + 80003fe: 2300 movs r3, #0 + 8000400: 623b str r3, [r7, #32] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 80003ea: 2302 movs r3, #2 - 80003ec: 627b str r3, [r7, #36] ; 0x24 + 8000402: 2302 movs r3, #2 + 8000404: 627b str r3, [r7, #36] ; 0x24 HAL_GPIO_Init(LCD_BL_GPIO_Port, &GPIO_InitStruct); - 80003ee: f107 0318 add.w r3, r7, #24 - 80003f2: 4619 mov r1, r3 - 80003f4: 4812 ldr r0, [pc, #72] ; (8000440 ) - 80003f6: f000 fb2b bl 8000a50 + 8000406: f107 0318 add.w r3, r7, #24 + 800040a: 4619 mov r1, r3 + 800040c: 4812 ldr r0, [pc, #72] ; (8000458 ) + 800040e: f000 fb63 bl 8000ad8 /*Configure GPIO pin : FLASH_E_Pin */ GPIO_InitStruct.Pin = FLASH_E_Pin; - 80003fa: f44f 5380 mov.w r3, #4096 ; 0x1000 - 80003fe: 61bb str r3, [r7, #24] + 8000412: f44f 5380 mov.w r3, #4096 ; 0x1000 + 8000416: 61bb str r3, [r7, #24] GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 8000400: 2301 movs r3, #1 - 8000402: 61fb str r3, [r7, #28] + 8000418: 2301 movs r3, #1 + 800041a: 61fb str r3, [r7, #28] GPIO_InitStruct.Pull = GPIO_NOPULL; - 8000404: 2300 movs r3, #0 - 8000406: 623b str r3, [r7, #32] + 800041c: 2300 movs r3, #0 + 800041e: 623b str r3, [r7, #32] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 8000408: 2303 movs r3, #3 - 800040a: 627b str r3, [r7, #36] ; 0x24 + 8000420: 2303 movs r3, #3 + 8000422: 627b str r3, [r7, #36] ; 0x24 HAL_GPIO_Init(FLASH_E_GPIO_Port, &GPIO_InitStruct); - 800040c: f107 0318 add.w r3, r7, #24 - 8000410: 4619 mov r1, r3 - 8000412: 480b ldr r0, [pc, #44] ; (8000440 ) - 8000414: f000 fb1c bl 8000a50 + 8000424: f107 0318 add.w r3, r7, #24 + 8000428: 4619 mov r1, r3 + 800042a: 480b ldr r0, [pc, #44] ; (8000458 ) + 800042c: f000 fb54 bl 8000ad8 /*Configure GPIO pin : SD_E_Pin */ GPIO_InitStruct.Pin = SD_E_Pin; - 8000418: 2304 movs r3, #4 - 800041a: 61bb str r3, [r7, #24] + 8000430: 2304 movs r3, #4 + 8000432: 61bb str r3, [r7, #24] GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 800041c: 2301 movs r3, #1 - 800041e: 61fb str r3, [r7, #28] + 8000434: 2301 movs r3, #1 + 8000436: 61fb str r3, [r7, #28] GPIO_InitStruct.Pull = GPIO_NOPULL; - 8000420: 2300 movs r3, #0 - 8000422: 623b str r3, [r7, #32] + 8000438: 2300 movs r3, #0 + 800043a: 623b str r3, [r7, #32] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 8000424: 2303 movs r3, #3 - 8000426: 627b str r3, [r7, #36] ; 0x24 + 800043c: 2303 movs r3, #3 + 800043e: 627b str r3, [r7, #36] ; 0x24 HAL_GPIO_Init(SD_E_GPIO_Port, &GPIO_InitStruct); - 8000428: f107 0318 add.w r3, r7, #24 - 800042c: 4619 mov r1, r3 - 800042e: 4805 ldr r0, [pc, #20] ; (8000444 ) - 8000430: f000 fb0e bl 8000a50 + 8000440: f107 0318 add.w r3, r7, #24 + 8000444: 4619 mov r1, r3 + 8000446: 4805 ldr r0, [pc, #20] ; (800045c ) + 8000448: f000 fb46 bl 8000ad8 } - 8000434: bf00 nop - 8000436: 3728 adds r7, #40 ; 0x28 - 8000438: 46bd mov sp, r7 - 800043a: bd80 pop {r7, pc} - 800043c: 40021000 .word 0x40021000 - 8000440: 40010c00 .word 0x40010c00 - 8000444: 40011400 .word 0x40011400 + 800044c: bf00 nop + 800044e: 3728 adds r7, #40 ; 0x28 + 8000450: 46bd mov sp, r7 + 8000452: bd80 pop {r7, pc} + 8000454: 40021000 .word 0x40021000 + 8000458: 40010c00 .word 0x40010c00 + 800045c: 40011400 .word 0x40011400 + 8000460: 40011800 .word 0x40011800 -08000448 : +08000464 : /* FSMC initialization function */ static void MX_FSMC_Init(void) { - 8000448: b580 push {r7, lr} - 800044a: b088 sub sp, #32 - 800044c: af00 add r7, sp, #0 + 8000464: b580 push {r7, lr} + 8000466: b088 sub sp, #32 + 8000468: af00 add r7, sp, #0 /* USER CODE BEGIN FSMC_Init 0 */ /* USER CODE END FSMC_Init 0 */ FSMC_NORSRAM_TimingTypeDef Timing = {0}; - 800044e: 1d3b adds r3, r7, #4 - 8000450: 2200 movs r2, #0 - 8000452: 601a str r2, [r3, #0] - 8000454: 605a str r2, [r3, #4] - 8000456: 609a str r2, [r3, #8] - 8000458: 60da str r2, [r3, #12] - 800045a: 611a str r2, [r3, #16] - 800045c: 615a str r2, [r3, #20] - 800045e: 619a str r2, [r3, #24] + 800046a: 1d3b adds r3, r7, #4 + 800046c: 2200 movs r2, #0 + 800046e: 601a str r2, [r3, #0] + 8000470: 605a str r2, [r3, #4] + 8000472: 609a str r2, [r3, #8] + 8000474: 60da str r2, [r3, #12] + 8000476: 611a str r2, [r3, #16] + 8000478: 615a str r2, [r3, #20] + 800047a: 619a str r2, [r3, #24] /* USER CODE END FSMC_Init 1 */ /** Perform the SRAM1 memory initialization sequence */ hsram1.Instance = FSMC_NORSRAM_DEVICE; - 8000460: 4b28 ldr r3, [pc, #160] ; (8000504 ) - 8000462: f04f 4220 mov.w r2, #2684354560 ; 0xa0000000 - 8000466: 601a str r2, [r3, #0] + 800047c: 4b28 ldr r3, [pc, #160] ; (8000520 ) + 800047e: f04f 4220 mov.w r2, #2684354560 ; 0xa0000000 + 8000482: 601a str r2, [r3, #0] hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; - 8000468: 4b26 ldr r3, [pc, #152] ; (8000504 ) - 800046a: 4a27 ldr r2, [pc, #156] ; (8000508 ) - 800046c: 605a str r2, [r3, #4] + 8000484: 4b26 ldr r3, [pc, #152] ; (8000520 ) + 8000486: 4a27 ldr r2, [pc, #156] ; (8000524 ) + 8000488: 605a str r2, [r3, #4] /* hsram1.Init */ hsram1.Init.NSBank = FSMC_NORSRAM_BANK4; - 800046e: 4b25 ldr r3, [pc, #148] ; (8000504 ) - 8000470: 2206 movs r2, #6 - 8000472: 609a str r2, [r3, #8] + 800048a: 4b25 ldr r3, [pc, #148] ; (8000520 ) + 800048c: 2206 movs r2, #6 + 800048e: 609a str r2, [r3, #8] hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; - 8000474: 4b23 ldr r3, [pc, #140] ; (8000504 ) - 8000476: 2200 movs r2, #0 - 8000478: 60da str r2, [r3, #12] + 8000490: 4b23 ldr r3, [pc, #140] ; (8000520 ) + 8000492: 2200 movs r2, #0 + 8000494: 60da str r2, [r3, #12] hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; - 800047a: 4b22 ldr r3, [pc, #136] ; (8000504 ) - 800047c: 2200 movs r2, #0 - 800047e: 611a str r2, [r3, #16] + 8000496: 4b22 ldr r3, [pc, #136] ; (8000520 ) + 8000498: 2200 movs r2, #0 + 800049a: 611a str r2, [r3, #16] hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; - 8000480: 4b20 ldr r3, [pc, #128] ; (8000504 ) - 8000482: 2210 movs r2, #16 - 8000484: 615a str r2, [r3, #20] + 800049c: 4b20 ldr r3, [pc, #128] ; (8000520 ) + 800049e: 2210 movs r2, #16 + 80004a0: 615a str r2, [r3, #20] hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; - 8000486: 4b1f ldr r3, [pc, #124] ; (8000504 ) - 8000488: 2200 movs r2, #0 - 800048a: 619a str r2, [r3, #24] + 80004a2: 4b1f ldr r3, [pc, #124] ; (8000520 ) + 80004a4: 2200 movs r2, #0 + 80004a6: 619a str r2, [r3, #24] hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; - 800048c: 4b1d ldr r3, [pc, #116] ; (8000504 ) - 800048e: 2200 movs r2, #0 - 8000490: 61da str r2, [r3, #28] + 80004a8: 4b1d ldr r3, [pc, #116] ; (8000520 ) + 80004aa: 2200 movs r2, #0 + 80004ac: 61da str r2, [r3, #28] hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; - 8000492: 4b1c ldr r3, [pc, #112] ; (8000504 ) - 8000494: 2200 movs r2, #0 - 8000496: 621a str r2, [r3, #32] + 80004ae: 4b1c ldr r3, [pc, #112] ; (8000520 ) + 80004b0: 2200 movs r2, #0 + 80004b2: 621a str r2, [r3, #32] hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; - 8000498: 4b1a ldr r3, [pc, #104] ; (8000504 ) - 800049a: 2200 movs r2, #0 - 800049c: 625a str r2, [r3, #36] ; 0x24 + 80004b4: 4b1a ldr r3, [pc, #104] ; (8000520 ) + 80004b6: 2200 movs r2, #0 + 80004b8: 625a str r2, [r3, #36] ; 0x24 hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; - 800049e: 4b19 ldr r3, [pc, #100] ; (8000504 ) - 80004a0: f44f 5280 mov.w r2, #4096 ; 0x1000 - 80004a4: 629a str r2, [r3, #40] ; 0x28 + 80004ba: 4b19 ldr r3, [pc, #100] ; (8000520 ) + 80004bc: f44f 5280 mov.w r2, #4096 ; 0x1000 + 80004c0: 629a str r2, [r3, #40] ; 0x28 hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; - 80004a6: 4b17 ldr r3, [pc, #92] ; (8000504 ) - 80004a8: 2200 movs r2, #0 - 80004aa: 62da str r2, [r3, #44] ; 0x2c + 80004c2: 4b17 ldr r3, [pc, #92] ; (8000520 ) + 80004c4: 2200 movs r2, #0 + 80004c6: 62da str r2, [r3, #44] ; 0x2c hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; - 80004ac: 4b15 ldr r3, [pc, #84] ; (8000504 ) - 80004ae: 2200 movs r2, #0 - 80004b0: 631a str r2, [r3, #48] ; 0x30 + 80004c8: 4b15 ldr r3, [pc, #84] ; (8000520 ) + 80004ca: 2200 movs r2, #0 + 80004cc: 631a str r2, [r3, #48] ; 0x30 hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; - 80004b2: 4b14 ldr r3, [pc, #80] ; (8000504 ) - 80004b4: 2200 movs r2, #0 - 80004b6: 635a str r2, [r3, #52] ; 0x34 + 80004ce: 4b14 ldr r3, [pc, #80] ; (8000520 ) + 80004d0: 2200 movs r2, #0 + 80004d2: 635a str r2, [r3, #52] ; 0x34 hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; - 80004b8: 4b12 ldr r3, [pc, #72] ; (8000504 ) - 80004ba: 2200 movs r2, #0 - 80004bc: 639a str r2, [r3, #56] ; 0x38 + 80004d4: 4b12 ldr r3, [pc, #72] ; (8000520 ) + 80004d6: 2200 movs r2, #0 + 80004d8: 639a str r2, [r3, #56] ; 0x38 /* Timing */ Timing.AddressSetupTime = 0; - 80004be: 2300 movs r3, #0 - 80004c0: 607b str r3, [r7, #4] + 80004da: 2300 movs r3, #0 + 80004dc: 607b str r3, [r7, #4] Timing.AddressHoldTime = 15; - 80004c2: 230f movs r3, #15 - 80004c4: 60bb str r3, [r7, #8] + 80004de: 230f movs r3, #15 + 80004e0: 60bb str r3, [r7, #8] Timing.DataSetupTime = 1; - 80004c6: 2301 movs r3, #1 - 80004c8: 60fb str r3, [r7, #12] + 80004e2: 2301 movs r3, #1 + 80004e4: 60fb str r3, [r7, #12] Timing.BusTurnAroundDuration = 15; - 80004ca: 230f movs r3, #15 - 80004cc: 613b str r3, [r7, #16] + 80004e6: 230f movs r3, #15 + 80004e8: 613b str r3, [r7, #16] Timing.CLKDivision = 16; - 80004ce: 2310 movs r3, #16 - 80004d0: 617b str r3, [r7, #20] + 80004ea: 2310 movs r3, #16 + 80004ec: 617b str r3, [r7, #20] Timing.DataLatency = 17; - 80004d2: 2311 movs r3, #17 - 80004d4: 61bb str r3, [r7, #24] + 80004ee: 2311 movs r3, #17 + 80004f0: 61bb str r3, [r7, #24] Timing.AccessMode = FSMC_ACCESS_MODE_A; - 80004d6: 2300 movs r3, #0 - 80004d8: 61fb str r3, [r7, #28] + 80004f2: 2300 movs r3, #0 + 80004f4: 61fb str r3, [r7, #28] /* ExtTiming */ if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK) - 80004da: 1d3b adds r3, r7, #4 - 80004dc: 2200 movs r2, #0 - 80004de: 4619 mov r1, r3 - 80004e0: 4808 ldr r0, [pc, #32] ; (8000504 ) - 80004e2: f001 fdc1 bl 8002068 - 80004e6: 4603 mov r3, r0 - 80004e8: 2b00 cmp r3, #0 - 80004ea: d001 beq.n 80004f0 + 80004f6: 1d3b adds r3, r7, #4 + 80004f8: 2200 movs r2, #0 + 80004fa: 4619 mov r1, r3 + 80004fc: 4808 ldr r0, [pc, #32] ; (8000520 ) + 80004fe: f001 fe0f bl 8002120 + 8000502: 4603 mov r3, r0 + 8000504: 2b00 cmp r3, #0 + 8000506: d001 beq.n 800050c { Error_Handler( ); - 80004ec: f000 f810 bl 8000510 + 8000508: f000 f810 bl 800052c } /** Disconnect NADV */ __HAL_AFIO_FSMCNADV_DISCONNECTED(); - 80004f0: 4b06 ldr r3, [pc, #24] ; (800050c ) - 80004f2: 69db ldr r3, [r3, #28] - 80004f4: 4a05 ldr r2, [pc, #20] ; (800050c ) - 80004f6: f443 6380 orr.w r3, r3, #1024 ; 0x400 - 80004fa: 61d3 str r3, [r2, #28] + 800050c: 4b06 ldr r3, [pc, #24] ; (8000528 ) + 800050e: 69db ldr r3, [r3, #28] + 8000510: 4a05 ldr r2, [pc, #20] ; (8000528 ) + 8000512: f443 6380 orr.w r3, r3, #1024 ; 0x400 + 8000516: 61d3 str r3, [r2, #28] /* USER CODE BEGIN FSMC_Init 2 */ /* USER CODE END FSMC_Init 2 */ } - 80004fc: bf00 nop - 80004fe: 3720 adds r7, #32 - 8000500: 46bd mov sp, r7 - 8000502: bd80 pop {r7, pc} - 8000504: 200000cc .word 0x200000cc - 8000508: a0000104 .word 0xa0000104 - 800050c: 40010000 .word 0x40010000 + 8000518: bf00 nop + 800051a: 3720 adds r7, #32 + 800051c: 46bd mov sp, r7 + 800051e: bd80 pop {r7, pc} + 8000520: 2000013c .word 0x2000013c + 8000524: a0000104 .word 0xa0000104 + 8000528: 40010000 .word 0x40010000 -08000510 : +0800052c : /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { - 8000510: b480 push {r7} - 8000512: af00 add r7, sp, #0 + 800052c: b480 push {r7} + 800052e: af00 add r7, sp, #0 \details Disables IRQ interrupts by setting the I-bit in the CPSR. Can only be executed in Privileged modes. */ __STATIC_FORCEINLINE void __disable_irq(void) { __ASM volatile ("cpsid i" : : : "memory"); - 8000514: b672 cpsid i + 8000530: b672 cpsid i } - 8000516: bf00 nop + 8000532: bf00 nop /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) - 8000518: e7fe b.n 8000518 + 8000534: e7fe b.n 8000534 ... -0800051c : +08000538 : /* USER CODE END 0 */ /** * Initializes the Global MSP. */ void HAL_MspInit(void) { - 800051c: b480 push {r7} - 800051e: b085 sub sp, #20 - 8000520: af00 add r7, sp, #0 + 8000538: b480 push {r7} + 800053a: b085 sub sp, #20 + 800053c: af00 add r7, sp, #0 /* USER CODE BEGIN MspInit 0 */ /* USER CODE END MspInit 0 */ __HAL_RCC_AFIO_CLK_ENABLE(); - 8000522: 4b15 ldr r3, [pc, #84] ; (8000578 ) - 8000524: 699b ldr r3, [r3, #24] - 8000526: 4a14 ldr r2, [pc, #80] ; (8000578 ) - 8000528: f043 0301 orr.w r3, r3, #1 - 800052c: 6193 str r3, [r2, #24] - 800052e: 4b12 ldr r3, [pc, #72] ; (8000578 ) - 8000530: 699b ldr r3, [r3, #24] - 8000532: f003 0301 and.w r3, r3, #1 - 8000536: 60bb str r3, [r7, #8] - 8000538: 68bb ldr r3, [r7, #8] + 800053e: 4b15 ldr r3, [pc, #84] ; (8000594 ) + 8000540: 699b ldr r3, [r3, #24] + 8000542: 4a14 ldr r2, [pc, #80] ; (8000594 ) + 8000544: f043 0301 orr.w r3, r3, #1 + 8000548: 6193 str r3, [r2, #24] + 800054a: 4b12 ldr r3, [pc, #72] ; (8000594 ) + 800054c: 699b ldr r3, [r3, #24] + 800054e: f003 0301 and.w r3, r3, #1 + 8000552: 60bb str r3, [r7, #8] + 8000554: 68bb ldr r3, [r7, #8] __HAL_RCC_PWR_CLK_ENABLE(); - 800053a: 4b0f ldr r3, [pc, #60] ; (8000578 ) - 800053c: 69db ldr r3, [r3, #28] - 800053e: 4a0e ldr r2, [pc, #56] ; (8000578 ) - 8000540: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 - 8000544: 61d3 str r3, [r2, #28] - 8000546: 4b0c ldr r3, [pc, #48] ; (8000578 ) - 8000548: 69db ldr r3, [r3, #28] - 800054a: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 800054e: 607b str r3, [r7, #4] - 8000550: 687b ldr r3, [r7, #4] + 8000556: 4b0f ldr r3, [pc, #60] ; (8000594 ) + 8000558: 69db ldr r3, [r3, #28] + 800055a: 4a0e ldr r2, [pc, #56] ; (8000594 ) + 800055c: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 + 8000560: 61d3 str r3, [r2, #28] + 8000562: 4b0c ldr r3, [pc, #48] ; (8000594 ) + 8000564: 69db ldr r3, [r3, #28] + 8000566: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 800056a: 607b str r3, [r7, #4] + 800056c: 687b ldr r3, [r7, #4] /* System interrupt init*/ /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled */ __HAL_AFIO_REMAP_SWJ_NOJTAG(); - 8000552: 4b0a ldr r3, [pc, #40] ; (800057c ) - 8000554: 685b ldr r3, [r3, #4] - 8000556: 60fb str r3, [r7, #12] - 8000558: 68fb ldr r3, [r7, #12] - 800055a: f023 63e0 bic.w r3, r3, #117440512 ; 0x7000000 - 800055e: 60fb str r3, [r7, #12] - 8000560: 68fb ldr r3, [r7, #12] - 8000562: f043 7300 orr.w r3, r3, #33554432 ; 0x2000000 - 8000566: 60fb str r3, [r7, #12] - 8000568: 4a04 ldr r2, [pc, #16] ; (800057c ) - 800056a: 68fb ldr r3, [r7, #12] - 800056c: 6053 str r3, [r2, #4] + 800056e: 4b0a ldr r3, [pc, #40] ; (8000598 ) + 8000570: 685b ldr r3, [r3, #4] + 8000572: 60fb str r3, [r7, #12] + 8000574: 68fb ldr r3, [r7, #12] + 8000576: f023 63e0 bic.w r3, r3, #117440512 ; 0x7000000 + 800057a: 60fb str r3, [r7, #12] + 800057c: 68fb ldr r3, [r7, #12] + 800057e: f043 7300 orr.w r3, r3, #33554432 ; 0x2000000 + 8000582: 60fb str r3, [r7, #12] + 8000584: 4a04 ldr r2, [pc, #16] ; (8000598 ) + 8000586: 68fb ldr r3, [r7, #12] + 8000588: 6053 str r3, [r2, #4] /* USER CODE BEGIN MspInit 1 */ /* USER CODE END MspInit 1 */ } - 800056e: bf00 nop - 8000570: 3714 adds r7, #20 - 8000572: 46bd mov sp, r7 - 8000574: bc80 pop {r7} - 8000576: 4770 bx lr - 8000578: 40021000 .word 0x40021000 - 800057c: 40010000 .word 0x40010000 + 800058a: bf00 nop + 800058c: 3714 adds r7, #20 + 800058e: 46bd mov sp, r7 + 8000590: bc80 pop {r7} + 8000592: 4770 bx lr + 8000594: 40021000 .word 0x40021000 + 8000598: 40010000 .word 0x40010000 -08000580 : +0800059c : * This function configures the hardware resources used in this example * @param hspi: SPI handle pointer * @retval None */ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) { - 8000580: b580 push {r7, lr} - 8000582: b088 sub sp, #32 - 8000584: af00 add r7, sp, #0 - 8000586: 6078 str r0, [r7, #4] + 800059c: b580 push {r7, lr} + 800059e: b088 sub sp, #32 + 80005a0: af00 add r7, sp, #0 + 80005a2: 6078 str r0, [r7, #4] GPIO_InitTypeDef GPIO_InitStruct = {0}; - 8000588: f107 0310 add.w r3, r7, #16 - 800058c: 2200 movs r2, #0 - 800058e: 601a str r2, [r3, #0] - 8000590: 605a str r2, [r3, #4] - 8000592: 609a str r2, [r3, #8] - 8000594: 60da str r2, [r3, #12] + 80005a4: f107 0310 add.w r3, r7, #16 + 80005a8: 2200 movs r2, #0 + 80005aa: 601a str r2, [r3, #0] + 80005ac: 605a str r2, [r3, #4] + 80005ae: 609a str r2, [r3, #8] + 80005b0: 60da str r2, [r3, #12] if(hspi->Instance==SPI2) - 8000596: 687b ldr r3, [r7, #4] - 8000598: 681b ldr r3, [r3, #0] - 800059a: 4a1c ldr r2, [pc, #112] ; (800060c ) - 800059c: 4293 cmp r3, r2 - 800059e: d131 bne.n 8000604 + 80005b2: 687b ldr r3, [r7, #4] + 80005b4: 681b ldr r3, [r3, #0] + 80005b6: 4a1c ldr r2, [pc, #112] ; (8000628 ) + 80005b8: 4293 cmp r3, r2 + 80005ba: d131 bne.n 8000620 { /* USER CODE BEGIN SPI2_MspInit 0 */ /* USER CODE END SPI2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_SPI2_CLK_ENABLE(); - 80005a0: 4b1b ldr r3, [pc, #108] ; (8000610 ) - 80005a2: 69db ldr r3, [r3, #28] - 80005a4: 4a1a ldr r2, [pc, #104] ; (8000610 ) - 80005a6: f443 4380 orr.w r3, r3, #16384 ; 0x4000 - 80005aa: 61d3 str r3, [r2, #28] - 80005ac: 4b18 ldr r3, [pc, #96] ; (8000610 ) - 80005ae: 69db ldr r3, [r3, #28] - 80005b0: f403 4380 and.w r3, r3, #16384 ; 0x4000 - 80005b4: 60fb str r3, [r7, #12] - 80005b6: 68fb ldr r3, [r7, #12] + 80005bc: 4b1b ldr r3, [pc, #108] ; (800062c ) + 80005be: 69db ldr r3, [r3, #28] + 80005c0: 4a1a ldr r2, [pc, #104] ; (800062c ) + 80005c2: f443 4380 orr.w r3, r3, #16384 ; 0x4000 + 80005c6: 61d3 str r3, [r2, #28] + 80005c8: 4b18 ldr r3, [pc, #96] ; (800062c ) + 80005ca: 69db ldr r3, [r3, #28] + 80005cc: f403 4380 and.w r3, r3, #16384 ; 0x4000 + 80005d0: 60fb str r3, [r7, #12] + 80005d2: 68fb ldr r3, [r7, #12] __HAL_RCC_GPIOB_CLK_ENABLE(); - 80005b8: 4b15 ldr r3, [pc, #84] ; (8000610 ) - 80005ba: 699b ldr r3, [r3, #24] - 80005bc: 4a14 ldr r2, [pc, #80] ; (8000610 ) - 80005be: f043 0308 orr.w r3, r3, #8 - 80005c2: 6193 str r3, [r2, #24] - 80005c4: 4b12 ldr r3, [pc, #72] ; (8000610 ) - 80005c6: 699b ldr r3, [r3, #24] - 80005c8: f003 0308 and.w r3, r3, #8 - 80005cc: 60bb str r3, [r7, #8] - 80005ce: 68bb ldr r3, [r7, #8] + 80005d4: 4b15 ldr r3, [pc, #84] ; (800062c ) + 80005d6: 699b ldr r3, [r3, #24] + 80005d8: 4a14 ldr r2, [pc, #80] ; (800062c ) + 80005da: f043 0308 orr.w r3, r3, #8 + 80005de: 6193 str r3, [r2, #24] + 80005e0: 4b12 ldr r3, [pc, #72] ; (800062c ) + 80005e2: 699b ldr r3, [r3, #24] + 80005e4: f003 0308 and.w r3, r3, #8 + 80005e8: 60bb str r3, [r7, #8] + 80005ea: 68bb ldr r3, [r7, #8] /**SPI2 GPIO Configuration PB13 ------> SPI2_SCK PB14 ------> SPI2_MISO PB15 ------> SPI2_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_15; - 80005d0: f44f 4320 mov.w r3, #40960 ; 0xa000 - 80005d4: 613b str r3, [r7, #16] + 80005ec: f44f 4320 mov.w r3, #40960 ; 0xa000 + 80005f0: 613b str r3, [r7, #16] GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 80005d6: 2302 movs r3, #2 - 80005d8: 617b str r3, [r7, #20] + 80005f2: 2302 movs r3, #2 + 80005f4: 617b str r3, [r7, #20] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 80005da: 2303 movs r3, #3 - 80005dc: 61fb str r3, [r7, #28] + 80005f6: 2303 movs r3, #3 + 80005f8: 61fb str r3, [r7, #28] HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 80005de: f107 0310 add.w r3, r7, #16 - 80005e2: 4619 mov r1, r3 - 80005e4: 480b ldr r0, [pc, #44] ; (8000614 ) - 80005e6: f000 fa33 bl 8000a50 + 80005fa: f107 0310 add.w r3, r7, #16 + 80005fe: 4619 mov r1, r3 + 8000600: 480b ldr r0, [pc, #44] ; (8000630 ) + 8000602: f000 fa69 bl 8000ad8 GPIO_InitStruct.Pin = GPIO_PIN_14; - 80005ea: f44f 4380 mov.w r3, #16384 ; 0x4000 - 80005ee: 613b str r3, [r7, #16] + 8000606: f44f 4380 mov.w r3, #16384 ; 0x4000 + 800060a: 613b str r3, [r7, #16] GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 80005f0: 2300 movs r3, #0 - 80005f2: 617b str r3, [r7, #20] + 800060c: 2300 movs r3, #0 + 800060e: 617b str r3, [r7, #20] GPIO_InitStruct.Pull = GPIO_NOPULL; - 80005f4: 2300 movs r3, #0 - 80005f6: 61bb str r3, [r7, #24] + 8000610: 2300 movs r3, #0 + 8000612: 61bb str r3, [r7, #24] HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 80005f8: f107 0310 add.w r3, r7, #16 - 80005fc: 4619 mov r1, r3 - 80005fe: 4805 ldr r0, [pc, #20] ; (8000614 ) - 8000600: f000 fa26 bl 8000a50 + 8000614: f107 0310 add.w r3, r7, #16 + 8000618: 4619 mov r1, r3 + 800061a: 4805 ldr r0, [pc, #20] ; (8000630 ) + 800061c: f000 fa5c bl 8000ad8 /* USER CODE BEGIN SPI2_MspInit 1 */ /* USER CODE END SPI2_MspInit 1 */ } } - 8000604: bf00 nop - 8000606: 3720 adds r7, #32 - 8000608: 46bd mov sp, r7 - 800060a: bd80 pop {r7, pc} - 800060c: 40003800 .word 0x40003800 - 8000610: 40021000 .word 0x40021000 - 8000614: 40010c00 .word 0x40010c00 + 8000620: bf00 nop + 8000622: 3720 adds r7, #32 + 8000624: 46bd mov sp, r7 + 8000626: bd80 pop {r7, pc} + 8000628: 40003800 .word 0x40003800 + 800062c: 40021000 .word 0x40021000 + 8000630: 40010c00 .word 0x40010c00 -08000618 : +08000634 : } static uint32_t FSMC_Initialized = 0; static void HAL_FSMC_MspInit(void){ - 8000618: b580 push {r7, lr} - 800061a: b086 sub sp, #24 - 800061c: af00 add r7, sp, #0 + 8000634: b580 push {r7, lr} + 8000636: b086 sub sp, #24 + 8000638: af00 add r7, sp, #0 /* USER CODE BEGIN FSMC_MspInit 0 */ /* USER CODE END FSMC_MspInit 0 */ GPIO_InitTypeDef GPIO_InitStruct ={0}; - 800061e: f107 0308 add.w r3, r7, #8 - 8000622: 2200 movs r2, #0 - 8000624: 601a str r2, [r3, #0] - 8000626: 605a str r2, [r3, #4] - 8000628: 609a str r2, [r3, #8] - 800062a: 60da str r2, [r3, #12] + 800063a: f107 0308 add.w r3, r7, #8 + 800063e: 2200 movs r2, #0 + 8000640: 601a str r2, [r3, #0] + 8000642: 605a str r2, [r3, #4] + 8000644: 609a str r2, [r3, #8] + 8000646: 60da str r2, [r3, #12] if (FSMC_Initialized) { - 800062c: 4b1f ldr r3, [pc, #124] ; (80006ac ) - 800062e: 681b ldr r3, [r3, #0] - 8000630: 2b00 cmp r3, #0 - 8000632: d136 bne.n 80006a2 + 8000648: 4b1f ldr r3, [pc, #124] ; (80006c8 ) + 800064a: 681b ldr r3, [r3, #0] + 800064c: 2b00 cmp r3, #0 + 800064e: d136 bne.n 80006be return; } FSMC_Initialized = 1; - 8000634: 4b1d ldr r3, [pc, #116] ; (80006ac ) - 8000636: 2201 movs r2, #1 - 8000638: 601a str r2, [r3, #0] + 8000650: 4b1d ldr r3, [pc, #116] ; (80006c8 ) + 8000652: 2201 movs r2, #1 + 8000654: 601a str r2, [r3, #0] /* Peripheral clock enable */ __HAL_RCC_FSMC_CLK_ENABLE(); - 800063a: 4b1d ldr r3, [pc, #116] ; (80006b0 ) - 800063c: 695b ldr r3, [r3, #20] - 800063e: 4a1c ldr r2, [pc, #112] ; (80006b0 ) - 8000640: f443 7380 orr.w r3, r3, #256 ; 0x100 - 8000644: 6153 str r3, [r2, #20] - 8000646: 4b1a ldr r3, [pc, #104] ; (80006b0 ) - 8000648: 695b ldr r3, [r3, #20] - 800064a: f403 7380 and.w r3, r3, #256 ; 0x100 - 800064e: 607b str r3, [r7, #4] - 8000650: 687b ldr r3, [r7, #4] + 8000656: 4b1d ldr r3, [pc, #116] ; (80006cc ) + 8000658: 695b ldr r3, [r3, #20] + 800065a: 4a1c ldr r2, [pc, #112] ; (80006cc ) + 800065c: f443 7380 orr.w r3, r3, #256 ; 0x100 + 8000660: 6153 str r3, [r2, #20] + 8000662: 4b1a ldr r3, [pc, #104] ; (80006cc ) + 8000664: 695b ldr r3, [r3, #20] + 8000666: f403 7380 and.w r3, r3, #256 ; 0x100 + 800066a: 607b str r3, [r7, #4] + 800066c: 687b ldr r3, [r7, #4] PD1 ------> FSMC_D3 PD4 ------> FSMC_NOE PD5 ------> FSMC_NWE PG12 ------> FSMC_NE4 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_12; - 8000652: f241 0301 movw r3, #4097 ; 0x1001 - 8000656: 60bb str r3, [r7, #8] + 800066e: f241 0301 movw r3, #4097 ; 0x1001 + 8000672: 60bb str r3, [r7, #8] GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8000658: 2302 movs r3, #2 - 800065a: 60fb str r3, [r7, #12] + 8000674: 2302 movs r3, #2 + 8000676: 60fb str r3, [r7, #12] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 800065c: 2303 movs r3, #3 - 800065e: 617b str r3, [r7, #20] + 8000678: 2303 movs r3, #3 + 800067a: 617b str r3, [r7, #20] HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); - 8000660: f107 0308 add.w r3, r7, #8 - 8000664: 4619 mov r1, r3 - 8000666: 4813 ldr r0, [pc, #76] ; (80006b4 ) - 8000668: f000 f9f2 bl 8000a50 + 800067c: f107 0308 add.w r3, r7, #8 + 8000680: 4619 mov r1, r3 + 8000682: 4813 ldr r0, [pc, #76] ; (80006d0 ) + 8000684: f000 fa28 bl 8000ad8 GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 - 800066c: f64f 7380 movw r3, #65408 ; 0xff80 - 8000670: 60bb str r3, [r7, #8] + 8000688: f64f 7380 movw r3, #65408 ; 0xff80 + 800068c: 60bb str r3, [r7, #8] |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 |GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8000672: 2302 movs r3, #2 - 8000674: 60fb str r3, [r7, #12] + 800068e: 2302 movs r3, #2 + 8000690: 60fb str r3, [r7, #12] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 8000676: 2303 movs r3, #3 - 8000678: 617b str r3, [r7, #20] + 8000692: 2303 movs r3, #3 + 8000694: 617b str r3, [r7, #20] HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - 800067a: f107 0308 add.w r3, r7, #8 - 800067e: 4619 mov r1, r3 - 8000680: 480d ldr r0, [pc, #52] ; (80006b8 ) - 8000682: f000 f9e5 bl 8000a50 + 8000696: f107 0308 add.w r3, r7, #8 + 800069a: 4619 mov r1, r3 + 800069c: 480d ldr r0, [pc, #52] ; (80006d4 ) + 800069e: f000 fa1b bl 8000ad8 GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14 - 8000686: f24c 7333 movw r3, #50995 ; 0xc733 - 800068a: 60bb str r3, [r7, #8] + 80006a2: f24c 7333 movw r3, #50995 ; 0xc733 + 80006a6: 60bb str r3, [r7, #8] |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4 |GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 800068c: 2302 movs r3, #2 - 800068e: 60fb str r3, [r7, #12] + 80006a8: 2302 movs r3, #2 + 80006aa: 60fb str r3, [r7, #12] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 8000690: 2303 movs r3, #3 - 8000692: 617b str r3, [r7, #20] + 80006ac: 2303 movs r3, #3 + 80006ae: 617b str r3, [r7, #20] HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 8000694: f107 0308 add.w r3, r7, #8 - 8000698: 4619 mov r1, r3 - 800069a: 4808 ldr r0, [pc, #32] ; (80006bc ) - 800069c: f000 f9d8 bl 8000a50 - 80006a0: e000 b.n 80006a4 + 80006b0: f107 0308 add.w r3, r7, #8 + 80006b4: 4619 mov r1, r3 + 80006b6: 4808 ldr r0, [pc, #32] ; (80006d8 ) + 80006b8: f000 fa0e bl 8000ad8 + 80006bc: e000 b.n 80006c0 return; - 80006a2: bf00 nop + 80006be: bf00 nop /* USER CODE BEGIN FSMC_MspInit 1 */ /* USER CODE END FSMC_MspInit 1 */ } - 80006a4: 3718 adds r7, #24 - 80006a6: 46bd mov sp, r7 - 80006a8: bd80 pop {r7, pc} - 80006aa: bf00 nop - 80006ac: 20000040 .word 0x20000040 - 80006b0: 40021000 .word 0x40021000 - 80006b4: 40012000 .word 0x40012000 - 80006b8: 40011800 .word 0x40011800 - 80006bc: 40011400 .word 0x40011400 + 80006c0: 3718 adds r7, #24 + 80006c2: 46bd mov sp, r7 + 80006c4: bd80 pop {r7, pc} + 80006c6: bf00 nop + 80006c8: 200000a4 .word 0x200000a4 + 80006cc: 40021000 .word 0x40021000 + 80006d0: 40012000 .word 0x40012000 + 80006d4: 40011800 .word 0x40011800 + 80006d8: 40011400 .word 0x40011400 -080006c0 : +080006dc : void HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram){ - 80006c0: b580 push {r7, lr} - 80006c2: b082 sub sp, #8 - 80006c4: af00 add r7, sp, #0 - 80006c6: 6078 str r0, [r7, #4] + 80006dc: b580 push {r7, lr} + 80006de: b082 sub sp, #8 + 80006e0: af00 add r7, sp, #0 + 80006e2: 6078 str r0, [r7, #4] /* USER CODE BEGIN SRAM_MspInit 0 */ /* USER CODE END SRAM_MspInit 0 */ HAL_FSMC_MspInit(); - 80006c8: f7ff ffa6 bl 8000618 + 80006e4: f7ff ffa6 bl 8000634 /* USER CODE BEGIN SRAM_MspInit 1 */ /* USER CODE END SRAM_MspInit 1 */ } - 80006cc: bf00 nop - 80006ce: 3708 adds r7, #8 - 80006d0: 46bd mov sp, r7 - 80006d2: bd80 pop {r7, pc} + 80006e8: bf00 nop + 80006ea: 3708 adds r7, #8 + 80006ec: 46bd mov sp, r7 + 80006ee: bd80 pop {r7, pc} -080006d4 : +080006f0 : /******************************************************************************/ /** * @brief This function handles Non maskable interrupt. */ void NMI_Handler(void) { - 80006d4: b480 push {r7} - 80006d6: af00 add r7, sp, #0 + 80006f0: b480 push {r7} + 80006f2: af00 add r7, sp, #0 /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ /* USER CODE END NonMaskableInt_IRQn 0 */ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ while (1) - 80006d8: e7fe b.n 80006d8 + 80006f4: e7fe b.n 80006f4 -080006da : +080006f6 : /** * @brief This function handles Hard fault interrupt. */ void HardFault_Handler(void) { - 80006da: b480 push {r7} - 80006dc: af00 add r7, sp, #0 + 80006f6: b480 push {r7} + 80006f8: af00 add r7, sp, #0 /* USER CODE BEGIN HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */ while (1) - 80006de: e7fe b.n 80006de + 80006fa: e7fe b.n 80006fa -080006e0 : +080006fc : /** * @brief This function handles Memory management fault. */ void MemManage_Handler(void) { - 80006e0: b480 push {r7} - 80006e2: af00 add r7, sp, #0 + 80006fc: b480 push {r7} + 80006fe: af00 add r7, sp, #0 /* USER CODE BEGIN MemoryManagement_IRQn 0 */ /* USER CODE END MemoryManagement_IRQn 0 */ while (1) - 80006e4: e7fe b.n 80006e4 + 8000700: e7fe b.n 8000700 -080006e6 : +08000702 : /** * @brief This function handles Prefetch fault, memory access fault. */ void BusFault_Handler(void) { - 80006e6: b480 push {r7} - 80006e8: af00 add r7, sp, #0 + 8000702: b480 push {r7} + 8000704: af00 add r7, sp, #0 /* USER CODE BEGIN BusFault_IRQn 0 */ /* USER CODE END BusFault_IRQn 0 */ while (1) - 80006ea: e7fe b.n 80006ea + 8000706: e7fe b.n 8000706 -080006ec : +08000708 : /** * @brief This function handles Undefined instruction or illegal state. */ void UsageFault_Handler(void) { - 80006ec: b480 push {r7} - 80006ee: af00 add r7, sp, #0 + 8000708: b480 push {r7} + 800070a: af00 add r7, sp, #0 /* USER CODE BEGIN UsageFault_IRQn 0 */ /* USER CODE END UsageFault_IRQn 0 */ while (1) - 80006f0: e7fe b.n 80006f0 + 800070c: e7fe b.n 800070c -080006f2 : +0800070e : /** * @brief This function handles System service call via SWI instruction. */ void SVC_Handler(void) { - 80006f2: b480 push {r7} - 80006f4: af00 add r7, sp, #0 + 800070e: b480 push {r7} + 8000710: af00 add r7, sp, #0 /* USER CODE END SVCall_IRQn 0 */ /* USER CODE BEGIN SVCall_IRQn 1 */ /* USER CODE END SVCall_IRQn 1 */ } - 80006f6: bf00 nop - 80006f8: 46bd mov sp, r7 - 80006fa: bc80 pop {r7} - 80006fc: 4770 bx lr + 8000712: bf00 nop + 8000714: 46bd mov sp, r7 + 8000716: bc80 pop {r7} + 8000718: 4770 bx lr -080006fe : +0800071a : /** * @brief This function handles Debug monitor. */ void DebugMon_Handler(void) { - 80006fe: b480 push {r7} - 8000700: af00 add r7, sp, #0 + 800071a: b480 push {r7} + 800071c: af00 add r7, sp, #0 /* USER CODE END DebugMonitor_IRQn 0 */ /* USER CODE BEGIN DebugMonitor_IRQn 1 */ /* USER CODE END DebugMonitor_IRQn 1 */ } - 8000702: bf00 nop - 8000704: 46bd mov sp, r7 - 8000706: bc80 pop {r7} - 8000708: 4770 bx lr + 800071e: bf00 nop + 8000720: 46bd mov sp, r7 + 8000722: bc80 pop {r7} + 8000724: 4770 bx lr -0800070a : +08000726 : /** * @brief This function handles Pendable request for system service. */ void PendSV_Handler(void) { - 800070a: b480 push {r7} - 800070c: af00 add r7, sp, #0 + 8000726: b480 push {r7} + 8000728: af00 add r7, sp, #0 /* USER CODE END PendSV_IRQn 0 */ /* USER CODE BEGIN PendSV_IRQn 1 */ /* USER CODE END PendSV_IRQn 1 */ } - 800070e: bf00 nop - 8000710: 46bd mov sp, r7 - 8000712: bc80 pop {r7} - 8000714: 4770 bx lr + 800072a: bf00 nop + 800072c: 46bd mov sp, r7 + 800072e: bc80 pop {r7} + 8000730: 4770 bx lr -08000716 : +08000732 : /** * @brief This function handles System tick timer. */ void SysTick_Handler(void) { - 8000716: b580 push {r7, lr} - 8000718: af00 add r7, sp, #0 + 8000732: b580 push {r7, lr} + 8000734: af00 add r7, sp, #0 /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); - 800071a: f000 f875 bl 8000808 + 8000736: f000 f8ab bl 8000890 /* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */ } - 800071e: bf00 nop - 8000720: bd80 pop {r7, pc} + 800073a: bf00 nop + 800073c: bd80 pop {r7, pc} + ... -08000722 : +08000740 <_sbrk>: + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + 8000740: b580 push {r7, lr} + 8000742: b086 sub sp, #24 + 8000744: af00 add r7, sp, #0 + 8000746: 6078 str r0, [r7, #4] + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + 8000748: 4a14 ldr r2, [pc, #80] ; (800079c <_sbrk+0x5c>) + 800074a: 4b15 ldr r3, [pc, #84] ; (80007a0 <_sbrk+0x60>) + 800074c: 1ad3 subs r3, r2, r3 + 800074e: 617b str r3, [r7, #20] + const uint8_t *max_heap = (uint8_t *)stack_limit; + 8000750: 697b ldr r3, [r7, #20] + 8000752: 613b str r3, [r7, #16] + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + 8000754: 4b13 ldr r3, [pc, #76] ; (80007a4 <_sbrk+0x64>) + 8000756: 681b ldr r3, [r3, #0] + 8000758: 2b00 cmp r3, #0 + 800075a: d102 bne.n 8000762 <_sbrk+0x22> + { + __sbrk_heap_end = &_end; + 800075c: 4b11 ldr r3, [pc, #68] ; (80007a4 <_sbrk+0x64>) + 800075e: 4a12 ldr r2, [pc, #72] ; (80007a8 <_sbrk+0x68>) + 8000760: 601a str r2, [r3, #0] + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + 8000762: 4b10 ldr r3, [pc, #64] ; (80007a4 <_sbrk+0x64>) + 8000764: 681a ldr r2, [r3, #0] + 8000766: 687b ldr r3, [r7, #4] + 8000768: 4413 add r3, r2 + 800076a: 693a ldr r2, [r7, #16] + 800076c: 429a cmp r2, r3 + 800076e: d207 bcs.n 8000780 <_sbrk+0x40> + { + errno = ENOMEM; + 8000770: f005 fcca bl 8006108 <__errno> + 8000774: 4603 mov r3, r0 + 8000776: 220c movs r2, #12 + 8000778: 601a str r2, [r3, #0] + return (void *)-1; + 800077a: f04f 33ff mov.w r3, #4294967295 + 800077e: e009 b.n 8000794 <_sbrk+0x54> + } + + prev_heap_end = __sbrk_heap_end; + 8000780: 4b08 ldr r3, [pc, #32] ; (80007a4 <_sbrk+0x64>) + 8000782: 681b ldr r3, [r3, #0] + 8000784: 60fb str r3, [r7, #12] + __sbrk_heap_end += incr; + 8000786: 4b07 ldr r3, [pc, #28] ; (80007a4 <_sbrk+0x64>) + 8000788: 681a ldr r2, [r3, #0] + 800078a: 687b ldr r3, [r7, #4] + 800078c: 4413 add r3, r2 + 800078e: 4a05 ldr r2, [pc, #20] ; (80007a4 <_sbrk+0x64>) + 8000790: 6013 str r3, [r2, #0] + + return (void *)prev_heap_end; + 8000792: 68fb ldr r3, [r7, #12] +} + 8000794: 4618 mov r0, r3 + 8000796: 3718 adds r7, #24 + 8000798: 46bd mov sp, r7 + 800079a: bd80 pop {r7, pc} + 800079c: 20010000 .word 0x20010000 + 80007a0: 00000800 .word 0x00000800 + 80007a4: 200000a8 .word 0x200000a8 + 80007a8: 20000868 .word 0x20000868 + +080007ac : * @note This function should be used only after reset. * @param None * @retval None */ void SystemInit (void) { - 8000722: b480 push {r7} - 8000724: af00 add r7, sp, #0 + 80007ac: b480 push {r7} + 80007ae: af00 add r7, sp, #0 /* Configure the Vector Table location -------------------------------------*/ #if defined(USER_VECT_TAB_ADDRESS) SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ #endif /* USER_VECT_TAB_ADDRESS */ } - 8000726: bf00 nop - 8000728: 46bd mov sp, r7 - 800072a: bc80 pop {r7} - 800072c: 4770 bx lr - ... + 80007b0: bf00 nop + 80007b2: 46bd mov sp, r7 + 80007b4: bc80 pop {r7} + 80007b6: 4770 bx lr -08000730 : +080007b8 : .weak Reset_Handler .type Reset_Handler, %function Reset_Handler: /* Copy the data segment initializers from flash to SRAM */ movs r1, #0 - 8000730: 2100 movs r1, #0 + 80007b8: 2100 movs r1, #0 b LoopCopyDataInit - 8000732: e003 b.n 800073c + 80007ba: e003 b.n 80007c4 -08000734 : +080007bc : CopyDataInit: ldr r3, =_sidata - 8000734: 4b0b ldr r3, [pc, #44] ; (8000764 ) + 80007bc: 4b0b ldr r3, [pc, #44] ; (80007ec ) ldr r3, [r3, r1] - 8000736: 585b ldr r3, [r3, r1] + 80007be: 585b ldr r3, [r3, r1] str r3, [r0, r1] - 8000738: 5043 str r3, [r0, r1] + 80007c0: 5043 str r3, [r0, r1] adds r1, r1, #4 - 800073a: 3104 adds r1, #4 + 80007c2: 3104 adds r1, #4 -0800073c : +080007c4 : LoopCopyDataInit: ldr r0, =_sdata - 800073c: 480a ldr r0, [pc, #40] ; (8000768 ) + 80007c4: 480a ldr r0, [pc, #40] ; (80007f0 ) ldr r3, =_edata - 800073e: 4b0b ldr r3, [pc, #44] ; (800076c ) + 80007c6: 4b0b ldr r3, [pc, #44] ; (80007f4 ) adds r2, r0, r1 - 8000740: 1842 adds r2, r0, r1 + 80007c8: 1842 adds r2, r0, r1 cmp r2, r3 - 8000742: 429a cmp r2, r3 + 80007ca: 429a cmp r2, r3 bcc CopyDataInit - 8000744: d3f6 bcc.n 8000734 + 80007cc: d3f6 bcc.n 80007bc ldr r2, =_sbss - 8000746: 4a0a ldr r2, [pc, #40] ; (8000770 ) + 80007ce: 4a0a ldr r2, [pc, #40] ; (80007f8 ) b LoopFillZerobss - 8000748: e002 b.n 8000750 + 80007d0: e002 b.n 80007d8 -0800074a : +080007d2 : /* Zero fill the bss segment. */ FillZerobss: movs r3, #0 - 800074a: 2300 movs r3, #0 + 80007d2: 2300 movs r3, #0 str r3, [r2], #4 - 800074c: f842 3b04 str.w r3, [r2], #4 + 80007d4: f842 3b04 str.w r3, [r2], #4 -08000750 : +080007d8 : LoopFillZerobss: ldr r3, = _ebss - 8000750: 4b08 ldr r3, [pc, #32] ; (8000774 ) + 80007d8: 4b08 ldr r3, [pc, #32] ; (80007fc ) cmp r2, r3 - 8000752: 429a cmp r2, r3 + 80007da: 429a cmp r2, r3 bcc FillZerobss - 8000754: d3f9 bcc.n 800074a + 80007dc: d3f9 bcc.n 80007d2 /* Call the clock system intitialization function.*/ bl SystemInit - 8000756: f7ff ffe4 bl 8000722 + 80007de: f7ff ffe5 bl 80007ac /* Call static constructors */ bl __libc_init_array - 800075a: f005 fbbf bl 8005edc <__libc_init_array> + 80007e2: f005 fc97 bl 8006114 <__libc_init_array> /* Call the application's entry point.*/ bl main - 800075e: f7ff fd61 bl 8000224
+ 80007e6: f7ff fd1d bl 8000224
bx lr - 8000762: 4770 bx lr + 80007ea: 4770 bx lr ldr r3, =_sidata - 8000764: 08006ab4 .word 0x08006ab4 + 80007ec: 08007598 .word 0x08007598 ldr r0, =_sdata - 8000768: 20000000 .word 0x20000000 + 80007f0: 20000000 .word 0x20000000 ldr r3, =_edata - 800076c: 20000024 .word 0x20000024 + 80007f4: 20000088 .word 0x20000088 ldr r2, =_sbss - 8000770: 20000024 .word 0x20000024 + 80007f8: 20000088 .word 0x20000088 ldr r3, = _ebss - 8000774: 200007e0 .word 0x200007e0 + 80007fc: 20000864 .word 0x20000864 -08000778 : +08000800 : * @retval : None */ .section .text.Default_Handler,"ax",%progbits Default_Handler: Infinite_Loop: b Infinite_Loop - 8000778: e7fe b.n 8000778 + 8000800: e7fe b.n 8000800 ... -0800077c : +08000804 : * need to ensure that the SysTick time base is always set to 1 millisecond * to have correct HAL operation. * @retval HAL status */ HAL_StatusTypeDef HAL_Init(void) { - 800077c: b580 push {r7, lr} - 800077e: af00 add r7, sp, #0 + 8000804: b580 push {r7, lr} + 8000806: af00 add r7, sp, #0 defined(STM32F102x6) || defined(STM32F102xB) || \ defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \ defined(STM32F105xC) || defined(STM32F107xC) /* Prefetch buffer is not available on value line devices */ __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); - 8000780: 4b08 ldr r3, [pc, #32] ; (80007a4 ) - 8000782: 681b ldr r3, [r3, #0] - 8000784: 4a07 ldr r2, [pc, #28] ; (80007a4 ) - 8000786: f043 0310 orr.w r3, r3, #16 - 800078a: 6013 str r3, [r2, #0] + 8000808: 4b08 ldr r3, [pc, #32] ; (800082c ) + 800080a: 681b ldr r3, [r3, #0] + 800080c: 4a07 ldr r2, [pc, #28] ; (800082c ) + 800080e: f043 0310 orr.w r3, r3, #16 + 8000812: 6013 str r3, [r2, #0] #endif #endif /* PREFETCH_ENABLE */ /* Set Interrupt Group Priority */ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); - 800078c: 2003 movs r0, #3 - 800078e: f000 f92b bl 80009e8 + 8000814: 2003 movs r0, #3 + 8000816: f000 f92b bl 8000a70 /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ HAL_InitTick(TICK_INT_PRIORITY); - 8000792: 2000 movs r0, #0 - 8000794: f000 f808 bl 80007a8 + 800081a: 2000 movs r0, #0 + 800081c: f000 f808 bl 8000830 /* Init the low level hardware */ HAL_MspInit(); - 8000798: f7ff fec0 bl 800051c + 8000820: f7ff fe8a bl 8000538 /* Return function status */ return HAL_OK; - 800079c: 2300 movs r3, #0 + 8000824: 2300 movs r3, #0 } - 800079e: 4618 mov r0, r3 - 80007a0: bd80 pop {r7, pc} - 80007a2: bf00 nop - 80007a4: 40022000 .word 0x40022000 + 8000826: 4618 mov r0, r3 + 8000828: bd80 pop {r7, pc} + 800082a: bf00 nop + 800082c: 40022000 .word 0x40022000 -080007a8 : +08000830 : * implementation in user file. * @param TickPriority Tick interrupt priority. * @retval HAL status */ __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { - 80007a8: b580 push {r7, lr} - 80007aa: b082 sub sp, #8 - 80007ac: af00 add r7, sp, #0 - 80007ae: 6078 str r0, [r7, #4] + 8000830: b580 push {r7, lr} + 8000832: b082 sub sp, #8 + 8000834: af00 add r7, sp, #0 + 8000836: 6078 str r0, [r7, #4] /* Configure the SysTick to have interrupt in 1ms time basis*/ if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) - 80007b0: 4b12 ldr r3, [pc, #72] ; (80007fc ) - 80007b2: 681a ldr r2, [r3, #0] - 80007b4: 4b12 ldr r3, [pc, #72] ; (8000800 ) - 80007b6: 781b ldrb r3, [r3, #0] - 80007b8: 4619 mov r1, r3 - 80007ba: f44f 737a mov.w r3, #1000 ; 0x3e8 - 80007be: fbb3 f3f1 udiv r3, r3, r1 - 80007c2: fbb2 f3f3 udiv r3, r2, r3 - 80007c6: 4618 mov r0, r3 - 80007c8: f000 f935 bl 8000a36 - 80007cc: 4603 mov r3, r0 - 80007ce: 2b00 cmp r3, #0 - 80007d0: d001 beq.n 80007d6 + 8000838: 4b12 ldr r3, [pc, #72] ; (8000884 ) + 800083a: 681a ldr r2, [r3, #0] + 800083c: 4b12 ldr r3, [pc, #72] ; (8000888 ) + 800083e: 781b ldrb r3, [r3, #0] + 8000840: 4619 mov r1, r3 + 8000842: f44f 737a mov.w r3, #1000 ; 0x3e8 + 8000846: fbb3 f3f1 udiv r3, r3, r1 + 800084a: fbb2 f3f3 udiv r3, r2, r3 + 800084e: 4618 mov r0, r3 + 8000850: f000 f935 bl 8000abe + 8000854: 4603 mov r3, r0 + 8000856: 2b00 cmp r3, #0 + 8000858: d001 beq.n 800085e { return HAL_ERROR; - 80007d2: 2301 movs r3, #1 - 80007d4: e00e b.n 80007f4 + 800085a: 2301 movs r3, #1 + 800085c: e00e b.n 800087c } /* Configure the SysTick IRQ priority */ if (TickPriority < (1UL << __NVIC_PRIO_BITS)) - 80007d6: 687b ldr r3, [r7, #4] - 80007d8: 2b0f cmp r3, #15 - 80007da: d80a bhi.n 80007f2 + 800085e: 687b ldr r3, [r7, #4] + 8000860: 2b0f cmp r3, #15 + 8000862: d80a bhi.n 800087a { HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); - 80007dc: 2200 movs r2, #0 - 80007de: 6879 ldr r1, [r7, #4] - 80007e0: f04f 30ff mov.w r0, #4294967295 - 80007e4: f000 f90b bl 80009fe + 8000864: 2200 movs r2, #0 + 8000866: 6879 ldr r1, [r7, #4] + 8000868: f04f 30ff mov.w r0, #4294967295 + 800086c: f000 f90b bl 8000a86 uwTickPrio = TickPriority; - 80007e8: 4a06 ldr r2, [pc, #24] ; (8000804 ) - 80007ea: 687b ldr r3, [r7, #4] - 80007ec: 6013 str r3, [r2, #0] + 8000870: 4a06 ldr r2, [pc, #24] ; (800088c ) + 8000872: 687b ldr r3, [r7, #4] + 8000874: 6013 str r3, [r2, #0] { return HAL_ERROR; } /* Return function status */ return HAL_OK; - 80007ee: 2300 movs r3, #0 - 80007f0: e000 b.n 80007f4 + 8000876: 2300 movs r3, #0 + 8000878: e000 b.n 800087c return HAL_ERROR; - 80007f2: 2301 movs r3, #1 + 800087a: 2301 movs r3, #1 } - 80007f4: 4618 mov r0, r3 - 80007f6: 3708 adds r7, #8 - 80007f8: 46bd mov sp, r7 - 80007fa: bd80 pop {r7, pc} - 80007fc: 20000000 .word 0x20000000 - 8000800: 20000008 .word 0x20000008 - 8000804: 20000004 .word 0x20000004 + 800087c: 4618 mov r0, r3 + 800087e: 3708 adds r7, #8 + 8000880: 46bd mov sp, r7 + 8000882: bd80 pop {r7, pc} + 8000884: 20000000 .word 0x20000000 + 8000888: 20000008 .word 0x20000008 + 800088c: 20000004 .word 0x20000004 -08000808 : +08000890 : * @note This function is declared as __weak to be overwritten in case of other * implementations in user file. * @retval None */ __weak void HAL_IncTick(void) { - 8000808: b480 push {r7} - 800080a: af00 add r7, sp, #0 + 8000890: b480 push {r7} + 8000892: af00 add r7, sp, #0 uwTick += uwTickFreq; - 800080c: 4b05 ldr r3, [pc, #20] ; (8000824 ) - 800080e: 781b ldrb r3, [r3, #0] - 8000810: 461a mov r2, r3 - 8000812: 4b05 ldr r3, [pc, #20] ; (8000828 ) - 8000814: 681b ldr r3, [r3, #0] - 8000816: 4413 add r3, r2 - 8000818: 4a03 ldr r2, [pc, #12] ; (8000828 ) - 800081a: 6013 str r3, [r2, #0] + 8000894: 4b05 ldr r3, [pc, #20] ; (80008ac ) + 8000896: 781b ldrb r3, [r3, #0] + 8000898: 461a mov r2, r3 + 800089a: 4b05 ldr r3, [pc, #20] ; (80008b0 ) + 800089c: 681b ldr r3, [r3, #0] + 800089e: 4413 add r3, r2 + 80008a0: 4a03 ldr r2, [pc, #12] ; (80008b0 ) + 80008a2: 6013 str r3, [r2, #0] } - 800081c: bf00 nop - 800081e: 46bd mov sp, r7 - 8000820: bc80 pop {r7} - 8000822: 4770 bx lr - 8000824: 20000008 .word 0x20000008 - 8000828: 20000114 .word 0x20000114 + 80008a4: bf00 nop + 80008a6: 46bd mov sp, r7 + 80008a8: bc80 pop {r7} + 80008aa: 4770 bx lr + 80008ac: 20000008 .word 0x20000008 + 80008b0: 20000184 .word 0x20000184 -0800082c : +080008b4 : * @note This function is declared as __weak to be overwritten in case of other * implementations in user file. * @retval tick value */ __weak uint32_t HAL_GetTick(void) { - 800082c: b480 push {r7} - 800082e: af00 add r7, sp, #0 + 80008b4: b480 push {r7} + 80008b6: af00 add r7, sp, #0 return uwTick; - 8000830: 4b02 ldr r3, [pc, #8] ; (800083c ) - 8000832: 681b ldr r3, [r3, #0] + 80008b8: 4b02 ldr r3, [pc, #8] ; (80008c4 ) + 80008ba: 681b ldr r3, [r3, #0] } - 8000834: 4618 mov r0, r3 - 8000836: 46bd mov sp, r7 - 8000838: bc80 pop {r7} - 800083a: 4770 bx lr - 800083c: 20000114 .word 0x20000114 + 80008bc: 4618 mov r0, r3 + 80008be: 46bd mov sp, r7 + 80008c0: bc80 pop {r7} + 80008c2: 4770 bx lr + 80008c4: 20000184 .word 0x20000184 -08000840 : +080008c8 : * implementations in user file. * @param Delay specifies the delay time length, in milliseconds. * @retval None */ __weak void HAL_Delay(uint32_t Delay) { - 8000840: b580 push {r7, lr} - 8000842: b084 sub sp, #16 - 8000844: af00 add r7, sp, #0 - 8000846: 6078 str r0, [r7, #4] + 80008c8: b580 push {r7, lr} + 80008ca: b084 sub sp, #16 + 80008cc: af00 add r7, sp, #0 + 80008ce: 6078 str r0, [r7, #4] uint32_t tickstart = HAL_GetTick(); - 8000848: f7ff fff0 bl 800082c - 800084c: 60b8 str r0, [r7, #8] + 80008d0: f7ff fff0 bl 80008b4 + 80008d4: 60b8 str r0, [r7, #8] uint32_t wait = Delay; - 800084e: 687b ldr r3, [r7, #4] - 8000850: 60fb str r3, [r7, #12] + 80008d6: 687b ldr r3, [r7, #4] + 80008d8: 60fb str r3, [r7, #12] /* Add a freq to guarantee minimum wait */ if (wait < HAL_MAX_DELAY) - 8000852: 68fb ldr r3, [r7, #12] - 8000854: f1b3 3fff cmp.w r3, #4294967295 - 8000858: d005 beq.n 8000866 + 80008da: 68fb ldr r3, [r7, #12] + 80008dc: f1b3 3fff cmp.w r3, #4294967295 + 80008e0: d005 beq.n 80008ee { wait += (uint32_t)(uwTickFreq); - 800085a: 4b0a ldr r3, [pc, #40] ; (8000884 ) - 800085c: 781b ldrb r3, [r3, #0] - 800085e: 461a mov r2, r3 - 8000860: 68fb ldr r3, [r7, #12] - 8000862: 4413 add r3, r2 - 8000864: 60fb str r3, [r7, #12] + 80008e2: 4b0a ldr r3, [pc, #40] ; (800090c ) + 80008e4: 781b ldrb r3, [r3, #0] + 80008e6: 461a mov r2, r3 + 80008e8: 68fb ldr r3, [r7, #12] + 80008ea: 4413 add r3, r2 + 80008ec: 60fb str r3, [r7, #12] } while ((HAL_GetTick() - tickstart) < wait) - 8000866: bf00 nop - 8000868: f7ff ffe0 bl 800082c - 800086c: 4602 mov r2, r0 - 800086e: 68bb ldr r3, [r7, #8] - 8000870: 1ad3 subs r3, r2, r3 - 8000872: 68fa ldr r2, [r7, #12] - 8000874: 429a cmp r2, r3 - 8000876: d8f7 bhi.n 8000868 + 80008ee: bf00 nop + 80008f0: f7ff ffe0 bl 80008b4 + 80008f4: 4602 mov r2, r0 + 80008f6: 68bb ldr r3, [r7, #8] + 80008f8: 1ad3 subs r3, r2, r3 + 80008fa: 68fa ldr r2, [r7, #12] + 80008fc: 429a cmp r2, r3 + 80008fe: d8f7 bhi.n 80008f0 { } } - 8000878: bf00 nop - 800087a: bf00 nop - 800087c: 3710 adds r7, #16 - 800087e: 46bd mov sp, r7 - 8000880: bd80 pop {r7, pc} - 8000882: bf00 nop - 8000884: 20000008 .word 0x20000008 + 8000900: bf00 nop + 8000902: bf00 nop + 8000904: 3710 adds r7, #16 + 8000906: 46bd mov sp, r7 + 8000908: bd80 pop {r7, pc} + 800090a: bf00 nop + 800090c: 20000008 .word 0x20000008 -08000888 <__NVIC_SetPriorityGrouping>: +08000910 <__NVIC_SetPriorityGrouping>: In case of a conflict between priority grouping and available priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. \param [in] PriorityGroup Priority grouping field. */ __STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { - 8000888: b480 push {r7} - 800088a: b085 sub sp, #20 - 800088c: af00 add r7, sp, #0 - 800088e: 6078 str r0, [r7, #4] + 8000910: b480 push {r7} + 8000912: b085 sub sp, #20 + 8000914: af00 add r7, sp, #0 + 8000916: 6078 str r0, [r7, #4] uint32_t reg_value; uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 8000890: 687b ldr r3, [r7, #4] - 8000892: f003 0307 and.w r3, r3, #7 - 8000896: 60fb str r3, [r7, #12] + 8000918: 687b ldr r3, [r7, #4] + 800091a: f003 0307 and.w r3, r3, #7 + 800091e: 60fb str r3, [r7, #12] reg_value = SCB->AIRCR; /* read old register configuration */ - 8000898: 4b0c ldr r3, [pc, #48] ; (80008cc <__NVIC_SetPriorityGrouping+0x44>) - 800089a: 68db ldr r3, [r3, #12] - 800089c: 60bb str r3, [r7, #8] + 8000920: 4b0c ldr r3, [pc, #48] ; (8000954 <__NVIC_SetPriorityGrouping+0x44>) + 8000922: 68db ldr r3, [r3, #12] + 8000924: 60bb str r3, [r7, #8] reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - 800089e: 68ba ldr r2, [r7, #8] - 80008a0: f64f 03ff movw r3, #63743 ; 0xf8ff - 80008a4: 4013 ands r3, r2 - 80008a6: 60bb str r3, [r7, #8] + 8000926: 68ba ldr r2, [r7, #8] + 8000928: f64f 03ff movw r3, #63743 ; 0xf8ff + 800092c: 4013 ands r3, r2 + 800092e: 60bb str r3, [r7, #8] reg_value = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - 80008a8: 68fb ldr r3, [r7, #12] - 80008aa: 021a lsls r2, r3, #8 + 8000930: 68fb ldr r3, [r7, #12] + 8000932: 021a lsls r2, r3, #8 ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - 80008ac: 68bb ldr r3, [r7, #8] - 80008ae: 4313 orrs r3, r2 + 8000934: 68bb ldr r3, [r7, #8] + 8000936: 4313 orrs r3, r2 reg_value = (reg_value | - 80008b0: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 - 80008b4: f443 3300 orr.w r3, r3, #131072 ; 0x20000 - 80008b8: 60bb str r3, [r7, #8] + 8000938: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 + 800093c: f443 3300 orr.w r3, r3, #131072 ; 0x20000 + 8000940: 60bb str r3, [r7, #8] SCB->AIRCR = reg_value; - 80008ba: 4a04 ldr r2, [pc, #16] ; (80008cc <__NVIC_SetPriorityGrouping+0x44>) - 80008bc: 68bb ldr r3, [r7, #8] - 80008be: 60d3 str r3, [r2, #12] + 8000942: 4a04 ldr r2, [pc, #16] ; (8000954 <__NVIC_SetPriorityGrouping+0x44>) + 8000944: 68bb ldr r3, [r7, #8] + 8000946: 60d3 str r3, [r2, #12] } - 80008c0: bf00 nop - 80008c2: 3714 adds r7, #20 - 80008c4: 46bd mov sp, r7 - 80008c6: bc80 pop {r7} - 80008c8: 4770 bx lr - 80008ca: bf00 nop - 80008cc: e000ed00 .word 0xe000ed00 + 8000948: bf00 nop + 800094a: 3714 adds r7, #20 + 800094c: 46bd mov sp, r7 + 800094e: bc80 pop {r7} + 8000950: 4770 bx lr + 8000952: bf00 nop + 8000954: e000ed00 .word 0xe000ed00 -080008d0 <__NVIC_GetPriorityGrouping>: +08000958 <__NVIC_GetPriorityGrouping>: \brief Get Priority Grouping \details Reads the priority grouping field from the NVIC Interrupt Controller. \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). */ __STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) { - 80008d0: b480 push {r7} - 80008d2: af00 add r7, sp, #0 + 8000958: b480 push {r7} + 800095a: af00 add r7, sp, #0 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); - 80008d4: 4b04 ldr r3, [pc, #16] ; (80008e8 <__NVIC_GetPriorityGrouping+0x18>) - 80008d6: 68db ldr r3, [r3, #12] - 80008d8: 0a1b lsrs r3, r3, #8 - 80008da: f003 0307 and.w r3, r3, #7 + 800095c: 4b04 ldr r3, [pc, #16] ; (8000970 <__NVIC_GetPriorityGrouping+0x18>) + 800095e: 68db ldr r3, [r3, #12] + 8000960: 0a1b lsrs r3, r3, #8 + 8000962: f003 0307 and.w r3, r3, #7 } - 80008de: 4618 mov r0, r3 - 80008e0: 46bd mov sp, r7 - 80008e2: bc80 pop {r7} - 80008e4: 4770 bx lr - 80008e6: bf00 nop - 80008e8: e000ed00 .word 0xe000ed00 + 8000966: 4618 mov r0, r3 + 8000968: 46bd mov sp, r7 + 800096a: bc80 pop {r7} + 800096c: 4770 bx lr + 800096e: bf00 nop + 8000970: e000ed00 .word 0xe000ed00 -080008ec <__NVIC_SetPriority>: +08000974 <__NVIC_SetPriority>: \param [in] IRQn Interrupt number. \param [in] priority Priority to set. \note The priority cannot be set for every processor exception. */ __STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) { - 80008ec: b480 push {r7} - 80008ee: b083 sub sp, #12 - 80008f0: af00 add r7, sp, #0 - 80008f2: 4603 mov r3, r0 - 80008f4: 6039 str r1, [r7, #0] - 80008f6: 71fb strb r3, [r7, #7] + 8000974: b480 push {r7} + 8000976: b083 sub sp, #12 + 8000978: af00 add r7, sp, #0 + 800097a: 4603 mov r3, r0 + 800097c: 6039 str r1, [r7, #0] + 800097e: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) - 80008f8: f997 3007 ldrsb.w r3, [r7, #7] - 80008fc: 2b00 cmp r3, #0 - 80008fe: db0a blt.n 8000916 <__NVIC_SetPriority+0x2a> + 8000980: f997 3007 ldrsb.w r3, [r7, #7] + 8000984: 2b00 cmp r3, #0 + 8000986: db0a blt.n 800099e <__NVIC_SetPriority+0x2a> { NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 8000900: 683b ldr r3, [r7, #0] - 8000902: b2da uxtb r2, r3 - 8000904: 490c ldr r1, [pc, #48] ; (8000938 <__NVIC_SetPriority+0x4c>) - 8000906: f997 3007 ldrsb.w r3, [r7, #7] - 800090a: 0112 lsls r2, r2, #4 - 800090c: b2d2 uxtb r2, r2 - 800090e: 440b add r3, r1 - 8000910: f883 2300 strb.w r2, [r3, #768] ; 0x300 + 8000988: 683b ldr r3, [r7, #0] + 800098a: b2da uxtb r2, r3 + 800098c: 490c ldr r1, [pc, #48] ; (80009c0 <__NVIC_SetPriority+0x4c>) + 800098e: f997 3007 ldrsb.w r3, [r7, #7] + 8000992: 0112 lsls r2, r2, #4 + 8000994: b2d2 uxtb r2, r2 + 8000996: 440b add r3, r1 + 8000998: f883 2300 strb.w r2, [r3, #768] ; 0x300 } else { SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); } } - 8000914: e00a b.n 800092c <__NVIC_SetPriority+0x40> + 800099c: e00a b.n 80009b4 <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 8000916: 683b ldr r3, [r7, #0] - 8000918: b2da uxtb r2, r3 - 800091a: 4908 ldr r1, [pc, #32] ; (800093c <__NVIC_SetPriority+0x50>) - 800091c: 79fb ldrb r3, [r7, #7] - 800091e: f003 030f and.w r3, r3, #15 - 8000922: 3b04 subs r3, #4 - 8000924: 0112 lsls r2, r2, #4 - 8000926: b2d2 uxtb r2, r2 - 8000928: 440b add r3, r1 - 800092a: 761a strb r2, [r3, #24] + 800099e: 683b ldr r3, [r7, #0] + 80009a0: b2da uxtb r2, r3 + 80009a2: 4908 ldr r1, [pc, #32] ; (80009c4 <__NVIC_SetPriority+0x50>) + 80009a4: 79fb ldrb r3, [r7, #7] + 80009a6: f003 030f and.w r3, r3, #15 + 80009aa: 3b04 subs r3, #4 + 80009ac: 0112 lsls r2, r2, #4 + 80009ae: b2d2 uxtb r2, r2 + 80009b0: 440b add r3, r1 + 80009b2: 761a strb r2, [r3, #24] } - 800092c: bf00 nop - 800092e: 370c adds r7, #12 - 8000930: 46bd mov sp, r7 - 8000932: bc80 pop {r7} - 8000934: 4770 bx lr - 8000936: bf00 nop - 8000938: e000e100 .word 0xe000e100 - 800093c: e000ed00 .word 0xe000ed00 + 80009b4: bf00 nop + 80009b6: 370c adds r7, #12 + 80009b8: 46bd mov sp, r7 + 80009ba: bc80 pop {r7} + 80009bc: 4770 bx lr + 80009be: bf00 nop + 80009c0: e000e100 .word 0xe000e100 + 80009c4: e000ed00 .word 0xe000ed00 -08000940 : +080009c8 : \param [in] PreemptPriority Preemptive priority value (starting from 0). \param [in] SubPriority Subpriority value (starting from 0). \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). */ __STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) { - 8000940: b480 push {r7} - 8000942: b089 sub sp, #36 ; 0x24 - 8000944: af00 add r7, sp, #0 - 8000946: 60f8 str r0, [r7, #12] - 8000948: 60b9 str r1, [r7, #8] - 800094a: 607a str r2, [r7, #4] + 80009c8: b480 push {r7} + 80009ca: b089 sub sp, #36 ; 0x24 + 80009cc: af00 add r7, sp, #0 + 80009ce: 60f8 str r0, [r7, #12] + 80009d0: 60b9 str r1, [r7, #8] + 80009d2: 607a str r2, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 800094c: 68fb ldr r3, [r7, #12] - 800094e: f003 0307 and.w r3, r3, #7 - 8000952: 61fb str r3, [r7, #28] + 80009d4: 68fb ldr r3, [r7, #12] + 80009d6: f003 0307 and.w r3, r3, #7 + 80009da: 61fb str r3, [r7, #28] uint32_t PreemptPriorityBits; uint32_t SubPriorityBits; PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - 8000954: 69fb ldr r3, [r7, #28] - 8000956: f1c3 0307 rsb r3, r3, #7 - 800095a: 2b04 cmp r3, #4 - 800095c: bf28 it cs - 800095e: 2304 movcs r3, #4 - 8000960: 61bb str r3, [r7, #24] + 80009dc: 69fb ldr r3, [r7, #28] + 80009de: f1c3 0307 rsb r3, r3, #7 + 80009e2: 2b04 cmp r3, #4 + 80009e4: bf28 it cs + 80009e6: 2304 movcs r3, #4 + 80009e8: 61bb str r3, [r7, #24] SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - 8000962: 69fb ldr r3, [r7, #28] - 8000964: 3304 adds r3, #4 - 8000966: 2b06 cmp r3, #6 - 8000968: d902 bls.n 8000970 - 800096a: 69fb ldr r3, [r7, #28] - 800096c: 3b03 subs r3, #3 - 800096e: e000 b.n 8000972 - 8000970: 2300 movs r3, #0 - 8000972: 617b str r3, [r7, #20] + 80009ea: 69fb ldr r3, [r7, #28] + 80009ec: 3304 adds r3, #4 + 80009ee: 2b06 cmp r3, #6 + 80009f0: d902 bls.n 80009f8 + 80009f2: 69fb ldr r3, [r7, #28] + 80009f4: 3b03 subs r3, #3 + 80009f6: e000 b.n 80009fa + 80009f8: 2300 movs r3, #0 + 80009fa: 617b str r3, [r7, #20] return ( ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 8000974: f04f 32ff mov.w r2, #4294967295 - 8000978: 69bb ldr r3, [r7, #24] - 800097a: fa02 f303 lsl.w r3, r2, r3 - 800097e: 43da mvns r2, r3 - 8000980: 68bb ldr r3, [r7, #8] - 8000982: 401a ands r2, r3 - 8000984: 697b ldr r3, [r7, #20] - 8000986: 409a lsls r2, r3 + 80009fc: f04f 32ff mov.w r2, #4294967295 + 8000a00: 69bb ldr r3, [r7, #24] + 8000a02: fa02 f303 lsl.w r3, r2, r3 + 8000a06: 43da mvns r2, r3 + 8000a08: 68bb ldr r3, [r7, #8] + 8000a0a: 401a ands r2, r3 + 8000a0c: 697b ldr r3, [r7, #20] + 8000a0e: 409a lsls r2, r3 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - 8000988: f04f 31ff mov.w r1, #4294967295 - 800098c: 697b ldr r3, [r7, #20] - 800098e: fa01 f303 lsl.w r3, r1, r3 - 8000992: 43d9 mvns r1, r3 - 8000994: 687b ldr r3, [r7, #4] - 8000996: 400b ands r3, r1 + 8000a10: f04f 31ff mov.w r1, #4294967295 + 8000a14: 697b ldr r3, [r7, #20] + 8000a16: fa01 f303 lsl.w r3, r1, r3 + 8000a1a: 43d9 mvns r1, r3 + 8000a1c: 687b ldr r3, [r7, #4] + 8000a1e: 400b ands r3, r1 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 8000998: 4313 orrs r3, r2 + 8000a20: 4313 orrs r3, r2 ); } - 800099a: 4618 mov r0, r3 - 800099c: 3724 adds r7, #36 ; 0x24 - 800099e: 46bd mov sp, r7 - 80009a0: bc80 pop {r7} - 80009a2: 4770 bx lr + 8000a22: 4618 mov r0, r3 + 8000a24: 3724 adds r7, #36 ; 0x24 + 8000a26: 46bd mov sp, r7 + 8000a28: bc80 pop {r7} + 8000a2a: 4770 bx lr -080009a4 : +08000a2c : \note When the variable __Vendor_SysTickConfig is set to 1, then the function SysTick_Config is not included. In this case, the file device.h must contain a vendor-specific implementation of this function. */ __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { - 80009a4: b580 push {r7, lr} - 80009a6: b082 sub sp, #8 - 80009a8: af00 add r7, sp, #0 - 80009aa: 6078 str r0, [r7, #4] + 8000a2c: b580 push {r7, lr} + 8000a2e: b082 sub sp, #8 + 8000a30: af00 add r7, sp, #0 + 8000a32: 6078 str r0, [r7, #4] if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - 80009ac: 687b ldr r3, [r7, #4] - 80009ae: 3b01 subs r3, #1 - 80009b0: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 - 80009b4: d301 bcc.n 80009ba + 8000a34: 687b ldr r3, [r7, #4] + 8000a36: 3b01 subs r3, #1 + 8000a38: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 + 8000a3c: d301 bcc.n 8000a42 { return (1UL); /* Reload value impossible */ - 80009b6: 2301 movs r3, #1 - 80009b8: e00f b.n 80009da + 8000a3e: 2301 movs r3, #1 + 8000a40: e00f b.n 8000a62 } SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - 80009ba: 4a0a ldr r2, [pc, #40] ; (80009e4 ) - 80009bc: 687b ldr r3, [r7, #4] - 80009be: 3b01 subs r3, #1 - 80009c0: 6053 str r3, [r2, #4] + 8000a42: 4a0a ldr r2, [pc, #40] ; (8000a6c ) + 8000a44: 687b ldr r3, [r7, #4] + 8000a46: 3b01 subs r3, #1 + 8000a48: 6053 str r3, [r2, #4] NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - 80009c2: 210f movs r1, #15 - 80009c4: f04f 30ff mov.w r0, #4294967295 - 80009c8: f7ff ff90 bl 80008ec <__NVIC_SetPriority> + 8000a4a: 210f movs r1, #15 + 8000a4c: f04f 30ff mov.w r0, #4294967295 + 8000a50: f7ff ff90 bl 8000974 <__NVIC_SetPriority> SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - 80009cc: 4b05 ldr r3, [pc, #20] ; (80009e4 ) - 80009ce: 2200 movs r2, #0 - 80009d0: 609a str r2, [r3, #8] + 8000a54: 4b05 ldr r3, [pc, #20] ; (8000a6c ) + 8000a56: 2200 movs r2, #0 + 8000a58: 609a str r2, [r3, #8] SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - 80009d2: 4b04 ldr r3, [pc, #16] ; (80009e4 ) - 80009d4: 2207 movs r2, #7 - 80009d6: 601a str r2, [r3, #0] + 8000a5a: 4b04 ldr r3, [pc, #16] ; (8000a6c ) + 8000a5c: 2207 movs r2, #7 + 8000a5e: 601a str r2, [r3, #0] SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0UL); /* Function successful */ - 80009d8: 2300 movs r3, #0 + 8000a60: 2300 movs r3, #0 } - 80009da: 4618 mov r0, r3 - 80009dc: 3708 adds r7, #8 - 80009de: 46bd mov sp, r7 - 80009e0: bd80 pop {r7, pc} - 80009e2: bf00 nop - 80009e4: e000e010 .word 0xe000e010 + 8000a62: 4618 mov r0, r3 + 8000a64: 3708 adds r7, #8 + 8000a66: 46bd mov sp, r7 + 8000a68: bd80 pop {r7, pc} + 8000a6a: bf00 nop + 8000a6c: e000e010 .word 0xe000e010 -080009e8 : +08000a70 : * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. * The pending IRQ priority will be managed only by the subpriority. * @retval None */ void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { - 80009e8: b580 push {r7, lr} - 80009ea: b082 sub sp, #8 - 80009ec: af00 add r7, sp, #0 - 80009ee: 6078 str r0, [r7, #4] + 8000a70: b580 push {r7, lr} + 8000a72: b082 sub sp, #8 + 8000a74: af00 add r7, sp, #0 + 8000a76: 6078 str r0, [r7, #4] /* Check the parameters */ assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ NVIC_SetPriorityGrouping(PriorityGroup); - 80009f0: 6878 ldr r0, [r7, #4] - 80009f2: f7ff ff49 bl 8000888 <__NVIC_SetPriorityGrouping> + 8000a78: 6878 ldr r0, [r7, #4] + 8000a7a: f7ff ff49 bl 8000910 <__NVIC_SetPriorityGrouping> } - 80009f6: bf00 nop - 80009f8: 3708 adds r7, #8 - 80009fa: 46bd mov sp, r7 - 80009fc: bd80 pop {r7, pc} + 8000a7e: bf00 nop + 8000a80: 3708 adds r7, #8 + 8000a82: 46bd mov sp, r7 + 8000a84: bd80 pop {r7, pc} -080009fe : +08000a86 : * This parameter can be a value between 0 and 15 * A lower priority value indicates a higher priority. * @retval None */ void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) { - 80009fe: b580 push {r7, lr} - 8000a00: b086 sub sp, #24 - 8000a02: af00 add r7, sp, #0 - 8000a04: 4603 mov r3, r0 - 8000a06: 60b9 str r1, [r7, #8] - 8000a08: 607a str r2, [r7, #4] - 8000a0a: 73fb strb r3, [r7, #15] + 8000a86: b580 push {r7, lr} + 8000a88: b086 sub sp, #24 + 8000a8a: af00 add r7, sp, #0 + 8000a8c: 4603 mov r3, r0 + 8000a8e: 60b9 str r1, [r7, #8] + 8000a90: 607a str r2, [r7, #4] + 8000a92: 73fb strb r3, [r7, #15] uint32_t prioritygroup = 0x00U; - 8000a0c: 2300 movs r3, #0 - 8000a0e: 617b str r3, [r7, #20] + 8000a94: 2300 movs r3, #0 + 8000a96: 617b str r3, [r7, #20] /* Check the parameters */ assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); prioritygroup = NVIC_GetPriorityGrouping(); - 8000a10: f7ff ff5e bl 80008d0 <__NVIC_GetPriorityGrouping> - 8000a14: 6178 str r0, [r7, #20] + 8000a98: f7ff ff5e bl 8000958 <__NVIC_GetPriorityGrouping> + 8000a9c: 6178 str r0, [r7, #20] NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); - 8000a16: 687a ldr r2, [r7, #4] - 8000a18: 68b9 ldr r1, [r7, #8] - 8000a1a: 6978 ldr r0, [r7, #20] - 8000a1c: f7ff ff90 bl 8000940 - 8000a20: 4602 mov r2, r0 - 8000a22: f997 300f ldrsb.w r3, [r7, #15] - 8000a26: 4611 mov r1, r2 - 8000a28: 4618 mov r0, r3 - 8000a2a: f7ff ff5f bl 80008ec <__NVIC_SetPriority> + 8000a9e: 687a ldr r2, [r7, #4] + 8000aa0: 68b9 ldr r1, [r7, #8] + 8000aa2: 6978 ldr r0, [r7, #20] + 8000aa4: f7ff ff90 bl 80009c8 + 8000aa8: 4602 mov r2, r0 + 8000aaa: f997 300f ldrsb.w r3, [r7, #15] + 8000aae: 4611 mov r1, r2 + 8000ab0: 4618 mov r0, r3 + 8000ab2: f7ff ff5f bl 8000974 <__NVIC_SetPriority> } - 8000a2e: bf00 nop - 8000a30: 3718 adds r7, #24 - 8000a32: 46bd mov sp, r7 - 8000a34: bd80 pop {r7, pc} + 8000ab6: bf00 nop + 8000ab8: 3718 adds r7, #24 + 8000aba: 46bd mov sp, r7 + 8000abc: bd80 pop {r7, pc} -08000a36 : +08000abe : * @param TicksNumb: Specifies the ticks Number of ticks between two interrupts. * @retval status: - 0 Function succeeded. * - 1 Function failed. */ uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) { - 8000a36: b580 push {r7, lr} - 8000a38: b082 sub sp, #8 - 8000a3a: af00 add r7, sp, #0 - 8000a3c: 6078 str r0, [r7, #4] + 8000abe: b580 push {r7, lr} + 8000ac0: b082 sub sp, #8 + 8000ac2: af00 add r7, sp, #0 + 8000ac4: 6078 str r0, [r7, #4] return SysTick_Config(TicksNumb); - 8000a3e: 6878 ldr r0, [r7, #4] - 8000a40: f7ff ffb0 bl 80009a4 - 8000a44: 4603 mov r3, r0 + 8000ac6: 6878 ldr r0, [r7, #4] + 8000ac8: f7ff ffb0 bl 8000a2c + 8000acc: 4603 mov r3, r0 } - 8000a46: 4618 mov r0, r3 - 8000a48: 3708 adds r7, #8 - 8000a4a: 46bd mov sp, r7 - 8000a4c: bd80 pop {r7, pc} + 8000ace: 4618 mov r0, r3 + 8000ad0: 3708 adds r7, #8 + 8000ad2: 46bd mov sp, r7 + 8000ad4: bd80 pop {r7, pc} ... -08000a50 : +08000ad8 : * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains * the configuration information for the specified GPIO peripheral. * @retval None */ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) { - 8000a50: b480 push {r7} - 8000a52: b08b sub sp, #44 ; 0x2c - 8000a54: af00 add r7, sp, #0 - 8000a56: 6078 str r0, [r7, #4] - 8000a58: 6039 str r1, [r7, #0] + 8000ad8: b480 push {r7} + 8000ada: b08b sub sp, #44 ; 0x2c + 8000adc: af00 add r7, sp, #0 + 8000ade: 6078 str r0, [r7, #4] + 8000ae0: 6039 str r1, [r7, #0] uint32_t position = 0x00u; - 8000a5a: 2300 movs r3, #0 - 8000a5c: 627b str r3, [r7, #36] ; 0x24 + 8000ae2: 2300 movs r3, #0 + 8000ae4: 627b str r3, [r7, #36] ; 0x24 uint32_t ioposition; uint32_t iocurrent; uint32_t temp; uint32_t config = 0x00u; - 8000a5e: 2300 movs r3, #0 - 8000a60: 623b str r3, [r7, #32] + 8000ae6: 2300 movs r3, #0 + 8000ae8: 623b str r3, [r7, #32] assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); /* Configure the port pins */ while (((GPIO_Init->Pin) >> position) != 0x00u) - 8000a62: e179 b.n 8000d58 + 8000aea: e179 b.n 8000de0 { /* Get the IO position */ ioposition = (0x01uL << position); - 8000a64: 2201 movs r2, #1 - 8000a66: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000a68: fa02 f303 lsl.w r3, r2, r3 - 8000a6c: 61fb str r3, [r7, #28] + 8000aec: 2201 movs r2, #1 + 8000aee: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000af0: fa02 f303 lsl.w r3, r2, r3 + 8000af4: 61fb str r3, [r7, #28] /* Get the current IO position */ iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; - 8000a6e: 683b ldr r3, [r7, #0] - 8000a70: 681b ldr r3, [r3, #0] - 8000a72: 69fa ldr r2, [r7, #28] - 8000a74: 4013 ands r3, r2 - 8000a76: 61bb str r3, [r7, #24] + 8000af6: 683b ldr r3, [r7, #0] + 8000af8: 681b ldr r3, [r3, #0] + 8000afa: 69fa ldr r2, [r7, #28] + 8000afc: 4013 ands r3, r2 + 8000afe: 61bb str r3, [r7, #24] if (iocurrent == ioposition) - 8000a78: 69ba ldr r2, [r7, #24] - 8000a7a: 69fb ldr r3, [r7, #28] - 8000a7c: 429a cmp r2, r3 - 8000a7e: f040 8168 bne.w 8000d52 + 8000b00: 69ba ldr r2, [r7, #24] + 8000b02: 69fb ldr r3, [r7, #28] + 8000b04: 429a cmp r2, r3 + 8000b06: f040 8168 bne.w 8000dda { /* Check the Alternate function parameters */ assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); /* Based on the required mode, filling config variable with MODEy[1:0] and CNFy[3:2] corresponding bits */ switch (GPIO_Init->Mode) - 8000a82: 683b ldr r3, [r7, #0] - 8000a84: 685b ldr r3, [r3, #4] - 8000a86: 4aa0 ldr r2, [pc, #640] ; (8000d08 ) - 8000a88: 4293 cmp r3, r2 - 8000a8a: d05e beq.n 8000b4a - 8000a8c: 4a9e ldr r2, [pc, #632] ; (8000d08 ) - 8000a8e: 4293 cmp r3, r2 - 8000a90: d875 bhi.n 8000b7e - 8000a92: 4a9e ldr r2, [pc, #632] ; (8000d0c ) - 8000a94: 4293 cmp r3, r2 - 8000a96: d058 beq.n 8000b4a - 8000a98: 4a9c ldr r2, [pc, #624] ; (8000d0c ) - 8000a9a: 4293 cmp r3, r2 - 8000a9c: d86f bhi.n 8000b7e - 8000a9e: 4a9c ldr r2, [pc, #624] ; (8000d10 ) - 8000aa0: 4293 cmp r3, r2 - 8000aa2: d052 beq.n 8000b4a - 8000aa4: 4a9a ldr r2, [pc, #616] ; (8000d10 ) - 8000aa6: 4293 cmp r3, r2 - 8000aa8: d869 bhi.n 8000b7e - 8000aaa: 4a9a ldr r2, [pc, #616] ; (8000d14 ) - 8000aac: 4293 cmp r3, r2 - 8000aae: d04c beq.n 8000b4a - 8000ab0: 4a98 ldr r2, [pc, #608] ; (8000d14 ) - 8000ab2: 4293 cmp r3, r2 - 8000ab4: d863 bhi.n 8000b7e - 8000ab6: 4a98 ldr r2, [pc, #608] ; (8000d18 ) - 8000ab8: 4293 cmp r3, r2 - 8000aba: d046 beq.n 8000b4a - 8000abc: 4a96 ldr r2, [pc, #600] ; (8000d18 ) - 8000abe: 4293 cmp r3, r2 - 8000ac0: d85d bhi.n 8000b7e - 8000ac2: 2b12 cmp r3, #18 - 8000ac4: d82a bhi.n 8000b1c - 8000ac6: 2b12 cmp r3, #18 - 8000ac8: d859 bhi.n 8000b7e - 8000aca: a201 add r2, pc, #4 ; (adr r2, 8000ad0 ) - 8000acc: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8000ad0: 08000b4b .word 0x08000b4b - 8000ad4: 08000b25 .word 0x08000b25 - 8000ad8: 08000b37 .word 0x08000b37 - 8000adc: 08000b79 .word 0x08000b79 - 8000ae0: 08000b7f .word 0x08000b7f - 8000ae4: 08000b7f .word 0x08000b7f - 8000ae8: 08000b7f .word 0x08000b7f - 8000aec: 08000b7f .word 0x08000b7f - 8000af0: 08000b7f .word 0x08000b7f - 8000af4: 08000b7f .word 0x08000b7f - 8000af8: 08000b7f .word 0x08000b7f - 8000afc: 08000b7f .word 0x08000b7f - 8000b00: 08000b7f .word 0x08000b7f - 8000b04: 08000b7f .word 0x08000b7f - 8000b08: 08000b7f .word 0x08000b7f - 8000b0c: 08000b7f .word 0x08000b7f - 8000b10: 08000b7f .word 0x08000b7f - 8000b14: 08000b2d .word 0x08000b2d - 8000b18: 08000b41 .word 0x08000b41 - 8000b1c: 4a7f ldr r2, [pc, #508] ; (8000d1c ) - 8000b1e: 4293 cmp r3, r2 - 8000b20: d013 beq.n 8000b4a + 8000b0a: 683b ldr r3, [r7, #0] + 8000b0c: 685b ldr r3, [r3, #4] + 8000b0e: 4aa0 ldr r2, [pc, #640] ; (8000d90 ) + 8000b10: 4293 cmp r3, r2 + 8000b12: d05e beq.n 8000bd2 + 8000b14: 4a9e ldr r2, [pc, #632] ; (8000d90 ) + 8000b16: 4293 cmp r3, r2 + 8000b18: d875 bhi.n 8000c06 + 8000b1a: 4a9e ldr r2, [pc, #632] ; (8000d94 ) + 8000b1c: 4293 cmp r3, r2 + 8000b1e: d058 beq.n 8000bd2 + 8000b20: 4a9c ldr r2, [pc, #624] ; (8000d94 ) + 8000b22: 4293 cmp r3, r2 + 8000b24: d86f bhi.n 8000c06 + 8000b26: 4a9c ldr r2, [pc, #624] ; (8000d98 ) + 8000b28: 4293 cmp r3, r2 + 8000b2a: d052 beq.n 8000bd2 + 8000b2c: 4a9a ldr r2, [pc, #616] ; (8000d98 ) + 8000b2e: 4293 cmp r3, r2 + 8000b30: d869 bhi.n 8000c06 + 8000b32: 4a9a ldr r2, [pc, #616] ; (8000d9c ) + 8000b34: 4293 cmp r3, r2 + 8000b36: d04c beq.n 8000bd2 + 8000b38: 4a98 ldr r2, [pc, #608] ; (8000d9c ) + 8000b3a: 4293 cmp r3, r2 + 8000b3c: d863 bhi.n 8000c06 + 8000b3e: 4a98 ldr r2, [pc, #608] ; (8000da0 ) + 8000b40: 4293 cmp r3, r2 + 8000b42: d046 beq.n 8000bd2 + 8000b44: 4a96 ldr r2, [pc, #600] ; (8000da0 ) + 8000b46: 4293 cmp r3, r2 + 8000b48: d85d bhi.n 8000c06 + 8000b4a: 2b12 cmp r3, #18 + 8000b4c: d82a bhi.n 8000ba4 + 8000b4e: 2b12 cmp r3, #18 + 8000b50: d859 bhi.n 8000c06 + 8000b52: a201 add r2, pc, #4 ; (adr r2, 8000b58 ) + 8000b54: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8000b58: 08000bd3 .word 0x08000bd3 + 8000b5c: 08000bad .word 0x08000bad + 8000b60: 08000bbf .word 0x08000bbf + 8000b64: 08000c01 .word 0x08000c01 + 8000b68: 08000c07 .word 0x08000c07 + 8000b6c: 08000c07 .word 0x08000c07 + 8000b70: 08000c07 .word 0x08000c07 + 8000b74: 08000c07 .word 0x08000c07 + 8000b78: 08000c07 .word 0x08000c07 + 8000b7c: 08000c07 .word 0x08000c07 + 8000b80: 08000c07 .word 0x08000c07 + 8000b84: 08000c07 .word 0x08000c07 + 8000b88: 08000c07 .word 0x08000c07 + 8000b8c: 08000c07 .word 0x08000c07 + 8000b90: 08000c07 .word 0x08000c07 + 8000b94: 08000c07 .word 0x08000c07 + 8000b98: 08000c07 .word 0x08000c07 + 8000b9c: 08000bb5 .word 0x08000bb5 + 8000ba0: 08000bc9 .word 0x08000bc9 + 8000ba4: 4a7f ldr r2, [pc, #508] ; (8000da4 ) + 8000ba6: 4293 cmp r3, r2 + 8000ba8: d013 beq.n 8000bd2 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; break; /* Parameters are checked with assert_param */ default: break; - 8000b22: e02c b.n 8000b7e + 8000baa: e02c b.n 8000c06 config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP; - 8000b24: 683b ldr r3, [r7, #0] - 8000b26: 68db ldr r3, [r3, #12] - 8000b28: 623b str r3, [r7, #32] + 8000bac: 683b ldr r3, [r7, #0] + 8000bae: 68db ldr r3, [r3, #12] + 8000bb0: 623b str r3, [r7, #32] break; - 8000b2a: e029 b.n 8000b80 + 8000bb2: e029 b.n 8000c08 config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD; - 8000b2c: 683b ldr r3, [r7, #0] - 8000b2e: 68db ldr r3, [r3, #12] - 8000b30: 3304 adds r3, #4 - 8000b32: 623b str r3, [r7, #32] + 8000bb4: 683b ldr r3, [r7, #0] + 8000bb6: 68db ldr r3, [r3, #12] + 8000bb8: 3304 adds r3, #4 + 8000bba: 623b str r3, [r7, #32] break; - 8000b34: e024 b.n 8000b80 + 8000bbc: e024 b.n 8000c08 config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP; - 8000b36: 683b ldr r3, [r7, #0] - 8000b38: 68db ldr r3, [r3, #12] - 8000b3a: 3308 adds r3, #8 - 8000b3c: 623b str r3, [r7, #32] + 8000bbe: 683b ldr r3, [r7, #0] + 8000bc0: 68db ldr r3, [r3, #12] + 8000bc2: 3308 adds r3, #8 + 8000bc4: 623b str r3, [r7, #32] break; - 8000b3e: e01f b.n 8000b80 + 8000bc6: e01f b.n 8000c08 config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD; - 8000b40: 683b ldr r3, [r7, #0] - 8000b42: 68db ldr r3, [r3, #12] - 8000b44: 330c adds r3, #12 - 8000b46: 623b str r3, [r7, #32] + 8000bc8: 683b ldr r3, [r7, #0] + 8000bca: 68db ldr r3, [r3, #12] + 8000bcc: 330c adds r3, #12 + 8000bce: 623b str r3, [r7, #32] break; - 8000b48: e01a b.n 8000b80 + 8000bd0: e01a b.n 8000c08 if (GPIO_Init->Pull == GPIO_NOPULL) - 8000b4a: 683b ldr r3, [r7, #0] - 8000b4c: 689b ldr r3, [r3, #8] - 8000b4e: 2b00 cmp r3, #0 - 8000b50: d102 bne.n 8000b58 + 8000bd2: 683b ldr r3, [r7, #0] + 8000bd4: 689b ldr r3, [r3, #8] + 8000bd6: 2b00 cmp r3, #0 + 8000bd8: d102 bne.n 8000be0 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING; - 8000b52: 2304 movs r3, #4 - 8000b54: 623b str r3, [r7, #32] + 8000bda: 2304 movs r3, #4 + 8000bdc: 623b str r3, [r7, #32] break; - 8000b56: e013 b.n 8000b80 + 8000bde: e013 b.n 8000c08 else if (GPIO_Init->Pull == GPIO_PULLUP) - 8000b58: 683b ldr r3, [r7, #0] - 8000b5a: 689b ldr r3, [r3, #8] - 8000b5c: 2b01 cmp r3, #1 - 8000b5e: d105 bne.n 8000b6c + 8000be0: 683b ldr r3, [r7, #0] + 8000be2: 689b ldr r3, [r3, #8] + 8000be4: 2b01 cmp r3, #1 + 8000be6: d105 bne.n 8000bf4 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; - 8000b60: 2308 movs r3, #8 - 8000b62: 623b str r3, [r7, #32] + 8000be8: 2308 movs r3, #8 + 8000bea: 623b str r3, [r7, #32] GPIOx->BSRR = ioposition; - 8000b64: 687b ldr r3, [r7, #4] - 8000b66: 69fa ldr r2, [r7, #28] - 8000b68: 611a str r2, [r3, #16] + 8000bec: 687b ldr r3, [r7, #4] + 8000bee: 69fa ldr r2, [r7, #28] + 8000bf0: 611a str r2, [r3, #16] break; - 8000b6a: e009 b.n 8000b80 + 8000bf2: e009 b.n 8000c08 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; - 8000b6c: 2308 movs r3, #8 - 8000b6e: 623b str r3, [r7, #32] + 8000bf4: 2308 movs r3, #8 + 8000bf6: 623b str r3, [r7, #32] GPIOx->BRR = ioposition; - 8000b70: 687b ldr r3, [r7, #4] - 8000b72: 69fa ldr r2, [r7, #28] - 8000b74: 615a str r2, [r3, #20] + 8000bf8: 687b ldr r3, [r7, #4] + 8000bfa: 69fa ldr r2, [r7, #28] + 8000bfc: 615a str r2, [r3, #20] break; - 8000b76: e003 b.n 8000b80 + 8000bfe: e003 b.n 8000c08 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; - 8000b78: 2300 movs r3, #0 - 8000b7a: 623b str r3, [r7, #32] + 8000c00: 2300 movs r3, #0 + 8000c02: 623b str r3, [r7, #32] break; - 8000b7c: e000 b.n 8000b80 + 8000c04: e000 b.n 8000c08 break; - 8000b7e: bf00 nop + 8000c06: bf00 nop } /* Check if the current bit belongs to first half or last half of the pin count number in order to address CRH or CRL register*/ configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; - 8000b80: 69bb ldr r3, [r7, #24] - 8000b82: 2bff cmp r3, #255 ; 0xff - 8000b84: d801 bhi.n 8000b8a - 8000b86: 687b ldr r3, [r7, #4] - 8000b88: e001 b.n 8000b8e - 8000b8a: 687b ldr r3, [r7, #4] - 8000b8c: 3304 adds r3, #4 - 8000b8e: 617b str r3, [r7, #20] + 8000c08: 69bb ldr r3, [r7, #24] + 8000c0a: 2bff cmp r3, #255 ; 0xff + 8000c0c: d801 bhi.n 8000c12 + 8000c0e: 687b ldr r3, [r7, #4] + 8000c10: e001 b.n 8000c16 + 8000c12: 687b ldr r3, [r7, #4] + 8000c14: 3304 adds r3, #4 + 8000c16: 617b str r3, [r7, #20] registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); - 8000b90: 69bb ldr r3, [r7, #24] - 8000b92: 2bff cmp r3, #255 ; 0xff - 8000b94: d802 bhi.n 8000b9c - 8000b96: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000b98: 009b lsls r3, r3, #2 - 8000b9a: e002 b.n 8000ba2 - 8000b9c: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000b9e: 3b08 subs r3, #8 - 8000ba0: 009b lsls r3, r3, #2 - 8000ba2: 613b str r3, [r7, #16] + 8000c18: 69bb ldr r3, [r7, #24] + 8000c1a: 2bff cmp r3, #255 ; 0xff + 8000c1c: d802 bhi.n 8000c24 + 8000c1e: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000c20: 009b lsls r3, r3, #2 + 8000c22: e002 b.n 8000c2a + 8000c24: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000c26: 3b08 subs r3, #8 + 8000c28: 009b lsls r3, r3, #2 + 8000c2a: 613b str r3, [r7, #16] /* Apply the new configuration of the pin to the register */ MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset)); - 8000ba4: 697b ldr r3, [r7, #20] - 8000ba6: 681a ldr r2, [r3, #0] - 8000ba8: 210f movs r1, #15 - 8000baa: 693b ldr r3, [r7, #16] - 8000bac: fa01 f303 lsl.w r3, r1, r3 - 8000bb0: 43db mvns r3, r3 - 8000bb2: 401a ands r2, r3 - 8000bb4: 6a39 ldr r1, [r7, #32] - 8000bb6: 693b ldr r3, [r7, #16] - 8000bb8: fa01 f303 lsl.w r3, r1, r3 - 8000bbc: 431a orrs r2, r3 - 8000bbe: 697b ldr r3, [r7, #20] - 8000bc0: 601a str r2, [r3, #0] + 8000c2c: 697b ldr r3, [r7, #20] + 8000c2e: 681a ldr r2, [r3, #0] + 8000c30: 210f movs r1, #15 + 8000c32: 693b ldr r3, [r7, #16] + 8000c34: fa01 f303 lsl.w r3, r1, r3 + 8000c38: 43db mvns r3, r3 + 8000c3a: 401a ands r2, r3 + 8000c3c: 6a39 ldr r1, [r7, #32] + 8000c3e: 693b ldr r3, [r7, #16] + 8000c40: fa01 f303 lsl.w r3, r1, r3 + 8000c44: 431a orrs r2, r3 + 8000c46: 697b ldr r3, [r7, #20] + 8000c48: 601a str r2, [r3, #0] /*--------------------- EXTI Mode Configuration ------------------------*/ /* Configure the External Interrupt or event for the current IO */ if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) - 8000bc2: 683b ldr r3, [r7, #0] - 8000bc4: 685b ldr r3, [r3, #4] - 8000bc6: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 8000bca: 2b00 cmp r3, #0 - 8000bcc: f000 80c1 beq.w 8000d52 + 8000c4a: 683b ldr r3, [r7, #0] + 8000c4c: 685b ldr r3, [r3, #4] + 8000c4e: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8000c52: 2b00 cmp r3, #0 + 8000c54: f000 80c1 beq.w 8000dda { /* Enable AFIO Clock */ __HAL_RCC_AFIO_CLK_ENABLE(); - 8000bd0: 4b53 ldr r3, [pc, #332] ; (8000d20 ) - 8000bd2: 699b ldr r3, [r3, #24] - 8000bd4: 4a52 ldr r2, [pc, #328] ; (8000d20 ) - 8000bd6: f043 0301 orr.w r3, r3, #1 - 8000bda: 6193 str r3, [r2, #24] - 8000bdc: 4b50 ldr r3, [pc, #320] ; (8000d20 ) - 8000bde: 699b ldr r3, [r3, #24] - 8000be0: f003 0301 and.w r3, r3, #1 - 8000be4: 60bb str r3, [r7, #8] - 8000be6: 68bb ldr r3, [r7, #8] + 8000c58: 4b53 ldr r3, [pc, #332] ; (8000da8 ) + 8000c5a: 699b ldr r3, [r3, #24] + 8000c5c: 4a52 ldr r2, [pc, #328] ; (8000da8 ) + 8000c5e: f043 0301 orr.w r3, r3, #1 + 8000c62: 6193 str r3, [r2, #24] + 8000c64: 4b50 ldr r3, [pc, #320] ; (8000da8 ) + 8000c66: 699b ldr r3, [r3, #24] + 8000c68: f003 0301 and.w r3, r3, #1 + 8000c6c: 60bb str r3, [r7, #8] + 8000c6e: 68bb ldr r3, [r7, #8] temp = AFIO->EXTICR[position >> 2u]; - 8000be8: 4a4e ldr r2, [pc, #312] ; (8000d24 ) - 8000bea: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000bec: 089b lsrs r3, r3, #2 - 8000bee: 3302 adds r3, #2 - 8000bf0: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 8000bf4: 60fb str r3, [r7, #12] + 8000c70: 4a4e ldr r2, [pc, #312] ; (8000dac ) + 8000c72: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000c74: 089b lsrs r3, r3, #2 + 8000c76: 3302 adds r3, #2 + 8000c78: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 8000c7c: 60fb str r3, [r7, #12] CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u))); - 8000bf6: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000bf8: f003 0303 and.w r3, r3, #3 - 8000bfc: 009b lsls r3, r3, #2 - 8000bfe: 220f movs r2, #15 - 8000c00: fa02 f303 lsl.w r3, r2, r3 - 8000c04: 43db mvns r3, r3 - 8000c06: 68fa ldr r2, [r7, #12] - 8000c08: 4013 ands r3, r2 - 8000c0a: 60fb str r3, [r7, #12] + 8000c7e: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000c80: f003 0303 and.w r3, r3, #3 + 8000c84: 009b lsls r3, r3, #2 + 8000c86: 220f movs r2, #15 + 8000c88: fa02 f303 lsl.w r3, r2, r3 + 8000c8c: 43db mvns r3, r3 + 8000c8e: 68fa ldr r2, [r7, #12] + 8000c90: 4013 ands r3, r2 + 8000c92: 60fb str r3, [r7, #12] SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u))); - 8000c0c: 687b ldr r3, [r7, #4] - 8000c0e: 4a46 ldr r2, [pc, #280] ; (8000d28 ) - 8000c10: 4293 cmp r3, r2 - 8000c12: d01f beq.n 8000c54 - 8000c14: 687b ldr r3, [r7, #4] - 8000c16: 4a45 ldr r2, [pc, #276] ; (8000d2c ) - 8000c18: 4293 cmp r3, r2 - 8000c1a: d019 beq.n 8000c50 - 8000c1c: 687b ldr r3, [r7, #4] - 8000c1e: 4a44 ldr r2, [pc, #272] ; (8000d30 ) - 8000c20: 4293 cmp r3, r2 - 8000c22: d013 beq.n 8000c4c - 8000c24: 687b ldr r3, [r7, #4] - 8000c26: 4a43 ldr r2, [pc, #268] ; (8000d34 ) - 8000c28: 4293 cmp r3, r2 - 8000c2a: d00d beq.n 8000c48 - 8000c2c: 687b ldr r3, [r7, #4] - 8000c2e: 4a42 ldr r2, [pc, #264] ; (8000d38 ) - 8000c30: 4293 cmp r3, r2 - 8000c32: d007 beq.n 8000c44 - 8000c34: 687b ldr r3, [r7, #4] - 8000c36: 4a41 ldr r2, [pc, #260] ; (8000d3c ) - 8000c38: 4293 cmp r3, r2 - 8000c3a: d101 bne.n 8000c40 - 8000c3c: 2305 movs r3, #5 - 8000c3e: e00a b.n 8000c56 - 8000c40: 2306 movs r3, #6 - 8000c42: e008 b.n 8000c56 - 8000c44: 2304 movs r3, #4 - 8000c46: e006 b.n 8000c56 - 8000c48: 2303 movs r3, #3 - 8000c4a: e004 b.n 8000c56 - 8000c4c: 2302 movs r3, #2 - 8000c4e: e002 b.n 8000c56 - 8000c50: 2301 movs r3, #1 - 8000c52: e000 b.n 8000c56 - 8000c54: 2300 movs r3, #0 - 8000c56: 6a7a ldr r2, [r7, #36] ; 0x24 - 8000c58: f002 0203 and.w r2, r2, #3 - 8000c5c: 0092 lsls r2, r2, #2 - 8000c5e: 4093 lsls r3, r2 - 8000c60: 68fa ldr r2, [r7, #12] - 8000c62: 4313 orrs r3, r2 - 8000c64: 60fb str r3, [r7, #12] + 8000c94: 687b ldr r3, [r7, #4] + 8000c96: 4a46 ldr r2, [pc, #280] ; (8000db0 ) + 8000c98: 4293 cmp r3, r2 + 8000c9a: d01f beq.n 8000cdc + 8000c9c: 687b ldr r3, [r7, #4] + 8000c9e: 4a45 ldr r2, [pc, #276] ; (8000db4 ) + 8000ca0: 4293 cmp r3, r2 + 8000ca2: d019 beq.n 8000cd8 + 8000ca4: 687b ldr r3, [r7, #4] + 8000ca6: 4a44 ldr r2, [pc, #272] ; (8000db8 ) + 8000ca8: 4293 cmp r3, r2 + 8000caa: d013 beq.n 8000cd4 + 8000cac: 687b ldr r3, [r7, #4] + 8000cae: 4a43 ldr r2, [pc, #268] ; (8000dbc ) + 8000cb0: 4293 cmp r3, r2 + 8000cb2: d00d beq.n 8000cd0 + 8000cb4: 687b ldr r3, [r7, #4] + 8000cb6: 4a42 ldr r2, [pc, #264] ; (8000dc0 ) + 8000cb8: 4293 cmp r3, r2 + 8000cba: d007 beq.n 8000ccc + 8000cbc: 687b ldr r3, [r7, #4] + 8000cbe: 4a41 ldr r2, [pc, #260] ; (8000dc4 ) + 8000cc0: 4293 cmp r3, r2 + 8000cc2: d101 bne.n 8000cc8 + 8000cc4: 2305 movs r3, #5 + 8000cc6: e00a b.n 8000cde + 8000cc8: 2306 movs r3, #6 + 8000cca: e008 b.n 8000cde + 8000ccc: 2304 movs r3, #4 + 8000cce: e006 b.n 8000cde + 8000cd0: 2303 movs r3, #3 + 8000cd2: e004 b.n 8000cde + 8000cd4: 2302 movs r3, #2 + 8000cd6: e002 b.n 8000cde + 8000cd8: 2301 movs r3, #1 + 8000cda: e000 b.n 8000cde + 8000cdc: 2300 movs r3, #0 + 8000cde: 6a7a ldr r2, [r7, #36] ; 0x24 + 8000ce0: f002 0203 and.w r2, r2, #3 + 8000ce4: 0092 lsls r2, r2, #2 + 8000ce6: 4093 lsls r3, r2 + 8000ce8: 68fa ldr r2, [r7, #12] + 8000cea: 4313 orrs r3, r2 + 8000cec: 60fb str r3, [r7, #12] AFIO->EXTICR[position >> 2u] = temp; - 8000c66: 492f ldr r1, [pc, #188] ; (8000d24 ) - 8000c68: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000c6a: 089b lsrs r3, r3, #2 - 8000c6c: 3302 adds r3, #2 - 8000c6e: 68fa ldr r2, [r7, #12] - 8000c70: f841 2023 str.w r2, [r1, r3, lsl #2] + 8000cee: 492f ldr r1, [pc, #188] ; (8000dac ) + 8000cf0: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000cf2: 089b lsrs r3, r3, #2 + 8000cf4: 3302 adds r3, #2 + 8000cf6: 68fa ldr r2, [r7, #12] + 8000cf8: f841 2023 str.w r2, [r1, r3, lsl #2] /* Configure the interrupt mask */ if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) - 8000c74: 683b ldr r3, [r7, #0] - 8000c76: 685b ldr r3, [r3, #4] - 8000c78: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 8000c7c: 2b00 cmp r3, #0 - 8000c7e: d006 beq.n 8000c8e + 8000cfc: 683b ldr r3, [r7, #0] + 8000cfe: 685b ldr r3, [r3, #4] + 8000d00: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8000d04: 2b00 cmp r3, #0 + 8000d06: d006 beq.n 8000d16 { SET_BIT(EXTI->IMR, iocurrent); - 8000c80: 4b2f ldr r3, [pc, #188] ; (8000d40 ) - 8000c82: 681a ldr r2, [r3, #0] - 8000c84: 492e ldr r1, [pc, #184] ; (8000d40 ) - 8000c86: 69bb ldr r3, [r7, #24] - 8000c88: 4313 orrs r3, r2 - 8000c8a: 600b str r3, [r1, #0] - 8000c8c: e006 b.n 8000c9c + 8000d08: 4b2f ldr r3, [pc, #188] ; (8000dc8 ) + 8000d0a: 681a ldr r2, [r3, #0] + 8000d0c: 492e ldr r1, [pc, #184] ; (8000dc8 ) + 8000d0e: 69bb ldr r3, [r7, #24] + 8000d10: 4313 orrs r3, r2 + 8000d12: 600b str r3, [r1, #0] + 8000d14: e006 b.n 8000d24 } else { CLEAR_BIT(EXTI->IMR, iocurrent); - 8000c8e: 4b2c ldr r3, [pc, #176] ; (8000d40 ) - 8000c90: 681a ldr r2, [r3, #0] - 8000c92: 69bb ldr r3, [r7, #24] - 8000c94: 43db mvns r3, r3 - 8000c96: 492a ldr r1, [pc, #168] ; (8000d40 ) - 8000c98: 4013 ands r3, r2 - 8000c9a: 600b str r3, [r1, #0] + 8000d16: 4b2c ldr r3, [pc, #176] ; (8000dc8 ) + 8000d18: 681a ldr r2, [r3, #0] + 8000d1a: 69bb ldr r3, [r7, #24] + 8000d1c: 43db mvns r3, r3 + 8000d1e: 492a ldr r1, [pc, #168] ; (8000dc8 ) + 8000d20: 4013 ands r3, r2 + 8000d22: 600b str r3, [r1, #0] } /* Configure the event mask */ if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) - 8000c9c: 683b ldr r3, [r7, #0] - 8000c9e: 685b ldr r3, [r3, #4] - 8000ca0: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000ca4: 2b00 cmp r3, #0 - 8000ca6: d006 beq.n 8000cb6 + 8000d24: 683b ldr r3, [r7, #0] + 8000d26: 685b ldr r3, [r3, #4] + 8000d28: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000d2c: 2b00 cmp r3, #0 + 8000d2e: d006 beq.n 8000d3e { SET_BIT(EXTI->EMR, iocurrent); - 8000ca8: 4b25 ldr r3, [pc, #148] ; (8000d40 ) - 8000caa: 685a ldr r2, [r3, #4] - 8000cac: 4924 ldr r1, [pc, #144] ; (8000d40 ) - 8000cae: 69bb ldr r3, [r7, #24] - 8000cb0: 4313 orrs r3, r2 - 8000cb2: 604b str r3, [r1, #4] - 8000cb4: e006 b.n 8000cc4 + 8000d30: 4b25 ldr r3, [pc, #148] ; (8000dc8 ) + 8000d32: 685a ldr r2, [r3, #4] + 8000d34: 4924 ldr r1, [pc, #144] ; (8000dc8 ) + 8000d36: 69bb ldr r3, [r7, #24] + 8000d38: 4313 orrs r3, r2 + 8000d3a: 604b str r3, [r1, #4] + 8000d3c: e006 b.n 8000d4c } else { CLEAR_BIT(EXTI->EMR, iocurrent); - 8000cb6: 4b22 ldr r3, [pc, #136] ; (8000d40 ) - 8000cb8: 685a ldr r2, [r3, #4] - 8000cba: 69bb ldr r3, [r7, #24] - 8000cbc: 43db mvns r3, r3 - 8000cbe: 4920 ldr r1, [pc, #128] ; (8000d40 ) - 8000cc0: 4013 ands r3, r2 - 8000cc2: 604b str r3, [r1, #4] + 8000d3e: 4b22 ldr r3, [pc, #136] ; (8000dc8 ) + 8000d40: 685a ldr r2, [r3, #4] + 8000d42: 69bb ldr r3, [r7, #24] + 8000d44: 43db mvns r3, r3 + 8000d46: 4920 ldr r1, [pc, #128] ; (8000dc8 ) + 8000d48: 4013 ands r3, r2 + 8000d4a: 604b str r3, [r1, #4] } /* Enable or disable the rising trigger */ if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) - 8000cc4: 683b ldr r3, [r7, #0] - 8000cc6: 685b ldr r3, [r3, #4] - 8000cc8: f403 1380 and.w r3, r3, #1048576 ; 0x100000 - 8000ccc: 2b00 cmp r3, #0 - 8000cce: d006 beq.n 8000cde + 8000d4c: 683b ldr r3, [r7, #0] + 8000d4e: 685b ldr r3, [r3, #4] + 8000d50: f403 1380 and.w r3, r3, #1048576 ; 0x100000 + 8000d54: 2b00 cmp r3, #0 + 8000d56: d006 beq.n 8000d66 { SET_BIT(EXTI->RTSR, iocurrent); - 8000cd0: 4b1b ldr r3, [pc, #108] ; (8000d40 ) - 8000cd2: 689a ldr r2, [r3, #8] - 8000cd4: 491a ldr r1, [pc, #104] ; (8000d40 ) - 8000cd6: 69bb ldr r3, [r7, #24] - 8000cd8: 4313 orrs r3, r2 - 8000cda: 608b str r3, [r1, #8] - 8000cdc: e006 b.n 8000cec + 8000d58: 4b1b ldr r3, [pc, #108] ; (8000dc8 ) + 8000d5a: 689a ldr r2, [r3, #8] + 8000d5c: 491a ldr r1, [pc, #104] ; (8000dc8 ) + 8000d5e: 69bb ldr r3, [r7, #24] + 8000d60: 4313 orrs r3, r2 + 8000d62: 608b str r3, [r1, #8] + 8000d64: e006 b.n 8000d74 } else { CLEAR_BIT(EXTI->RTSR, iocurrent); - 8000cde: 4b18 ldr r3, [pc, #96] ; (8000d40 ) - 8000ce0: 689a ldr r2, [r3, #8] - 8000ce2: 69bb ldr r3, [r7, #24] - 8000ce4: 43db mvns r3, r3 - 8000ce6: 4916 ldr r1, [pc, #88] ; (8000d40 ) - 8000ce8: 4013 ands r3, r2 - 8000cea: 608b str r3, [r1, #8] + 8000d66: 4b18 ldr r3, [pc, #96] ; (8000dc8 ) + 8000d68: 689a ldr r2, [r3, #8] + 8000d6a: 69bb ldr r3, [r7, #24] + 8000d6c: 43db mvns r3, r3 + 8000d6e: 4916 ldr r1, [pc, #88] ; (8000dc8 ) + 8000d70: 4013 ands r3, r2 + 8000d72: 608b str r3, [r1, #8] } /* Enable or disable the falling trigger */ if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) - 8000cec: 683b ldr r3, [r7, #0] - 8000cee: 685b ldr r3, [r3, #4] - 8000cf0: f403 1300 and.w r3, r3, #2097152 ; 0x200000 - 8000cf4: 2b00 cmp r3, #0 - 8000cf6: d025 beq.n 8000d44 + 8000d74: 683b ldr r3, [r7, #0] + 8000d76: 685b ldr r3, [r3, #4] + 8000d78: f403 1300 and.w r3, r3, #2097152 ; 0x200000 + 8000d7c: 2b00 cmp r3, #0 + 8000d7e: d025 beq.n 8000dcc { SET_BIT(EXTI->FTSR, iocurrent); - 8000cf8: 4b11 ldr r3, [pc, #68] ; (8000d40 ) - 8000cfa: 68da ldr r2, [r3, #12] - 8000cfc: 4910 ldr r1, [pc, #64] ; (8000d40 ) - 8000cfe: 69bb ldr r3, [r7, #24] - 8000d00: 4313 orrs r3, r2 - 8000d02: 60cb str r3, [r1, #12] - 8000d04: e025 b.n 8000d52 - 8000d06: bf00 nop - 8000d08: 10320000 .word 0x10320000 - 8000d0c: 10310000 .word 0x10310000 - 8000d10: 10220000 .word 0x10220000 - 8000d14: 10210000 .word 0x10210000 - 8000d18: 10120000 .word 0x10120000 - 8000d1c: 10110000 .word 0x10110000 - 8000d20: 40021000 .word 0x40021000 - 8000d24: 40010000 .word 0x40010000 - 8000d28: 40010800 .word 0x40010800 - 8000d2c: 40010c00 .word 0x40010c00 - 8000d30: 40011000 .word 0x40011000 - 8000d34: 40011400 .word 0x40011400 - 8000d38: 40011800 .word 0x40011800 - 8000d3c: 40011c00 .word 0x40011c00 - 8000d40: 40010400 .word 0x40010400 + 8000d80: 4b11 ldr r3, [pc, #68] ; (8000dc8 ) + 8000d82: 68da ldr r2, [r3, #12] + 8000d84: 4910 ldr r1, [pc, #64] ; (8000dc8 ) + 8000d86: 69bb ldr r3, [r7, #24] + 8000d88: 4313 orrs r3, r2 + 8000d8a: 60cb str r3, [r1, #12] + 8000d8c: e025 b.n 8000dda + 8000d8e: bf00 nop + 8000d90: 10320000 .word 0x10320000 + 8000d94: 10310000 .word 0x10310000 + 8000d98: 10220000 .word 0x10220000 + 8000d9c: 10210000 .word 0x10210000 + 8000da0: 10120000 .word 0x10120000 + 8000da4: 10110000 .word 0x10110000 + 8000da8: 40021000 .word 0x40021000 + 8000dac: 40010000 .word 0x40010000 + 8000db0: 40010800 .word 0x40010800 + 8000db4: 40010c00 .word 0x40010c00 + 8000db8: 40011000 .word 0x40011000 + 8000dbc: 40011400 .word 0x40011400 + 8000dc0: 40011800 .word 0x40011800 + 8000dc4: 40011c00 .word 0x40011c00 + 8000dc8: 40010400 .word 0x40010400 } else { CLEAR_BIT(EXTI->FTSR, iocurrent); - 8000d44: 4b0b ldr r3, [pc, #44] ; (8000d74 ) - 8000d46: 68da ldr r2, [r3, #12] - 8000d48: 69bb ldr r3, [r7, #24] - 8000d4a: 43db mvns r3, r3 - 8000d4c: 4909 ldr r1, [pc, #36] ; (8000d74 ) - 8000d4e: 4013 ands r3, r2 - 8000d50: 60cb str r3, [r1, #12] + 8000dcc: 4b0b ldr r3, [pc, #44] ; (8000dfc ) + 8000dce: 68da ldr r2, [r3, #12] + 8000dd0: 69bb ldr r3, [r7, #24] + 8000dd2: 43db mvns r3, r3 + 8000dd4: 4909 ldr r1, [pc, #36] ; (8000dfc ) + 8000dd6: 4013 ands r3, r2 + 8000dd8: 60cb str r3, [r1, #12] } } } position++; - 8000d52: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000d54: 3301 adds r3, #1 - 8000d56: 627b str r3, [r7, #36] ; 0x24 + 8000dda: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000ddc: 3301 adds r3, #1 + 8000dde: 627b str r3, [r7, #36] ; 0x24 while (((GPIO_Init->Pin) >> position) != 0x00u) - 8000d58: 683b ldr r3, [r7, #0] - 8000d5a: 681a ldr r2, [r3, #0] - 8000d5c: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000d5e: fa22 f303 lsr.w r3, r2, r3 - 8000d62: 2b00 cmp r3, #0 - 8000d64: f47f ae7e bne.w 8000a64 + 8000de0: 683b ldr r3, [r7, #0] + 8000de2: 681a ldr r2, [r3, #0] + 8000de4: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000de6: fa22 f303 lsr.w r3, r2, r3 + 8000dea: 2b00 cmp r3, #0 + 8000dec: f47f ae7e bne.w 8000aec } } - 8000d68: bf00 nop - 8000d6a: bf00 nop - 8000d6c: 372c adds r7, #44 ; 0x2c - 8000d6e: 46bd mov sp, r7 - 8000d70: bc80 pop {r7} - 8000d72: 4770 bx lr - 8000d74: 40010400 .word 0x40010400 + 8000df0: bf00 nop + 8000df2: bf00 nop + 8000df4: 372c adds r7, #44 ; 0x2c + 8000df6: 46bd mov sp, r7 + 8000df8: bc80 pop {r7} + 8000dfa: 4770 bx lr + 8000dfc: 40010400 .word 0x40010400 -08000d78 : +08000e00 : + * @param GPIO_Pin: specifies the port bit to read. + * This parameter can be GPIO_PIN_x where x can be (0..15). + * @retval The input port pin value. + */ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) +{ + 8000e00: b480 push {r7} + 8000e02: b085 sub sp, #20 + 8000e04: af00 add r7, sp, #0 + 8000e06: 6078 str r0, [r7, #4] + 8000e08: 460b mov r3, r1 + 8000e0a: 807b strh r3, [r7, #2] + GPIO_PinState bitstatus; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) + 8000e0c: 687b ldr r3, [r7, #4] + 8000e0e: 689a ldr r2, [r3, #8] + 8000e10: 887b ldrh r3, [r7, #2] + 8000e12: 4013 ands r3, r2 + 8000e14: 2b00 cmp r3, #0 + 8000e16: d002 beq.n 8000e1e + { + bitstatus = GPIO_PIN_SET; + 8000e18: 2301 movs r3, #1 + 8000e1a: 73fb strb r3, [r7, #15] + 8000e1c: e001 b.n 8000e22 + } + else + { + bitstatus = GPIO_PIN_RESET; + 8000e1e: 2300 movs r3, #0 + 8000e20: 73fb strb r3, [r7, #15] + } + return bitstatus; + 8000e22: 7bfb ldrb r3, [r7, #15] +} + 8000e24: 4618 mov r0, r3 + 8000e26: 3714 adds r7, #20 + 8000e28: 46bd mov sp, r7 + 8000e2a: bc80 pop {r7} + 8000e2c: 4770 bx lr + +08000e2e : * @arg GPIO_PIN_RESET: to clear the port pin * @arg GPIO_PIN_SET: to set the port pin * @retval None */ void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) { - 8000d78: b480 push {r7} - 8000d7a: b083 sub sp, #12 - 8000d7c: af00 add r7, sp, #0 - 8000d7e: 6078 str r0, [r7, #4] - 8000d80: 460b mov r3, r1 - 8000d82: 807b strh r3, [r7, #2] - 8000d84: 4613 mov r3, r2 - 8000d86: 707b strb r3, [r7, #1] + 8000e2e: b480 push {r7} + 8000e30: b083 sub sp, #12 + 8000e32: af00 add r7, sp, #0 + 8000e34: 6078 str r0, [r7, #4] + 8000e36: 460b mov r3, r1 + 8000e38: 807b strh r3, [r7, #2] + 8000e3a: 4613 mov r3, r2 + 8000e3c: 707b strb r3, [r7, #1] /* Check the parameters */ assert_param(IS_GPIO_PIN(GPIO_Pin)); assert_param(IS_GPIO_PIN_ACTION(PinState)); if (PinState != GPIO_PIN_RESET) - 8000d88: 787b ldrb r3, [r7, #1] - 8000d8a: 2b00 cmp r3, #0 - 8000d8c: d003 beq.n 8000d96 + 8000e3e: 787b ldrb r3, [r7, #1] + 8000e40: 2b00 cmp r3, #0 + 8000e42: d003 beq.n 8000e4c { GPIOx->BSRR = GPIO_Pin; - 8000d8e: 887a ldrh r2, [r7, #2] - 8000d90: 687b ldr r3, [r7, #4] - 8000d92: 611a str r2, [r3, #16] + 8000e44: 887a ldrh r2, [r7, #2] + 8000e46: 687b ldr r3, [r7, #4] + 8000e48: 611a str r2, [r3, #16] } else { GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; } } - 8000d94: e003 b.n 8000d9e + 8000e4a: e003 b.n 8000e54 GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; - 8000d96: 887b ldrh r3, [r7, #2] - 8000d98: 041a lsls r2, r3, #16 - 8000d9a: 687b ldr r3, [r7, #4] - 8000d9c: 611a str r2, [r3, #16] + 8000e4c: 887b ldrh r3, [r7, #2] + 8000e4e: 041a lsls r2, r3, #16 + 8000e50: 687b ldr r3, [r7, #4] + 8000e52: 611a str r2, [r3, #16] } - 8000d9e: bf00 nop - 8000da0: 370c adds r7, #12 - 8000da2: 46bd mov sp, r7 - 8000da4: bc80 pop {r7} - 8000da6: 4770 bx lr + 8000e54: bf00 nop + 8000e56: 370c adds r7, #12 + 8000e58: 46bd mov sp, r7 + 8000e5a: bc80 pop {r7} + 8000e5c: 4770 bx lr + ... -08000da8 : +08000e60 : * supported by this macro. User should request a transition to HSE Off * first and then HSE On or HSE Bypass. * @retval HAL status */ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) { - 8000da8: b580 push {r7, lr} - 8000daa: b086 sub sp, #24 - 8000dac: af00 add r7, sp, #0 - 8000dae: 6078 str r0, [r7, #4] + 8000e60: b580 push {r7, lr} + 8000e62: b086 sub sp, #24 + 8000e64: af00 add r7, sp, #0 + 8000e66: 6078 str r0, [r7, #4] uint32_t tickstart; uint32_t pll_config; /* Check Null pointer */ if (RCC_OscInitStruct == NULL) - 8000db0: 687b ldr r3, [r7, #4] - 8000db2: 2b00 cmp r3, #0 - 8000db4: d101 bne.n 8000dba + 8000e68: 687b ldr r3, [r7, #4] + 8000e6a: 2b00 cmp r3, #0 + 8000e6c: d101 bne.n 8000e72 { return HAL_ERROR; - 8000db6: 2301 movs r3, #1 - 8000db8: e26c b.n 8001294 + 8000e6e: 2301 movs r3, #1 + 8000e70: e26c b.n 800134c /* Check the parameters */ assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); /*------------------------------- HSE Configuration ------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) - 8000dba: 687b ldr r3, [r7, #4] - 8000dbc: 681b ldr r3, [r3, #0] - 8000dbe: f003 0301 and.w r3, r3, #1 - 8000dc2: 2b00 cmp r3, #0 - 8000dc4: f000 8087 beq.w 8000ed6 + 8000e72: 687b ldr r3, [r7, #4] + 8000e74: 681b ldr r3, [r3, #0] + 8000e76: f003 0301 and.w r3, r3, #1 + 8000e7a: 2b00 cmp r3, #0 + 8000e7c: f000 8087 beq.w 8000f8e { /* Check the parameters */ assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE) - 8000dc8: 4b92 ldr r3, [pc, #584] ; (8001014 ) - 8000dca: 685b ldr r3, [r3, #4] - 8000dcc: f003 030c and.w r3, r3, #12 - 8000dd0: 2b04 cmp r3, #4 - 8000dd2: d00c beq.n 8000dee + 8000e80: 4b92 ldr r3, [pc, #584] ; (80010cc ) + 8000e82: 685b ldr r3, [r3, #4] + 8000e84: f003 030c and.w r3, r3, #12 + 8000e88: 2b04 cmp r3, #4 + 8000e8a: d00c beq.n 8000ea6 || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) - 8000dd4: 4b8f ldr r3, [pc, #572] ; (8001014 ) - 8000dd6: 685b ldr r3, [r3, #4] - 8000dd8: f003 030c and.w r3, r3, #12 - 8000ddc: 2b08 cmp r3, #8 - 8000dde: d112 bne.n 8000e06 - 8000de0: 4b8c ldr r3, [pc, #560] ; (8001014 ) - 8000de2: 685b ldr r3, [r3, #4] - 8000de4: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 8000de8: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 8000dec: d10b bne.n 8000e06 + 8000e8c: 4b8f ldr r3, [pc, #572] ; (80010cc ) + 8000e8e: 685b ldr r3, [r3, #4] + 8000e90: f003 030c and.w r3, r3, #12 + 8000e94: 2b08 cmp r3, #8 + 8000e96: d112 bne.n 8000ebe + 8000e98: 4b8c ldr r3, [pc, #560] ; (80010cc ) + 8000e9a: 685b ldr r3, [r3, #4] + 8000e9c: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8000ea0: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8000ea4: d10b bne.n 8000ebe { if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8000dee: 4b89 ldr r3, [pc, #548] ; (8001014 ) - 8000df0: 681b ldr r3, [r3, #0] - 8000df2: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000df6: 2b00 cmp r3, #0 - 8000df8: d06c beq.n 8000ed4 - 8000dfa: 687b ldr r3, [r7, #4] - 8000dfc: 685b ldr r3, [r3, #4] - 8000dfe: 2b00 cmp r3, #0 - 8000e00: d168 bne.n 8000ed4 + 8000ea6: 4b89 ldr r3, [pc, #548] ; (80010cc ) + 8000ea8: 681b ldr r3, [r3, #0] + 8000eaa: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000eae: 2b00 cmp r3, #0 + 8000eb0: d06c beq.n 8000f8c + 8000eb2: 687b ldr r3, [r7, #4] + 8000eb4: 685b ldr r3, [r3, #4] + 8000eb6: 2b00 cmp r3, #0 + 8000eb8: d168 bne.n 8000f8c { return HAL_ERROR; - 8000e02: 2301 movs r3, #1 - 8000e04: e246 b.n 8001294 + 8000eba: 2301 movs r3, #1 + 8000ebc: e246 b.n 800134c } } else { /* Set the new HSE configuration ---------------------------------------*/ __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); - 8000e06: 687b ldr r3, [r7, #4] - 8000e08: 685b ldr r3, [r3, #4] - 8000e0a: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 8000e0e: d106 bne.n 8000e1e - 8000e10: 4b80 ldr r3, [pc, #512] ; (8001014 ) - 8000e12: 681b ldr r3, [r3, #0] - 8000e14: 4a7f ldr r2, [pc, #508] ; (8001014 ) - 8000e16: f443 3380 orr.w r3, r3, #65536 ; 0x10000 - 8000e1a: 6013 str r3, [r2, #0] - 8000e1c: e02e b.n 8000e7c - 8000e1e: 687b ldr r3, [r7, #4] - 8000e20: 685b ldr r3, [r3, #4] - 8000e22: 2b00 cmp r3, #0 - 8000e24: d10c bne.n 8000e40 - 8000e26: 4b7b ldr r3, [pc, #492] ; (8001014 ) - 8000e28: 681b ldr r3, [r3, #0] - 8000e2a: 4a7a ldr r2, [pc, #488] ; (8001014 ) - 8000e2c: f423 3380 bic.w r3, r3, #65536 ; 0x10000 - 8000e30: 6013 str r3, [r2, #0] - 8000e32: 4b78 ldr r3, [pc, #480] ; (8001014 ) - 8000e34: 681b ldr r3, [r3, #0] - 8000e36: 4a77 ldr r2, [pc, #476] ; (8001014 ) - 8000e38: f423 2380 bic.w r3, r3, #262144 ; 0x40000 - 8000e3c: 6013 str r3, [r2, #0] - 8000e3e: e01d b.n 8000e7c - 8000e40: 687b ldr r3, [r7, #4] - 8000e42: 685b ldr r3, [r3, #4] - 8000e44: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 - 8000e48: d10c bne.n 8000e64 - 8000e4a: 4b72 ldr r3, [pc, #456] ; (8001014 ) - 8000e4c: 681b ldr r3, [r3, #0] - 8000e4e: 4a71 ldr r2, [pc, #452] ; (8001014 ) - 8000e50: f443 2380 orr.w r3, r3, #262144 ; 0x40000 - 8000e54: 6013 str r3, [r2, #0] - 8000e56: 4b6f ldr r3, [pc, #444] ; (8001014 ) - 8000e58: 681b ldr r3, [r3, #0] - 8000e5a: 4a6e ldr r2, [pc, #440] ; (8001014 ) - 8000e5c: f443 3380 orr.w r3, r3, #65536 ; 0x10000 - 8000e60: 6013 str r3, [r2, #0] - 8000e62: e00b b.n 8000e7c - 8000e64: 4b6b ldr r3, [pc, #428] ; (8001014 ) - 8000e66: 681b ldr r3, [r3, #0] - 8000e68: 4a6a ldr r2, [pc, #424] ; (8001014 ) - 8000e6a: f423 3380 bic.w r3, r3, #65536 ; 0x10000 - 8000e6e: 6013 str r3, [r2, #0] - 8000e70: 4b68 ldr r3, [pc, #416] ; (8001014 ) - 8000e72: 681b ldr r3, [r3, #0] - 8000e74: 4a67 ldr r2, [pc, #412] ; (8001014 ) - 8000e76: f423 2380 bic.w r3, r3, #262144 ; 0x40000 - 8000e7a: 6013 str r3, [r2, #0] + 8000ebe: 687b ldr r3, [r7, #4] + 8000ec0: 685b ldr r3, [r3, #4] + 8000ec2: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8000ec6: d106 bne.n 8000ed6 + 8000ec8: 4b80 ldr r3, [pc, #512] ; (80010cc ) + 8000eca: 681b ldr r3, [r3, #0] + 8000ecc: 4a7f ldr r2, [pc, #508] ; (80010cc ) + 8000ece: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8000ed2: 6013 str r3, [r2, #0] + 8000ed4: e02e b.n 8000f34 + 8000ed6: 687b ldr r3, [r7, #4] + 8000ed8: 685b ldr r3, [r3, #4] + 8000eda: 2b00 cmp r3, #0 + 8000edc: d10c bne.n 8000ef8 + 8000ede: 4b7b ldr r3, [pc, #492] ; (80010cc ) + 8000ee0: 681b ldr r3, [r3, #0] + 8000ee2: 4a7a ldr r2, [pc, #488] ; (80010cc ) + 8000ee4: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 8000ee8: 6013 str r3, [r2, #0] + 8000eea: 4b78 ldr r3, [pc, #480] ; (80010cc ) + 8000eec: 681b ldr r3, [r3, #0] + 8000eee: 4a77 ldr r2, [pc, #476] ; (80010cc ) + 8000ef0: f423 2380 bic.w r3, r3, #262144 ; 0x40000 + 8000ef4: 6013 str r3, [r2, #0] + 8000ef6: e01d b.n 8000f34 + 8000ef8: 687b ldr r3, [r7, #4] + 8000efa: 685b ldr r3, [r3, #4] + 8000efc: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 + 8000f00: d10c bne.n 8000f1c + 8000f02: 4b72 ldr r3, [pc, #456] ; (80010cc ) + 8000f04: 681b ldr r3, [r3, #0] + 8000f06: 4a71 ldr r2, [pc, #452] ; (80010cc ) + 8000f08: f443 2380 orr.w r3, r3, #262144 ; 0x40000 + 8000f0c: 6013 str r3, [r2, #0] + 8000f0e: 4b6f ldr r3, [pc, #444] ; (80010cc ) + 8000f10: 681b ldr r3, [r3, #0] + 8000f12: 4a6e ldr r2, [pc, #440] ; (80010cc ) + 8000f14: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8000f18: 6013 str r3, [r2, #0] + 8000f1a: e00b b.n 8000f34 + 8000f1c: 4b6b ldr r3, [pc, #428] ; (80010cc ) + 8000f1e: 681b ldr r3, [r3, #0] + 8000f20: 4a6a ldr r2, [pc, #424] ; (80010cc ) + 8000f22: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 8000f26: 6013 str r3, [r2, #0] + 8000f28: 4b68 ldr r3, [pc, #416] ; (80010cc ) + 8000f2a: 681b ldr r3, [r3, #0] + 8000f2c: 4a67 ldr r2, [pc, #412] ; (80010cc ) + 8000f2e: f423 2380 bic.w r3, r3, #262144 ; 0x40000 + 8000f32: 6013 str r3, [r2, #0] /* Check the HSE State */ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF) - 8000e7c: 687b ldr r3, [r7, #4] - 8000e7e: 685b ldr r3, [r3, #4] - 8000e80: 2b00 cmp r3, #0 - 8000e82: d013 beq.n 8000eac + 8000f34: 687b ldr r3, [r7, #4] + 8000f36: 685b ldr r3, [r3, #4] + 8000f38: 2b00 cmp r3, #0 + 8000f3a: d013 beq.n 8000f64 { /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000e84: f7ff fcd2 bl 800082c - 8000e88: 6138 str r0, [r7, #16] + 8000f3c: f7ff fcba bl 80008b4 + 8000f40: 6138 str r0, [r7, #16] /* Wait till HSE is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 8000e8a: e008 b.n 8000e9e + 8000f42: e008 b.n 8000f56 { if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) - 8000e8c: f7ff fcce bl 800082c - 8000e90: 4602 mov r2, r0 - 8000e92: 693b ldr r3, [r7, #16] - 8000e94: 1ad3 subs r3, r2, r3 - 8000e96: 2b64 cmp r3, #100 ; 0x64 - 8000e98: d901 bls.n 8000e9e + 8000f44: f7ff fcb6 bl 80008b4 + 8000f48: 4602 mov r2, r0 + 8000f4a: 693b ldr r3, [r7, #16] + 8000f4c: 1ad3 subs r3, r2, r3 + 8000f4e: 2b64 cmp r3, #100 ; 0x64 + 8000f50: d901 bls.n 8000f56 { return HAL_TIMEOUT; - 8000e9a: 2303 movs r3, #3 - 8000e9c: e1fa b.n 8001294 + 8000f52: 2303 movs r3, #3 + 8000f54: e1fa b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 8000e9e: 4b5d ldr r3, [pc, #372] ; (8001014 ) - 8000ea0: 681b ldr r3, [r3, #0] - 8000ea2: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000ea6: 2b00 cmp r3, #0 - 8000ea8: d0f0 beq.n 8000e8c - 8000eaa: e014 b.n 8000ed6 + 8000f56: 4b5d ldr r3, [pc, #372] ; (80010cc ) + 8000f58: 681b ldr r3, [r3, #0] + 8000f5a: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000f5e: 2b00 cmp r3, #0 + 8000f60: d0f0 beq.n 8000f44 + 8000f62: e014 b.n 8000f8e } } else { /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000eac: f7ff fcbe bl 800082c - 8000eb0: 6138 str r0, [r7, #16] + 8000f64: f7ff fca6 bl 80008b4 + 8000f68: 6138 str r0, [r7, #16] /* Wait till HSE is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8000eb2: e008 b.n 8000ec6 + 8000f6a: e008 b.n 8000f7e { if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) - 8000eb4: f7ff fcba bl 800082c - 8000eb8: 4602 mov r2, r0 - 8000eba: 693b ldr r3, [r7, #16] - 8000ebc: 1ad3 subs r3, r2, r3 - 8000ebe: 2b64 cmp r3, #100 ; 0x64 - 8000ec0: d901 bls.n 8000ec6 + 8000f6c: f7ff fca2 bl 80008b4 + 8000f70: 4602 mov r2, r0 + 8000f72: 693b ldr r3, [r7, #16] + 8000f74: 1ad3 subs r3, r2, r3 + 8000f76: 2b64 cmp r3, #100 ; 0x64 + 8000f78: d901 bls.n 8000f7e { return HAL_TIMEOUT; - 8000ec2: 2303 movs r3, #3 - 8000ec4: e1e6 b.n 8001294 + 8000f7a: 2303 movs r3, #3 + 8000f7c: e1e6 b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8000ec6: 4b53 ldr r3, [pc, #332] ; (8001014 ) - 8000ec8: 681b ldr r3, [r3, #0] - 8000eca: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000ece: 2b00 cmp r3, #0 - 8000ed0: d1f0 bne.n 8000eb4 - 8000ed2: e000 b.n 8000ed6 + 8000f7e: 4b53 ldr r3, [pc, #332] ; (80010cc ) + 8000f80: 681b ldr r3, [r3, #0] + 8000f82: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000f86: 2b00 cmp r3, #0 + 8000f88: d1f0 bne.n 8000f6c + 8000f8a: e000 b.n 8000f8e if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8000ed4: bf00 nop + 8000f8c: bf00 nop } } } } /*----------------------------- HSI Configuration --------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) - 8000ed6: 687b ldr r3, [r7, #4] - 8000ed8: 681b ldr r3, [r3, #0] - 8000eda: f003 0302 and.w r3, r3, #2 - 8000ede: 2b00 cmp r3, #0 - 8000ee0: d063 beq.n 8000faa + 8000f8e: 687b ldr r3, [r7, #4] + 8000f90: 681b ldr r3, [r3, #0] + 8000f92: f003 0302 and.w r3, r3, #2 + 8000f96: 2b00 cmp r3, #0 + 8000f98: d063 beq.n 8001062 /* Check the parameters */ assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI) - 8000ee2: 4b4c ldr r3, [pc, #304] ; (8001014 ) - 8000ee4: 685b ldr r3, [r3, #4] - 8000ee6: f003 030c and.w r3, r3, #12 - 8000eea: 2b00 cmp r3, #0 - 8000eec: d00b beq.n 8000f06 + 8000f9a: 4b4c ldr r3, [pc, #304] ; (80010cc ) + 8000f9c: 685b ldr r3, [r3, #4] + 8000f9e: f003 030c and.w r3, r3, #12 + 8000fa2: 2b00 cmp r3, #0 + 8000fa4: d00b beq.n 8000fbe || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) - 8000eee: 4b49 ldr r3, [pc, #292] ; (8001014 ) - 8000ef0: 685b ldr r3, [r3, #4] - 8000ef2: f003 030c and.w r3, r3, #12 - 8000ef6: 2b08 cmp r3, #8 - 8000ef8: d11c bne.n 8000f34 - 8000efa: 4b46 ldr r3, [pc, #280] ; (8001014 ) - 8000efc: 685b ldr r3, [r3, #4] - 8000efe: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 8000f02: 2b00 cmp r3, #0 - 8000f04: d116 bne.n 8000f34 + 8000fa6: 4b49 ldr r3, [pc, #292] ; (80010cc ) + 8000fa8: 685b ldr r3, [r3, #4] + 8000faa: f003 030c and.w r3, r3, #12 + 8000fae: 2b08 cmp r3, #8 + 8000fb0: d11c bne.n 8000fec + 8000fb2: 4b46 ldr r3, [pc, #280] ; (80010cc ) + 8000fb4: 685b ldr r3, [r3, #4] + 8000fb6: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8000fba: 2b00 cmp r3, #0 + 8000fbc: d116 bne.n 8000fec { /* When HSI is used as system clock it will not disabled */ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) - 8000f06: 4b43 ldr r3, [pc, #268] ; (8001014 ) - 8000f08: 681b ldr r3, [r3, #0] - 8000f0a: f003 0302 and.w r3, r3, #2 - 8000f0e: 2b00 cmp r3, #0 - 8000f10: d005 beq.n 8000f1e - 8000f12: 687b ldr r3, [r7, #4] - 8000f14: 691b ldr r3, [r3, #16] - 8000f16: 2b01 cmp r3, #1 - 8000f18: d001 beq.n 8000f1e + 8000fbe: 4b43 ldr r3, [pc, #268] ; (80010cc ) + 8000fc0: 681b ldr r3, [r3, #0] + 8000fc2: f003 0302 and.w r3, r3, #2 + 8000fc6: 2b00 cmp r3, #0 + 8000fc8: d005 beq.n 8000fd6 + 8000fca: 687b ldr r3, [r7, #4] + 8000fcc: 691b ldr r3, [r3, #16] + 8000fce: 2b01 cmp r3, #1 + 8000fd0: d001 beq.n 8000fd6 { return HAL_ERROR; - 8000f1a: 2301 movs r3, #1 - 8000f1c: e1ba b.n 8001294 + 8000fd2: 2301 movs r3, #1 + 8000fd4: e1ba b.n 800134c } /* Otherwise, just the calibration is allowed */ else { /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 8000f1e: 4b3d ldr r3, [pc, #244] ; (8001014 ) - 8000f20: 681b ldr r3, [r3, #0] - 8000f22: f023 02f8 bic.w r2, r3, #248 ; 0xf8 - 8000f26: 687b ldr r3, [r7, #4] - 8000f28: 695b ldr r3, [r3, #20] - 8000f2a: 00db lsls r3, r3, #3 - 8000f2c: 4939 ldr r1, [pc, #228] ; (8001014 ) - 8000f2e: 4313 orrs r3, r2 - 8000f30: 600b str r3, [r1, #0] + 8000fd6: 4b3d ldr r3, [pc, #244] ; (80010cc ) + 8000fd8: 681b ldr r3, [r3, #0] + 8000fda: f023 02f8 bic.w r2, r3, #248 ; 0xf8 + 8000fde: 687b ldr r3, [r7, #4] + 8000fe0: 695b ldr r3, [r3, #20] + 8000fe2: 00db lsls r3, r3, #3 + 8000fe4: 4939 ldr r1, [pc, #228] ; (80010cc ) + 8000fe6: 4313 orrs r3, r2 + 8000fe8: 600b str r3, [r1, #0] if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) - 8000f32: e03a b.n 8000faa + 8000fea: e03a b.n 8001062 } } else { /* Check the HSI State */ if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF) - 8000f34: 687b ldr r3, [r7, #4] - 8000f36: 691b ldr r3, [r3, #16] - 8000f38: 2b00 cmp r3, #0 - 8000f3a: d020 beq.n 8000f7e + 8000fec: 687b ldr r3, [r7, #4] + 8000fee: 691b ldr r3, [r3, #16] + 8000ff0: 2b00 cmp r3, #0 + 8000ff2: d020 beq.n 8001036 { /* Enable the Internal High Speed oscillator (HSI). */ __HAL_RCC_HSI_ENABLE(); - 8000f3c: 4b36 ldr r3, [pc, #216] ; (8001018 ) - 8000f3e: 2201 movs r2, #1 - 8000f40: 601a str r2, [r3, #0] + 8000ff4: 4b36 ldr r3, [pc, #216] ; (80010d0 ) + 8000ff6: 2201 movs r2, #1 + 8000ff8: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000f42: f7ff fc73 bl 800082c - 8000f46: 6138 str r0, [r7, #16] + 8000ffa: f7ff fc5b bl 80008b4 + 8000ffe: 6138 str r0, [r7, #16] /* Wait till HSI is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 8000f48: e008 b.n 8000f5c + 8001000: e008 b.n 8001014 { if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) - 8000f4a: f7ff fc6f bl 800082c - 8000f4e: 4602 mov r2, r0 - 8000f50: 693b ldr r3, [r7, #16] - 8000f52: 1ad3 subs r3, r2, r3 - 8000f54: 2b02 cmp r3, #2 - 8000f56: d901 bls.n 8000f5c + 8001002: f7ff fc57 bl 80008b4 + 8001006: 4602 mov r2, r0 + 8001008: 693b ldr r3, [r7, #16] + 800100a: 1ad3 subs r3, r2, r3 + 800100c: 2b02 cmp r3, #2 + 800100e: d901 bls.n 8001014 { return HAL_TIMEOUT; - 8000f58: 2303 movs r3, #3 - 8000f5a: e19b b.n 8001294 + 8001010: 2303 movs r3, #3 + 8001012: e19b b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 8000f5c: 4b2d ldr r3, [pc, #180] ; (8001014 ) - 8000f5e: 681b ldr r3, [r3, #0] - 8000f60: f003 0302 and.w r3, r3, #2 - 8000f64: 2b00 cmp r3, #0 - 8000f66: d0f0 beq.n 8000f4a + 8001014: 4b2d ldr r3, [pc, #180] ; (80010cc ) + 8001016: 681b ldr r3, [r3, #0] + 8001018: f003 0302 and.w r3, r3, #2 + 800101c: 2b00 cmp r3, #0 + 800101e: d0f0 beq.n 8001002 } } /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 8000f68: 4b2a ldr r3, [pc, #168] ; (8001014 ) - 8000f6a: 681b ldr r3, [r3, #0] - 8000f6c: f023 02f8 bic.w r2, r3, #248 ; 0xf8 - 8000f70: 687b ldr r3, [r7, #4] - 8000f72: 695b ldr r3, [r3, #20] - 8000f74: 00db lsls r3, r3, #3 - 8000f76: 4927 ldr r1, [pc, #156] ; (8001014 ) - 8000f78: 4313 orrs r3, r2 - 8000f7a: 600b str r3, [r1, #0] - 8000f7c: e015 b.n 8000faa + 8001020: 4b2a ldr r3, [pc, #168] ; (80010cc ) + 8001022: 681b ldr r3, [r3, #0] + 8001024: f023 02f8 bic.w r2, r3, #248 ; 0xf8 + 8001028: 687b ldr r3, [r7, #4] + 800102a: 695b ldr r3, [r3, #20] + 800102c: 00db lsls r3, r3, #3 + 800102e: 4927 ldr r1, [pc, #156] ; (80010cc ) + 8001030: 4313 orrs r3, r2 + 8001032: 600b str r3, [r1, #0] + 8001034: e015 b.n 8001062 } else { /* Disable the Internal High Speed oscillator (HSI). */ __HAL_RCC_HSI_DISABLE(); - 8000f7e: 4b26 ldr r3, [pc, #152] ; (8001018 ) - 8000f80: 2200 movs r2, #0 - 8000f82: 601a str r2, [r3, #0] + 8001036: 4b26 ldr r3, [pc, #152] ; (80010d0 ) + 8001038: 2200 movs r2, #0 + 800103a: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000f84: f7ff fc52 bl 800082c - 8000f88: 6138 str r0, [r7, #16] + 800103c: f7ff fc3a bl 80008b4 + 8001040: 6138 str r0, [r7, #16] /* Wait till HSI is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 8000f8a: e008 b.n 8000f9e + 8001042: e008 b.n 8001056 { if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) - 8000f8c: f7ff fc4e bl 800082c - 8000f90: 4602 mov r2, r0 - 8000f92: 693b ldr r3, [r7, #16] - 8000f94: 1ad3 subs r3, r2, r3 - 8000f96: 2b02 cmp r3, #2 - 8000f98: d901 bls.n 8000f9e + 8001044: f7ff fc36 bl 80008b4 + 8001048: 4602 mov r2, r0 + 800104a: 693b ldr r3, [r7, #16] + 800104c: 1ad3 subs r3, r2, r3 + 800104e: 2b02 cmp r3, #2 + 8001050: d901 bls.n 8001056 { return HAL_TIMEOUT; - 8000f9a: 2303 movs r3, #3 - 8000f9c: e17a b.n 8001294 + 8001052: 2303 movs r3, #3 + 8001054: e17a b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 8000f9e: 4b1d ldr r3, [pc, #116] ; (8001014 ) - 8000fa0: 681b ldr r3, [r3, #0] - 8000fa2: f003 0302 and.w r3, r3, #2 - 8000fa6: 2b00 cmp r3, #0 - 8000fa8: d1f0 bne.n 8000f8c + 8001056: 4b1d ldr r3, [pc, #116] ; (80010cc ) + 8001058: 681b ldr r3, [r3, #0] + 800105a: f003 0302 and.w r3, r3, #2 + 800105e: 2b00 cmp r3, #0 + 8001060: d1f0 bne.n 8001044 } } } } /*------------------------------ LSI Configuration -------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) - 8000faa: 687b ldr r3, [r7, #4] - 8000fac: 681b ldr r3, [r3, #0] - 8000fae: f003 0308 and.w r3, r3, #8 - 8000fb2: 2b00 cmp r3, #0 - 8000fb4: d03a beq.n 800102c + 8001062: 687b ldr r3, [r7, #4] + 8001064: 681b ldr r3, [r3, #0] + 8001066: f003 0308 and.w r3, r3, #8 + 800106a: 2b00 cmp r3, #0 + 800106c: d03a beq.n 80010e4 { /* Check the parameters */ assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); /* Check the LSI State */ if (RCC_OscInitStruct->LSIState != RCC_LSI_OFF) - 8000fb6: 687b ldr r3, [r7, #4] - 8000fb8: 699b ldr r3, [r3, #24] - 8000fba: 2b00 cmp r3, #0 - 8000fbc: d019 beq.n 8000ff2 + 800106e: 687b ldr r3, [r7, #4] + 8001070: 699b ldr r3, [r3, #24] + 8001072: 2b00 cmp r3, #0 + 8001074: d019 beq.n 80010aa { /* Enable the Internal Low Speed oscillator (LSI). */ __HAL_RCC_LSI_ENABLE(); - 8000fbe: 4b17 ldr r3, [pc, #92] ; (800101c ) - 8000fc0: 2201 movs r2, #1 - 8000fc2: 601a str r2, [r3, #0] + 8001076: 4b17 ldr r3, [pc, #92] ; (80010d4 ) + 8001078: 2201 movs r2, #1 + 800107a: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000fc4: f7ff fc32 bl 800082c - 8000fc8: 6138 str r0, [r7, #16] + 800107c: f7ff fc1a bl 80008b4 + 8001080: 6138 str r0, [r7, #16] /* Wait till LSI is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 8000fca: e008 b.n 8000fde + 8001082: e008 b.n 8001096 { if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) - 8000fcc: f7ff fc2e bl 800082c - 8000fd0: 4602 mov r2, r0 - 8000fd2: 693b ldr r3, [r7, #16] - 8000fd4: 1ad3 subs r3, r2, r3 - 8000fd6: 2b02 cmp r3, #2 - 8000fd8: d901 bls.n 8000fde + 8001084: f7ff fc16 bl 80008b4 + 8001088: 4602 mov r2, r0 + 800108a: 693b ldr r3, [r7, #16] + 800108c: 1ad3 subs r3, r2, r3 + 800108e: 2b02 cmp r3, #2 + 8001090: d901 bls.n 8001096 { return HAL_TIMEOUT; - 8000fda: 2303 movs r3, #3 - 8000fdc: e15a b.n 8001294 + 8001092: 2303 movs r3, #3 + 8001094: e15a b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 8000fde: 4b0d ldr r3, [pc, #52] ; (8001014 ) - 8000fe0: 6a5b ldr r3, [r3, #36] ; 0x24 - 8000fe2: f003 0302 and.w r3, r3, #2 - 8000fe6: 2b00 cmp r3, #0 - 8000fe8: d0f0 beq.n 8000fcc + 8001096: 4b0d ldr r3, [pc, #52] ; (80010cc ) + 8001098: 6a5b ldr r3, [r3, #36] ; 0x24 + 800109a: f003 0302 and.w r3, r3, #2 + 800109e: 2b00 cmp r3, #0 + 80010a0: d0f0 beq.n 8001084 } } /* To have a fully stabilized clock in the specified range, a software delay of 1ms should be added.*/ RCC_Delay(1); - 8000fea: 2001 movs r0, #1 - 8000fec: f000 faa6 bl 800153c - 8000ff0: e01c b.n 800102c + 80010a2: 2001 movs r0, #1 + 80010a4: f000 faa6 bl 80015f4 + 80010a8: e01c b.n 80010e4 } else { /* Disable the Internal Low Speed oscillator (LSI). */ __HAL_RCC_LSI_DISABLE(); - 8000ff2: 4b0a ldr r3, [pc, #40] ; (800101c ) - 8000ff4: 2200 movs r2, #0 - 8000ff6: 601a str r2, [r3, #0] + 80010aa: 4b0a ldr r3, [pc, #40] ; (80010d4 ) + 80010ac: 2200 movs r2, #0 + 80010ae: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000ff8: f7ff fc18 bl 800082c - 8000ffc: 6138 str r0, [r7, #16] + 80010b0: f7ff fc00 bl 80008b4 + 80010b4: 6138 str r0, [r7, #16] /* Wait till LSI is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 8000ffe: e00f b.n 8001020 + 80010b6: e00f b.n 80010d8 { if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) - 8001000: f7ff fc14 bl 800082c - 8001004: 4602 mov r2, r0 - 8001006: 693b ldr r3, [r7, #16] - 8001008: 1ad3 subs r3, r2, r3 - 800100a: 2b02 cmp r3, #2 - 800100c: d908 bls.n 8001020 + 80010b8: f7ff fbfc bl 80008b4 + 80010bc: 4602 mov r2, r0 + 80010be: 693b ldr r3, [r7, #16] + 80010c0: 1ad3 subs r3, r2, r3 + 80010c2: 2b02 cmp r3, #2 + 80010c4: d908 bls.n 80010d8 { return HAL_TIMEOUT; - 800100e: 2303 movs r3, #3 - 8001010: e140 b.n 8001294 - 8001012: bf00 nop - 8001014: 40021000 .word 0x40021000 - 8001018: 42420000 .word 0x42420000 - 800101c: 42420480 .word 0x42420480 + 80010c6: 2303 movs r3, #3 + 80010c8: e140 b.n 800134c + 80010ca: bf00 nop + 80010cc: 40021000 .word 0x40021000 + 80010d0: 42420000 .word 0x42420000 + 80010d4: 42420480 .word 0x42420480 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 8001020: 4b9e ldr r3, [pc, #632] ; (800129c ) - 8001022: 6a5b ldr r3, [r3, #36] ; 0x24 - 8001024: f003 0302 and.w r3, r3, #2 - 8001028: 2b00 cmp r3, #0 - 800102a: d1e9 bne.n 8001000 + 80010d8: 4b9e ldr r3, [pc, #632] ; (8001354 ) + 80010da: 6a5b ldr r3, [r3, #36] ; 0x24 + 80010dc: f003 0302 and.w r3, r3, #2 + 80010e0: 2b00 cmp r3, #0 + 80010e2: d1e9 bne.n 80010b8 } } } } /*------------------------------ LSE Configuration -------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) - 800102c: 687b ldr r3, [r7, #4] - 800102e: 681b ldr r3, [r3, #0] - 8001030: f003 0304 and.w r3, r3, #4 - 8001034: 2b00 cmp r3, #0 - 8001036: f000 80a6 beq.w 8001186 + 80010e4: 687b ldr r3, [r7, #4] + 80010e6: 681b ldr r3, [r3, #0] + 80010e8: f003 0304 and.w r3, r3, #4 + 80010ec: 2b00 cmp r3, #0 + 80010ee: f000 80a6 beq.w 800123e { FlagStatus pwrclkchanged = RESET; - 800103a: 2300 movs r3, #0 - 800103c: 75fb strb r3, [r7, #23] + 80010f2: 2300 movs r3, #0 + 80010f4: 75fb strb r3, [r7, #23] /* Check the parameters */ assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); /* Update LSE configuration in Backup Domain control register */ /* Requires to enable write access to Backup Domain of necessary */ if (__HAL_RCC_PWR_IS_CLK_DISABLED()) - 800103e: 4b97 ldr r3, [pc, #604] ; (800129c ) - 8001040: 69db ldr r3, [r3, #28] - 8001042: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 8001046: 2b00 cmp r3, #0 - 8001048: d10d bne.n 8001066 + 80010f6: 4b97 ldr r3, [pc, #604] ; (8001354 ) + 80010f8: 69db ldr r3, [r3, #28] + 80010fa: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 80010fe: 2b00 cmp r3, #0 + 8001100: d10d bne.n 800111e { __HAL_RCC_PWR_CLK_ENABLE(); - 800104a: 4b94 ldr r3, [pc, #592] ; (800129c ) - 800104c: 69db ldr r3, [r3, #28] - 800104e: 4a93 ldr r2, [pc, #588] ; (800129c ) - 8001050: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 - 8001054: 61d3 str r3, [r2, #28] - 8001056: 4b91 ldr r3, [pc, #580] ; (800129c ) - 8001058: 69db ldr r3, [r3, #28] - 800105a: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 800105e: 60bb str r3, [r7, #8] - 8001060: 68bb ldr r3, [r7, #8] + 8001102: 4b94 ldr r3, [pc, #592] ; (8001354 ) + 8001104: 69db ldr r3, [r3, #28] + 8001106: 4a93 ldr r2, [pc, #588] ; (8001354 ) + 8001108: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 + 800110c: 61d3 str r3, [r2, #28] + 800110e: 4b91 ldr r3, [pc, #580] ; (8001354 ) + 8001110: 69db ldr r3, [r3, #28] + 8001112: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8001116: 60bb str r3, [r7, #8] + 8001118: 68bb ldr r3, [r7, #8] pwrclkchanged = SET; - 8001062: 2301 movs r3, #1 - 8001064: 75fb strb r3, [r7, #23] + 800111a: 2301 movs r3, #1 + 800111c: 75fb strb r3, [r7, #23] } if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8001066: 4b8e ldr r3, [pc, #568] ; (80012a0 ) - 8001068: 681b ldr r3, [r3, #0] - 800106a: f403 7380 and.w r3, r3, #256 ; 0x100 - 800106e: 2b00 cmp r3, #0 - 8001070: d118 bne.n 80010a4 + 800111e: 4b8e ldr r3, [pc, #568] ; (8001358 ) + 8001120: 681b ldr r3, [r3, #0] + 8001122: f403 7380 and.w r3, r3, #256 ; 0x100 + 8001126: 2b00 cmp r3, #0 + 8001128: d118 bne.n 800115c { /* Enable write access to Backup domain */ SET_BIT(PWR->CR, PWR_CR_DBP); - 8001072: 4b8b ldr r3, [pc, #556] ; (80012a0 ) - 8001074: 681b ldr r3, [r3, #0] - 8001076: 4a8a ldr r2, [pc, #552] ; (80012a0 ) - 8001078: f443 7380 orr.w r3, r3, #256 ; 0x100 - 800107c: 6013 str r3, [r2, #0] + 800112a: 4b8b ldr r3, [pc, #556] ; (8001358 ) + 800112c: 681b ldr r3, [r3, #0] + 800112e: 4a8a ldr r2, [pc, #552] ; (8001358 ) + 8001130: f443 7380 orr.w r3, r3, #256 ; 0x100 + 8001134: 6013 str r3, [r2, #0] /* Wait for Backup domain Write protection disable */ tickstart = HAL_GetTick(); - 800107e: f7ff fbd5 bl 800082c - 8001082: 6138 str r0, [r7, #16] + 8001136: f7ff fbbd bl 80008b4 + 800113a: 6138 str r0, [r7, #16] while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8001084: e008 b.n 8001098 + 800113c: e008 b.n 8001150 { if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) - 8001086: f7ff fbd1 bl 800082c - 800108a: 4602 mov r2, r0 - 800108c: 693b ldr r3, [r7, #16] - 800108e: 1ad3 subs r3, r2, r3 - 8001090: 2b64 cmp r3, #100 ; 0x64 - 8001092: d901 bls.n 8001098 + 800113e: f7ff fbb9 bl 80008b4 + 8001142: 4602 mov r2, r0 + 8001144: 693b ldr r3, [r7, #16] + 8001146: 1ad3 subs r3, r2, r3 + 8001148: 2b64 cmp r3, #100 ; 0x64 + 800114a: d901 bls.n 8001150 { return HAL_TIMEOUT; - 8001094: 2303 movs r3, #3 - 8001096: e0fd b.n 8001294 + 800114c: 2303 movs r3, #3 + 800114e: e0fd b.n 800134c while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8001098: 4b81 ldr r3, [pc, #516] ; (80012a0 ) - 800109a: 681b ldr r3, [r3, #0] - 800109c: f403 7380 and.w r3, r3, #256 ; 0x100 - 80010a0: 2b00 cmp r3, #0 - 80010a2: d0f0 beq.n 8001086 + 8001150: 4b81 ldr r3, [pc, #516] ; (8001358 ) + 8001152: 681b ldr r3, [r3, #0] + 8001154: f403 7380 and.w r3, r3, #256 ; 0x100 + 8001158: 2b00 cmp r3, #0 + 800115a: d0f0 beq.n 800113e } } } /* Set the new LSE configuration -----------------------------------------*/ __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); - 80010a4: 687b ldr r3, [r7, #4] - 80010a6: 68db ldr r3, [r3, #12] - 80010a8: 2b01 cmp r3, #1 - 80010aa: d106 bne.n 80010ba - 80010ac: 4b7b ldr r3, [pc, #492] ; (800129c ) - 80010ae: 6a1b ldr r3, [r3, #32] - 80010b0: 4a7a ldr r2, [pc, #488] ; (800129c ) - 80010b2: f043 0301 orr.w r3, r3, #1 - 80010b6: 6213 str r3, [r2, #32] - 80010b8: e02d b.n 8001116 - 80010ba: 687b ldr r3, [r7, #4] - 80010bc: 68db ldr r3, [r3, #12] - 80010be: 2b00 cmp r3, #0 - 80010c0: d10c bne.n 80010dc - 80010c2: 4b76 ldr r3, [pc, #472] ; (800129c ) - 80010c4: 6a1b ldr r3, [r3, #32] - 80010c6: 4a75 ldr r2, [pc, #468] ; (800129c ) - 80010c8: f023 0301 bic.w r3, r3, #1 - 80010cc: 6213 str r3, [r2, #32] - 80010ce: 4b73 ldr r3, [pc, #460] ; (800129c ) - 80010d0: 6a1b ldr r3, [r3, #32] - 80010d2: 4a72 ldr r2, [pc, #456] ; (800129c ) - 80010d4: f023 0304 bic.w r3, r3, #4 - 80010d8: 6213 str r3, [r2, #32] - 80010da: e01c b.n 8001116 - 80010dc: 687b ldr r3, [r7, #4] - 80010de: 68db ldr r3, [r3, #12] - 80010e0: 2b05 cmp r3, #5 - 80010e2: d10c bne.n 80010fe - 80010e4: 4b6d ldr r3, [pc, #436] ; (800129c ) - 80010e6: 6a1b ldr r3, [r3, #32] - 80010e8: 4a6c ldr r2, [pc, #432] ; (800129c ) - 80010ea: f043 0304 orr.w r3, r3, #4 - 80010ee: 6213 str r3, [r2, #32] - 80010f0: 4b6a ldr r3, [pc, #424] ; (800129c ) - 80010f2: 6a1b ldr r3, [r3, #32] - 80010f4: 4a69 ldr r2, [pc, #420] ; (800129c ) - 80010f6: f043 0301 orr.w r3, r3, #1 - 80010fa: 6213 str r3, [r2, #32] - 80010fc: e00b b.n 8001116 - 80010fe: 4b67 ldr r3, [pc, #412] ; (800129c ) - 8001100: 6a1b ldr r3, [r3, #32] - 8001102: 4a66 ldr r2, [pc, #408] ; (800129c ) - 8001104: f023 0301 bic.w r3, r3, #1 - 8001108: 6213 str r3, [r2, #32] - 800110a: 4b64 ldr r3, [pc, #400] ; (800129c ) - 800110c: 6a1b ldr r3, [r3, #32] - 800110e: 4a63 ldr r2, [pc, #396] ; (800129c ) - 8001110: f023 0304 bic.w r3, r3, #4 - 8001114: 6213 str r3, [r2, #32] + 800115c: 687b ldr r3, [r7, #4] + 800115e: 68db ldr r3, [r3, #12] + 8001160: 2b01 cmp r3, #1 + 8001162: d106 bne.n 8001172 + 8001164: 4b7b ldr r3, [pc, #492] ; (8001354 ) + 8001166: 6a1b ldr r3, [r3, #32] + 8001168: 4a7a ldr r2, [pc, #488] ; (8001354 ) + 800116a: f043 0301 orr.w r3, r3, #1 + 800116e: 6213 str r3, [r2, #32] + 8001170: e02d b.n 80011ce + 8001172: 687b ldr r3, [r7, #4] + 8001174: 68db ldr r3, [r3, #12] + 8001176: 2b00 cmp r3, #0 + 8001178: d10c bne.n 8001194 + 800117a: 4b76 ldr r3, [pc, #472] ; (8001354 ) + 800117c: 6a1b ldr r3, [r3, #32] + 800117e: 4a75 ldr r2, [pc, #468] ; (8001354 ) + 8001180: f023 0301 bic.w r3, r3, #1 + 8001184: 6213 str r3, [r2, #32] + 8001186: 4b73 ldr r3, [pc, #460] ; (8001354 ) + 8001188: 6a1b ldr r3, [r3, #32] + 800118a: 4a72 ldr r2, [pc, #456] ; (8001354 ) + 800118c: f023 0304 bic.w r3, r3, #4 + 8001190: 6213 str r3, [r2, #32] + 8001192: e01c b.n 80011ce + 8001194: 687b ldr r3, [r7, #4] + 8001196: 68db ldr r3, [r3, #12] + 8001198: 2b05 cmp r3, #5 + 800119a: d10c bne.n 80011b6 + 800119c: 4b6d ldr r3, [pc, #436] ; (8001354 ) + 800119e: 6a1b ldr r3, [r3, #32] + 80011a0: 4a6c ldr r2, [pc, #432] ; (8001354 ) + 80011a2: f043 0304 orr.w r3, r3, #4 + 80011a6: 6213 str r3, [r2, #32] + 80011a8: 4b6a ldr r3, [pc, #424] ; (8001354 ) + 80011aa: 6a1b ldr r3, [r3, #32] + 80011ac: 4a69 ldr r2, [pc, #420] ; (8001354 ) + 80011ae: f043 0301 orr.w r3, r3, #1 + 80011b2: 6213 str r3, [r2, #32] + 80011b4: e00b b.n 80011ce + 80011b6: 4b67 ldr r3, [pc, #412] ; (8001354 ) + 80011b8: 6a1b ldr r3, [r3, #32] + 80011ba: 4a66 ldr r2, [pc, #408] ; (8001354 ) + 80011bc: f023 0301 bic.w r3, r3, #1 + 80011c0: 6213 str r3, [r2, #32] + 80011c2: 4b64 ldr r3, [pc, #400] ; (8001354 ) + 80011c4: 6a1b ldr r3, [r3, #32] + 80011c6: 4a63 ldr r2, [pc, #396] ; (8001354 ) + 80011c8: f023 0304 bic.w r3, r3, #4 + 80011cc: 6213 str r3, [r2, #32] /* Check the LSE State */ if (RCC_OscInitStruct->LSEState != RCC_LSE_OFF) - 8001116: 687b ldr r3, [r7, #4] - 8001118: 68db ldr r3, [r3, #12] - 800111a: 2b00 cmp r3, #0 - 800111c: d015 beq.n 800114a + 80011ce: 687b ldr r3, [r7, #4] + 80011d0: 68db ldr r3, [r3, #12] + 80011d2: 2b00 cmp r3, #0 + 80011d4: d015 beq.n 8001202 { /* Get Start Tick */ tickstart = HAL_GetTick(); - 800111e: f7ff fb85 bl 800082c - 8001122: 6138 str r0, [r7, #16] + 80011d6: f7ff fb6d bl 80008b4 + 80011da: 6138 str r0, [r7, #16] /* Wait till LSE is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 8001124: e00a b.n 800113c + 80011dc: e00a b.n 80011f4 { if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) - 8001126: f7ff fb81 bl 800082c - 800112a: 4602 mov r2, r0 - 800112c: 693b ldr r3, [r7, #16] - 800112e: 1ad3 subs r3, r2, r3 - 8001130: f241 3288 movw r2, #5000 ; 0x1388 - 8001134: 4293 cmp r3, r2 - 8001136: d901 bls.n 800113c + 80011de: f7ff fb69 bl 80008b4 + 80011e2: 4602 mov r2, r0 + 80011e4: 693b ldr r3, [r7, #16] + 80011e6: 1ad3 subs r3, r2, r3 + 80011e8: f241 3288 movw r2, #5000 ; 0x1388 + 80011ec: 4293 cmp r3, r2 + 80011ee: d901 bls.n 80011f4 { return HAL_TIMEOUT; - 8001138: 2303 movs r3, #3 - 800113a: e0ab b.n 8001294 + 80011f0: 2303 movs r3, #3 + 80011f2: e0ab b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 800113c: 4b57 ldr r3, [pc, #348] ; (800129c ) - 800113e: 6a1b ldr r3, [r3, #32] - 8001140: f003 0302 and.w r3, r3, #2 - 8001144: 2b00 cmp r3, #0 - 8001146: d0ee beq.n 8001126 - 8001148: e014 b.n 8001174 + 80011f4: 4b57 ldr r3, [pc, #348] ; (8001354 ) + 80011f6: 6a1b ldr r3, [r3, #32] + 80011f8: f003 0302 and.w r3, r3, #2 + 80011fc: 2b00 cmp r3, #0 + 80011fe: d0ee beq.n 80011de + 8001200: e014 b.n 800122c } } else { /* Get Start Tick */ tickstart = HAL_GetTick(); - 800114a: f7ff fb6f bl 800082c - 800114e: 6138 str r0, [r7, #16] + 8001202: f7ff fb57 bl 80008b4 + 8001206: 6138 str r0, [r7, #16] /* Wait till LSE is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 8001150: e00a b.n 8001168 + 8001208: e00a b.n 8001220 { if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) - 8001152: f7ff fb6b bl 800082c - 8001156: 4602 mov r2, r0 - 8001158: 693b ldr r3, [r7, #16] - 800115a: 1ad3 subs r3, r2, r3 - 800115c: f241 3288 movw r2, #5000 ; 0x1388 - 8001160: 4293 cmp r3, r2 - 8001162: d901 bls.n 8001168 + 800120a: f7ff fb53 bl 80008b4 + 800120e: 4602 mov r2, r0 + 8001210: 693b ldr r3, [r7, #16] + 8001212: 1ad3 subs r3, r2, r3 + 8001214: f241 3288 movw r2, #5000 ; 0x1388 + 8001218: 4293 cmp r3, r2 + 800121a: d901 bls.n 8001220 { return HAL_TIMEOUT; - 8001164: 2303 movs r3, #3 - 8001166: e095 b.n 8001294 + 800121c: 2303 movs r3, #3 + 800121e: e095 b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 8001168: 4b4c ldr r3, [pc, #304] ; (800129c ) - 800116a: 6a1b ldr r3, [r3, #32] - 800116c: f003 0302 and.w r3, r3, #2 - 8001170: 2b00 cmp r3, #0 - 8001172: d1ee bne.n 8001152 + 8001220: 4b4c ldr r3, [pc, #304] ; (8001354 ) + 8001222: 6a1b ldr r3, [r3, #32] + 8001224: f003 0302 and.w r3, r3, #2 + 8001228: 2b00 cmp r3, #0 + 800122a: d1ee bne.n 800120a } } } /* Require to disable power clock if necessary */ if (pwrclkchanged == SET) - 8001174: 7dfb ldrb r3, [r7, #23] - 8001176: 2b01 cmp r3, #1 - 8001178: d105 bne.n 8001186 + 800122c: 7dfb ldrb r3, [r7, #23] + 800122e: 2b01 cmp r3, #1 + 8001230: d105 bne.n 800123e { __HAL_RCC_PWR_CLK_DISABLE(); - 800117a: 4b48 ldr r3, [pc, #288] ; (800129c ) - 800117c: 69db ldr r3, [r3, #28] - 800117e: 4a47 ldr r2, [pc, #284] ; (800129c ) - 8001180: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 - 8001184: 61d3 str r3, [r2, #28] + 8001232: 4b48 ldr r3, [pc, #288] ; (8001354 ) + 8001234: 69db ldr r3, [r3, #28] + 8001236: 4a47 ldr r2, [pc, #284] ; (8001354 ) + 8001238: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 + 800123c: 61d3 str r3, [r2, #28] #endif /* RCC_CR_PLL2ON */ /*-------------------------------- PLL Configuration -----------------------*/ /* Check the parameters */ assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) - 8001186: 687b ldr r3, [r7, #4] - 8001188: 69db ldr r3, [r3, #28] - 800118a: 2b00 cmp r3, #0 - 800118c: f000 8081 beq.w 8001292 + 800123e: 687b ldr r3, [r7, #4] + 8001240: 69db ldr r3, [r3, #28] + 8001242: 2b00 cmp r3, #0 + 8001244: f000 8081 beq.w 800134a { /* Check if the PLL is used as system clock or not */ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) - 8001190: 4b42 ldr r3, [pc, #264] ; (800129c ) - 8001192: 685b ldr r3, [r3, #4] - 8001194: f003 030c and.w r3, r3, #12 - 8001198: 2b08 cmp r3, #8 - 800119a: d061 beq.n 8001260 + 8001248: 4b42 ldr r3, [pc, #264] ; (8001354 ) + 800124a: 685b ldr r3, [r3, #4] + 800124c: f003 030c and.w r3, r3, #12 + 8001250: 2b08 cmp r3, #8 + 8001252: d061 beq.n 8001318 { if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) - 800119c: 687b ldr r3, [r7, #4] - 800119e: 69db ldr r3, [r3, #28] - 80011a0: 2b02 cmp r3, #2 - 80011a2: d146 bne.n 8001232 + 8001254: 687b ldr r3, [r7, #4] + 8001256: 69db ldr r3, [r3, #28] + 8001258: 2b02 cmp r3, #2 + 800125a: d146 bne.n 80012ea /* Check the parameters */ assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL)); /* Disable the main PLL. */ __HAL_RCC_PLL_DISABLE(); - 80011a4: 4b3f ldr r3, [pc, #252] ; (80012a4 ) - 80011a6: 2200 movs r2, #0 - 80011a8: 601a str r2, [r3, #0] + 800125c: 4b3f ldr r3, [pc, #252] ; (800135c ) + 800125e: 2200 movs r2, #0 + 8001260: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 80011aa: f7ff fb3f bl 800082c - 80011ae: 6138 str r0, [r7, #16] + 8001262: f7ff fb27 bl 80008b4 + 8001266: 6138 str r0, [r7, #16] /* Wait till PLL is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 80011b0: e008 b.n 80011c4 + 8001268: e008 b.n 800127c { if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 80011b2: f7ff fb3b bl 800082c - 80011b6: 4602 mov r2, r0 - 80011b8: 693b ldr r3, [r7, #16] - 80011ba: 1ad3 subs r3, r2, r3 - 80011bc: 2b02 cmp r3, #2 - 80011be: d901 bls.n 80011c4 + 800126a: f7ff fb23 bl 80008b4 + 800126e: 4602 mov r2, r0 + 8001270: 693b ldr r3, [r7, #16] + 8001272: 1ad3 subs r3, r2, r3 + 8001274: 2b02 cmp r3, #2 + 8001276: d901 bls.n 800127c { return HAL_TIMEOUT; - 80011c0: 2303 movs r3, #3 - 80011c2: e067 b.n 8001294 + 8001278: 2303 movs r3, #3 + 800127a: e067 b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 80011c4: 4b35 ldr r3, [pc, #212] ; (800129c ) - 80011c6: 681b ldr r3, [r3, #0] - 80011c8: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 80011cc: 2b00 cmp r3, #0 - 80011ce: d1f0 bne.n 80011b2 + 800127c: 4b35 ldr r3, [pc, #212] ; (8001354 ) + 800127e: 681b ldr r3, [r3, #0] + 8001280: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 8001284: 2b00 cmp r3, #0 + 8001286: d1f0 bne.n 800126a } } /* Configure the HSE prediv factor --------------------------------*/ /* It can be written only when the PLL is disabled. Not used in PLL source is different than HSE */ if (RCC_OscInitStruct->PLL.PLLSource == RCC_PLLSOURCE_HSE) - 80011d0: 687b ldr r3, [r7, #4] - 80011d2: 6a1b ldr r3, [r3, #32] - 80011d4: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 80011d8: d108 bne.n 80011ec + 8001288: 687b ldr r3, [r7, #4] + 800128a: 6a1b ldr r3, [r3, #32] + 800128c: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8001290: d108 bne.n 80012a4 /* Set PREDIV1 source */ SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source); #endif /* RCC_CFGR2_PREDIV1SRC */ /* Set PREDIV1 Value */ __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue); - 80011da: 4b30 ldr r3, [pc, #192] ; (800129c ) - 80011dc: 685b ldr r3, [r3, #4] - 80011de: f423 3200 bic.w r2, r3, #131072 ; 0x20000 - 80011e2: 687b ldr r3, [r7, #4] - 80011e4: 689b ldr r3, [r3, #8] - 80011e6: 492d ldr r1, [pc, #180] ; (800129c ) - 80011e8: 4313 orrs r3, r2 - 80011ea: 604b str r3, [r1, #4] + 8001292: 4b30 ldr r3, [pc, #192] ; (8001354 ) + 8001294: 685b ldr r3, [r3, #4] + 8001296: f423 3200 bic.w r2, r3, #131072 ; 0x20000 + 800129a: 687b ldr r3, [r7, #4] + 800129c: 689b ldr r3, [r3, #8] + 800129e: 492d ldr r1, [pc, #180] ; (8001354 ) + 80012a0: 4313 orrs r3, r2 + 80012a2: 604b str r3, [r1, #4] } /* Configure the main PLL clock source and multiplication factors. */ __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, - 80011ec: 4b2b ldr r3, [pc, #172] ; (800129c ) - 80011ee: 685b ldr r3, [r3, #4] - 80011f0: f423 1274 bic.w r2, r3, #3997696 ; 0x3d0000 - 80011f4: 687b ldr r3, [r7, #4] - 80011f6: 6a19 ldr r1, [r3, #32] - 80011f8: 687b ldr r3, [r7, #4] - 80011fa: 6a5b ldr r3, [r3, #36] ; 0x24 - 80011fc: 430b orrs r3, r1 - 80011fe: 4927 ldr r1, [pc, #156] ; (800129c ) - 8001200: 4313 orrs r3, r2 - 8001202: 604b str r3, [r1, #4] + 80012a4: 4b2b ldr r3, [pc, #172] ; (8001354 ) + 80012a6: 685b ldr r3, [r3, #4] + 80012a8: f423 1274 bic.w r2, r3, #3997696 ; 0x3d0000 + 80012ac: 687b ldr r3, [r7, #4] + 80012ae: 6a19 ldr r1, [r3, #32] + 80012b0: 687b ldr r3, [r7, #4] + 80012b2: 6a5b ldr r3, [r3, #36] ; 0x24 + 80012b4: 430b orrs r3, r1 + 80012b6: 4927 ldr r1, [pc, #156] ; (8001354 ) + 80012b8: 4313 orrs r3, r2 + 80012ba: 604b str r3, [r1, #4] RCC_OscInitStruct->PLL.PLLMUL); /* Enable the main PLL. */ __HAL_RCC_PLL_ENABLE(); - 8001204: 4b27 ldr r3, [pc, #156] ; (80012a4 ) - 8001206: 2201 movs r2, #1 - 8001208: 601a str r2, [r3, #0] + 80012bc: 4b27 ldr r3, [pc, #156] ; (800135c ) + 80012be: 2201 movs r2, #1 + 80012c0: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 800120a: f7ff fb0f bl 800082c - 800120e: 6138 str r0, [r7, #16] + 80012c2: f7ff faf7 bl 80008b4 + 80012c6: 6138 str r0, [r7, #16] /* Wait till PLL is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 8001210: e008 b.n 8001224 + 80012c8: e008 b.n 80012dc { if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 8001212: f7ff fb0b bl 800082c - 8001216: 4602 mov r2, r0 - 8001218: 693b ldr r3, [r7, #16] - 800121a: 1ad3 subs r3, r2, r3 - 800121c: 2b02 cmp r3, #2 - 800121e: d901 bls.n 8001224 + 80012ca: f7ff faf3 bl 80008b4 + 80012ce: 4602 mov r2, r0 + 80012d0: 693b ldr r3, [r7, #16] + 80012d2: 1ad3 subs r3, r2, r3 + 80012d4: 2b02 cmp r3, #2 + 80012d6: d901 bls.n 80012dc { return HAL_TIMEOUT; - 8001220: 2303 movs r3, #3 - 8001222: e037 b.n 8001294 + 80012d8: 2303 movs r3, #3 + 80012da: e037 b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 8001224: 4b1d ldr r3, [pc, #116] ; (800129c ) - 8001226: 681b ldr r3, [r3, #0] - 8001228: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 800122c: 2b00 cmp r3, #0 - 800122e: d0f0 beq.n 8001212 - 8001230: e02f b.n 8001292 + 80012dc: 4b1d ldr r3, [pc, #116] ; (8001354 ) + 80012de: 681b ldr r3, [r3, #0] + 80012e0: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 80012e4: 2b00 cmp r3, #0 + 80012e6: d0f0 beq.n 80012ca + 80012e8: e02f b.n 800134a } } else { /* Disable the main PLL. */ __HAL_RCC_PLL_DISABLE(); - 8001232: 4b1c ldr r3, [pc, #112] ; (80012a4 ) - 8001234: 2200 movs r2, #0 - 8001236: 601a str r2, [r3, #0] + 80012ea: 4b1c ldr r3, [pc, #112] ; (800135c ) + 80012ec: 2200 movs r2, #0 + 80012ee: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8001238: f7ff faf8 bl 800082c - 800123c: 6138 str r0, [r7, #16] + 80012f0: f7ff fae0 bl 80008b4 + 80012f4: 6138 str r0, [r7, #16] /* Wait till PLL is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 800123e: e008 b.n 8001252 + 80012f6: e008 b.n 800130a { if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 8001240: f7ff faf4 bl 800082c - 8001244: 4602 mov r2, r0 - 8001246: 693b ldr r3, [r7, #16] - 8001248: 1ad3 subs r3, r2, r3 - 800124a: 2b02 cmp r3, #2 - 800124c: d901 bls.n 8001252 + 80012f8: f7ff fadc bl 80008b4 + 80012fc: 4602 mov r2, r0 + 80012fe: 693b ldr r3, [r7, #16] + 8001300: 1ad3 subs r3, r2, r3 + 8001302: 2b02 cmp r3, #2 + 8001304: d901 bls.n 800130a { return HAL_TIMEOUT; - 800124e: 2303 movs r3, #3 - 8001250: e020 b.n 8001294 + 8001306: 2303 movs r3, #3 + 8001308: e020 b.n 800134c while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 8001252: 4b12 ldr r3, [pc, #72] ; (800129c ) - 8001254: 681b ldr r3, [r3, #0] - 8001256: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 800125a: 2b00 cmp r3, #0 - 800125c: d1f0 bne.n 8001240 - 800125e: e018 b.n 8001292 + 800130a: 4b12 ldr r3, [pc, #72] ; (8001354 ) + 800130c: 681b ldr r3, [r3, #0] + 800130e: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 8001312: 2b00 cmp r3, #0 + 8001314: d1f0 bne.n 80012f8 + 8001316: e018 b.n 800134a } } else { /* Check if there is a request to disable the PLL used as System clock source */ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) - 8001260: 687b ldr r3, [r7, #4] - 8001262: 69db ldr r3, [r3, #28] - 8001264: 2b01 cmp r3, #1 - 8001266: d101 bne.n 800126c + 8001318: 687b ldr r3, [r7, #4] + 800131a: 69db ldr r3, [r3, #28] + 800131c: 2b01 cmp r3, #1 + 800131e: d101 bne.n 8001324 { return HAL_ERROR; - 8001268: 2301 movs r3, #1 - 800126a: e013 b.n 8001294 + 8001320: 2301 movs r3, #1 + 8001322: e013 b.n 800134c } else { /* Do not return HAL_ERROR if request repeats the current configuration */ pll_config = RCC->CFGR; - 800126c: 4b0b ldr r3, [pc, #44] ; (800129c ) - 800126e: 685b ldr r3, [r3, #4] - 8001270: 60fb str r3, [r7, #12] + 8001324: 4b0b ldr r3, [pc, #44] ; (8001354 ) + 8001326: 685b ldr r3, [r3, #4] + 8001328: 60fb str r3, [r7, #12] if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 8001272: 68fb ldr r3, [r7, #12] - 8001274: f403 3280 and.w r2, r3, #65536 ; 0x10000 - 8001278: 687b ldr r3, [r7, #4] - 800127a: 6a1b ldr r3, [r3, #32] - 800127c: 429a cmp r2, r3 - 800127e: d106 bne.n 800128e + 800132a: 68fb ldr r3, [r7, #12] + 800132c: f403 3280 and.w r2, r3, #65536 ; 0x10000 + 8001330: 687b ldr r3, [r7, #4] + 8001332: 6a1b ldr r3, [r3, #32] + 8001334: 429a cmp r2, r3 + 8001336: d106 bne.n 8001346 (READ_BIT(pll_config, RCC_CFGR_PLLMULL) != RCC_OscInitStruct->PLL.PLLMUL)) - 8001280: 68fb ldr r3, [r7, #12] - 8001282: f403 1270 and.w r2, r3, #3932160 ; 0x3c0000 - 8001286: 687b ldr r3, [r7, #4] - 8001288: 6a5b ldr r3, [r3, #36] ; 0x24 + 8001338: 68fb ldr r3, [r7, #12] + 800133a: f403 1270 and.w r2, r3, #3932160 ; 0x3c0000 + 800133e: 687b ldr r3, [r7, #4] + 8001340: 6a5b ldr r3, [r3, #36] ; 0x24 if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 800128a: 429a cmp r2, r3 - 800128c: d001 beq.n 8001292 + 8001342: 429a cmp r2, r3 + 8001344: d001 beq.n 800134a { return HAL_ERROR; - 800128e: 2301 movs r3, #1 - 8001290: e000 b.n 8001294 + 8001346: 2301 movs r3, #1 + 8001348: e000 b.n 800134c } } } } return HAL_OK; - 8001292: 2300 movs r3, #0 + 800134a: 2300 movs r3, #0 } - 8001294: 4618 mov r0, r3 - 8001296: 3718 adds r7, #24 - 8001298: 46bd mov sp, r7 - 800129a: bd80 pop {r7, pc} - 800129c: 40021000 .word 0x40021000 - 80012a0: 40007000 .word 0x40007000 - 80012a4: 42420060 .word 0x42420060 + 800134c: 4618 mov r0, r3 + 800134e: 3718 adds r7, #24 + 8001350: 46bd mov sp, r7 + 8001352: bd80 pop {r7, pc} + 8001354: 40021000 .word 0x40021000 + 8001358: 40007000 .word 0x40007000 + 800135c: 42420060 .word 0x42420060 -080012a8 : +08001360 : * You can use @ref HAL_RCC_GetClockConfig() function to know which clock is * currently used as system clock source. * @retval HAL status */ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) { - 80012a8: b580 push {r7, lr} - 80012aa: b084 sub sp, #16 - 80012ac: af00 add r7, sp, #0 - 80012ae: 6078 str r0, [r7, #4] - 80012b0: 6039 str r1, [r7, #0] + 8001360: b580 push {r7, lr} + 8001362: b084 sub sp, #16 + 8001364: af00 add r7, sp, #0 + 8001366: 6078 str r0, [r7, #4] + 8001368: 6039 str r1, [r7, #0] uint32_t tickstart; /* Check Null pointer */ if (RCC_ClkInitStruct == NULL) - 80012b2: 687b ldr r3, [r7, #4] - 80012b4: 2b00 cmp r3, #0 - 80012b6: d101 bne.n 80012bc + 800136a: 687b ldr r3, [r7, #4] + 800136c: 2b00 cmp r3, #0 + 800136e: d101 bne.n 8001374 { return HAL_ERROR; - 80012b8: 2301 movs r3, #1 - 80012ba: e0d0 b.n 800145e + 8001370: 2301 movs r3, #1 + 8001372: e0d0 b.n 8001516 must be correctly programmed according to the frequency of the CPU clock (HCLK) of the device. */ #if defined(FLASH_ACR_LATENCY) /* Increasing the number of wait states because of higher CPU frequency */ if (FLatency > __HAL_FLASH_GET_LATENCY()) - 80012bc: 4b6a ldr r3, [pc, #424] ; (8001468 ) - 80012be: 681b ldr r3, [r3, #0] - 80012c0: f003 0307 and.w r3, r3, #7 - 80012c4: 683a ldr r2, [r7, #0] - 80012c6: 429a cmp r2, r3 - 80012c8: d910 bls.n 80012ec + 8001374: 4b6a ldr r3, [pc, #424] ; (8001520 ) + 8001376: 681b ldr r3, [r3, #0] + 8001378: f003 0307 and.w r3, r3, #7 + 800137c: 683a ldr r2, [r7, #0] + 800137e: 429a cmp r2, r3 + 8001380: d910 bls.n 80013a4 { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); - 80012ca: 4b67 ldr r3, [pc, #412] ; (8001468 ) - 80012cc: 681b ldr r3, [r3, #0] - 80012ce: f023 0207 bic.w r2, r3, #7 - 80012d2: 4965 ldr r1, [pc, #404] ; (8001468 ) - 80012d4: 683b ldr r3, [r7, #0] - 80012d6: 4313 orrs r3, r2 - 80012d8: 600b str r3, [r1, #0] + 8001382: 4b67 ldr r3, [pc, #412] ; (8001520 ) + 8001384: 681b ldr r3, [r3, #0] + 8001386: f023 0207 bic.w r2, r3, #7 + 800138a: 4965 ldr r1, [pc, #404] ; (8001520 ) + 800138c: 683b ldr r3, [r7, #0] + 800138e: 4313 orrs r3, r2 + 8001390: 600b str r3, [r1, #0] /* Check that the new number of wait states is taken into account to access the Flash memory by reading the FLASH_ACR register */ if (__HAL_FLASH_GET_LATENCY() != FLatency) - 80012da: 4b63 ldr r3, [pc, #396] ; (8001468 ) - 80012dc: 681b ldr r3, [r3, #0] - 80012de: f003 0307 and.w r3, r3, #7 - 80012e2: 683a ldr r2, [r7, #0] - 80012e4: 429a cmp r2, r3 - 80012e6: d001 beq.n 80012ec + 8001392: 4b63 ldr r3, [pc, #396] ; (8001520 ) + 8001394: 681b ldr r3, [r3, #0] + 8001396: f003 0307 and.w r3, r3, #7 + 800139a: 683a ldr r2, [r7, #0] + 800139c: 429a cmp r2, r3 + 800139e: d001 beq.n 80013a4 { return HAL_ERROR; - 80012e8: 2301 movs r3, #1 - 80012ea: e0b8 b.n 800145e + 80013a0: 2301 movs r3, #1 + 80013a2: e0b8 b.n 8001516 } } #endif /* FLASH_ACR_LATENCY */ /*-------------------------- HCLK Configuration --------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) - 80012ec: 687b ldr r3, [r7, #4] - 80012ee: 681b ldr r3, [r3, #0] - 80012f0: f003 0302 and.w r3, r3, #2 - 80012f4: 2b00 cmp r3, #0 - 80012f6: d020 beq.n 800133a + 80013a4: 687b ldr r3, [r7, #4] + 80013a6: 681b ldr r3, [r3, #0] + 80013a8: f003 0302 and.w r3, r3, #2 + 80013ac: 2b00 cmp r3, #0 + 80013ae: d020 beq.n 80013f2 { /* Set the highest APBx dividers in order to ensure that we do not go through a non-spec phase whatever we decrease or increase HCLK. */ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) - 80012f8: 687b ldr r3, [r7, #4] - 80012fa: 681b ldr r3, [r3, #0] - 80012fc: f003 0304 and.w r3, r3, #4 - 8001300: 2b00 cmp r3, #0 - 8001302: d005 beq.n 8001310 + 80013b0: 687b ldr r3, [r7, #4] + 80013b2: 681b ldr r3, [r3, #0] + 80013b4: f003 0304 and.w r3, r3, #4 + 80013b8: 2b00 cmp r3, #0 + 80013ba: d005 beq.n 80013c8 { MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); - 8001304: 4b59 ldr r3, [pc, #356] ; (800146c ) - 8001306: 685b ldr r3, [r3, #4] - 8001308: 4a58 ldr r2, [pc, #352] ; (800146c ) - 800130a: f443 63e0 orr.w r3, r3, #1792 ; 0x700 - 800130e: 6053 str r3, [r2, #4] + 80013bc: 4b59 ldr r3, [pc, #356] ; (8001524 ) + 80013be: 685b ldr r3, [r3, #4] + 80013c0: 4a58 ldr r2, [pc, #352] ; (8001524 ) + 80013c2: f443 63e0 orr.w r3, r3, #1792 ; 0x700 + 80013c6: 6053 str r3, [r2, #4] } if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 8001310: 687b ldr r3, [r7, #4] - 8001312: 681b ldr r3, [r3, #0] - 8001314: f003 0308 and.w r3, r3, #8 - 8001318: 2b00 cmp r3, #0 - 800131a: d005 beq.n 8001328 + 80013c8: 687b ldr r3, [r7, #4] + 80013ca: 681b ldr r3, [r3, #0] + 80013cc: f003 0308 and.w r3, r3, #8 + 80013d0: 2b00 cmp r3, #0 + 80013d2: d005 beq.n 80013e0 { MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); - 800131c: 4b53 ldr r3, [pc, #332] ; (800146c ) - 800131e: 685b ldr r3, [r3, #4] - 8001320: 4a52 ldr r2, [pc, #328] ; (800146c ) - 8001322: f443 5360 orr.w r3, r3, #14336 ; 0x3800 - 8001326: 6053 str r3, [r2, #4] + 80013d4: 4b53 ldr r3, [pc, #332] ; (8001524 ) + 80013d6: 685b ldr r3, [r3, #4] + 80013d8: 4a52 ldr r2, [pc, #328] ; (8001524 ) + 80013da: f443 5360 orr.w r3, r3, #14336 ; 0x3800 + 80013de: 6053 str r3, [r2, #4] } /* Set the new HCLK clock divider */ assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); - 8001328: 4b50 ldr r3, [pc, #320] ; (800146c ) - 800132a: 685b ldr r3, [r3, #4] - 800132c: f023 02f0 bic.w r2, r3, #240 ; 0xf0 - 8001330: 687b ldr r3, [r7, #4] - 8001332: 689b ldr r3, [r3, #8] - 8001334: 494d ldr r1, [pc, #308] ; (800146c ) - 8001336: 4313 orrs r3, r2 - 8001338: 604b str r3, [r1, #4] + 80013e0: 4b50 ldr r3, [pc, #320] ; (8001524 ) + 80013e2: 685b ldr r3, [r3, #4] + 80013e4: f023 02f0 bic.w r2, r3, #240 ; 0xf0 + 80013e8: 687b ldr r3, [r7, #4] + 80013ea: 689b ldr r3, [r3, #8] + 80013ec: 494d ldr r1, [pc, #308] ; (8001524 ) + 80013ee: 4313 orrs r3, r2 + 80013f0: 604b str r3, [r1, #4] } /*------------------------- SYSCLK Configuration ---------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) - 800133a: 687b ldr r3, [r7, #4] - 800133c: 681b ldr r3, [r3, #0] - 800133e: f003 0301 and.w r3, r3, #1 - 8001342: 2b00 cmp r3, #0 - 8001344: d040 beq.n 80013c8 + 80013f2: 687b ldr r3, [r7, #4] + 80013f4: 681b ldr r3, [r3, #0] + 80013f6: f003 0301 and.w r3, r3, #1 + 80013fa: 2b00 cmp r3, #0 + 80013fc: d040 beq.n 8001480 { assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); /* HSE is selected as System Clock Source */ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) - 8001346: 687b ldr r3, [r7, #4] - 8001348: 685b ldr r3, [r3, #4] - 800134a: 2b01 cmp r3, #1 - 800134c: d107 bne.n 800135e + 80013fe: 687b ldr r3, [r7, #4] + 8001400: 685b ldr r3, [r3, #4] + 8001402: 2b01 cmp r3, #1 + 8001404: d107 bne.n 8001416 { /* Check the HSE ready flag */ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 800134e: 4b47 ldr r3, [pc, #284] ; (800146c ) - 8001350: 681b ldr r3, [r3, #0] - 8001352: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8001356: 2b00 cmp r3, #0 - 8001358: d115 bne.n 8001386 + 8001406: 4b47 ldr r3, [pc, #284] ; (8001524 ) + 8001408: 681b ldr r3, [r3, #0] + 800140a: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 800140e: 2b00 cmp r3, #0 + 8001410: d115 bne.n 800143e { return HAL_ERROR; - 800135a: 2301 movs r3, #1 - 800135c: e07f b.n 800145e + 8001412: 2301 movs r3, #1 + 8001414: e07f b.n 8001516 } } /* PLL is selected as System Clock Source */ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) - 800135e: 687b ldr r3, [r7, #4] - 8001360: 685b ldr r3, [r3, #4] - 8001362: 2b02 cmp r3, #2 - 8001364: d107 bne.n 8001376 + 8001416: 687b ldr r3, [r7, #4] + 8001418: 685b ldr r3, [r3, #4] + 800141a: 2b02 cmp r3, #2 + 800141c: d107 bne.n 800142e { /* Check the PLL ready flag */ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 8001366: 4b41 ldr r3, [pc, #260] ; (800146c ) - 8001368: 681b ldr r3, [r3, #0] - 800136a: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 800136e: 2b00 cmp r3, #0 - 8001370: d109 bne.n 8001386 + 800141e: 4b41 ldr r3, [pc, #260] ; (8001524 ) + 8001420: 681b ldr r3, [r3, #0] + 8001422: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 8001426: 2b00 cmp r3, #0 + 8001428: d109 bne.n 800143e { return HAL_ERROR; - 8001372: 2301 movs r3, #1 - 8001374: e073 b.n 800145e + 800142a: 2301 movs r3, #1 + 800142c: e073 b.n 8001516 } /* HSI is selected as System Clock Source */ else { /* Check the HSI ready flag */ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 8001376: 4b3d ldr r3, [pc, #244] ; (800146c ) - 8001378: 681b ldr r3, [r3, #0] - 800137a: f003 0302 and.w r3, r3, #2 - 800137e: 2b00 cmp r3, #0 - 8001380: d101 bne.n 8001386 + 800142e: 4b3d ldr r3, [pc, #244] ; (8001524 ) + 8001430: 681b ldr r3, [r3, #0] + 8001432: f003 0302 and.w r3, r3, #2 + 8001436: 2b00 cmp r3, #0 + 8001438: d101 bne.n 800143e { return HAL_ERROR; - 8001382: 2301 movs r3, #1 - 8001384: e06b b.n 800145e + 800143a: 2301 movs r3, #1 + 800143c: e06b b.n 8001516 } } __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); - 8001386: 4b39 ldr r3, [pc, #228] ; (800146c ) - 8001388: 685b ldr r3, [r3, #4] - 800138a: f023 0203 bic.w r2, r3, #3 - 800138e: 687b ldr r3, [r7, #4] - 8001390: 685b ldr r3, [r3, #4] - 8001392: 4936 ldr r1, [pc, #216] ; (800146c ) - 8001394: 4313 orrs r3, r2 - 8001396: 604b str r3, [r1, #4] + 800143e: 4b39 ldr r3, [pc, #228] ; (8001524 ) + 8001440: 685b ldr r3, [r3, #4] + 8001442: f023 0203 bic.w r2, r3, #3 + 8001446: 687b ldr r3, [r7, #4] + 8001448: 685b ldr r3, [r3, #4] + 800144a: 4936 ldr r1, [pc, #216] ; (8001524 ) + 800144c: 4313 orrs r3, r2 + 800144e: 604b str r3, [r1, #4] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8001398: f7ff fa48 bl 800082c - 800139c: 60f8 str r0, [r7, #12] + 8001450: f7ff fa30 bl 80008b4 + 8001454: 60f8 str r0, [r7, #12] while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 800139e: e00a b.n 80013b6 + 8001456: e00a b.n 800146e { if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) - 80013a0: f7ff fa44 bl 800082c - 80013a4: 4602 mov r2, r0 - 80013a6: 68fb ldr r3, [r7, #12] - 80013a8: 1ad3 subs r3, r2, r3 - 80013aa: f241 3288 movw r2, #5000 ; 0x1388 - 80013ae: 4293 cmp r3, r2 - 80013b0: d901 bls.n 80013b6 + 8001458: f7ff fa2c bl 80008b4 + 800145c: 4602 mov r2, r0 + 800145e: 68fb ldr r3, [r7, #12] + 8001460: 1ad3 subs r3, r2, r3 + 8001462: f241 3288 movw r2, #5000 ; 0x1388 + 8001466: 4293 cmp r3, r2 + 8001468: d901 bls.n 800146e { return HAL_TIMEOUT; - 80013b2: 2303 movs r3, #3 - 80013b4: e053 b.n 800145e + 800146a: 2303 movs r3, #3 + 800146c: e053 b.n 8001516 while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 80013b6: 4b2d ldr r3, [pc, #180] ; (800146c ) - 80013b8: 685b ldr r3, [r3, #4] - 80013ba: f003 020c and.w r2, r3, #12 - 80013be: 687b ldr r3, [r7, #4] - 80013c0: 685b ldr r3, [r3, #4] - 80013c2: 009b lsls r3, r3, #2 - 80013c4: 429a cmp r2, r3 - 80013c6: d1eb bne.n 80013a0 + 800146e: 4b2d ldr r3, [pc, #180] ; (8001524 ) + 8001470: 685b ldr r3, [r3, #4] + 8001472: f003 020c and.w r2, r3, #12 + 8001476: 687b ldr r3, [r7, #4] + 8001478: 685b ldr r3, [r3, #4] + 800147a: 009b lsls r3, r3, #2 + 800147c: 429a cmp r2, r3 + 800147e: d1eb bne.n 8001458 } } #if defined(FLASH_ACR_LATENCY) /* Decreasing the number of wait states because of lower CPU frequency */ if (FLatency < __HAL_FLASH_GET_LATENCY()) - 80013c8: 4b27 ldr r3, [pc, #156] ; (8001468 ) - 80013ca: 681b ldr r3, [r3, #0] - 80013cc: f003 0307 and.w r3, r3, #7 - 80013d0: 683a ldr r2, [r7, #0] - 80013d2: 429a cmp r2, r3 - 80013d4: d210 bcs.n 80013f8 + 8001480: 4b27 ldr r3, [pc, #156] ; (8001520 ) + 8001482: 681b ldr r3, [r3, #0] + 8001484: f003 0307 and.w r3, r3, #7 + 8001488: 683a ldr r2, [r7, #0] + 800148a: 429a cmp r2, r3 + 800148c: d210 bcs.n 80014b0 { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); - 80013d6: 4b24 ldr r3, [pc, #144] ; (8001468 ) - 80013d8: 681b ldr r3, [r3, #0] - 80013da: f023 0207 bic.w r2, r3, #7 - 80013de: 4922 ldr r1, [pc, #136] ; (8001468 ) - 80013e0: 683b ldr r3, [r7, #0] - 80013e2: 4313 orrs r3, r2 - 80013e4: 600b str r3, [r1, #0] + 800148e: 4b24 ldr r3, [pc, #144] ; (8001520 ) + 8001490: 681b ldr r3, [r3, #0] + 8001492: f023 0207 bic.w r2, r3, #7 + 8001496: 4922 ldr r1, [pc, #136] ; (8001520 ) + 8001498: 683b ldr r3, [r7, #0] + 800149a: 4313 orrs r3, r2 + 800149c: 600b str r3, [r1, #0] /* Check that the new number of wait states is taken into account to access the Flash memory by reading the FLASH_ACR register */ if (__HAL_FLASH_GET_LATENCY() != FLatency) - 80013e6: 4b20 ldr r3, [pc, #128] ; (8001468 ) - 80013e8: 681b ldr r3, [r3, #0] - 80013ea: f003 0307 and.w r3, r3, #7 - 80013ee: 683a ldr r2, [r7, #0] - 80013f0: 429a cmp r2, r3 - 80013f2: d001 beq.n 80013f8 + 800149e: 4b20 ldr r3, [pc, #128] ; (8001520 ) + 80014a0: 681b ldr r3, [r3, #0] + 80014a2: f003 0307 and.w r3, r3, #7 + 80014a6: 683a ldr r2, [r7, #0] + 80014a8: 429a cmp r2, r3 + 80014aa: d001 beq.n 80014b0 { return HAL_ERROR; - 80013f4: 2301 movs r3, #1 - 80013f6: e032 b.n 800145e + 80014ac: 2301 movs r3, #1 + 80014ae: e032 b.n 8001516 } } #endif /* FLASH_ACR_LATENCY */ /*-------------------------- PCLK1 Configuration ---------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) - 80013f8: 687b ldr r3, [r7, #4] - 80013fa: 681b ldr r3, [r3, #0] - 80013fc: f003 0304 and.w r3, r3, #4 - 8001400: 2b00 cmp r3, #0 - 8001402: d008 beq.n 8001416 + 80014b0: 687b ldr r3, [r7, #4] + 80014b2: 681b ldr r3, [r3, #0] + 80014b4: f003 0304 and.w r3, r3, #4 + 80014b8: 2b00 cmp r3, #0 + 80014ba: d008 beq.n 80014ce { assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); - 8001404: 4b19 ldr r3, [pc, #100] ; (800146c ) - 8001406: 685b ldr r3, [r3, #4] - 8001408: f423 62e0 bic.w r2, r3, #1792 ; 0x700 - 800140c: 687b ldr r3, [r7, #4] - 800140e: 68db ldr r3, [r3, #12] - 8001410: 4916 ldr r1, [pc, #88] ; (800146c ) - 8001412: 4313 orrs r3, r2 - 8001414: 604b str r3, [r1, #4] + 80014bc: 4b19 ldr r3, [pc, #100] ; (8001524 ) + 80014be: 685b ldr r3, [r3, #4] + 80014c0: f423 62e0 bic.w r2, r3, #1792 ; 0x700 + 80014c4: 687b ldr r3, [r7, #4] + 80014c6: 68db ldr r3, [r3, #12] + 80014c8: 4916 ldr r1, [pc, #88] ; (8001524 ) + 80014ca: 4313 orrs r3, r2 + 80014cc: 604b str r3, [r1, #4] } /*-------------------------- PCLK2 Configuration ---------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 8001416: 687b ldr r3, [r7, #4] - 8001418: 681b ldr r3, [r3, #0] - 800141a: f003 0308 and.w r3, r3, #8 - 800141e: 2b00 cmp r3, #0 - 8001420: d009 beq.n 8001436 + 80014ce: 687b ldr r3, [r7, #4] + 80014d0: 681b ldr r3, [r3, #0] + 80014d2: f003 0308 and.w r3, r3, #8 + 80014d6: 2b00 cmp r3, #0 + 80014d8: d009 beq.n 80014ee { assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3)); - 8001422: 4b12 ldr r3, [pc, #72] ; (800146c ) - 8001424: 685b ldr r3, [r3, #4] - 8001426: f423 5260 bic.w r2, r3, #14336 ; 0x3800 - 800142a: 687b ldr r3, [r7, #4] - 800142c: 691b ldr r3, [r3, #16] - 800142e: 00db lsls r3, r3, #3 - 8001430: 490e ldr r1, [pc, #56] ; (800146c ) - 8001432: 4313 orrs r3, r2 - 8001434: 604b str r3, [r1, #4] + 80014da: 4b12 ldr r3, [pc, #72] ; (8001524 ) + 80014dc: 685b ldr r3, [r3, #4] + 80014de: f423 5260 bic.w r2, r3, #14336 ; 0x3800 + 80014e2: 687b ldr r3, [r7, #4] + 80014e4: 691b ldr r3, [r3, #16] + 80014e6: 00db lsls r3, r3, #3 + 80014e8: 490e ldr r1, [pc, #56] ; (8001524 ) + 80014ea: 4313 orrs r3, r2 + 80014ec: 604b str r3, [r1, #4] } /* Update the SystemCoreClock global variable */ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; - 8001436: f000 f821 bl 800147c - 800143a: 4602 mov r2, r0 - 800143c: 4b0b ldr r3, [pc, #44] ; (800146c ) - 800143e: 685b ldr r3, [r3, #4] - 8001440: 091b lsrs r3, r3, #4 - 8001442: f003 030f and.w r3, r3, #15 - 8001446: 490a ldr r1, [pc, #40] ; (8001470 ) - 8001448: 5ccb ldrb r3, [r1, r3] - 800144a: fa22 f303 lsr.w r3, r2, r3 - 800144e: 4a09 ldr r2, [pc, #36] ; (8001474 ) - 8001450: 6013 str r3, [r2, #0] + 80014ee: f000 f821 bl 8001534 + 80014f2: 4602 mov r2, r0 + 80014f4: 4b0b ldr r3, [pc, #44] ; (8001524 ) + 80014f6: 685b ldr r3, [r3, #4] + 80014f8: 091b lsrs r3, r3, #4 + 80014fa: f003 030f and.w r3, r3, #15 + 80014fe: 490a ldr r1, [pc, #40] ; (8001528 ) + 8001500: 5ccb ldrb r3, [r1, r3] + 8001502: fa22 f303 lsr.w r3, r2, r3 + 8001506: 4a09 ldr r2, [pc, #36] ; (800152c ) + 8001508: 6013 str r3, [r2, #0] /* Configure the source of time base considering new system clocks settings*/ HAL_InitTick(uwTickPrio); - 8001452: 4b09 ldr r3, [pc, #36] ; (8001478 ) - 8001454: 681b ldr r3, [r3, #0] - 8001456: 4618 mov r0, r3 - 8001458: f7ff f9a6 bl 80007a8 + 800150a: 4b09 ldr r3, [pc, #36] ; (8001530 ) + 800150c: 681b ldr r3, [r3, #0] + 800150e: 4618 mov r0, r3 + 8001510: f7ff f98e bl 8000830 return HAL_OK; - 800145c: 2300 movs r3, #0 + 8001514: 2300 movs r3, #0 } - 800145e: 4618 mov r0, r3 - 8001460: 3710 adds r7, #16 - 8001462: 46bd mov sp, r7 - 8001464: bd80 pop {r7, pc} - 8001466: bf00 nop - 8001468: 40022000 .word 0x40022000 - 800146c: 40021000 .word 0x40021000 - 8001470: 08005fb8 .word 0x08005fb8 - 8001474: 20000000 .word 0x20000000 - 8001478: 20000004 .word 0x20000004 + 8001516: 4618 mov r0, r3 + 8001518: 3710 adds r7, #16 + 800151a: 46bd mov sp, r7 + 800151c: bd80 pop {r7, pc} + 800151e: bf00 nop + 8001520: 40022000 .word 0x40022000 + 8001524: 40021000 .word 0x40021000 + 8001528: 08006a68 .word 0x08006a68 + 800152c: 20000000 .word 0x20000000 + 8001530: 20000004 .word 0x20000004 -0800147c : +08001534 : * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. * * @retval SYSCLK frequency */ uint32_t HAL_RCC_GetSysClockFreq(void) { - 800147c: b490 push {r4, r7} - 800147e: b08a sub sp, #40 ; 0x28 - 8001480: af00 add r7, sp, #0 + 8001534: b490 push {r4, r7} + 8001536: b08a sub sp, #40 ; 0x28 + 8001538: af00 add r7, sp, #0 #if defined(RCC_CFGR2_PREDIV1SRC) const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13}; const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; #else const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16}; - 8001482: 4b2a ldr r3, [pc, #168] ; (800152c ) - 8001484: 1d3c adds r4, r7, #4 - 8001486: cb0f ldmia r3, {r0, r1, r2, r3} - 8001488: e884 000f stmia.w r4, {r0, r1, r2, r3} + 800153a: 4b2a ldr r3, [pc, #168] ; (80015e4 ) + 800153c: 1d3c adds r4, r7, #4 + 800153e: cb0f ldmia r3, {r0, r1, r2, r3} + 8001540: e884 000f stmia.w r4, {r0, r1, r2, r3} #if defined(RCC_CFGR2_PREDIV1) const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; #else const uint8_t aPredivFactorTable[2] = {1, 2}; - 800148c: f240 2301 movw r3, #513 ; 0x201 - 8001490: 803b strh r3, [r7, #0] + 8001544: f240 2301 movw r3, #513 ; 0x201 + 8001548: 803b strh r3, [r7, #0] #endif /*RCC_CFGR2_PREDIV1*/ #endif uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U; - 8001492: 2300 movs r3, #0 - 8001494: 61fb str r3, [r7, #28] - 8001496: 2300 movs r3, #0 - 8001498: 61bb str r3, [r7, #24] - 800149a: 2300 movs r3, #0 - 800149c: 627b str r3, [r7, #36] ; 0x24 - 800149e: 2300 movs r3, #0 - 80014a0: 617b str r3, [r7, #20] + 800154a: 2300 movs r3, #0 + 800154c: 61fb str r3, [r7, #28] + 800154e: 2300 movs r3, #0 + 8001550: 61bb str r3, [r7, #24] + 8001552: 2300 movs r3, #0 + 8001554: 627b str r3, [r7, #36] ; 0x24 + 8001556: 2300 movs r3, #0 + 8001558: 617b str r3, [r7, #20] uint32_t sysclockfreq = 0U; - 80014a2: 2300 movs r3, #0 - 80014a4: 623b str r3, [r7, #32] + 800155a: 2300 movs r3, #0 + 800155c: 623b str r3, [r7, #32] #if defined(RCC_CFGR2_PREDIV1SRC) uint32_t prediv2 = 0U, pll2mul = 0U; #endif /*RCC_CFGR2_PREDIV1SRC*/ tmpreg = RCC->CFGR; - 80014a6: 4b22 ldr r3, [pc, #136] ; (8001530 ) - 80014a8: 685b ldr r3, [r3, #4] - 80014aa: 61fb str r3, [r7, #28] + 800155e: 4b22 ldr r3, [pc, #136] ; (80015e8 ) + 8001560: 685b ldr r3, [r3, #4] + 8001562: 61fb str r3, [r7, #28] /* Get SYSCLK source -------------------------------------------------------*/ switch (tmpreg & RCC_CFGR_SWS) - 80014ac: 69fb ldr r3, [r7, #28] - 80014ae: f003 030c and.w r3, r3, #12 - 80014b2: 2b04 cmp r3, #4 - 80014b4: d002 beq.n 80014bc - 80014b6: 2b08 cmp r3, #8 - 80014b8: d003 beq.n 80014c2 - 80014ba: e02d b.n 8001518 + 8001564: 69fb ldr r3, [r7, #28] + 8001566: f003 030c and.w r3, r3, #12 + 800156a: 2b04 cmp r3, #4 + 800156c: d002 beq.n 8001574 + 800156e: 2b08 cmp r3, #8 + 8001570: d003 beq.n 800157a + 8001572: e02d b.n 80015d0 { case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ { sysclockfreq = HSE_VALUE; - 80014bc: 4b1d ldr r3, [pc, #116] ; (8001534 ) - 80014be: 623b str r3, [r7, #32] + 8001574: 4b1d ldr r3, [pc, #116] ; (80015ec ) + 8001576: 623b str r3, [r7, #32] break; - 80014c0: e02d b.n 800151e + 8001578: e02d b.n 80015d6 } case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ { pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos]; - 80014c2: 69fb ldr r3, [r7, #28] - 80014c4: 0c9b lsrs r3, r3, #18 - 80014c6: f003 030f and.w r3, r3, #15 - 80014ca: f107 0228 add.w r2, r7, #40 ; 0x28 - 80014ce: 4413 add r3, r2 - 80014d0: f813 3c24 ldrb.w r3, [r3, #-36] - 80014d4: 617b str r3, [r7, #20] + 800157a: 69fb ldr r3, [r7, #28] + 800157c: 0c9b lsrs r3, r3, #18 + 800157e: f003 030f and.w r3, r3, #15 + 8001582: f107 0228 add.w r2, r7, #40 ; 0x28 + 8001586: 4413 add r3, r2 + 8001588: f813 3c24 ldrb.w r3, [r3, #-36] + 800158c: 617b str r3, [r7, #20] if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) - 80014d6: 69fb ldr r3, [r7, #28] - 80014d8: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 80014dc: 2b00 cmp r3, #0 - 80014de: d013 beq.n 8001508 + 800158e: 69fb ldr r3, [r7, #28] + 8001590: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8001594: 2b00 cmp r3, #0 + 8001596: d013 beq.n 80015c0 { #if defined(RCC_CFGR2_PREDIV1) prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos]; #else prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos]; - 80014e0: 4b13 ldr r3, [pc, #76] ; (8001530 ) - 80014e2: 685b ldr r3, [r3, #4] - 80014e4: 0c5b lsrs r3, r3, #17 - 80014e6: f003 0301 and.w r3, r3, #1 - 80014ea: f107 0228 add.w r2, r7, #40 ; 0x28 - 80014ee: 4413 add r3, r2 - 80014f0: f813 3c28 ldrb.w r3, [r3, #-40] - 80014f4: 61bb str r3, [r7, #24] + 8001598: 4b13 ldr r3, [pc, #76] ; (80015e8 ) + 800159a: 685b ldr r3, [r3, #4] + 800159c: 0c5b lsrs r3, r3, #17 + 800159e: f003 0301 and.w r3, r3, #1 + 80015a2: f107 0228 add.w r2, r7, #40 ; 0x28 + 80015a6: 4413 add r3, r2 + 80015a8: f813 3c28 ldrb.w r3, [r3, #-40] + 80015ac: 61bb str r3, [r7, #24] { pllclk = pllclk / 2; } #else /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv); - 80014f6: 697b ldr r3, [r7, #20] - 80014f8: 4a0e ldr r2, [pc, #56] ; (8001534 ) - 80014fa: fb02 f203 mul.w r2, r2, r3 - 80014fe: 69bb ldr r3, [r7, #24] - 8001500: fbb2 f3f3 udiv r3, r2, r3 - 8001504: 627b str r3, [r7, #36] ; 0x24 - 8001506: e004 b.n 8001512 + 80015ae: 697b ldr r3, [r7, #20] + 80015b0: 4a0e ldr r2, [pc, #56] ; (80015ec ) + 80015b2: fb02 f203 mul.w r2, r2, r3 + 80015b6: 69bb ldr r3, [r7, #24] + 80015b8: fbb2 f3f3 udiv r3, r2, r3 + 80015bc: 627b str r3, [r7, #36] ; 0x24 + 80015be: e004 b.n 80015ca #endif /*RCC_CFGR2_PREDIV1SRC*/ } else { /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); - 8001508: 697b ldr r3, [r7, #20] - 800150a: 4a0b ldr r2, [pc, #44] ; (8001538 ) - 800150c: fb02 f303 mul.w r3, r2, r3 - 8001510: 627b str r3, [r7, #36] ; 0x24 + 80015c0: 697b ldr r3, [r7, #20] + 80015c2: 4a0b ldr r2, [pc, #44] ; (80015f0 ) + 80015c4: fb02 f303 mul.w r3, r2, r3 + 80015c8: 627b str r3, [r7, #36] ; 0x24 } sysclockfreq = pllclk; - 8001512: 6a7b ldr r3, [r7, #36] ; 0x24 - 8001514: 623b str r3, [r7, #32] + 80015ca: 6a7b ldr r3, [r7, #36] ; 0x24 + 80015cc: 623b str r3, [r7, #32] break; - 8001516: e002 b.n 800151e + 80015ce: e002 b.n 80015d6 } case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ default: /* HSI used as system clock */ { sysclockfreq = HSI_VALUE; - 8001518: 4b06 ldr r3, [pc, #24] ; (8001534 ) - 800151a: 623b str r3, [r7, #32] + 80015d0: 4b06 ldr r3, [pc, #24] ; (80015ec ) + 80015d2: 623b str r3, [r7, #32] break; - 800151c: bf00 nop + 80015d4: bf00 nop } } return sysclockfreq; - 800151e: 6a3b ldr r3, [r7, #32] + 80015d6: 6a3b ldr r3, [r7, #32] } - 8001520: 4618 mov r0, r3 - 8001522: 3728 adds r7, #40 ; 0x28 - 8001524: 46bd mov sp, r7 - 8001526: bc90 pop {r4, r7} - 8001528: 4770 bx lr - 800152a: bf00 nop - 800152c: 08005f4c .word 0x08005f4c - 8001530: 40021000 .word 0x40021000 - 8001534: 007a1200 .word 0x007a1200 - 8001538: 003d0900 .word 0x003d0900 + 80015d8: 4618 mov r0, r3 + 80015da: 3728 adds r7, #40 ; 0x28 + 80015dc: 46bd mov sp, r7 + 80015de: bc90 pop {r4, r7} + 80015e0: 4770 bx lr + 80015e2: bf00 nop + 80015e4: 080069f8 .word 0x080069f8 + 80015e8: 40021000 .word 0x40021000 + 80015ec: 007a1200 .word 0x007a1200 + 80015f0: 003d0900 .word 0x003d0900 -0800153c : +080015f4 : * @brief This function provides delay (in milliseconds) based on CPU cycles method. * @param mdelay: specifies the delay time length, in milliseconds. * @retval None */ static void RCC_Delay(uint32_t mdelay) { - 800153c: b480 push {r7} - 800153e: b085 sub sp, #20 - 8001540: af00 add r7, sp, #0 - 8001542: 6078 str r0, [r7, #4] + 80015f4: b480 push {r7} + 80015f6: b085 sub sp, #20 + 80015f8: af00 add r7, sp, #0 + 80015fa: 6078 str r0, [r7, #4] __IO uint32_t Delay = mdelay * (SystemCoreClock / 8U / 1000U); - 8001544: 4b0a ldr r3, [pc, #40] ; (8001570 ) - 8001546: 681b ldr r3, [r3, #0] - 8001548: 4a0a ldr r2, [pc, #40] ; (8001574 ) - 800154a: fba2 2303 umull r2, r3, r2, r3 - 800154e: 0a5b lsrs r3, r3, #9 - 8001550: 687a ldr r2, [r7, #4] - 8001552: fb02 f303 mul.w r3, r2, r3 - 8001556: 60fb str r3, [r7, #12] + 80015fc: 4b0a ldr r3, [pc, #40] ; (8001628 ) + 80015fe: 681b ldr r3, [r3, #0] + 8001600: 4a0a ldr r2, [pc, #40] ; (800162c ) + 8001602: fba2 2303 umull r2, r3, r2, r3 + 8001606: 0a5b lsrs r3, r3, #9 + 8001608: 687a ldr r2, [r7, #4] + 800160a: fb02 f303 mul.w r3, r2, r3 + 800160e: 60fb str r3, [r7, #12] do { __NOP(); - 8001558: bf00 nop + 8001610: bf00 nop } while (Delay --); - 800155a: 68fb ldr r3, [r7, #12] - 800155c: 1e5a subs r2, r3, #1 - 800155e: 60fa str r2, [r7, #12] - 8001560: 2b00 cmp r3, #0 - 8001562: d1f9 bne.n 8001558 + 8001612: 68fb ldr r3, [r7, #12] + 8001614: 1e5a subs r2, r3, #1 + 8001616: 60fa str r2, [r7, #12] + 8001618: 2b00 cmp r3, #0 + 800161a: d1f9 bne.n 8001610 } - 8001564: bf00 nop - 8001566: bf00 nop - 8001568: 3714 adds r7, #20 - 800156a: 46bd mov sp, r7 - 800156c: bc80 pop {r7} - 800156e: 4770 bx lr - 8001570: 20000000 .word 0x20000000 - 8001574: 10624dd3 .word 0x10624dd3 + 800161c: bf00 nop + 800161e: bf00 nop + 8001620: 3714 adds r7, #20 + 8001622: 46bd mov sp, r7 + 8001624: bc80 pop {r7} + 8001626: 4770 bx lr + 8001628: 20000000 .word 0x20000000 + 800162c: 10624dd3 .word 0x10624dd3 -08001578 : +08001630 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) { - 8001578: b580 push {r7, lr} - 800157a: b082 sub sp, #8 - 800157c: af00 add r7, sp, #0 - 800157e: 6078 str r0, [r7, #4] + 8001630: b580 push {r7, lr} + 8001632: b082 sub sp, #8 + 8001634: af00 add r7, sp, #0 + 8001636: 6078 str r0, [r7, #4] /* Check the SPI handle allocation */ if (hspi == NULL) - 8001580: 687b ldr r3, [r7, #4] - 8001582: 2b00 cmp r3, #0 - 8001584: d101 bne.n 800158a + 8001638: 687b ldr r3, [r7, #4] + 800163a: 2b00 cmp r3, #0 + 800163c: d101 bne.n 8001642 { return HAL_ERROR; - 8001586: 2301 movs r3, #1 - 8001588: e076 b.n 8001678 + 800163e: 2301 movs r3, #1 + 8001640: e076 b.n 8001730 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); /* TI mode is not supported on this device. TIMode parameter is mandatory equal to SPI_TIMODE_DISABLE */ assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) - 800158a: 687b ldr r3, [r7, #4] - 800158c: 6a5b ldr r3, [r3, #36] ; 0x24 - 800158e: 2b00 cmp r3, #0 - 8001590: d108 bne.n 80015a4 + 8001642: 687b ldr r3, [r7, #4] + 8001644: 6a5b ldr r3, [r3, #36] ; 0x24 + 8001646: 2b00 cmp r3, #0 + 8001648: d108 bne.n 800165c { assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); if (hspi->Init.Mode == SPI_MODE_MASTER) - 8001592: 687b ldr r3, [r7, #4] - 8001594: 685b ldr r3, [r3, #4] - 8001596: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 800159a: d009 beq.n 80015b0 + 800164a: 687b ldr r3, [r7, #4] + 800164c: 685b ldr r3, [r3, #4] + 800164e: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001652: d009 beq.n 8001668 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); } else { /* Baudrate prescaler not use in Motoraola Slave mode. force to default value */ hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; - 800159c: 687b ldr r3, [r7, #4] - 800159e: 2200 movs r2, #0 - 80015a0: 61da str r2, [r3, #28] - 80015a2: e005 b.n 80015b0 + 8001654: 687b ldr r3, [r7, #4] + 8001656: 2200 movs r2, #0 + 8001658: 61da str r2, [r3, #28] + 800165a: e005 b.n 8001668 else { assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); /* Force polarity and phase to TI protocaol requirements */ hspi->Init.CLKPolarity = SPI_POLARITY_LOW; - 80015a4: 687b ldr r3, [r7, #4] - 80015a6: 2200 movs r2, #0 - 80015a8: 611a str r2, [r3, #16] + 800165c: 687b ldr r3, [r7, #4] + 800165e: 2200 movs r2, #0 + 8001660: 611a str r2, [r3, #16] hspi->Init.CLKPhase = SPI_PHASE_1EDGE; - 80015aa: 687b ldr r3, [r7, #4] - 80015ac: 2200 movs r2, #0 - 80015ae: 615a str r2, [r3, #20] + 8001662: 687b ldr r3, [r7, #4] + 8001664: 2200 movs r2, #0 + 8001666: 615a str r2, [r3, #20] if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) { assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); } #else hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - 80015b0: 687b ldr r3, [r7, #4] - 80015b2: 2200 movs r2, #0 - 80015b4: 629a str r2, [r3, #40] ; 0x28 + 8001668: 687b ldr r3, [r7, #4] + 800166a: 2200 movs r2, #0 + 800166c: 629a str r2, [r3, #40] ; 0x28 #endif /* USE_SPI_CRC */ if (hspi->State == HAL_SPI_STATE_RESET) - 80015b6: 687b ldr r3, [r7, #4] - 80015b8: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 80015bc: b2db uxtb r3, r3 - 80015be: 2b00 cmp r3, #0 - 80015c0: d106 bne.n 80015d0 + 800166e: 687b ldr r3, [r7, #4] + 8001670: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001674: b2db uxtb r3, r3 + 8001676: 2b00 cmp r3, #0 + 8001678: d106 bne.n 8001688 { /* Allocate lock resource and initialize it */ hspi->Lock = HAL_UNLOCKED; - 80015c2: 687b ldr r3, [r7, #4] - 80015c4: 2200 movs r2, #0 - 80015c6: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 800167a: 687b ldr r3, [r7, #4] + 800167c: 2200 movs r2, #0 + 800167e: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init the low level hardware : GPIO, CLOCK, NVIC... */ hspi->MspInitCallback(hspi); #else /* Init the low level hardware : GPIO, CLOCK, NVIC... */ HAL_SPI_MspInit(hspi); - 80015ca: 6878 ldr r0, [r7, #4] - 80015cc: f7fe ffd8 bl 8000580 + 8001682: 6878 ldr r0, [r7, #4] + 8001684: f7fe ff8a bl 800059c #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ } hspi->State = HAL_SPI_STATE_BUSY; - 80015d0: 687b ldr r3, [r7, #4] - 80015d2: 2202 movs r2, #2 - 80015d4: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001688: 687b ldr r3, [r7, #4] + 800168a: 2202 movs r2, #2 + 800168c: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Disable the selected SPI peripheral */ __HAL_SPI_DISABLE(hspi); - 80015d8: 687b ldr r3, [r7, #4] - 80015da: 681b ldr r3, [r3, #0] - 80015dc: 681a ldr r2, [r3, #0] - 80015de: 687b ldr r3, [r7, #4] - 80015e0: 681b ldr r3, [r3, #0] - 80015e2: f022 0240 bic.w r2, r2, #64 ; 0x40 - 80015e6: 601a str r2, [r3, #0] + 8001690: 687b ldr r3, [r7, #4] + 8001692: 681b ldr r3, [r3, #0] + 8001694: 681a ldr r2, [r3, #0] + 8001696: 687b ldr r3, [r7, #4] + 8001698: 681b ldr r3, [r3, #0] + 800169a: f022 0240 bic.w r2, r2, #64 ; 0x40 + 800169e: 601a str r2, [r3, #0] /*----------------------- SPIx CR1 & CR2 Configuration ---------------------*/ /* Configure : SPI Mode, Communication Mode, Data size, Clock polarity and phase, NSS management, Communication speed, First bit and CRC calculation state */ WRITE_REG(hspi->Instance->CR1, ((hspi->Init.Mode & (SPI_CR1_MSTR | SPI_CR1_SSI)) | - 80015e8: 687b ldr r3, [r7, #4] - 80015ea: 685b ldr r3, [r3, #4] - 80015ec: f403 7282 and.w r2, r3, #260 ; 0x104 - 80015f0: 687b ldr r3, [r7, #4] - 80015f2: 689b ldr r3, [r3, #8] - 80015f4: f403 4304 and.w r3, r3, #33792 ; 0x8400 - 80015f8: 431a orrs r2, r3 - 80015fa: 687b ldr r3, [r7, #4] - 80015fc: 68db ldr r3, [r3, #12] - 80015fe: f403 6300 and.w r3, r3, #2048 ; 0x800 - 8001602: 431a orrs r2, r3 - 8001604: 687b ldr r3, [r7, #4] - 8001606: 691b ldr r3, [r3, #16] - 8001608: f003 0302 and.w r3, r3, #2 - 800160c: 431a orrs r2, r3 - 800160e: 687b ldr r3, [r7, #4] - 8001610: 695b ldr r3, [r3, #20] - 8001612: f003 0301 and.w r3, r3, #1 - 8001616: 431a orrs r2, r3 - 8001618: 687b ldr r3, [r7, #4] - 800161a: 699b ldr r3, [r3, #24] - 800161c: f403 7300 and.w r3, r3, #512 ; 0x200 - 8001620: 431a orrs r2, r3 - 8001622: 687b ldr r3, [r7, #4] - 8001624: 69db ldr r3, [r3, #28] - 8001626: f003 0338 and.w r3, r3, #56 ; 0x38 - 800162a: 431a orrs r2, r3 - 800162c: 687b ldr r3, [r7, #4] - 800162e: 6a1b ldr r3, [r3, #32] - 8001630: f003 0380 and.w r3, r3, #128 ; 0x80 - 8001634: ea42 0103 orr.w r1, r2, r3 - 8001638: 687b ldr r3, [r7, #4] - 800163a: 6a9b ldr r3, [r3, #40] ; 0x28 - 800163c: f403 5200 and.w r2, r3, #8192 ; 0x2000 - 8001640: 687b ldr r3, [r7, #4] - 8001642: 681b ldr r3, [r3, #0] - 8001644: 430a orrs r2, r1 - 8001646: 601a str r2, [r3, #0] + 80016a0: 687b ldr r3, [r7, #4] + 80016a2: 685b ldr r3, [r3, #4] + 80016a4: f403 7282 and.w r2, r3, #260 ; 0x104 + 80016a8: 687b ldr r3, [r7, #4] + 80016aa: 689b ldr r3, [r3, #8] + 80016ac: f403 4304 and.w r3, r3, #33792 ; 0x8400 + 80016b0: 431a orrs r2, r3 + 80016b2: 687b ldr r3, [r7, #4] + 80016b4: 68db ldr r3, [r3, #12] + 80016b6: f403 6300 and.w r3, r3, #2048 ; 0x800 + 80016ba: 431a orrs r2, r3 + 80016bc: 687b ldr r3, [r7, #4] + 80016be: 691b ldr r3, [r3, #16] + 80016c0: f003 0302 and.w r3, r3, #2 + 80016c4: 431a orrs r2, r3 + 80016c6: 687b ldr r3, [r7, #4] + 80016c8: 695b ldr r3, [r3, #20] + 80016ca: f003 0301 and.w r3, r3, #1 + 80016ce: 431a orrs r2, r3 + 80016d0: 687b ldr r3, [r7, #4] + 80016d2: 699b ldr r3, [r3, #24] + 80016d4: f403 7300 and.w r3, r3, #512 ; 0x200 + 80016d8: 431a orrs r2, r3 + 80016da: 687b ldr r3, [r7, #4] + 80016dc: 69db ldr r3, [r3, #28] + 80016de: f003 0338 and.w r3, r3, #56 ; 0x38 + 80016e2: 431a orrs r2, r3 + 80016e4: 687b ldr r3, [r7, #4] + 80016e6: 6a1b ldr r3, [r3, #32] + 80016e8: f003 0380 and.w r3, r3, #128 ; 0x80 + 80016ec: ea42 0103 orr.w r1, r2, r3 + 80016f0: 687b ldr r3, [r7, #4] + 80016f2: 6a9b ldr r3, [r3, #40] ; 0x28 + 80016f4: f403 5200 and.w r2, r3, #8192 ; 0x2000 + 80016f8: 687b ldr r3, [r7, #4] + 80016fa: 681b ldr r3, [r3, #0] + 80016fc: 430a orrs r2, r1 + 80016fe: 601a str r2, [r3, #0] (hspi->Init.BaudRatePrescaler & SPI_CR1_BR_Msk) | (hspi->Init.FirstBit & SPI_CR1_LSBFIRST) | (hspi->Init.CRCCalculation & SPI_CR1_CRCEN))); /* Configure : NSS management */ WRITE_REG(hspi->Instance->CR2, ((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE)); - 8001648: 687b ldr r3, [r7, #4] - 800164a: 699b ldr r3, [r3, #24] - 800164c: 0c1a lsrs r2, r3, #16 - 800164e: 687b ldr r3, [r7, #4] - 8001650: 681b ldr r3, [r3, #0] - 8001652: f002 0204 and.w r2, r2, #4 - 8001656: 605a str r2, [r3, #4] + 8001700: 687b ldr r3, [r7, #4] + 8001702: 699b ldr r3, [r3, #24] + 8001704: 0c1a lsrs r2, r3, #16 + 8001706: 687b ldr r3, [r7, #4] + 8001708: 681b ldr r3, [r3, #0] + 800170a: f002 0204 and.w r2, r2, #4 + 800170e: 605a str r2, [r3, #4] } #endif /* USE_SPI_CRC */ #if defined(SPI_I2SCFGR_I2SMOD) /* Activate the SPI mode (Make sure that I2SMOD bit in I2SCFGR register is reset) */ CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); - 8001658: 687b ldr r3, [r7, #4] - 800165a: 681b ldr r3, [r3, #0] - 800165c: 69da ldr r2, [r3, #28] - 800165e: 687b ldr r3, [r7, #4] - 8001660: 681b ldr r3, [r3, #0] - 8001662: f422 6200 bic.w r2, r2, #2048 ; 0x800 - 8001666: 61da str r2, [r3, #28] + 8001710: 687b ldr r3, [r7, #4] + 8001712: 681b ldr r3, [r3, #0] + 8001714: 69da ldr r2, [r3, #28] + 8001716: 687b ldr r3, [r7, #4] + 8001718: 681b ldr r3, [r3, #0] + 800171a: f422 6200 bic.w r2, r2, #2048 ; 0x800 + 800171e: 61da str r2, [r3, #28] #endif /* SPI_I2SCFGR_I2SMOD */ hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 8001668: 687b ldr r3, [r7, #4] - 800166a: 2200 movs r2, #0 - 800166c: 655a str r2, [r3, #84] ; 0x54 + 8001720: 687b ldr r3, [r7, #4] + 8001722: 2200 movs r2, #0 + 8001724: 655a str r2, [r3, #84] ; 0x54 hspi->State = HAL_SPI_STATE_READY; - 800166e: 687b ldr r3, [r7, #4] - 8001670: 2201 movs r2, #1 - 8001672: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001726: 687b ldr r3, [r7, #4] + 8001728: 2201 movs r2, #1 + 800172a: f883 2051 strb.w r2, [r3, #81] ; 0x51 return HAL_OK; - 8001676: 2300 movs r3, #0 + 800172e: 2300 movs r3, #0 } - 8001678: 4618 mov r0, r3 - 800167a: 3708 adds r7, #8 - 800167c: 46bd mov sp, r7 - 800167e: bd80 pop {r7, pc} + 8001730: 4618 mov r0, r3 + 8001732: 3708 adds r7, #8 + 8001734: 46bd mov sp, r7 + 8001736: bd80 pop {r7, pc} -08001680 : +08001738 : * @param Size amount of data to be sent * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) { - 8001680: b580 push {r7, lr} - 8001682: b088 sub sp, #32 - 8001684: af00 add r7, sp, #0 - 8001686: 60f8 str r0, [r7, #12] - 8001688: 60b9 str r1, [r7, #8] - 800168a: 603b str r3, [r7, #0] - 800168c: 4613 mov r3, r2 - 800168e: 80fb strh r3, [r7, #6] + 8001738: b580 push {r7, lr} + 800173a: b088 sub sp, #32 + 800173c: af00 add r7, sp, #0 + 800173e: 60f8 str r0, [r7, #12] + 8001740: 60b9 str r1, [r7, #8] + 8001742: 603b str r3, [r7, #0] + 8001744: 4613 mov r3, r2 + 8001746: 80fb strh r3, [r7, #6] uint32_t tickstart; HAL_StatusTypeDef errorcode = HAL_OK; - 8001690: 2300 movs r3, #0 - 8001692: 77fb strb r3, [r7, #31] + 8001748: 2300 movs r3, #0 + 800174a: 77fb strb r3, [r7, #31] /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); /* Process Locked */ __HAL_LOCK(hspi); - 8001694: 68fb ldr r3, [r7, #12] - 8001696: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 - 800169a: 2b01 cmp r3, #1 - 800169c: d101 bne.n 80016a2 - 800169e: 2302 movs r3, #2 - 80016a0: e126 b.n 80018f0 - 80016a2: 68fb ldr r3, [r7, #12] - 80016a4: 2201 movs r2, #1 - 80016a6: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 800174c: 68fb ldr r3, [r7, #12] + 800174e: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 + 8001752: 2b01 cmp r3, #1 + 8001754: d101 bne.n 800175a + 8001756: 2302 movs r3, #2 + 8001758: e126 b.n 80019a8 + 800175a: 68fb ldr r3, [r7, #12] + 800175c: 2201 movs r2, #1 + 800175e: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - 80016aa: f7ff f8bf bl 800082c - 80016ae: 61b8 str r0, [r7, #24] + 8001762: f7ff f8a7 bl 80008b4 + 8001766: 61b8 str r0, [r7, #24] initial_TxXferCount = Size; - 80016b0: 88fb ldrh r3, [r7, #6] - 80016b2: 82fb strh r3, [r7, #22] + 8001768: 88fb ldrh r3, [r7, #6] + 800176a: 82fb strh r3, [r7, #22] if (hspi->State != HAL_SPI_STATE_READY) - 80016b4: 68fb ldr r3, [r7, #12] - 80016b6: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 80016ba: b2db uxtb r3, r3 - 80016bc: 2b01 cmp r3, #1 - 80016be: d002 beq.n 80016c6 + 800176c: 68fb ldr r3, [r7, #12] + 800176e: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001772: b2db uxtb r3, r3 + 8001774: 2b01 cmp r3, #1 + 8001776: d002 beq.n 800177e { errorcode = HAL_BUSY; - 80016c0: 2302 movs r3, #2 - 80016c2: 77fb strb r3, [r7, #31] + 8001778: 2302 movs r3, #2 + 800177a: 77fb strb r3, [r7, #31] goto error; - 80016c4: e10b b.n 80018de + 800177c: e10b b.n 8001996 } if ((pData == NULL) || (Size == 0U)) - 80016c6: 68bb ldr r3, [r7, #8] - 80016c8: 2b00 cmp r3, #0 - 80016ca: d002 beq.n 80016d2 - 80016cc: 88fb ldrh r3, [r7, #6] - 80016ce: 2b00 cmp r3, #0 - 80016d0: d102 bne.n 80016d8 + 800177e: 68bb ldr r3, [r7, #8] + 8001780: 2b00 cmp r3, #0 + 8001782: d002 beq.n 800178a + 8001784: 88fb ldrh r3, [r7, #6] + 8001786: 2b00 cmp r3, #0 + 8001788: d102 bne.n 8001790 { errorcode = HAL_ERROR; - 80016d2: 2301 movs r3, #1 - 80016d4: 77fb strb r3, [r7, #31] + 800178a: 2301 movs r3, #1 + 800178c: 77fb strb r3, [r7, #31] goto error; - 80016d6: e102 b.n 80018de + 800178e: e102 b.n 8001996 } /* Set the transaction information */ hspi->State = HAL_SPI_STATE_BUSY_TX; - 80016d8: 68fb ldr r3, [r7, #12] - 80016da: 2203 movs r2, #3 - 80016dc: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001790: 68fb ldr r3, [r7, #12] + 8001792: 2203 movs r2, #3 + 8001794: f883 2051 strb.w r2, [r3, #81] ; 0x51 hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 80016e0: 68fb ldr r3, [r7, #12] - 80016e2: 2200 movs r2, #0 - 80016e4: 655a str r2, [r3, #84] ; 0x54 + 8001798: 68fb ldr r3, [r7, #12] + 800179a: 2200 movs r2, #0 + 800179c: 655a str r2, [r3, #84] ; 0x54 hspi->pTxBuffPtr = (uint8_t *)pData; - 80016e6: 68fb ldr r3, [r7, #12] - 80016e8: 68ba ldr r2, [r7, #8] - 80016ea: 631a str r2, [r3, #48] ; 0x30 + 800179e: 68fb ldr r3, [r7, #12] + 80017a0: 68ba ldr r2, [r7, #8] + 80017a2: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferSize = Size; - 80016ec: 68fb ldr r3, [r7, #12] - 80016ee: 88fa ldrh r2, [r7, #6] - 80016f0: 869a strh r2, [r3, #52] ; 0x34 + 80017a4: 68fb ldr r3, [r7, #12] + 80017a6: 88fa ldrh r2, [r7, #6] + 80017a8: 869a strh r2, [r3, #52] ; 0x34 hspi->TxXferCount = Size; - 80016f2: 68fb ldr r3, [r7, #12] - 80016f4: 88fa ldrh r2, [r7, #6] - 80016f6: 86da strh r2, [r3, #54] ; 0x36 + 80017aa: 68fb ldr r3, [r7, #12] + 80017ac: 88fa ldrh r2, [r7, #6] + 80017ae: 86da strh r2, [r3, #54] ; 0x36 /*Init field not used in handle to zero */ hspi->pRxBuffPtr = (uint8_t *)NULL; - 80016f8: 68fb ldr r3, [r7, #12] - 80016fa: 2200 movs r2, #0 - 80016fc: 639a str r2, [r3, #56] ; 0x38 + 80017b0: 68fb ldr r3, [r7, #12] + 80017b2: 2200 movs r2, #0 + 80017b4: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferSize = 0U; - 80016fe: 68fb ldr r3, [r7, #12] - 8001700: 2200 movs r2, #0 - 8001702: 879a strh r2, [r3, #60] ; 0x3c + 80017b6: 68fb ldr r3, [r7, #12] + 80017b8: 2200 movs r2, #0 + 80017ba: 879a strh r2, [r3, #60] ; 0x3c hspi->RxXferCount = 0U; - 8001704: 68fb ldr r3, [r7, #12] - 8001706: 2200 movs r2, #0 - 8001708: 87da strh r2, [r3, #62] ; 0x3e + 80017bc: 68fb ldr r3, [r7, #12] + 80017be: 2200 movs r2, #0 + 80017c0: 87da strh r2, [r3, #62] ; 0x3e hspi->TxISR = NULL; - 800170a: 68fb ldr r3, [r7, #12] - 800170c: 2200 movs r2, #0 - 800170e: 645a str r2, [r3, #68] ; 0x44 + 80017c2: 68fb ldr r3, [r7, #12] + 80017c4: 2200 movs r2, #0 + 80017c6: 645a str r2, [r3, #68] ; 0x44 hspi->RxISR = NULL; - 8001710: 68fb ldr r3, [r7, #12] - 8001712: 2200 movs r2, #0 - 8001714: 641a str r2, [r3, #64] ; 0x40 + 80017c8: 68fb ldr r3, [r7, #12] + 80017ca: 2200 movs r2, #0 + 80017cc: 641a str r2, [r3, #64] ; 0x40 /* Configure communication direction : 1Line */ if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - 8001716: 68fb ldr r3, [r7, #12] - 8001718: 689b ldr r3, [r3, #8] - 800171a: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 800171e: d10f bne.n 8001740 + 80017ce: 68fb ldr r3, [r7, #12] + 80017d0: 689b ldr r3, [r3, #8] + 80017d2: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 80017d6: d10f bne.n 80017f8 { /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ __HAL_SPI_DISABLE(hspi); - 8001720: 68fb ldr r3, [r7, #12] - 8001722: 681b ldr r3, [r3, #0] - 8001724: 681a ldr r2, [r3, #0] - 8001726: 68fb ldr r3, [r7, #12] - 8001728: 681b ldr r3, [r3, #0] - 800172a: f022 0240 bic.w r2, r2, #64 ; 0x40 - 800172e: 601a str r2, [r3, #0] + 80017d8: 68fb ldr r3, [r7, #12] + 80017da: 681b ldr r3, [r3, #0] + 80017dc: 681a ldr r2, [r3, #0] + 80017de: 68fb ldr r3, [r7, #12] + 80017e0: 681b ldr r3, [r3, #0] + 80017e2: f022 0240 bic.w r2, r2, #64 ; 0x40 + 80017e6: 601a str r2, [r3, #0] SPI_1LINE_TX(hspi); - 8001730: 68fb ldr r3, [r7, #12] - 8001732: 681b ldr r3, [r3, #0] - 8001734: 681a ldr r2, [r3, #0] - 8001736: 68fb ldr r3, [r7, #12] - 8001738: 681b ldr r3, [r3, #0] - 800173a: f442 4280 orr.w r2, r2, #16384 ; 0x4000 - 800173e: 601a str r2, [r3, #0] + 80017e8: 68fb ldr r3, [r7, #12] + 80017ea: 681b ldr r3, [r3, #0] + 80017ec: 681a ldr r2, [r3, #0] + 80017ee: 68fb ldr r3, [r7, #12] + 80017f0: 681b ldr r3, [r3, #0] + 80017f2: f442 4280 orr.w r2, r2, #16384 ; 0x4000 + 80017f6: 601a str r2, [r3, #0] SPI_RESET_CRC(hspi); } #endif /* USE_SPI_CRC */ /* Check if the SPI is already enabled */ if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - 8001740: 68fb ldr r3, [r7, #12] - 8001742: 681b ldr r3, [r3, #0] - 8001744: 681b ldr r3, [r3, #0] - 8001746: f003 0340 and.w r3, r3, #64 ; 0x40 - 800174a: 2b40 cmp r3, #64 ; 0x40 - 800174c: d007 beq.n 800175e + 80017f8: 68fb ldr r3, [r7, #12] + 80017fa: 681b ldr r3, [r3, #0] + 80017fc: 681b ldr r3, [r3, #0] + 80017fe: f003 0340 and.w r3, r3, #64 ; 0x40 + 8001802: 2b40 cmp r3, #64 ; 0x40 + 8001804: d007 beq.n 8001816 { /* Enable SPI peripheral */ __HAL_SPI_ENABLE(hspi); - 800174e: 68fb ldr r3, [r7, #12] - 8001750: 681b ldr r3, [r3, #0] - 8001752: 681a ldr r2, [r3, #0] - 8001754: 68fb ldr r3, [r7, #12] - 8001756: 681b ldr r3, [r3, #0] - 8001758: f042 0240 orr.w r2, r2, #64 ; 0x40 - 800175c: 601a str r2, [r3, #0] + 8001806: 68fb ldr r3, [r7, #12] + 8001808: 681b ldr r3, [r3, #0] + 800180a: 681a ldr r2, [r3, #0] + 800180c: 68fb ldr r3, [r7, #12] + 800180e: 681b ldr r3, [r3, #0] + 8001810: f042 0240 orr.w r2, r2, #64 ; 0x40 + 8001814: 601a str r2, [r3, #0] } /* Transmit data in 16 Bit mode */ if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) - 800175e: 68fb ldr r3, [r7, #12] - 8001760: 68db ldr r3, [r3, #12] - 8001762: f5b3 6f00 cmp.w r3, #2048 ; 0x800 - 8001766: d14b bne.n 8001800 + 8001816: 68fb ldr r3, [r7, #12] + 8001818: 68db ldr r3, [r3, #12] + 800181a: f5b3 6f00 cmp.w r3, #2048 ; 0x800 + 800181e: d14b bne.n 80018b8 { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 8001768: 68fb ldr r3, [r7, #12] - 800176a: 685b ldr r3, [r3, #4] - 800176c: 2b00 cmp r3, #0 - 800176e: d002 beq.n 8001776 - 8001770: 8afb ldrh r3, [r7, #22] - 8001772: 2b01 cmp r3, #1 - 8001774: d13e bne.n 80017f4 + 8001820: 68fb ldr r3, [r7, #12] + 8001822: 685b ldr r3, [r3, #4] + 8001824: 2b00 cmp r3, #0 + 8001826: d002 beq.n 800182e + 8001828: 8afb ldrh r3, [r7, #22] + 800182a: 2b01 cmp r3, #1 + 800182c: d13e bne.n 80018ac { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 8001776: 68fb ldr r3, [r7, #12] - 8001778: 6b1b ldr r3, [r3, #48] ; 0x30 - 800177a: 881a ldrh r2, [r3, #0] - 800177c: 68fb ldr r3, [r7, #12] - 800177e: 681b ldr r3, [r3, #0] - 8001780: 60da str r2, [r3, #12] + 800182e: 68fb ldr r3, [r7, #12] + 8001830: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001832: 881a ldrh r2, [r3, #0] + 8001834: 68fb ldr r3, [r7, #12] + 8001836: 681b ldr r3, [r3, #0] + 8001838: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 8001782: 68fb ldr r3, [r7, #12] - 8001784: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001786: 1c9a adds r2, r3, #2 - 8001788: 68fb ldr r3, [r7, #12] - 800178a: 631a str r2, [r3, #48] ; 0x30 + 800183a: 68fb ldr r3, [r7, #12] + 800183c: 6b1b ldr r3, [r3, #48] ; 0x30 + 800183e: 1c9a adds r2, r3, #2 + 8001840: 68fb ldr r3, [r7, #12] + 8001842: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 800178c: 68fb ldr r3, [r7, #12] - 800178e: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001790: b29b uxth r3, r3 - 8001792: 3b01 subs r3, #1 - 8001794: b29a uxth r2, r3 - 8001796: 68fb ldr r3, [r7, #12] - 8001798: 86da strh r2, [r3, #54] ; 0x36 + 8001844: 68fb ldr r3, [r7, #12] + 8001846: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001848: b29b uxth r3, r3 + 800184a: 3b01 subs r3, #1 + 800184c: b29a uxth r2, r3 + 800184e: 68fb ldr r3, [r7, #12] + 8001850: 86da strh r2, [r3, #54] ; 0x36 } /* Transmit data in 16 Bit mode */ while (hspi->TxXferCount > 0U) - 800179a: e02b b.n 80017f4 + 8001852: e02b b.n 80018ac { /* Wait until TXE flag is set to send data */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) - 800179c: 68fb ldr r3, [r7, #12] - 800179e: 681b ldr r3, [r3, #0] - 80017a0: 689b ldr r3, [r3, #8] - 80017a2: f003 0302 and.w r3, r3, #2 - 80017a6: 2b02 cmp r3, #2 - 80017a8: d112 bne.n 80017d0 + 8001854: 68fb ldr r3, [r7, #12] + 8001856: 681b ldr r3, [r3, #0] + 8001858: 689b ldr r3, [r3, #8] + 800185a: f003 0302 and.w r3, r3, #2 + 800185e: 2b02 cmp r3, #2 + 8001860: d112 bne.n 8001888 { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 80017aa: 68fb ldr r3, [r7, #12] - 80017ac: 6b1b ldr r3, [r3, #48] ; 0x30 - 80017ae: 881a ldrh r2, [r3, #0] - 80017b0: 68fb ldr r3, [r7, #12] - 80017b2: 681b ldr r3, [r3, #0] - 80017b4: 60da str r2, [r3, #12] + 8001862: 68fb ldr r3, [r7, #12] + 8001864: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001866: 881a ldrh r2, [r3, #0] + 8001868: 68fb ldr r3, [r7, #12] + 800186a: 681b ldr r3, [r3, #0] + 800186c: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 80017b6: 68fb ldr r3, [r7, #12] - 80017b8: 6b1b ldr r3, [r3, #48] ; 0x30 - 80017ba: 1c9a adds r2, r3, #2 - 80017bc: 68fb ldr r3, [r7, #12] - 80017be: 631a str r2, [r3, #48] ; 0x30 + 800186e: 68fb ldr r3, [r7, #12] + 8001870: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001872: 1c9a adds r2, r3, #2 + 8001874: 68fb ldr r3, [r7, #12] + 8001876: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 80017c0: 68fb ldr r3, [r7, #12] - 80017c2: 8edb ldrh r3, [r3, #54] ; 0x36 - 80017c4: b29b uxth r3, r3 - 80017c6: 3b01 subs r3, #1 - 80017c8: b29a uxth r2, r3 - 80017ca: 68fb ldr r3, [r7, #12] - 80017cc: 86da strh r2, [r3, #54] ; 0x36 - 80017ce: e011 b.n 80017f4 + 8001878: 68fb ldr r3, [r7, #12] + 800187a: 8edb ldrh r3, [r3, #54] ; 0x36 + 800187c: b29b uxth r3, r3 + 800187e: 3b01 subs r3, #1 + 8001880: b29a uxth r2, r3 + 8001882: 68fb ldr r3, [r7, #12] + 8001884: 86da strh r2, [r3, #54] ; 0x36 + 8001886: e011 b.n 80018ac } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 80017d0: f7ff f82c bl 800082c - 80017d4: 4602 mov r2, r0 - 80017d6: 69bb ldr r3, [r7, #24] - 80017d8: 1ad3 subs r3, r2, r3 - 80017da: 683a ldr r2, [r7, #0] - 80017dc: 429a cmp r2, r3 - 80017de: d803 bhi.n 80017e8 - 80017e0: 683b ldr r3, [r7, #0] - 80017e2: f1b3 3fff cmp.w r3, #4294967295 - 80017e6: d102 bne.n 80017ee - 80017e8: 683b ldr r3, [r7, #0] - 80017ea: 2b00 cmp r3, #0 - 80017ec: d102 bne.n 80017f4 + 8001888: f7ff f814 bl 80008b4 + 800188c: 4602 mov r2, r0 + 800188e: 69bb ldr r3, [r7, #24] + 8001890: 1ad3 subs r3, r2, r3 + 8001892: 683a ldr r2, [r7, #0] + 8001894: 429a cmp r2, r3 + 8001896: d803 bhi.n 80018a0 + 8001898: 683b ldr r3, [r7, #0] + 800189a: f1b3 3fff cmp.w r3, #4294967295 + 800189e: d102 bne.n 80018a6 + 80018a0: 683b ldr r3, [r7, #0] + 80018a2: 2b00 cmp r3, #0 + 80018a4: d102 bne.n 80018ac { errorcode = HAL_TIMEOUT; - 80017ee: 2303 movs r3, #3 - 80017f0: 77fb strb r3, [r7, #31] + 80018a6: 2303 movs r3, #3 + 80018a8: 77fb strb r3, [r7, #31] goto error; - 80017f2: e074 b.n 80018de + 80018aa: e074 b.n 8001996 while (hspi->TxXferCount > 0U) - 80017f4: 68fb ldr r3, [r7, #12] - 80017f6: 8edb ldrh r3, [r3, #54] ; 0x36 - 80017f8: b29b uxth r3, r3 - 80017fa: 2b00 cmp r3, #0 - 80017fc: d1ce bne.n 800179c - 80017fe: e04c b.n 800189a + 80018ac: 68fb ldr r3, [r7, #12] + 80018ae: 8edb ldrh r3, [r3, #54] ; 0x36 + 80018b0: b29b uxth r3, r3 + 80018b2: 2b00 cmp r3, #0 + 80018b4: d1ce bne.n 8001854 + 80018b6: e04c b.n 8001952 } } /* Transmit data in 8 Bit mode */ else { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 8001800: 68fb ldr r3, [r7, #12] - 8001802: 685b ldr r3, [r3, #4] - 8001804: 2b00 cmp r3, #0 - 8001806: d002 beq.n 800180e - 8001808: 8afb ldrh r3, [r7, #22] - 800180a: 2b01 cmp r3, #1 - 800180c: d140 bne.n 8001890 + 80018b8: 68fb ldr r3, [r7, #12] + 80018ba: 685b ldr r3, [r3, #4] + 80018bc: 2b00 cmp r3, #0 + 80018be: d002 beq.n 80018c6 + 80018c0: 8afb ldrh r3, [r7, #22] + 80018c2: 2b01 cmp r3, #1 + 80018c4: d140 bne.n 8001948 { *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - 800180e: 68fb ldr r3, [r7, #12] - 8001810: 6b1a ldr r2, [r3, #48] ; 0x30 - 8001812: 68fb ldr r3, [r7, #12] - 8001814: 681b ldr r3, [r3, #0] - 8001816: 330c adds r3, #12 - 8001818: 7812 ldrb r2, [r2, #0] - 800181a: 701a strb r2, [r3, #0] + 80018c6: 68fb ldr r3, [r7, #12] + 80018c8: 6b1a ldr r2, [r3, #48] ; 0x30 + 80018ca: 68fb ldr r3, [r7, #12] + 80018cc: 681b ldr r3, [r3, #0] + 80018ce: 330c adds r3, #12 + 80018d0: 7812 ldrb r2, [r2, #0] + 80018d2: 701a strb r2, [r3, #0] hspi->pTxBuffPtr += sizeof(uint8_t); - 800181c: 68fb ldr r3, [r7, #12] - 800181e: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001820: 1c5a adds r2, r3, #1 - 8001822: 68fb ldr r3, [r7, #12] - 8001824: 631a str r2, [r3, #48] ; 0x30 + 80018d4: 68fb ldr r3, [r7, #12] + 80018d6: 6b1b ldr r3, [r3, #48] ; 0x30 + 80018d8: 1c5a adds r2, r3, #1 + 80018da: 68fb ldr r3, [r7, #12] + 80018dc: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001826: 68fb ldr r3, [r7, #12] - 8001828: 8edb ldrh r3, [r3, #54] ; 0x36 - 800182a: b29b uxth r3, r3 - 800182c: 3b01 subs r3, #1 - 800182e: b29a uxth r2, r3 - 8001830: 68fb ldr r3, [r7, #12] - 8001832: 86da strh r2, [r3, #54] ; 0x36 + 80018de: 68fb ldr r3, [r7, #12] + 80018e0: 8edb ldrh r3, [r3, #54] ; 0x36 + 80018e2: b29b uxth r3, r3 + 80018e4: 3b01 subs r3, #1 + 80018e6: b29a uxth r2, r3 + 80018e8: 68fb ldr r3, [r7, #12] + 80018ea: 86da strh r2, [r3, #54] ; 0x36 } while (hspi->TxXferCount > 0U) - 8001834: e02c b.n 8001890 + 80018ec: e02c b.n 8001948 { /* Wait until TXE flag is set to send data */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) - 8001836: 68fb ldr r3, [r7, #12] - 8001838: 681b ldr r3, [r3, #0] - 800183a: 689b ldr r3, [r3, #8] - 800183c: f003 0302 and.w r3, r3, #2 - 8001840: 2b02 cmp r3, #2 - 8001842: d113 bne.n 800186c + 80018ee: 68fb ldr r3, [r7, #12] + 80018f0: 681b ldr r3, [r3, #0] + 80018f2: 689b ldr r3, [r3, #8] + 80018f4: f003 0302 and.w r3, r3, #2 + 80018f8: 2b02 cmp r3, #2 + 80018fa: d113 bne.n 8001924 { *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - 8001844: 68fb ldr r3, [r7, #12] - 8001846: 6b1a ldr r2, [r3, #48] ; 0x30 - 8001848: 68fb ldr r3, [r7, #12] - 800184a: 681b ldr r3, [r3, #0] - 800184c: 330c adds r3, #12 - 800184e: 7812 ldrb r2, [r2, #0] - 8001850: 701a strb r2, [r3, #0] + 80018fc: 68fb ldr r3, [r7, #12] + 80018fe: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001900: 68fb ldr r3, [r7, #12] + 8001902: 681b ldr r3, [r3, #0] + 8001904: 330c adds r3, #12 + 8001906: 7812 ldrb r2, [r2, #0] + 8001908: 701a strb r2, [r3, #0] hspi->pTxBuffPtr += sizeof(uint8_t); - 8001852: 68fb ldr r3, [r7, #12] - 8001854: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001856: 1c5a adds r2, r3, #1 - 8001858: 68fb ldr r3, [r7, #12] - 800185a: 631a str r2, [r3, #48] ; 0x30 + 800190a: 68fb ldr r3, [r7, #12] + 800190c: 6b1b ldr r3, [r3, #48] ; 0x30 + 800190e: 1c5a adds r2, r3, #1 + 8001910: 68fb ldr r3, [r7, #12] + 8001912: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 800185c: 68fb ldr r3, [r7, #12] - 800185e: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001860: b29b uxth r3, r3 - 8001862: 3b01 subs r3, #1 - 8001864: b29a uxth r2, r3 - 8001866: 68fb ldr r3, [r7, #12] - 8001868: 86da strh r2, [r3, #54] ; 0x36 - 800186a: e011 b.n 8001890 + 8001914: 68fb ldr r3, [r7, #12] + 8001916: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001918: b29b uxth r3, r3 + 800191a: 3b01 subs r3, #1 + 800191c: b29a uxth r2, r3 + 800191e: 68fb ldr r3, [r7, #12] + 8001920: 86da strh r2, [r3, #54] ; 0x36 + 8001922: e011 b.n 8001948 } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 800186c: f7fe ffde bl 800082c - 8001870: 4602 mov r2, r0 - 8001872: 69bb ldr r3, [r7, #24] - 8001874: 1ad3 subs r3, r2, r3 - 8001876: 683a ldr r2, [r7, #0] - 8001878: 429a cmp r2, r3 - 800187a: d803 bhi.n 8001884 - 800187c: 683b ldr r3, [r7, #0] - 800187e: f1b3 3fff cmp.w r3, #4294967295 - 8001882: d102 bne.n 800188a - 8001884: 683b ldr r3, [r7, #0] - 8001886: 2b00 cmp r3, #0 - 8001888: d102 bne.n 8001890 + 8001924: f7fe ffc6 bl 80008b4 + 8001928: 4602 mov r2, r0 + 800192a: 69bb ldr r3, [r7, #24] + 800192c: 1ad3 subs r3, r2, r3 + 800192e: 683a ldr r2, [r7, #0] + 8001930: 429a cmp r2, r3 + 8001932: d803 bhi.n 800193c + 8001934: 683b ldr r3, [r7, #0] + 8001936: f1b3 3fff cmp.w r3, #4294967295 + 800193a: d102 bne.n 8001942 + 800193c: 683b ldr r3, [r7, #0] + 800193e: 2b00 cmp r3, #0 + 8001940: d102 bne.n 8001948 { errorcode = HAL_TIMEOUT; - 800188a: 2303 movs r3, #3 - 800188c: 77fb strb r3, [r7, #31] + 8001942: 2303 movs r3, #3 + 8001944: 77fb strb r3, [r7, #31] goto error; - 800188e: e026 b.n 80018de + 8001946: e026 b.n 8001996 while (hspi->TxXferCount > 0U) - 8001890: 68fb ldr r3, [r7, #12] - 8001892: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001894: b29b uxth r3, r3 - 8001896: 2b00 cmp r3, #0 - 8001898: d1cd bne.n 8001836 + 8001948: 68fb ldr r3, [r7, #12] + 800194a: 8edb ldrh r3, [r3, #54] ; 0x36 + 800194c: b29b uxth r3, r3 + 800194e: 2b00 cmp r3, #0 + 8001950: d1cd bne.n 80018ee SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); } #endif /* USE_SPI_CRC */ /* Check the end of the transaction */ if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) - 800189a: 69ba ldr r2, [r7, #24] - 800189c: 6839 ldr r1, [r7, #0] - 800189e: 68f8 ldr r0, [r7, #12] - 80018a0: f000 fbc4 bl 800202c - 80018a4: 4603 mov r3, r0 - 80018a6: 2b00 cmp r3, #0 - 80018a8: d002 beq.n 80018b0 + 8001952: 69ba ldr r2, [r7, #24] + 8001954: 6839 ldr r1, [r7, #0] + 8001956: 68f8 ldr r0, [r7, #12] + 8001958: f000 fbc4 bl 80020e4 + 800195c: 4603 mov r3, r0 + 800195e: 2b00 cmp r3, #0 + 8001960: d002 beq.n 8001968 { hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - 80018aa: 68fb ldr r3, [r7, #12] - 80018ac: 2220 movs r2, #32 - 80018ae: 655a str r2, [r3, #84] ; 0x54 + 8001962: 68fb ldr r3, [r7, #12] + 8001964: 2220 movs r2, #32 + 8001966: 655a str r2, [r3, #84] ; 0x54 } /* Clear overrun flag in 2 Lines communication mode because received is not read */ if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - 80018b0: 68fb ldr r3, [r7, #12] - 80018b2: 689b ldr r3, [r3, #8] - 80018b4: 2b00 cmp r3, #0 - 80018b6: d10a bne.n 80018ce + 8001968: 68fb ldr r3, [r7, #12] + 800196a: 689b ldr r3, [r3, #8] + 800196c: 2b00 cmp r3, #0 + 800196e: d10a bne.n 8001986 { __HAL_SPI_CLEAR_OVRFLAG(hspi); - 80018b8: 2300 movs r3, #0 - 80018ba: 613b str r3, [r7, #16] - 80018bc: 68fb ldr r3, [r7, #12] - 80018be: 681b ldr r3, [r3, #0] - 80018c0: 68db ldr r3, [r3, #12] - 80018c2: 613b str r3, [r7, #16] - 80018c4: 68fb ldr r3, [r7, #12] - 80018c6: 681b ldr r3, [r3, #0] - 80018c8: 689b ldr r3, [r3, #8] - 80018ca: 613b str r3, [r7, #16] - 80018cc: 693b ldr r3, [r7, #16] + 8001970: 2300 movs r3, #0 + 8001972: 613b str r3, [r7, #16] + 8001974: 68fb ldr r3, [r7, #12] + 8001976: 681b ldr r3, [r3, #0] + 8001978: 68db ldr r3, [r3, #12] + 800197a: 613b str r3, [r7, #16] + 800197c: 68fb ldr r3, [r7, #12] + 800197e: 681b ldr r3, [r3, #0] + 8001980: 689b ldr r3, [r3, #8] + 8001982: 613b str r3, [r7, #16] + 8001984: 693b ldr r3, [r7, #16] } if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - 80018ce: 68fb ldr r3, [r7, #12] - 80018d0: 6d5b ldr r3, [r3, #84] ; 0x54 - 80018d2: 2b00 cmp r3, #0 - 80018d4: d002 beq.n 80018dc + 8001986: 68fb ldr r3, [r7, #12] + 8001988: 6d5b ldr r3, [r3, #84] ; 0x54 + 800198a: 2b00 cmp r3, #0 + 800198c: d002 beq.n 8001994 { errorcode = HAL_ERROR; - 80018d6: 2301 movs r3, #1 - 80018d8: 77fb strb r3, [r7, #31] - 80018da: e000 b.n 80018de + 800198e: 2301 movs r3, #1 + 8001990: 77fb strb r3, [r7, #31] + 8001992: e000 b.n 8001996 } error: - 80018dc: bf00 nop + 8001994: bf00 nop hspi->State = HAL_SPI_STATE_READY; - 80018de: 68fb ldr r3, [r7, #12] - 80018e0: 2201 movs r2, #1 - 80018e2: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001996: 68fb ldr r3, [r7, #12] + 8001998: 2201 movs r2, #1 + 800199a: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Process Unlocked */ __HAL_UNLOCK(hspi); - 80018e6: 68fb ldr r3, [r7, #12] - 80018e8: 2200 movs r2, #0 - 80018ea: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 800199e: 68fb ldr r3, [r7, #12] + 80019a0: 2200 movs r2, #0 + 80019a2: f883 2050 strb.w r2, [r3, #80] ; 0x50 return errorcode; - 80018ee: 7ffb ldrb r3, [r7, #31] + 80019a6: 7ffb ldrb r3, [r7, #31] } - 80018f0: 4618 mov r0, r3 - 80018f2: 3720 adds r7, #32 - 80018f4: 46bd mov sp, r7 - 80018f6: bd80 pop {r7, pc} + 80019a8: 4618 mov r0, r3 + 80019aa: 3720 adds r7, #32 + 80019ac: 46bd mov sp, r7 + 80019ae: bd80 pop {r7, pc} -080018f8 : +080019b0 : * @param Size amount of data to be received * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) { - 80018f8: b580 push {r7, lr} - 80018fa: b088 sub sp, #32 - 80018fc: af02 add r7, sp, #8 - 80018fe: 60f8 str r0, [r7, #12] - 8001900: 60b9 str r1, [r7, #8] - 8001902: 603b str r3, [r7, #0] - 8001904: 4613 mov r3, r2 - 8001906: 80fb strh r3, [r7, #6] + 80019b0: b580 push {r7, lr} + 80019b2: b088 sub sp, #32 + 80019b4: af02 add r7, sp, #8 + 80019b6: 60f8 str r0, [r7, #12] + 80019b8: 60b9 str r1, [r7, #8] + 80019ba: 603b str r3, [r7, #0] + 80019bc: 4613 mov r3, r2 + 80019be: 80fb strh r3, [r7, #6] uint32_t tickstart; HAL_StatusTypeDef errorcode = HAL_OK; - 8001908: 2300 movs r3, #0 - 800190a: 75fb strb r3, [r7, #23] + 80019c0: 2300 movs r3, #0 + 80019c2: 75fb strb r3, [r7, #23] if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES)) - 800190c: 68fb ldr r3, [r7, #12] - 800190e: 685b ldr r3, [r3, #4] - 8001910: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001914: d112 bne.n 800193c - 8001916: 68fb ldr r3, [r7, #12] - 8001918: 689b ldr r3, [r3, #8] - 800191a: 2b00 cmp r3, #0 - 800191c: d10e bne.n 800193c + 80019c4: 68fb ldr r3, [r7, #12] + 80019c6: 685b ldr r3, [r3, #4] + 80019c8: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 80019cc: d112 bne.n 80019f4 + 80019ce: 68fb ldr r3, [r7, #12] + 80019d0: 689b ldr r3, [r3, #8] + 80019d2: 2b00 cmp r3, #0 + 80019d4: d10e bne.n 80019f4 { hspi->State = HAL_SPI_STATE_BUSY_RX; - 800191e: 68fb ldr r3, [r7, #12] - 8001920: 2204 movs r2, #4 - 8001922: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 80019d6: 68fb ldr r3, [r7, #12] + 80019d8: 2204 movs r2, #4 + 80019da: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ return HAL_SPI_TransmitReceive(hspi, pData, pData, Size, Timeout); - 8001926: 88fa ldrh r2, [r7, #6] - 8001928: 683b ldr r3, [r7, #0] - 800192a: 9300 str r3, [sp, #0] - 800192c: 4613 mov r3, r2 - 800192e: 68ba ldr r2, [r7, #8] - 8001930: 68b9 ldr r1, [r7, #8] - 8001932: 68f8 ldr r0, [r7, #12] - 8001934: f000 f8f1 bl 8001b1a - 8001938: 4603 mov r3, r0 - 800193a: e0ea b.n 8001b12 + 80019de: 88fa ldrh r2, [r7, #6] + 80019e0: 683b ldr r3, [r7, #0] + 80019e2: 9300 str r3, [sp, #0] + 80019e4: 4613 mov r3, r2 + 80019e6: 68ba ldr r2, [r7, #8] + 80019e8: 68b9 ldr r1, [r7, #8] + 80019ea: 68f8 ldr r0, [r7, #12] + 80019ec: f000 f8f1 bl 8001bd2 + 80019f0: 4603 mov r3, r0 + 80019f2: e0ea b.n 8001bca } /* Process Locked */ __HAL_LOCK(hspi); - 800193c: 68fb ldr r3, [r7, #12] - 800193e: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 - 8001942: 2b01 cmp r3, #1 - 8001944: d101 bne.n 800194a - 8001946: 2302 movs r3, #2 - 8001948: e0e3 b.n 8001b12 - 800194a: 68fb ldr r3, [r7, #12] - 800194c: 2201 movs r2, #1 - 800194e: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 80019f4: 68fb ldr r3, [r7, #12] + 80019f6: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 + 80019fa: 2b01 cmp r3, #1 + 80019fc: d101 bne.n 8001a02 + 80019fe: 2302 movs r3, #2 + 8001a00: e0e3 b.n 8001bca + 8001a02: 68fb ldr r3, [r7, #12] + 8001a04: 2201 movs r2, #1 + 8001a06: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - 8001952: f7fe ff6b bl 800082c - 8001956: 6138 str r0, [r7, #16] + 8001a0a: f7fe ff53 bl 80008b4 + 8001a0e: 6138 str r0, [r7, #16] if (hspi->State != HAL_SPI_STATE_READY) - 8001958: 68fb ldr r3, [r7, #12] - 800195a: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 800195e: b2db uxtb r3, r3 - 8001960: 2b01 cmp r3, #1 - 8001962: d002 beq.n 800196a + 8001a10: 68fb ldr r3, [r7, #12] + 8001a12: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001a16: b2db uxtb r3, r3 + 8001a18: 2b01 cmp r3, #1 + 8001a1a: d002 beq.n 8001a22 { errorcode = HAL_BUSY; - 8001964: 2302 movs r3, #2 - 8001966: 75fb strb r3, [r7, #23] + 8001a1c: 2302 movs r3, #2 + 8001a1e: 75fb strb r3, [r7, #23] goto error; - 8001968: e0ca b.n 8001b00 + 8001a20: e0ca b.n 8001bb8 } if ((pData == NULL) || (Size == 0U)) - 800196a: 68bb ldr r3, [r7, #8] - 800196c: 2b00 cmp r3, #0 - 800196e: d002 beq.n 8001976 - 8001970: 88fb ldrh r3, [r7, #6] - 8001972: 2b00 cmp r3, #0 - 8001974: d102 bne.n 800197c + 8001a22: 68bb ldr r3, [r7, #8] + 8001a24: 2b00 cmp r3, #0 + 8001a26: d002 beq.n 8001a2e + 8001a28: 88fb ldrh r3, [r7, #6] + 8001a2a: 2b00 cmp r3, #0 + 8001a2c: d102 bne.n 8001a34 { errorcode = HAL_ERROR; - 8001976: 2301 movs r3, #1 - 8001978: 75fb strb r3, [r7, #23] + 8001a2e: 2301 movs r3, #1 + 8001a30: 75fb strb r3, [r7, #23] goto error; - 800197a: e0c1 b.n 8001b00 + 8001a32: e0c1 b.n 8001bb8 } /* Set the transaction information */ hspi->State = HAL_SPI_STATE_BUSY_RX; - 800197c: 68fb ldr r3, [r7, #12] - 800197e: 2204 movs r2, #4 - 8001980: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001a34: 68fb ldr r3, [r7, #12] + 8001a36: 2204 movs r2, #4 + 8001a38: f883 2051 strb.w r2, [r3, #81] ; 0x51 hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 8001984: 68fb ldr r3, [r7, #12] - 8001986: 2200 movs r2, #0 - 8001988: 655a str r2, [r3, #84] ; 0x54 + 8001a3c: 68fb ldr r3, [r7, #12] + 8001a3e: 2200 movs r2, #0 + 8001a40: 655a str r2, [r3, #84] ; 0x54 hspi->pRxBuffPtr = (uint8_t *)pData; - 800198a: 68fb ldr r3, [r7, #12] - 800198c: 68ba ldr r2, [r7, #8] - 800198e: 639a str r2, [r3, #56] ; 0x38 + 8001a42: 68fb ldr r3, [r7, #12] + 8001a44: 68ba ldr r2, [r7, #8] + 8001a46: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferSize = Size; - 8001990: 68fb ldr r3, [r7, #12] - 8001992: 88fa ldrh r2, [r7, #6] - 8001994: 879a strh r2, [r3, #60] ; 0x3c + 8001a48: 68fb ldr r3, [r7, #12] + 8001a4a: 88fa ldrh r2, [r7, #6] + 8001a4c: 879a strh r2, [r3, #60] ; 0x3c hspi->RxXferCount = Size; - 8001996: 68fb ldr r3, [r7, #12] - 8001998: 88fa ldrh r2, [r7, #6] - 800199a: 87da strh r2, [r3, #62] ; 0x3e + 8001a4e: 68fb ldr r3, [r7, #12] + 8001a50: 88fa ldrh r2, [r7, #6] + 8001a52: 87da strh r2, [r3, #62] ; 0x3e /*Init field not used in handle to zero */ hspi->pTxBuffPtr = (uint8_t *)NULL; - 800199c: 68fb ldr r3, [r7, #12] - 800199e: 2200 movs r2, #0 - 80019a0: 631a str r2, [r3, #48] ; 0x30 + 8001a54: 68fb ldr r3, [r7, #12] + 8001a56: 2200 movs r2, #0 + 8001a58: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferSize = 0U; - 80019a2: 68fb ldr r3, [r7, #12] - 80019a4: 2200 movs r2, #0 - 80019a6: 869a strh r2, [r3, #52] ; 0x34 + 8001a5a: 68fb ldr r3, [r7, #12] + 8001a5c: 2200 movs r2, #0 + 8001a5e: 869a strh r2, [r3, #52] ; 0x34 hspi->TxXferCount = 0U; - 80019a8: 68fb ldr r3, [r7, #12] - 80019aa: 2200 movs r2, #0 - 80019ac: 86da strh r2, [r3, #54] ; 0x36 + 8001a60: 68fb ldr r3, [r7, #12] + 8001a62: 2200 movs r2, #0 + 8001a64: 86da strh r2, [r3, #54] ; 0x36 hspi->RxISR = NULL; - 80019ae: 68fb ldr r3, [r7, #12] - 80019b0: 2200 movs r2, #0 - 80019b2: 641a str r2, [r3, #64] ; 0x40 + 8001a66: 68fb ldr r3, [r7, #12] + 8001a68: 2200 movs r2, #0 + 8001a6a: 641a str r2, [r3, #64] ; 0x40 hspi->TxISR = NULL; - 80019b4: 68fb ldr r3, [r7, #12] - 80019b6: 2200 movs r2, #0 - 80019b8: 645a str r2, [r3, #68] ; 0x44 + 8001a6c: 68fb ldr r3, [r7, #12] + 8001a6e: 2200 movs r2, #0 + 8001a70: 645a str r2, [r3, #68] ; 0x44 hspi->RxXferCount--; } #endif /* USE_SPI_CRC */ /* Configure communication direction: 1Line */ if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - 80019ba: 68fb ldr r3, [r7, #12] - 80019bc: 689b ldr r3, [r3, #8] - 80019be: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 80019c2: d10f bne.n 80019e4 + 8001a72: 68fb ldr r3, [r7, #12] + 8001a74: 689b ldr r3, [r3, #8] + 8001a76: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 8001a7a: d10f bne.n 8001a9c { /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ __HAL_SPI_DISABLE(hspi); - 80019c4: 68fb ldr r3, [r7, #12] - 80019c6: 681b ldr r3, [r3, #0] - 80019c8: 681a ldr r2, [r3, #0] - 80019ca: 68fb ldr r3, [r7, #12] - 80019cc: 681b ldr r3, [r3, #0] - 80019ce: f022 0240 bic.w r2, r2, #64 ; 0x40 - 80019d2: 601a str r2, [r3, #0] + 8001a7c: 68fb ldr r3, [r7, #12] + 8001a7e: 681b ldr r3, [r3, #0] + 8001a80: 681a ldr r2, [r3, #0] + 8001a82: 68fb ldr r3, [r7, #12] + 8001a84: 681b ldr r3, [r3, #0] + 8001a86: f022 0240 bic.w r2, r2, #64 ; 0x40 + 8001a8a: 601a str r2, [r3, #0] SPI_1LINE_RX(hspi); - 80019d4: 68fb ldr r3, [r7, #12] - 80019d6: 681b ldr r3, [r3, #0] - 80019d8: 681a ldr r2, [r3, #0] - 80019da: 68fb ldr r3, [r7, #12] - 80019dc: 681b ldr r3, [r3, #0] - 80019de: f422 4280 bic.w r2, r2, #16384 ; 0x4000 - 80019e2: 601a str r2, [r3, #0] + 8001a8c: 68fb ldr r3, [r7, #12] + 8001a8e: 681b ldr r3, [r3, #0] + 8001a90: 681a ldr r2, [r3, #0] + 8001a92: 68fb ldr r3, [r7, #12] + 8001a94: 681b ldr r3, [r3, #0] + 8001a96: f422 4280 bic.w r2, r2, #16384 ; 0x4000 + 8001a9a: 601a str r2, [r3, #0] } /* Check if the SPI is already enabled */ if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - 80019e4: 68fb ldr r3, [r7, #12] - 80019e6: 681b ldr r3, [r3, #0] - 80019e8: 681b ldr r3, [r3, #0] - 80019ea: f003 0340 and.w r3, r3, #64 ; 0x40 - 80019ee: 2b40 cmp r3, #64 ; 0x40 - 80019f0: d007 beq.n 8001a02 + 8001a9c: 68fb ldr r3, [r7, #12] + 8001a9e: 681b ldr r3, [r3, #0] + 8001aa0: 681b ldr r3, [r3, #0] + 8001aa2: f003 0340 and.w r3, r3, #64 ; 0x40 + 8001aa6: 2b40 cmp r3, #64 ; 0x40 + 8001aa8: d007 beq.n 8001aba { /* Enable SPI peripheral */ __HAL_SPI_ENABLE(hspi); - 80019f2: 68fb ldr r3, [r7, #12] - 80019f4: 681b ldr r3, [r3, #0] - 80019f6: 681a ldr r2, [r3, #0] - 80019f8: 68fb ldr r3, [r7, #12] - 80019fa: 681b ldr r3, [r3, #0] - 80019fc: f042 0240 orr.w r2, r2, #64 ; 0x40 - 8001a00: 601a str r2, [r3, #0] + 8001aaa: 68fb ldr r3, [r7, #12] + 8001aac: 681b ldr r3, [r3, #0] + 8001aae: 681a ldr r2, [r3, #0] + 8001ab0: 68fb ldr r3, [r7, #12] + 8001ab2: 681b ldr r3, [r3, #0] + 8001ab4: f042 0240 orr.w r2, r2, #64 ; 0x40 + 8001ab8: 601a str r2, [r3, #0] } /* Receive data in 8 Bit mode */ if (hspi->Init.DataSize == SPI_DATASIZE_8BIT) - 8001a02: 68fb ldr r3, [r7, #12] - 8001a04: 68db ldr r3, [r3, #12] - 8001a06: 2b00 cmp r3, #0 - 8001a08: d162 bne.n 8001ad0 + 8001aba: 68fb ldr r3, [r7, #12] + 8001abc: 68db ldr r3, [r3, #12] + 8001abe: 2b00 cmp r3, #0 + 8001ac0: d162 bne.n 8001b88 { /* Transfer loop */ while (hspi->RxXferCount > 0U) - 8001a0a: e02e b.n 8001a6a + 8001ac2: e02e b.n 8001b22 { /* Check the RXNE flag */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) - 8001a0c: 68fb ldr r3, [r7, #12] - 8001a0e: 681b ldr r3, [r3, #0] - 8001a10: 689b ldr r3, [r3, #8] - 8001a12: f003 0301 and.w r3, r3, #1 - 8001a16: 2b01 cmp r3, #1 - 8001a18: d115 bne.n 8001a46 + 8001ac4: 68fb ldr r3, [r7, #12] + 8001ac6: 681b ldr r3, [r3, #0] + 8001ac8: 689b ldr r3, [r3, #8] + 8001aca: f003 0301 and.w r3, r3, #1 + 8001ace: 2b01 cmp r3, #1 + 8001ad0: d115 bne.n 8001afe { /* read the received data */ (* (uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; - 8001a1a: 68fb ldr r3, [r7, #12] - 8001a1c: 681b ldr r3, [r3, #0] - 8001a1e: f103 020c add.w r2, r3, #12 - 8001a22: 68fb ldr r3, [r7, #12] - 8001a24: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001a26: 7812 ldrb r2, [r2, #0] - 8001a28: b2d2 uxtb r2, r2 - 8001a2a: 701a strb r2, [r3, #0] + 8001ad2: 68fb ldr r3, [r7, #12] + 8001ad4: 681b ldr r3, [r3, #0] + 8001ad6: f103 020c add.w r2, r3, #12 + 8001ada: 68fb ldr r3, [r7, #12] + 8001adc: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001ade: 7812 ldrb r2, [r2, #0] + 8001ae0: b2d2 uxtb r2, r2 + 8001ae2: 701a strb r2, [r3, #0] hspi->pRxBuffPtr += sizeof(uint8_t); - 8001a2c: 68fb ldr r3, [r7, #12] - 8001a2e: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001a30: 1c5a adds r2, r3, #1 - 8001a32: 68fb ldr r3, [r7, #12] - 8001a34: 639a str r2, [r3, #56] ; 0x38 + 8001ae4: 68fb ldr r3, [r7, #12] + 8001ae6: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001ae8: 1c5a adds r2, r3, #1 + 8001aea: 68fb ldr r3, [r7, #12] + 8001aec: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001a36: 68fb ldr r3, [r7, #12] - 8001a38: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001a3a: b29b uxth r3, r3 - 8001a3c: 3b01 subs r3, #1 - 8001a3e: b29a uxth r2, r3 - 8001a40: 68fb ldr r3, [r7, #12] - 8001a42: 87da strh r2, [r3, #62] ; 0x3e - 8001a44: e011 b.n 8001a6a + 8001aee: 68fb ldr r3, [r7, #12] + 8001af0: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001af2: b29b uxth r3, r3 + 8001af4: 3b01 subs r3, #1 + 8001af6: b29a uxth r2, r3 + 8001af8: 68fb ldr r3, [r7, #12] + 8001afa: 87da strh r2, [r3, #62] ; 0x3e + 8001afc: e011 b.n 8001b22 } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 8001a46: f7fe fef1 bl 800082c - 8001a4a: 4602 mov r2, r0 - 8001a4c: 693b ldr r3, [r7, #16] - 8001a4e: 1ad3 subs r3, r2, r3 - 8001a50: 683a ldr r2, [r7, #0] - 8001a52: 429a cmp r2, r3 - 8001a54: d803 bhi.n 8001a5e - 8001a56: 683b ldr r3, [r7, #0] - 8001a58: f1b3 3fff cmp.w r3, #4294967295 - 8001a5c: d102 bne.n 8001a64 - 8001a5e: 683b ldr r3, [r7, #0] - 8001a60: 2b00 cmp r3, #0 - 8001a62: d102 bne.n 8001a6a + 8001afe: f7fe fed9 bl 80008b4 + 8001b02: 4602 mov r2, r0 + 8001b04: 693b ldr r3, [r7, #16] + 8001b06: 1ad3 subs r3, r2, r3 + 8001b08: 683a ldr r2, [r7, #0] + 8001b0a: 429a cmp r2, r3 + 8001b0c: d803 bhi.n 8001b16 + 8001b0e: 683b ldr r3, [r7, #0] + 8001b10: f1b3 3fff cmp.w r3, #4294967295 + 8001b14: d102 bne.n 8001b1c + 8001b16: 683b ldr r3, [r7, #0] + 8001b18: 2b00 cmp r3, #0 + 8001b1a: d102 bne.n 8001b22 { errorcode = HAL_TIMEOUT; - 8001a64: 2303 movs r3, #3 - 8001a66: 75fb strb r3, [r7, #23] + 8001b1c: 2303 movs r3, #3 + 8001b1e: 75fb strb r3, [r7, #23] goto error; - 8001a68: e04a b.n 8001b00 + 8001b20: e04a b.n 8001bb8 while (hspi->RxXferCount > 0U) - 8001a6a: 68fb ldr r3, [r7, #12] - 8001a6c: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001a6e: b29b uxth r3, r3 - 8001a70: 2b00 cmp r3, #0 - 8001a72: d1cb bne.n 8001a0c - 8001a74: e031 b.n 8001ada + 8001b22: 68fb ldr r3, [r7, #12] + 8001b24: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001b26: b29b uxth r3, r3 + 8001b28: 2b00 cmp r3, #0 + 8001b2a: d1cb bne.n 8001ac4 + 8001b2c: e031 b.n 8001b92 { /* Transfer loop */ while (hspi->RxXferCount > 0U) { /* Check the RXNE flag */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) - 8001a76: 68fb ldr r3, [r7, #12] - 8001a78: 681b ldr r3, [r3, #0] - 8001a7a: 689b ldr r3, [r3, #8] - 8001a7c: f003 0301 and.w r3, r3, #1 - 8001a80: 2b01 cmp r3, #1 - 8001a82: d113 bne.n 8001aac + 8001b2e: 68fb ldr r3, [r7, #12] + 8001b30: 681b ldr r3, [r3, #0] + 8001b32: 689b ldr r3, [r3, #8] + 8001b34: f003 0301 and.w r3, r3, #1 + 8001b38: 2b01 cmp r3, #1 + 8001b3a: d113 bne.n 8001b64 { *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; - 8001a84: 68fb ldr r3, [r7, #12] - 8001a86: 681b ldr r3, [r3, #0] - 8001a88: 68da ldr r2, [r3, #12] - 8001a8a: 68fb ldr r3, [r7, #12] - 8001a8c: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001a8e: b292 uxth r2, r2 - 8001a90: 801a strh r2, [r3, #0] + 8001b3c: 68fb ldr r3, [r7, #12] + 8001b3e: 681b ldr r3, [r3, #0] + 8001b40: 68da ldr r2, [r3, #12] + 8001b42: 68fb ldr r3, [r7, #12] + 8001b44: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001b46: b292 uxth r2, r2 + 8001b48: 801a strh r2, [r3, #0] hspi->pRxBuffPtr += sizeof(uint16_t); - 8001a92: 68fb ldr r3, [r7, #12] - 8001a94: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001a96: 1c9a adds r2, r3, #2 - 8001a98: 68fb ldr r3, [r7, #12] - 8001a9a: 639a str r2, [r3, #56] ; 0x38 + 8001b4a: 68fb ldr r3, [r7, #12] + 8001b4c: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001b4e: 1c9a adds r2, r3, #2 + 8001b50: 68fb ldr r3, [r7, #12] + 8001b52: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001a9c: 68fb ldr r3, [r7, #12] - 8001a9e: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001aa0: b29b uxth r3, r3 - 8001aa2: 3b01 subs r3, #1 - 8001aa4: b29a uxth r2, r3 - 8001aa6: 68fb ldr r3, [r7, #12] - 8001aa8: 87da strh r2, [r3, #62] ; 0x3e - 8001aaa: e011 b.n 8001ad0 + 8001b54: 68fb ldr r3, [r7, #12] + 8001b56: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001b58: b29b uxth r3, r3 + 8001b5a: 3b01 subs r3, #1 + 8001b5c: b29a uxth r2, r3 + 8001b5e: 68fb ldr r3, [r7, #12] + 8001b60: 87da strh r2, [r3, #62] ; 0x3e + 8001b62: e011 b.n 8001b88 } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 8001aac: f7fe febe bl 800082c - 8001ab0: 4602 mov r2, r0 - 8001ab2: 693b ldr r3, [r7, #16] - 8001ab4: 1ad3 subs r3, r2, r3 - 8001ab6: 683a ldr r2, [r7, #0] - 8001ab8: 429a cmp r2, r3 - 8001aba: d803 bhi.n 8001ac4 - 8001abc: 683b ldr r3, [r7, #0] - 8001abe: f1b3 3fff cmp.w r3, #4294967295 - 8001ac2: d102 bne.n 8001aca - 8001ac4: 683b ldr r3, [r7, #0] - 8001ac6: 2b00 cmp r3, #0 - 8001ac8: d102 bne.n 8001ad0 + 8001b64: f7fe fea6 bl 80008b4 + 8001b68: 4602 mov r2, r0 + 8001b6a: 693b ldr r3, [r7, #16] + 8001b6c: 1ad3 subs r3, r2, r3 + 8001b6e: 683a ldr r2, [r7, #0] + 8001b70: 429a cmp r2, r3 + 8001b72: d803 bhi.n 8001b7c + 8001b74: 683b ldr r3, [r7, #0] + 8001b76: f1b3 3fff cmp.w r3, #4294967295 + 8001b7a: d102 bne.n 8001b82 + 8001b7c: 683b ldr r3, [r7, #0] + 8001b7e: 2b00 cmp r3, #0 + 8001b80: d102 bne.n 8001b88 { errorcode = HAL_TIMEOUT; - 8001aca: 2303 movs r3, #3 - 8001acc: 75fb strb r3, [r7, #23] + 8001b82: 2303 movs r3, #3 + 8001b84: 75fb strb r3, [r7, #23] goto error; - 8001ace: e017 b.n 8001b00 + 8001b86: e017 b.n 8001bb8 while (hspi->RxXferCount > 0U) - 8001ad0: 68fb ldr r3, [r7, #12] - 8001ad2: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001ad4: b29b uxth r3, r3 - 8001ad6: 2b00 cmp r3, #0 - 8001ad8: d1cd bne.n 8001a76 + 8001b88: 68fb ldr r3, [r7, #12] + 8001b8a: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001b8c: b29b uxth r3, r3 + 8001b8e: 2b00 cmp r3, #0 + 8001b90: d1cd bne.n 8001b2e READ_REG(hspi->Instance->DR); } #endif /* USE_SPI_CRC */ /* Check the end of the transaction */ if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK) - 8001ada: 693a ldr r2, [r7, #16] - 8001adc: 6839 ldr r1, [r7, #0] - 8001ade: 68f8 ldr r0, [r7, #12] - 8001ae0: f000 fa52 bl 8001f88 - 8001ae4: 4603 mov r3, r0 - 8001ae6: 2b00 cmp r3, #0 - 8001ae8: d002 beq.n 8001af0 + 8001b92: 693a ldr r2, [r7, #16] + 8001b94: 6839 ldr r1, [r7, #0] + 8001b96: 68f8 ldr r0, [r7, #12] + 8001b98: f000 fa52 bl 8002040 + 8001b9c: 4603 mov r3, r0 + 8001b9e: 2b00 cmp r3, #0 + 8001ba0: d002 beq.n 8001ba8 { hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - 8001aea: 68fb ldr r3, [r7, #12] - 8001aec: 2220 movs r2, #32 - 8001aee: 655a str r2, [r3, #84] ; 0x54 + 8001ba2: 68fb ldr r3, [r7, #12] + 8001ba4: 2220 movs r2, #32 + 8001ba6: 655a str r2, [r3, #84] ; 0x54 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); } } #endif /* USE_SPI_CRC */ if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - 8001af0: 68fb ldr r3, [r7, #12] - 8001af2: 6d5b ldr r3, [r3, #84] ; 0x54 - 8001af4: 2b00 cmp r3, #0 - 8001af6: d002 beq.n 8001afe + 8001ba8: 68fb ldr r3, [r7, #12] + 8001baa: 6d5b ldr r3, [r3, #84] ; 0x54 + 8001bac: 2b00 cmp r3, #0 + 8001bae: d002 beq.n 8001bb6 { errorcode = HAL_ERROR; - 8001af8: 2301 movs r3, #1 - 8001afa: 75fb strb r3, [r7, #23] - 8001afc: e000 b.n 8001b00 + 8001bb0: 2301 movs r3, #1 + 8001bb2: 75fb strb r3, [r7, #23] + 8001bb4: e000 b.n 8001bb8 } error : - 8001afe: bf00 nop + 8001bb6: bf00 nop hspi->State = HAL_SPI_STATE_READY; - 8001b00: 68fb ldr r3, [r7, #12] - 8001b02: 2201 movs r2, #1 - 8001b04: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001bb8: 68fb ldr r3, [r7, #12] + 8001bba: 2201 movs r2, #1 + 8001bbc: f883 2051 strb.w r2, [r3, #81] ; 0x51 __HAL_UNLOCK(hspi); - 8001b08: 68fb ldr r3, [r7, #12] - 8001b0a: 2200 movs r2, #0 - 8001b0c: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001bc0: 68fb ldr r3, [r7, #12] + 8001bc2: 2200 movs r2, #0 + 8001bc4: f883 2050 strb.w r2, [r3, #80] ; 0x50 return errorcode; - 8001b10: 7dfb ldrb r3, [r7, #23] + 8001bc8: 7dfb ldrb r3, [r7, #23] } - 8001b12: 4618 mov r0, r3 - 8001b14: 3718 adds r7, #24 - 8001b16: 46bd mov sp, r7 - 8001b18: bd80 pop {r7, pc} + 8001bca: 4618 mov r0, r3 + 8001bcc: 3718 adds r7, #24 + 8001bce: 46bd mov sp, r7 + 8001bd0: bd80 pop {r7, pc} -08001b1a : +08001bd2 : * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout) { - 8001b1a: b580 push {r7, lr} - 8001b1c: b08c sub sp, #48 ; 0x30 - 8001b1e: af00 add r7, sp, #0 - 8001b20: 60f8 str r0, [r7, #12] - 8001b22: 60b9 str r1, [r7, #8] - 8001b24: 607a str r2, [r7, #4] - 8001b26: 807b strh r3, [r7, #2] + 8001bd2: b580 push {r7, lr} + 8001bd4: b08c sub sp, #48 ; 0x30 + 8001bd6: af00 add r7, sp, #0 + 8001bd8: 60f8 str r0, [r7, #12] + 8001bda: 60b9 str r1, [r7, #8] + 8001bdc: 607a str r2, [r7, #4] + 8001bde: 807b strh r3, [r7, #2] uint32_t tmp_mode; HAL_SPI_StateTypeDef tmp_state; uint32_t tickstart; /* Variable used to alternate Rx and Tx during transfer */ uint32_t txallowed = 1U; - 8001b28: 2301 movs r3, #1 - 8001b2a: 62fb str r3, [r7, #44] ; 0x2c + 8001be0: 2301 movs r3, #1 + 8001be2: 62fb str r3, [r7, #44] ; 0x2c HAL_StatusTypeDef errorcode = HAL_OK; - 8001b2c: 2300 movs r3, #0 - 8001b2e: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001be4: 2300 movs r3, #0 + 8001be6: f887 302b strb.w r3, [r7, #43] ; 0x2b /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); /* Process Locked */ __HAL_LOCK(hspi); - 8001b32: 68fb ldr r3, [r7, #12] - 8001b34: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 - 8001b38: 2b01 cmp r3, #1 - 8001b3a: d101 bne.n 8001b40 - 8001b3c: 2302 movs r3, #2 - 8001b3e: e18a b.n 8001e56 - 8001b40: 68fb ldr r3, [r7, #12] - 8001b42: 2201 movs r2, #1 - 8001b44: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001bea: 68fb ldr r3, [r7, #12] + 8001bec: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 + 8001bf0: 2b01 cmp r3, #1 + 8001bf2: d101 bne.n 8001bf8 + 8001bf4: 2302 movs r3, #2 + 8001bf6: e18a b.n 8001f0e + 8001bf8: 68fb ldr r3, [r7, #12] + 8001bfa: 2201 movs r2, #1 + 8001bfc: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - 8001b48: f7fe fe70 bl 800082c - 8001b4c: 6278 str r0, [r7, #36] ; 0x24 + 8001c00: f7fe fe58 bl 80008b4 + 8001c04: 6278 str r0, [r7, #36] ; 0x24 /* Init temporary variables */ tmp_state = hspi->State; - 8001b4e: 68fb ldr r3, [r7, #12] - 8001b50: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001b54: f887 3023 strb.w r3, [r7, #35] ; 0x23 + 8001c06: 68fb ldr r3, [r7, #12] + 8001c08: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001c0c: f887 3023 strb.w r3, [r7, #35] ; 0x23 tmp_mode = hspi->Init.Mode; - 8001b58: 68fb ldr r3, [r7, #12] - 8001b5a: 685b ldr r3, [r3, #4] - 8001b5c: 61fb str r3, [r7, #28] + 8001c10: 68fb ldr r3, [r7, #12] + 8001c12: 685b ldr r3, [r3, #4] + 8001c14: 61fb str r3, [r7, #28] initial_TxXferCount = Size; - 8001b5e: 887b ldrh r3, [r7, #2] - 8001b60: 837b strh r3, [r7, #26] + 8001c16: 887b ldrh r3, [r7, #2] + 8001c18: 837b strh r3, [r7, #26] if (!((tmp_state == HAL_SPI_STATE_READY) || \ - 8001b62: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 8001b66: 2b01 cmp r3, #1 - 8001b68: d00f beq.n 8001b8a - 8001b6a: 69fb ldr r3, [r7, #28] - 8001b6c: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001b70: d107 bne.n 8001b82 + 8001c1a: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 + 8001c1e: 2b01 cmp r3, #1 + 8001c20: d00f beq.n 8001c42 + 8001c22: 69fb ldr r3, [r7, #28] + 8001c24: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001c28: d107 bne.n 8001c3a ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) - 8001b72: 68fb ldr r3, [r7, #12] - 8001b74: 689b ldr r3, [r3, #8] - 8001b76: 2b00 cmp r3, #0 - 8001b78: d103 bne.n 8001b82 - 8001b7a: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 8001b7e: 2b04 cmp r3, #4 - 8001b80: d003 beq.n 8001b8a + 8001c2a: 68fb ldr r3, [r7, #12] + 8001c2c: 689b ldr r3, [r3, #8] + 8001c2e: 2b00 cmp r3, #0 + 8001c30: d103 bne.n 8001c3a + 8001c32: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 + 8001c36: 2b04 cmp r3, #4 + 8001c38: d003 beq.n 8001c42 { errorcode = HAL_BUSY; - 8001b82: 2302 movs r3, #2 - 8001b84: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001c3a: 2302 movs r3, #2 + 8001c3c: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001b88: e15b b.n 8001e42 + 8001c40: e15b b.n 8001efa } if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) - 8001b8a: 68bb ldr r3, [r7, #8] - 8001b8c: 2b00 cmp r3, #0 - 8001b8e: d005 beq.n 8001b9c - 8001b90: 687b ldr r3, [r7, #4] - 8001b92: 2b00 cmp r3, #0 - 8001b94: d002 beq.n 8001b9c - 8001b96: 887b ldrh r3, [r7, #2] - 8001b98: 2b00 cmp r3, #0 - 8001b9a: d103 bne.n 8001ba4 + 8001c42: 68bb ldr r3, [r7, #8] + 8001c44: 2b00 cmp r3, #0 + 8001c46: d005 beq.n 8001c54 + 8001c48: 687b ldr r3, [r7, #4] + 8001c4a: 2b00 cmp r3, #0 + 8001c4c: d002 beq.n 8001c54 + 8001c4e: 887b ldrh r3, [r7, #2] + 8001c50: 2b00 cmp r3, #0 + 8001c52: d103 bne.n 8001c5c { errorcode = HAL_ERROR; - 8001b9c: 2301 movs r3, #1 - 8001b9e: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001c54: 2301 movs r3, #1 + 8001c56: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001ba2: e14e b.n 8001e42 + 8001c5a: e14e b.n 8001efa } /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ if (hspi->State != HAL_SPI_STATE_BUSY_RX) - 8001ba4: 68fb ldr r3, [r7, #12] - 8001ba6: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001baa: b2db uxtb r3, r3 - 8001bac: 2b04 cmp r3, #4 - 8001bae: d003 beq.n 8001bb8 + 8001c5c: 68fb ldr r3, [r7, #12] + 8001c5e: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001c62: b2db uxtb r3, r3 + 8001c64: 2b04 cmp r3, #4 + 8001c66: d003 beq.n 8001c70 { hspi->State = HAL_SPI_STATE_BUSY_TX_RX; - 8001bb0: 68fb ldr r3, [r7, #12] - 8001bb2: 2205 movs r2, #5 - 8001bb4: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001c68: 68fb ldr r3, [r7, #12] + 8001c6a: 2205 movs r2, #5 + 8001c6c: f883 2051 strb.w r2, [r3, #81] ; 0x51 } /* Set the transaction information */ hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 8001bb8: 68fb ldr r3, [r7, #12] - 8001bba: 2200 movs r2, #0 - 8001bbc: 655a str r2, [r3, #84] ; 0x54 + 8001c70: 68fb ldr r3, [r7, #12] + 8001c72: 2200 movs r2, #0 + 8001c74: 655a str r2, [r3, #84] ; 0x54 hspi->pRxBuffPtr = (uint8_t *)pRxData; - 8001bbe: 68fb ldr r3, [r7, #12] - 8001bc0: 687a ldr r2, [r7, #4] - 8001bc2: 639a str r2, [r3, #56] ; 0x38 + 8001c76: 68fb ldr r3, [r7, #12] + 8001c78: 687a ldr r2, [r7, #4] + 8001c7a: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount = Size; - 8001bc4: 68fb ldr r3, [r7, #12] - 8001bc6: 887a ldrh r2, [r7, #2] - 8001bc8: 87da strh r2, [r3, #62] ; 0x3e + 8001c7c: 68fb ldr r3, [r7, #12] + 8001c7e: 887a ldrh r2, [r7, #2] + 8001c80: 87da strh r2, [r3, #62] ; 0x3e hspi->RxXferSize = Size; - 8001bca: 68fb ldr r3, [r7, #12] - 8001bcc: 887a ldrh r2, [r7, #2] - 8001bce: 879a strh r2, [r3, #60] ; 0x3c + 8001c82: 68fb ldr r3, [r7, #12] + 8001c84: 887a ldrh r2, [r7, #2] + 8001c86: 879a strh r2, [r3, #60] ; 0x3c hspi->pTxBuffPtr = (uint8_t *)pTxData; - 8001bd0: 68fb ldr r3, [r7, #12] - 8001bd2: 68ba ldr r2, [r7, #8] - 8001bd4: 631a str r2, [r3, #48] ; 0x30 + 8001c88: 68fb ldr r3, [r7, #12] + 8001c8a: 68ba ldr r2, [r7, #8] + 8001c8c: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount = Size; - 8001bd6: 68fb ldr r3, [r7, #12] - 8001bd8: 887a ldrh r2, [r7, #2] - 8001bda: 86da strh r2, [r3, #54] ; 0x36 + 8001c8e: 68fb ldr r3, [r7, #12] + 8001c90: 887a ldrh r2, [r7, #2] + 8001c92: 86da strh r2, [r3, #54] ; 0x36 hspi->TxXferSize = Size; - 8001bdc: 68fb ldr r3, [r7, #12] - 8001bde: 887a ldrh r2, [r7, #2] - 8001be0: 869a strh r2, [r3, #52] ; 0x34 + 8001c94: 68fb ldr r3, [r7, #12] + 8001c96: 887a ldrh r2, [r7, #2] + 8001c98: 869a strh r2, [r3, #52] ; 0x34 /*Init field not used in handle to zero */ hspi->RxISR = NULL; - 8001be2: 68fb ldr r3, [r7, #12] - 8001be4: 2200 movs r2, #0 - 8001be6: 641a str r2, [r3, #64] ; 0x40 + 8001c9a: 68fb ldr r3, [r7, #12] + 8001c9c: 2200 movs r2, #0 + 8001c9e: 641a str r2, [r3, #64] ; 0x40 hspi->TxISR = NULL; - 8001be8: 68fb ldr r3, [r7, #12] - 8001bea: 2200 movs r2, #0 - 8001bec: 645a str r2, [r3, #68] ; 0x44 + 8001ca0: 68fb ldr r3, [r7, #12] + 8001ca2: 2200 movs r2, #0 + 8001ca4: 645a str r2, [r3, #68] ; 0x44 SPI_RESET_CRC(hspi); } #endif /* USE_SPI_CRC */ /* Check if the SPI is already enabled */ if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - 8001bee: 68fb ldr r3, [r7, #12] - 8001bf0: 681b ldr r3, [r3, #0] - 8001bf2: 681b ldr r3, [r3, #0] - 8001bf4: f003 0340 and.w r3, r3, #64 ; 0x40 - 8001bf8: 2b40 cmp r3, #64 ; 0x40 - 8001bfa: d007 beq.n 8001c0c + 8001ca6: 68fb ldr r3, [r7, #12] + 8001ca8: 681b ldr r3, [r3, #0] + 8001caa: 681b ldr r3, [r3, #0] + 8001cac: f003 0340 and.w r3, r3, #64 ; 0x40 + 8001cb0: 2b40 cmp r3, #64 ; 0x40 + 8001cb2: d007 beq.n 8001cc4 { /* Enable SPI peripheral */ __HAL_SPI_ENABLE(hspi); - 8001bfc: 68fb ldr r3, [r7, #12] - 8001bfe: 681b ldr r3, [r3, #0] - 8001c00: 681a ldr r2, [r3, #0] - 8001c02: 68fb ldr r3, [r7, #12] - 8001c04: 681b ldr r3, [r3, #0] - 8001c06: f042 0240 orr.w r2, r2, #64 ; 0x40 - 8001c0a: 601a str r2, [r3, #0] + 8001cb4: 68fb ldr r3, [r7, #12] + 8001cb6: 681b ldr r3, [r3, #0] + 8001cb8: 681a ldr r2, [r3, #0] + 8001cba: 68fb ldr r3, [r7, #12] + 8001cbc: 681b ldr r3, [r3, #0] + 8001cbe: f042 0240 orr.w r2, r2, #64 ; 0x40 + 8001cc2: 601a str r2, [r3, #0] } /* Transmit and Receive data in 16 Bit mode */ if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) - 8001c0c: 68fb ldr r3, [r7, #12] - 8001c0e: 68db ldr r3, [r3, #12] - 8001c10: f5b3 6f00 cmp.w r3, #2048 ; 0x800 - 8001c14: d178 bne.n 8001d08 + 8001cc4: 68fb ldr r3, [r7, #12] + 8001cc6: 68db ldr r3, [r3, #12] + 8001cc8: f5b3 6f00 cmp.w r3, #2048 ; 0x800 + 8001ccc: d178 bne.n 8001dc0 { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 8001c16: 68fb ldr r3, [r7, #12] - 8001c18: 685b ldr r3, [r3, #4] - 8001c1a: 2b00 cmp r3, #0 - 8001c1c: d002 beq.n 8001c24 - 8001c1e: 8b7b ldrh r3, [r7, #26] - 8001c20: 2b01 cmp r3, #1 - 8001c22: d166 bne.n 8001cf2 + 8001cce: 68fb ldr r3, [r7, #12] + 8001cd0: 685b ldr r3, [r3, #4] + 8001cd2: 2b00 cmp r3, #0 + 8001cd4: d002 beq.n 8001cdc + 8001cd6: 8b7b ldrh r3, [r7, #26] + 8001cd8: 2b01 cmp r3, #1 + 8001cda: d166 bne.n 8001daa { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 8001c24: 68fb ldr r3, [r7, #12] - 8001c26: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001c28: 881a ldrh r2, [r3, #0] - 8001c2a: 68fb ldr r3, [r7, #12] - 8001c2c: 681b ldr r3, [r3, #0] - 8001c2e: 60da str r2, [r3, #12] + 8001cdc: 68fb ldr r3, [r7, #12] + 8001cde: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001ce0: 881a ldrh r2, [r3, #0] + 8001ce2: 68fb ldr r3, [r7, #12] + 8001ce4: 681b ldr r3, [r3, #0] + 8001ce6: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 8001c30: 68fb ldr r3, [r7, #12] - 8001c32: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001c34: 1c9a adds r2, r3, #2 - 8001c36: 68fb ldr r3, [r7, #12] - 8001c38: 631a str r2, [r3, #48] ; 0x30 + 8001ce8: 68fb ldr r3, [r7, #12] + 8001cea: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001cec: 1c9a adds r2, r3, #2 + 8001cee: 68fb ldr r3, [r7, #12] + 8001cf0: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001c3a: 68fb ldr r3, [r7, #12] - 8001c3c: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001c3e: b29b uxth r3, r3 - 8001c40: 3b01 subs r3, #1 - 8001c42: b29a uxth r2, r3 - 8001c44: 68fb ldr r3, [r7, #12] - 8001c46: 86da strh r2, [r3, #54] ; 0x36 + 8001cf2: 68fb ldr r3, [r7, #12] + 8001cf4: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001cf6: b29b uxth r3, r3 + 8001cf8: 3b01 subs r3, #1 + 8001cfa: b29a uxth r2, r3 + 8001cfc: 68fb ldr r3, [r7, #12] + 8001cfe: 86da strh r2, [r3, #54] ; 0x36 } while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001c48: e053 b.n 8001cf2 + 8001d00: e053 b.n 8001daa { /* Check TXE flag */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) - 8001c4a: 68fb ldr r3, [r7, #12] - 8001c4c: 681b ldr r3, [r3, #0] - 8001c4e: 689b ldr r3, [r3, #8] - 8001c50: f003 0302 and.w r3, r3, #2 - 8001c54: 2b02 cmp r3, #2 - 8001c56: d11b bne.n 8001c90 - 8001c58: 68fb ldr r3, [r7, #12] - 8001c5a: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001c5c: b29b uxth r3, r3 - 8001c5e: 2b00 cmp r3, #0 - 8001c60: d016 beq.n 8001c90 - 8001c62: 6afb ldr r3, [r7, #44] ; 0x2c - 8001c64: 2b01 cmp r3, #1 - 8001c66: d113 bne.n 8001c90 + 8001d02: 68fb ldr r3, [r7, #12] + 8001d04: 681b ldr r3, [r3, #0] + 8001d06: 689b ldr r3, [r3, #8] + 8001d08: f003 0302 and.w r3, r3, #2 + 8001d0c: 2b02 cmp r3, #2 + 8001d0e: d11b bne.n 8001d48 + 8001d10: 68fb ldr r3, [r7, #12] + 8001d12: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001d14: b29b uxth r3, r3 + 8001d16: 2b00 cmp r3, #0 + 8001d18: d016 beq.n 8001d48 + 8001d1a: 6afb ldr r3, [r7, #44] ; 0x2c + 8001d1c: 2b01 cmp r3, #1 + 8001d1e: d113 bne.n 8001d48 { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 8001c68: 68fb ldr r3, [r7, #12] - 8001c6a: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001c6c: 881a ldrh r2, [r3, #0] - 8001c6e: 68fb ldr r3, [r7, #12] - 8001c70: 681b ldr r3, [r3, #0] - 8001c72: 60da str r2, [r3, #12] + 8001d20: 68fb ldr r3, [r7, #12] + 8001d22: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001d24: 881a ldrh r2, [r3, #0] + 8001d26: 68fb ldr r3, [r7, #12] + 8001d28: 681b ldr r3, [r3, #0] + 8001d2a: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 8001c74: 68fb ldr r3, [r7, #12] - 8001c76: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001c78: 1c9a adds r2, r3, #2 - 8001c7a: 68fb ldr r3, [r7, #12] - 8001c7c: 631a str r2, [r3, #48] ; 0x30 + 8001d2c: 68fb ldr r3, [r7, #12] + 8001d2e: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001d30: 1c9a adds r2, r3, #2 + 8001d32: 68fb ldr r3, [r7, #12] + 8001d34: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001c7e: 68fb ldr r3, [r7, #12] - 8001c80: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001c82: b29b uxth r3, r3 - 8001c84: 3b01 subs r3, #1 - 8001c86: b29a uxth r2, r3 - 8001c88: 68fb ldr r3, [r7, #12] - 8001c8a: 86da strh r2, [r3, #54] ; 0x36 + 8001d36: 68fb ldr r3, [r7, #12] + 8001d38: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001d3a: b29b uxth r3, r3 + 8001d3c: 3b01 subs r3, #1 + 8001d3e: b29a uxth r2, r3 + 8001d40: 68fb ldr r3, [r7, #12] + 8001d42: 86da strh r2, [r3, #54] ; 0x36 /* Next Data is a reception (Rx). Tx not allowed */ txallowed = 0U; - 8001c8c: 2300 movs r3, #0 - 8001c8e: 62fb str r3, [r7, #44] ; 0x2c + 8001d44: 2300 movs r3, #0 + 8001d46: 62fb str r3, [r7, #44] ; 0x2c } #endif /* USE_SPI_CRC */ } /* Check RXNE flag */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) - 8001c90: 68fb ldr r3, [r7, #12] - 8001c92: 681b ldr r3, [r3, #0] - 8001c94: 689b ldr r3, [r3, #8] - 8001c96: f003 0301 and.w r3, r3, #1 - 8001c9a: 2b01 cmp r3, #1 - 8001c9c: d119 bne.n 8001cd2 - 8001c9e: 68fb ldr r3, [r7, #12] - 8001ca0: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001ca2: b29b uxth r3, r3 - 8001ca4: 2b00 cmp r3, #0 - 8001ca6: d014 beq.n 8001cd2 + 8001d48: 68fb ldr r3, [r7, #12] + 8001d4a: 681b ldr r3, [r3, #0] + 8001d4c: 689b ldr r3, [r3, #8] + 8001d4e: f003 0301 and.w r3, r3, #1 + 8001d52: 2b01 cmp r3, #1 + 8001d54: d119 bne.n 8001d8a + 8001d56: 68fb ldr r3, [r7, #12] + 8001d58: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001d5a: b29b uxth r3, r3 + 8001d5c: 2b00 cmp r3, #0 + 8001d5e: d014 beq.n 8001d8a { *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; - 8001ca8: 68fb ldr r3, [r7, #12] - 8001caa: 681b ldr r3, [r3, #0] - 8001cac: 68da ldr r2, [r3, #12] - 8001cae: 68fb ldr r3, [r7, #12] - 8001cb0: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001cb2: b292 uxth r2, r2 - 8001cb4: 801a strh r2, [r3, #0] + 8001d60: 68fb ldr r3, [r7, #12] + 8001d62: 681b ldr r3, [r3, #0] + 8001d64: 68da ldr r2, [r3, #12] + 8001d66: 68fb ldr r3, [r7, #12] + 8001d68: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001d6a: b292 uxth r2, r2 + 8001d6c: 801a strh r2, [r3, #0] hspi->pRxBuffPtr += sizeof(uint16_t); - 8001cb6: 68fb ldr r3, [r7, #12] - 8001cb8: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001cba: 1c9a adds r2, r3, #2 - 8001cbc: 68fb ldr r3, [r7, #12] - 8001cbe: 639a str r2, [r3, #56] ; 0x38 + 8001d6e: 68fb ldr r3, [r7, #12] + 8001d70: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001d72: 1c9a adds r2, r3, #2 + 8001d74: 68fb ldr r3, [r7, #12] + 8001d76: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001cc0: 68fb ldr r3, [r7, #12] - 8001cc2: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001cc4: b29b uxth r3, r3 - 8001cc6: 3b01 subs r3, #1 - 8001cc8: b29a uxth r2, r3 - 8001cca: 68fb ldr r3, [r7, #12] - 8001ccc: 87da strh r2, [r3, #62] ; 0x3e + 8001d78: 68fb ldr r3, [r7, #12] + 8001d7a: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001d7c: b29b uxth r3, r3 + 8001d7e: 3b01 subs r3, #1 + 8001d80: b29a uxth r2, r3 + 8001d82: 68fb ldr r3, [r7, #12] + 8001d84: 87da strh r2, [r3, #62] ; 0x3e /* Next Data is a Transmission (Tx). Tx is allowed */ txallowed = 1U; - 8001cce: 2301 movs r3, #1 - 8001cd0: 62fb str r3, [r7, #44] ; 0x2c + 8001d86: 2301 movs r3, #1 + 8001d88: 62fb str r3, [r7, #44] ; 0x2c } if (((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) - 8001cd2: f7fe fdab bl 800082c - 8001cd6: 4602 mov r2, r0 - 8001cd8: 6a7b ldr r3, [r7, #36] ; 0x24 - 8001cda: 1ad3 subs r3, r2, r3 - 8001cdc: 6bba ldr r2, [r7, #56] ; 0x38 - 8001cde: 429a cmp r2, r3 - 8001ce0: d807 bhi.n 8001cf2 - 8001ce2: 6bbb ldr r3, [r7, #56] ; 0x38 - 8001ce4: f1b3 3fff cmp.w r3, #4294967295 - 8001ce8: d003 beq.n 8001cf2 + 8001d8a: f7fe fd93 bl 80008b4 + 8001d8e: 4602 mov r2, r0 + 8001d90: 6a7b ldr r3, [r7, #36] ; 0x24 + 8001d92: 1ad3 subs r3, r2, r3 + 8001d94: 6bba ldr r2, [r7, #56] ; 0x38 + 8001d96: 429a cmp r2, r3 + 8001d98: d807 bhi.n 8001daa + 8001d9a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8001d9c: f1b3 3fff cmp.w r3, #4294967295 + 8001da0: d003 beq.n 8001daa { errorcode = HAL_TIMEOUT; - 8001cea: 2303 movs r3, #3 - 8001cec: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001da2: 2303 movs r3, #3 + 8001da4: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001cf0: e0a7 b.n 8001e42 + 8001da8: e0a7 b.n 8001efa while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001cf2: 68fb ldr r3, [r7, #12] - 8001cf4: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001cf6: b29b uxth r3, r3 - 8001cf8: 2b00 cmp r3, #0 - 8001cfa: d1a6 bne.n 8001c4a - 8001cfc: 68fb ldr r3, [r7, #12] - 8001cfe: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001d00: b29b uxth r3, r3 - 8001d02: 2b00 cmp r3, #0 - 8001d04: d1a1 bne.n 8001c4a - 8001d06: e07c b.n 8001e02 + 8001daa: 68fb ldr r3, [r7, #12] + 8001dac: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001dae: b29b uxth r3, r3 + 8001db0: 2b00 cmp r3, #0 + 8001db2: d1a6 bne.n 8001d02 + 8001db4: 68fb ldr r3, [r7, #12] + 8001db6: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001db8: b29b uxth r3, r3 + 8001dba: 2b00 cmp r3, #0 + 8001dbc: d1a1 bne.n 8001d02 + 8001dbe: e07c b.n 8001eba } } /* Transmit and Receive data in 8 Bit mode */ else { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 8001d08: 68fb ldr r3, [r7, #12] - 8001d0a: 685b ldr r3, [r3, #4] - 8001d0c: 2b00 cmp r3, #0 - 8001d0e: d002 beq.n 8001d16 - 8001d10: 8b7b ldrh r3, [r7, #26] - 8001d12: 2b01 cmp r3, #1 - 8001d14: d16b bne.n 8001dee + 8001dc0: 68fb ldr r3, [r7, #12] + 8001dc2: 685b ldr r3, [r3, #4] + 8001dc4: 2b00 cmp r3, #0 + 8001dc6: d002 beq.n 8001dce + 8001dc8: 8b7b ldrh r3, [r7, #26] + 8001dca: 2b01 cmp r3, #1 + 8001dcc: d16b bne.n 8001ea6 { *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - 8001d16: 68fb ldr r3, [r7, #12] - 8001d18: 6b1a ldr r2, [r3, #48] ; 0x30 - 8001d1a: 68fb ldr r3, [r7, #12] - 8001d1c: 681b ldr r3, [r3, #0] - 8001d1e: 330c adds r3, #12 - 8001d20: 7812 ldrb r2, [r2, #0] - 8001d22: 701a strb r2, [r3, #0] + 8001dce: 68fb ldr r3, [r7, #12] + 8001dd0: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001dd2: 68fb ldr r3, [r7, #12] + 8001dd4: 681b ldr r3, [r3, #0] + 8001dd6: 330c adds r3, #12 + 8001dd8: 7812 ldrb r2, [r2, #0] + 8001dda: 701a strb r2, [r3, #0] hspi->pTxBuffPtr += sizeof(uint8_t); - 8001d24: 68fb ldr r3, [r7, #12] - 8001d26: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001d28: 1c5a adds r2, r3, #1 - 8001d2a: 68fb ldr r3, [r7, #12] - 8001d2c: 631a str r2, [r3, #48] ; 0x30 + 8001ddc: 68fb ldr r3, [r7, #12] + 8001dde: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001de0: 1c5a adds r2, r3, #1 + 8001de2: 68fb ldr r3, [r7, #12] + 8001de4: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001d2e: 68fb ldr r3, [r7, #12] - 8001d30: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001d32: b29b uxth r3, r3 - 8001d34: 3b01 subs r3, #1 - 8001d36: b29a uxth r2, r3 - 8001d38: 68fb ldr r3, [r7, #12] - 8001d3a: 86da strh r2, [r3, #54] ; 0x36 + 8001de6: 68fb ldr r3, [r7, #12] + 8001de8: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001dea: b29b uxth r3, r3 + 8001dec: 3b01 subs r3, #1 + 8001dee: b29a uxth r2, r3 + 8001df0: 68fb ldr r3, [r7, #12] + 8001df2: 86da strh r2, [r3, #54] ; 0x36 } while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001d3c: e057 b.n 8001dee + 8001df4: e057 b.n 8001ea6 { /* Check TXE flag */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) - 8001d3e: 68fb ldr r3, [r7, #12] - 8001d40: 681b ldr r3, [r3, #0] - 8001d42: 689b ldr r3, [r3, #8] - 8001d44: f003 0302 and.w r3, r3, #2 - 8001d48: 2b02 cmp r3, #2 - 8001d4a: d11c bne.n 8001d86 - 8001d4c: 68fb ldr r3, [r7, #12] - 8001d4e: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001d50: b29b uxth r3, r3 - 8001d52: 2b00 cmp r3, #0 - 8001d54: d017 beq.n 8001d86 - 8001d56: 6afb ldr r3, [r7, #44] ; 0x2c - 8001d58: 2b01 cmp r3, #1 - 8001d5a: d114 bne.n 8001d86 + 8001df6: 68fb ldr r3, [r7, #12] + 8001df8: 681b ldr r3, [r3, #0] + 8001dfa: 689b ldr r3, [r3, #8] + 8001dfc: f003 0302 and.w r3, r3, #2 + 8001e00: 2b02 cmp r3, #2 + 8001e02: d11c bne.n 8001e3e + 8001e04: 68fb ldr r3, [r7, #12] + 8001e06: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001e08: b29b uxth r3, r3 + 8001e0a: 2b00 cmp r3, #0 + 8001e0c: d017 beq.n 8001e3e + 8001e0e: 6afb ldr r3, [r7, #44] ; 0x2c + 8001e10: 2b01 cmp r3, #1 + 8001e12: d114 bne.n 8001e3e { *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); - 8001d5c: 68fb ldr r3, [r7, #12] - 8001d5e: 6b1a ldr r2, [r3, #48] ; 0x30 - 8001d60: 68fb ldr r3, [r7, #12] - 8001d62: 681b ldr r3, [r3, #0] - 8001d64: 330c adds r3, #12 - 8001d66: 7812 ldrb r2, [r2, #0] - 8001d68: 701a strb r2, [r3, #0] + 8001e14: 68fb ldr r3, [r7, #12] + 8001e16: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001e18: 68fb ldr r3, [r7, #12] + 8001e1a: 681b ldr r3, [r3, #0] + 8001e1c: 330c adds r3, #12 + 8001e1e: 7812 ldrb r2, [r2, #0] + 8001e20: 701a strb r2, [r3, #0] hspi->pTxBuffPtr++; - 8001d6a: 68fb ldr r3, [r7, #12] - 8001d6c: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001d6e: 1c5a adds r2, r3, #1 - 8001d70: 68fb ldr r3, [r7, #12] - 8001d72: 631a str r2, [r3, #48] ; 0x30 + 8001e22: 68fb ldr r3, [r7, #12] + 8001e24: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001e26: 1c5a adds r2, r3, #1 + 8001e28: 68fb ldr r3, [r7, #12] + 8001e2a: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001d74: 68fb ldr r3, [r7, #12] - 8001d76: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001d78: b29b uxth r3, r3 - 8001d7a: 3b01 subs r3, #1 - 8001d7c: b29a uxth r2, r3 - 8001d7e: 68fb ldr r3, [r7, #12] - 8001d80: 86da strh r2, [r3, #54] ; 0x36 + 8001e2c: 68fb ldr r3, [r7, #12] + 8001e2e: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001e30: b29b uxth r3, r3 + 8001e32: 3b01 subs r3, #1 + 8001e34: b29a uxth r2, r3 + 8001e36: 68fb ldr r3, [r7, #12] + 8001e38: 86da strh r2, [r3, #54] ; 0x36 /* Next Data is a reception (Rx). Tx not allowed */ txallowed = 0U; - 8001d82: 2300 movs r3, #0 - 8001d84: 62fb str r3, [r7, #44] ; 0x2c + 8001e3a: 2300 movs r3, #0 + 8001e3c: 62fb str r3, [r7, #44] ; 0x2c } #endif /* USE_SPI_CRC */ } /* Wait until RXNE flag is reset */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) - 8001d86: 68fb ldr r3, [r7, #12] - 8001d88: 681b ldr r3, [r3, #0] - 8001d8a: 689b ldr r3, [r3, #8] - 8001d8c: f003 0301 and.w r3, r3, #1 - 8001d90: 2b01 cmp r3, #1 - 8001d92: d119 bne.n 8001dc8 - 8001d94: 68fb ldr r3, [r7, #12] - 8001d96: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001d98: b29b uxth r3, r3 - 8001d9a: 2b00 cmp r3, #0 - 8001d9c: d014 beq.n 8001dc8 + 8001e3e: 68fb ldr r3, [r7, #12] + 8001e40: 681b ldr r3, [r3, #0] + 8001e42: 689b ldr r3, [r3, #8] + 8001e44: f003 0301 and.w r3, r3, #1 + 8001e48: 2b01 cmp r3, #1 + 8001e4a: d119 bne.n 8001e80 + 8001e4c: 68fb ldr r3, [r7, #12] + 8001e4e: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001e50: b29b uxth r3, r3 + 8001e52: 2b00 cmp r3, #0 + 8001e54: d014 beq.n 8001e80 { (*(uint8_t *)hspi->pRxBuffPtr) = hspi->Instance->DR; - 8001d9e: 68fb ldr r3, [r7, #12] - 8001da0: 681b ldr r3, [r3, #0] - 8001da2: 68da ldr r2, [r3, #12] - 8001da4: 68fb ldr r3, [r7, #12] - 8001da6: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001da8: b2d2 uxtb r2, r2 - 8001daa: 701a strb r2, [r3, #0] + 8001e56: 68fb ldr r3, [r7, #12] + 8001e58: 681b ldr r3, [r3, #0] + 8001e5a: 68da ldr r2, [r3, #12] + 8001e5c: 68fb ldr r3, [r7, #12] + 8001e5e: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001e60: b2d2 uxtb r2, r2 + 8001e62: 701a strb r2, [r3, #0] hspi->pRxBuffPtr++; - 8001dac: 68fb ldr r3, [r7, #12] - 8001dae: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001db0: 1c5a adds r2, r3, #1 - 8001db2: 68fb ldr r3, [r7, #12] - 8001db4: 639a str r2, [r3, #56] ; 0x38 + 8001e64: 68fb ldr r3, [r7, #12] + 8001e66: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001e68: 1c5a adds r2, r3, #1 + 8001e6a: 68fb ldr r3, [r7, #12] + 8001e6c: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001db6: 68fb ldr r3, [r7, #12] - 8001db8: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001dba: b29b uxth r3, r3 - 8001dbc: 3b01 subs r3, #1 - 8001dbe: b29a uxth r2, r3 - 8001dc0: 68fb ldr r3, [r7, #12] - 8001dc2: 87da strh r2, [r3, #62] ; 0x3e + 8001e6e: 68fb ldr r3, [r7, #12] + 8001e70: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001e72: b29b uxth r3, r3 + 8001e74: 3b01 subs r3, #1 + 8001e76: b29a uxth r2, r3 + 8001e78: 68fb ldr r3, [r7, #12] + 8001e7a: 87da strh r2, [r3, #62] ; 0x3e /* Next Data is a Transmission (Tx). Tx is allowed */ txallowed = 1U; - 8001dc4: 2301 movs r3, #1 - 8001dc6: 62fb str r3, [r7, #44] ; 0x2c + 8001e7c: 2301 movs r3, #1 + 8001e7e: 62fb str r3, [r7, #44] ; 0x2c } if ((((HAL_GetTick() - tickstart) >= Timeout) && ((Timeout != HAL_MAX_DELAY))) || (Timeout == 0U)) - 8001dc8: f7fe fd30 bl 800082c - 8001dcc: 4602 mov r2, r0 - 8001dce: 6a7b ldr r3, [r7, #36] ; 0x24 - 8001dd0: 1ad3 subs r3, r2, r3 - 8001dd2: 6bba ldr r2, [r7, #56] ; 0x38 - 8001dd4: 429a cmp r2, r3 - 8001dd6: d803 bhi.n 8001de0 - 8001dd8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8001dda: f1b3 3fff cmp.w r3, #4294967295 - 8001dde: d102 bne.n 8001de6 - 8001de0: 6bbb ldr r3, [r7, #56] ; 0x38 - 8001de2: 2b00 cmp r3, #0 - 8001de4: d103 bne.n 8001dee + 8001e80: f7fe fd18 bl 80008b4 + 8001e84: 4602 mov r2, r0 + 8001e86: 6a7b ldr r3, [r7, #36] ; 0x24 + 8001e88: 1ad3 subs r3, r2, r3 + 8001e8a: 6bba ldr r2, [r7, #56] ; 0x38 + 8001e8c: 429a cmp r2, r3 + 8001e8e: d803 bhi.n 8001e98 + 8001e90: 6bbb ldr r3, [r7, #56] ; 0x38 + 8001e92: f1b3 3fff cmp.w r3, #4294967295 + 8001e96: d102 bne.n 8001e9e + 8001e98: 6bbb ldr r3, [r7, #56] ; 0x38 + 8001e9a: 2b00 cmp r3, #0 + 8001e9c: d103 bne.n 8001ea6 { errorcode = HAL_TIMEOUT; - 8001de6: 2303 movs r3, #3 - 8001de8: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001e9e: 2303 movs r3, #3 + 8001ea0: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001dec: e029 b.n 8001e42 + 8001ea4: e029 b.n 8001efa while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001dee: 68fb ldr r3, [r7, #12] - 8001df0: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001df2: b29b uxth r3, r3 - 8001df4: 2b00 cmp r3, #0 - 8001df6: d1a2 bne.n 8001d3e - 8001df8: 68fb ldr r3, [r7, #12] - 8001dfa: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001dfc: b29b uxth r3, r3 - 8001dfe: 2b00 cmp r3, #0 - 8001e00: d19d bne.n 8001d3e + 8001ea6: 68fb ldr r3, [r7, #12] + 8001ea8: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001eaa: b29b uxth r3, r3 + 8001eac: 2b00 cmp r3, #0 + 8001eae: d1a2 bne.n 8001df6 + 8001eb0: 68fb ldr r3, [r7, #12] + 8001eb2: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001eb4: b29b uxth r3, r3 + 8001eb6: 2b00 cmp r3, #0 + 8001eb8: d19d bne.n 8001df6 } } #endif /* USE_SPI_CRC */ /* Check the end of the transaction */ if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) - 8001e02: 6a7a ldr r2, [r7, #36] ; 0x24 - 8001e04: 6bb9 ldr r1, [r7, #56] ; 0x38 - 8001e06: 68f8 ldr r0, [r7, #12] - 8001e08: f000 f910 bl 800202c - 8001e0c: 4603 mov r3, r0 - 8001e0e: 2b00 cmp r3, #0 - 8001e10: d006 beq.n 8001e20 + 8001eba: 6a7a ldr r2, [r7, #36] ; 0x24 + 8001ebc: 6bb9 ldr r1, [r7, #56] ; 0x38 + 8001ebe: 68f8 ldr r0, [r7, #12] + 8001ec0: f000 f910 bl 80020e4 + 8001ec4: 4603 mov r3, r0 + 8001ec6: 2b00 cmp r3, #0 + 8001ec8: d006 beq.n 8001ed8 { errorcode = HAL_ERROR; - 8001e12: 2301 movs r3, #1 - 8001e14: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001eca: 2301 movs r3, #1 + 8001ecc: f887 302b strb.w r3, [r7, #43] ; 0x2b hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - 8001e18: 68fb ldr r3, [r7, #12] - 8001e1a: 2220 movs r2, #32 - 8001e1c: 655a str r2, [r3, #84] ; 0x54 + 8001ed0: 68fb ldr r3, [r7, #12] + 8001ed2: 2220 movs r2, #32 + 8001ed4: 655a str r2, [r3, #84] ; 0x54 goto error; - 8001e1e: e010 b.n 8001e42 + 8001ed6: e010 b.n 8001efa } /* Clear overrun flag in 2 Lines communication mode because received is not read */ if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - 8001e20: 68fb ldr r3, [r7, #12] - 8001e22: 689b ldr r3, [r3, #8] - 8001e24: 2b00 cmp r3, #0 - 8001e26: d10b bne.n 8001e40 + 8001ed8: 68fb ldr r3, [r7, #12] + 8001eda: 689b ldr r3, [r3, #8] + 8001edc: 2b00 cmp r3, #0 + 8001ede: d10b bne.n 8001ef8 { __HAL_SPI_CLEAR_OVRFLAG(hspi); - 8001e28: 2300 movs r3, #0 - 8001e2a: 617b str r3, [r7, #20] - 8001e2c: 68fb ldr r3, [r7, #12] - 8001e2e: 681b ldr r3, [r3, #0] - 8001e30: 68db ldr r3, [r3, #12] - 8001e32: 617b str r3, [r7, #20] - 8001e34: 68fb ldr r3, [r7, #12] - 8001e36: 681b ldr r3, [r3, #0] - 8001e38: 689b ldr r3, [r3, #8] - 8001e3a: 617b str r3, [r7, #20] - 8001e3c: 697b ldr r3, [r7, #20] - 8001e3e: e000 b.n 8001e42 + 8001ee0: 2300 movs r3, #0 + 8001ee2: 617b str r3, [r7, #20] + 8001ee4: 68fb ldr r3, [r7, #12] + 8001ee6: 681b ldr r3, [r3, #0] + 8001ee8: 68db ldr r3, [r3, #12] + 8001eea: 617b str r3, [r7, #20] + 8001eec: 68fb ldr r3, [r7, #12] + 8001eee: 681b ldr r3, [r3, #0] + 8001ef0: 689b ldr r3, [r3, #8] + 8001ef2: 617b str r3, [r7, #20] + 8001ef4: 697b ldr r3, [r7, #20] + 8001ef6: e000 b.n 8001efa } error : - 8001e40: bf00 nop + 8001ef8: bf00 nop hspi->State = HAL_SPI_STATE_READY; - 8001e42: 68fb ldr r3, [r7, #12] - 8001e44: 2201 movs r2, #1 - 8001e46: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001efa: 68fb ldr r3, [r7, #12] + 8001efc: 2201 movs r2, #1 + 8001efe: f883 2051 strb.w r2, [r3, #81] ; 0x51 __HAL_UNLOCK(hspi); - 8001e4a: 68fb ldr r3, [r7, #12] - 8001e4c: 2200 movs r2, #0 - 8001e4e: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001f02: 68fb ldr r3, [r7, #12] + 8001f04: 2200 movs r2, #0 + 8001f06: f883 2050 strb.w r2, [r3, #80] ; 0x50 return errorcode; - 8001e52: f897 302b ldrb.w r3, [r7, #43] ; 0x2b + 8001f0a: f897 302b ldrb.w r3, [r7, #43] ; 0x2b } - 8001e56: 4618 mov r0, r3 - 8001e58: 3730 adds r7, #48 ; 0x30 - 8001e5a: 46bd mov sp, r7 - 8001e5c: bd80 pop {r7, pc} + 8001f0e: 4618 mov r0, r3 + 8001f10: 3730 adds r7, #48 ; 0x30 + 8001f12: 46bd mov sp, r7 + 8001f14: bd80 pop {r7, pc} -08001e5e : +08001f16 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval SPI state */ HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi) { - 8001e5e: b480 push {r7} - 8001e60: b083 sub sp, #12 - 8001e62: af00 add r7, sp, #0 - 8001e64: 6078 str r0, [r7, #4] + 8001f16: b480 push {r7} + 8001f18: b083 sub sp, #12 + 8001f1a: af00 add r7, sp, #0 + 8001f1c: 6078 str r0, [r7, #4] /* Return SPI handle state */ return hspi->State; - 8001e66: 687b ldr r3, [r7, #4] - 8001e68: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001e6c: b2db uxtb r3, r3 + 8001f1e: 687b ldr r3, [r7, #4] + 8001f20: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001f24: b2db uxtb r3, r3 } - 8001e6e: 4618 mov r0, r3 - 8001e70: 370c adds r7, #12 - 8001e72: 46bd mov sp, r7 - 8001e74: bc80 pop {r7} - 8001e76: 4770 bx lr + 8001f26: 4618 mov r0, r3 + 8001f28: 370c adds r7, #12 + 8001f2a: 46bd mov sp, r7 + 8001f2c: bc80 pop {r7} + 8001f2e: 4770 bx lr -08001e78 : +08001f30 : * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, uint32_t Timeout, uint32_t Tickstart) { - 8001e78: b580 push {r7, lr} - 8001e7a: b088 sub sp, #32 - 8001e7c: af00 add r7, sp, #0 - 8001e7e: 60f8 str r0, [r7, #12] - 8001e80: 60b9 str r1, [r7, #8] - 8001e82: 603b str r3, [r7, #0] - 8001e84: 4613 mov r3, r2 - 8001e86: 71fb strb r3, [r7, #7] + 8001f30: b580 push {r7, lr} + 8001f32: b088 sub sp, #32 + 8001f34: af00 add r7, sp, #0 + 8001f36: 60f8 str r0, [r7, #12] + 8001f38: 60b9 str r1, [r7, #8] + 8001f3a: 603b str r3, [r7, #0] + 8001f3c: 4613 mov r3, r2 + 8001f3e: 71fb strb r3, [r7, #7] __IO uint32_t count; uint32_t tmp_timeout; uint32_t tmp_tickstart; /* Adjust Timeout value in case of end of transfer */ tmp_timeout = Timeout - (HAL_GetTick() - Tickstart); - 8001e88: f7fe fcd0 bl 800082c - 8001e8c: 4602 mov r2, r0 - 8001e8e: 6abb ldr r3, [r7, #40] ; 0x28 - 8001e90: 1a9b subs r3, r3, r2 - 8001e92: 683a ldr r2, [r7, #0] - 8001e94: 4413 add r3, r2 - 8001e96: 61fb str r3, [r7, #28] + 8001f40: f7fe fcb8 bl 80008b4 + 8001f44: 4602 mov r2, r0 + 8001f46: 6abb ldr r3, [r7, #40] ; 0x28 + 8001f48: 1a9b subs r3, r3, r2 + 8001f4a: 683a ldr r2, [r7, #0] + 8001f4c: 4413 add r3, r2 + 8001f4e: 61fb str r3, [r7, #28] tmp_tickstart = HAL_GetTick(); - 8001e98: f7fe fcc8 bl 800082c - 8001e9c: 61b8 str r0, [r7, #24] + 8001f50: f7fe fcb0 bl 80008b4 + 8001f54: 61b8 str r0, [r7, #24] /* Calculate Timeout based on a software loop to avoid blocking issue if Systick is disabled */ count = tmp_timeout * ((SystemCoreClock * 32U) >> 20U); - 8001e9e: 4b39 ldr r3, [pc, #228] ; (8001f84 ) - 8001ea0: 681b ldr r3, [r3, #0] - 8001ea2: 015b lsls r3, r3, #5 - 8001ea4: 0d1b lsrs r3, r3, #20 - 8001ea6: 69fa ldr r2, [r7, #28] - 8001ea8: fb02 f303 mul.w r3, r2, r3 - 8001eac: 617b str r3, [r7, #20] + 8001f56: 4b39 ldr r3, [pc, #228] ; (800203c ) + 8001f58: 681b ldr r3, [r3, #0] + 8001f5a: 015b lsls r3, r3, #5 + 8001f5c: 0d1b lsrs r3, r3, #20 + 8001f5e: 69fa ldr r2, [r7, #28] + 8001f60: fb02 f303 mul.w r3, r2, r3 + 8001f64: 617b str r3, [r7, #20] while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) - 8001eae: e054 b.n 8001f5a + 8001f66: e054 b.n 8002012 { if (Timeout != HAL_MAX_DELAY) - 8001eb0: 683b ldr r3, [r7, #0] - 8001eb2: f1b3 3fff cmp.w r3, #4294967295 - 8001eb6: d050 beq.n 8001f5a + 8001f68: 683b ldr r3, [r7, #0] + 8001f6a: f1b3 3fff cmp.w r3, #4294967295 + 8001f6e: d050 beq.n 8002012 { if (((HAL_GetTick() - tmp_tickstart) >= tmp_timeout) || (tmp_timeout == 0U)) - 8001eb8: f7fe fcb8 bl 800082c - 8001ebc: 4602 mov r2, r0 - 8001ebe: 69bb ldr r3, [r7, #24] - 8001ec0: 1ad3 subs r3, r2, r3 - 8001ec2: 69fa ldr r2, [r7, #28] - 8001ec4: 429a cmp r2, r3 - 8001ec6: d902 bls.n 8001ece - 8001ec8: 69fb ldr r3, [r7, #28] - 8001eca: 2b00 cmp r3, #0 - 8001ecc: d13d bne.n 8001f4a + 8001f70: f7fe fca0 bl 80008b4 + 8001f74: 4602 mov r2, r0 + 8001f76: 69bb ldr r3, [r7, #24] + 8001f78: 1ad3 subs r3, r2, r3 + 8001f7a: 69fa ldr r2, [r7, #28] + 8001f7c: 429a cmp r2, r3 + 8001f7e: d902 bls.n 8001f86 + 8001f80: 69fb ldr r3, [r7, #28] + 8001f82: 2b00 cmp r3, #0 + 8001f84: d13d bne.n 8002002 /* Disable the SPI and reset the CRC: the CRC value should be cleared on both master and slave sides in order to resynchronize the master and slave for their respective CRC calculation */ /* Disable TXE, RXNE and ERR interrupts for the interrupt process */ __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); - 8001ece: 68fb ldr r3, [r7, #12] - 8001ed0: 681b ldr r3, [r3, #0] - 8001ed2: 685a ldr r2, [r3, #4] - 8001ed4: 68fb ldr r3, [r7, #12] - 8001ed6: 681b ldr r3, [r3, #0] - 8001ed8: f022 02e0 bic.w r2, r2, #224 ; 0xe0 - 8001edc: 605a str r2, [r3, #4] + 8001f86: 68fb ldr r3, [r7, #12] + 8001f88: 681b ldr r3, [r3, #0] + 8001f8a: 685a ldr r2, [r3, #4] + 8001f8c: 68fb ldr r3, [r7, #12] + 8001f8e: 681b ldr r3, [r3, #0] + 8001f90: f022 02e0 bic.w r2, r2, #224 ; 0xe0 + 8001f94: 605a str r2, [r3, #4] if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) - 8001ede: 68fb ldr r3, [r7, #12] - 8001ee0: 685b ldr r3, [r3, #4] - 8001ee2: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001ee6: d111 bne.n 8001f0c - 8001ee8: 68fb ldr r3, [r7, #12] - 8001eea: 689b ldr r3, [r3, #8] - 8001eec: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 8001ef0: d004 beq.n 8001efc + 8001f96: 68fb ldr r3, [r7, #12] + 8001f98: 685b ldr r3, [r3, #4] + 8001f9a: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001f9e: d111 bne.n 8001fc4 + 8001fa0: 68fb ldr r3, [r7, #12] + 8001fa2: 689b ldr r3, [r3, #8] + 8001fa4: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 8001fa8: d004 beq.n 8001fb4 || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) - 8001ef2: 68fb ldr r3, [r7, #12] - 8001ef4: 689b ldr r3, [r3, #8] - 8001ef6: f5b3 6f80 cmp.w r3, #1024 ; 0x400 - 8001efa: d107 bne.n 8001f0c + 8001faa: 68fb ldr r3, [r7, #12] + 8001fac: 689b ldr r3, [r3, #8] + 8001fae: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 8001fb2: d107 bne.n 8001fc4 { /* Disable SPI peripheral */ __HAL_SPI_DISABLE(hspi); - 8001efc: 68fb ldr r3, [r7, #12] - 8001efe: 681b ldr r3, [r3, #0] - 8001f00: 681a ldr r2, [r3, #0] - 8001f02: 68fb ldr r3, [r7, #12] - 8001f04: 681b ldr r3, [r3, #0] - 8001f06: f022 0240 bic.w r2, r2, #64 ; 0x40 - 8001f0a: 601a str r2, [r3, #0] + 8001fb4: 68fb ldr r3, [r7, #12] + 8001fb6: 681b ldr r3, [r3, #0] + 8001fb8: 681a ldr r2, [r3, #0] + 8001fba: 68fb ldr r3, [r7, #12] + 8001fbc: 681b ldr r3, [r3, #0] + 8001fbe: f022 0240 bic.w r2, r2, #64 ; 0x40 + 8001fc2: 601a str r2, [r3, #0] } /* Reset CRC Calculation */ if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - 8001f0c: 68fb ldr r3, [r7, #12] - 8001f0e: 6a9b ldr r3, [r3, #40] ; 0x28 - 8001f10: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 - 8001f14: d10f bne.n 8001f36 + 8001fc4: 68fb ldr r3, [r7, #12] + 8001fc6: 6a9b ldr r3, [r3, #40] ; 0x28 + 8001fc8: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 + 8001fcc: d10f bne.n 8001fee { SPI_RESET_CRC(hspi); - 8001f16: 68fb ldr r3, [r7, #12] - 8001f18: 681b ldr r3, [r3, #0] - 8001f1a: 681a ldr r2, [r3, #0] - 8001f1c: 68fb ldr r3, [r7, #12] - 8001f1e: 681b ldr r3, [r3, #0] - 8001f20: f422 5200 bic.w r2, r2, #8192 ; 0x2000 - 8001f24: 601a str r2, [r3, #0] - 8001f26: 68fb ldr r3, [r7, #12] - 8001f28: 681b ldr r3, [r3, #0] - 8001f2a: 681a ldr r2, [r3, #0] - 8001f2c: 68fb ldr r3, [r7, #12] - 8001f2e: 681b ldr r3, [r3, #0] - 8001f30: f442 5200 orr.w r2, r2, #8192 ; 0x2000 - 8001f34: 601a str r2, [r3, #0] + 8001fce: 68fb ldr r3, [r7, #12] + 8001fd0: 681b ldr r3, [r3, #0] + 8001fd2: 681a ldr r2, [r3, #0] + 8001fd4: 68fb ldr r3, [r7, #12] + 8001fd6: 681b ldr r3, [r3, #0] + 8001fd8: f422 5200 bic.w r2, r2, #8192 ; 0x2000 + 8001fdc: 601a str r2, [r3, #0] + 8001fde: 68fb ldr r3, [r7, #12] + 8001fe0: 681b ldr r3, [r3, #0] + 8001fe2: 681a ldr r2, [r3, #0] + 8001fe4: 68fb ldr r3, [r7, #12] + 8001fe6: 681b ldr r3, [r3, #0] + 8001fe8: f442 5200 orr.w r2, r2, #8192 ; 0x2000 + 8001fec: 601a str r2, [r3, #0] } hspi->State = HAL_SPI_STATE_READY; - 8001f36: 68fb ldr r3, [r7, #12] - 8001f38: 2201 movs r2, #1 - 8001f3a: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001fee: 68fb ldr r3, [r7, #12] + 8001ff0: 2201 movs r2, #1 + 8001ff2: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Process Unlocked */ __HAL_UNLOCK(hspi); - 8001f3e: 68fb ldr r3, [r7, #12] - 8001f40: 2200 movs r2, #0 - 8001f42: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001ff6: 68fb ldr r3, [r7, #12] + 8001ff8: 2200 movs r2, #0 + 8001ffa: f883 2050 strb.w r2, [r3, #80] ; 0x50 return HAL_TIMEOUT; - 8001f46: 2303 movs r3, #3 - 8001f48: e017 b.n 8001f7a + 8001ffe: 2303 movs r3, #3 + 8002000: e017 b.n 8002032 } /* If Systick is disabled or not incremented, deactivate timeout to go in disable loop procedure */ if(count == 0U) - 8001f4a: 697b ldr r3, [r7, #20] - 8001f4c: 2b00 cmp r3, #0 - 8001f4e: d101 bne.n 8001f54 + 8002002: 697b ldr r3, [r7, #20] + 8002004: 2b00 cmp r3, #0 + 8002006: d101 bne.n 800200c { tmp_timeout = 0U; - 8001f50: 2300 movs r3, #0 - 8001f52: 61fb str r3, [r7, #28] + 8002008: 2300 movs r3, #0 + 800200a: 61fb str r3, [r7, #28] } count--; - 8001f54: 697b ldr r3, [r7, #20] - 8001f56: 3b01 subs r3, #1 - 8001f58: 617b str r3, [r7, #20] + 800200c: 697b ldr r3, [r7, #20] + 800200e: 3b01 subs r3, #1 + 8002010: 617b str r3, [r7, #20] while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) - 8001f5a: 68fb ldr r3, [r7, #12] - 8001f5c: 681b ldr r3, [r3, #0] - 8001f5e: 689a ldr r2, [r3, #8] - 8001f60: 68bb ldr r3, [r7, #8] - 8001f62: 4013 ands r3, r2 - 8001f64: 68ba ldr r2, [r7, #8] - 8001f66: 429a cmp r2, r3 - 8001f68: bf0c ite eq - 8001f6a: 2301 moveq r3, #1 - 8001f6c: 2300 movne r3, #0 - 8001f6e: b2db uxtb r3, r3 - 8001f70: 461a mov r2, r3 - 8001f72: 79fb ldrb r3, [r7, #7] - 8001f74: 429a cmp r2, r3 - 8001f76: d19b bne.n 8001eb0 + 8002012: 68fb ldr r3, [r7, #12] + 8002014: 681b ldr r3, [r3, #0] + 8002016: 689a ldr r2, [r3, #8] + 8002018: 68bb ldr r3, [r7, #8] + 800201a: 4013 ands r3, r2 + 800201c: 68ba ldr r2, [r7, #8] + 800201e: 429a cmp r2, r3 + 8002020: bf0c ite eq + 8002022: 2301 moveq r3, #1 + 8002024: 2300 movne r3, #0 + 8002026: b2db uxtb r3, r3 + 8002028: 461a mov r2, r3 + 800202a: 79fb ldrb r3, [r7, #7] + 800202c: 429a cmp r2, r3 + 800202e: d19b bne.n 8001f68 } } return HAL_OK; - 8001f78: 2300 movs r3, #0 + 8002030: 2300 movs r3, #0 } - 8001f7a: 4618 mov r0, r3 - 8001f7c: 3720 adds r7, #32 - 8001f7e: 46bd mov sp, r7 - 8001f80: bd80 pop {r7, pc} - 8001f82: bf00 nop - 8001f84: 20000000 .word 0x20000000 + 8002032: 4618 mov r0, r3 + 8002034: 3720 adds r7, #32 + 8002036: 46bd mov sp, r7 + 8002038: bd80 pop {r7, pc} + 800203a: bf00 nop + 800203c: 20000000 .word 0x20000000 -08001f88 : +08002040 : * @param Timeout Timeout duration * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) { - 8001f88: b580 push {r7, lr} - 8001f8a: b086 sub sp, #24 - 8001f8c: af02 add r7, sp, #8 - 8001f8e: 60f8 str r0, [r7, #12] - 8001f90: 60b9 str r1, [r7, #8] - 8001f92: 607a str r2, [r7, #4] + 8002040: b580 push {r7, lr} + 8002042: b086 sub sp, #24 + 8002044: af02 add r7, sp, #8 + 8002046: 60f8 str r0, [r7, #12] + 8002048: 60b9 str r1, [r7, #8] + 800204a: 607a str r2, [r7, #4] if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) - 8001f94: 68fb ldr r3, [r7, #12] - 8001f96: 685b ldr r3, [r3, #4] - 8001f98: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001f9c: d111 bne.n 8001fc2 - 8001f9e: 68fb ldr r3, [r7, #12] - 8001fa0: 689b ldr r3, [r3, #8] - 8001fa2: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 8001fa6: d004 beq.n 8001fb2 + 800204c: 68fb ldr r3, [r7, #12] + 800204e: 685b ldr r3, [r3, #4] + 8002050: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8002054: d111 bne.n 800207a + 8002056: 68fb ldr r3, [r7, #12] + 8002058: 689b ldr r3, [r3, #8] + 800205a: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 800205e: d004 beq.n 800206a || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) - 8001fa8: 68fb ldr r3, [r7, #12] - 8001faa: 689b ldr r3, [r3, #8] - 8001fac: f5b3 6f80 cmp.w r3, #1024 ; 0x400 - 8001fb0: d107 bne.n 8001fc2 + 8002060: 68fb ldr r3, [r7, #12] + 8002062: 689b ldr r3, [r3, #8] + 8002064: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 8002068: d107 bne.n 800207a { /* Disable SPI peripheral */ __HAL_SPI_DISABLE(hspi); - 8001fb2: 68fb ldr r3, [r7, #12] - 8001fb4: 681b ldr r3, [r3, #0] - 8001fb6: 681a ldr r2, [r3, #0] - 8001fb8: 68fb ldr r3, [r7, #12] - 8001fba: 681b ldr r3, [r3, #0] - 8001fbc: f022 0240 bic.w r2, r2, #64 ; 0x40 - 8001fc0: 601a str r2, [r3, #0] + 800206a: 68fb ldr r3, [r7, #12] + 800206c: 681b ldr r3, [r3, #0] + 800206e: 681a ldr r2, [r3, #0] + 8002070: 68fb ldr r3, [r7, #12] + 8002072: 681b ldr r3, [r3, #0] + 8002074: f022 0240 bic.w r2, r2, #64 ; 0x40 + 8002078: 601a str r2, [r3, #0] } if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY)) - 8001fc2: 68fb ldr r3, [r7, #12] - 8001fc4: 685b ldr r3, [r3, #4] - 8001fc6: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001fca: d117 bne.n 8001ffc - 8001fcc: 68fb ldr r3, [r7, #12] - 8001fce: 689b ldr r3, [r3, #8] - 8001fd0: f5b3 6f80 cmp.w r3, #1024 ; 0x400 - 8001fd4: d112 bne.n 8001ffc + 800207a: 68fb ldr r3, [r7, #12] + 800207c: 685b ldr r3, [r3, #4] + 800207e: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8002082: d117 bne.n 80020b4 + 8002084: 68fb ldr r3, [r7, #12] + 8002086: 689b ldr r3, [r3, #8] + 8002088: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 800208c: d112 bne.n 80020b4 { /* Wait the RXNE reset */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout, Tickstart) != HAL_OK) - 8001fd6: 687b ldr r3, [r7, #4] - 8001fd8: 9300 str r3, [sp, #0] - 8001fda: 68bb ldr r3, [r7, #8] - 8001fdc: 2200 movs r2, #0 - 8001fde: 2101 movs r1, #1 - 8001fe0: 68f8 ldr r0, [r7, #12] - 8001fe2: f7ff ff49 bl 8001e78 - 8001fe6: 4603 mov r3, r0 - 8001fe8: 2b00 cmp r3, #0 - 8001fea: d01a beq.n 8002022 + 800208e: 687b ldr r3, [r7, #4] + 8002090: 9300 str r3, [sp, #0] + 8002092: 68bb ldr r3, [r7, #8] + 8002094: 2200 movs r2, #0 + 8002096: 2101 movs r1, #1 + 8002098: 68f8 ldr r0, [r7, #12] + 800209a: f7ff ff49 bl 8001f30 + 800209e: 4603 mov r3, r0 + 80020a0: 2b00 cmp r3, #0 + 80020a2: d01a beq.n 80020da { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - 8001fec: 68fb ldr r3, [r7, #12] - 8001fee: 6d5b ldr r3, [r3, #84] ; 0x54 - 8001ff0: f043 0220 orr.w r2, r3, #32 - 8001ff4: 68fb ldr r3, [r7, #12] - 8001ff6: 655a str r2, [r3, #84] ; 0x54 + 80020a4: 68fb ldr r3, [r7, #12] + 80020a6: 6d5b ldr r3, [r3, #84] ; 0x54 + 80020a8: f043 0220 orr.w r2, r3, #32 + 80020ac: 68fb ldr r3, [r7, #12] + 80020ae: 655a str r2, [r3, #84] ; 0x54 return HAL_TIMEOUT; - 8001ff8: 2303 movs r3, #3 - 8001ffa: e013 b.n 8002024 + 80020b0: 2303 movs r3, #3 + 80020b2: e013 b.n 80020dc } } else { /* Control the BSY flag */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) - 8001ffc: 687b ldr r3, [r7, #4] - 8001ffe: 9300 str r3, [sp, #0] - 8002000: 68bb ldr r3, [r7, #8] - 8002002: 2200 movs r2, #0 - 8002004: 2180 movs r1, #128 ; 0x80 - 8002006: 68f8 ldr r0, [r7, #12] - 8002008: f7ff ff36 bl 8001e78 - 800200c: 4603 mov r3, r0 - 800200e: 2b00 cmp r3, #0 - 8002010: d007 beq.n 8002022 + 80020b4: 687b ldr r3, [r7, #4] + 80020b6: 9300 str r3, [sp, #0] + 80020b8: 68bb ldr r3, [r7, #8] + 80020ba: 2200 movs r2, #0 + 80020bc: 2180 movs r1, #128 ; 0x80 + 80020be: 68f8 ldr r0, [r7, #12] + 80020c0: f7ff ff36 bl 8001f30 + 80020c4: 4603 mov r3, r0 + 80020c6: 2b00 cmp r3, #0 + 80020c8: d007 beq.n 80020da { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - 8002012: 68fb ldr r3, [r7, #12] - 8002014: 6d5b ldr r3, [r3, #84] ; 0x54 - 8002016: f043 0220 orr.w r2, r3, #32 - 800201a: 68fb ldr r3, [r7, #12] - 800201c: 655a str r2, [r3, #84] ; 0x54 + 80020ca: 68fb ldr r3, [r7, #12] + 80020cc: 6d5b ldr r3, [r3, #84] ; 0x54 + 80020ce: f043 0220 orr.w r2, r3, #32 + 80020d2: 68fb ldr r3, [r7, #12] + 80020d4: 655a str r2, [r3, #84] ; 0x54 return HAL_TIMEOUT; - 800201e: 2303 movs r3, #3 - 8002020: e000 b.n 8002024 + 80020d6: 2303 movs r3, #3 + 80020d8: e000 b.n 80020dc } } return HAL_OK; - 8002022: 2300 movs r3, #0 + 80020da: 2300 movs r3, #0 } - 8002024: 4618 mov r0, r3 - 8002026: 3710 adds r7, #16 - 8002028: 46bd mov sp, r7 - 800202a: bd80 pop {r7, pc} + 80020dc: 4618 mov r0, r3 + 80020de: 3710 adds r7, #16 + 80020e0: 46bd mov sp, r7 + 80020e2: bd80 pop {r7, pc} -0800202c : +080020e4 : * @param Timeout Timeout duration * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) { - 800202c: b580 push {r7, lr} - 800202e: b086 sub sp, #24 - 8002030: af02 add r7, sp, #8 - 8002032: 60f8 str r0, [r7, #12] - 8002034: 60b9 str r1, [r7, #8] - 8002036: 607a str r2, [r7, #4] + 80020e4: b580 push {r7, lr} + 80020e6: b086 sub sp, #24 + 80020e8: af02 add r7, sp, #8 + 80020ea: 60f8 str r0, [r7, #12] + 80020ec: 60b9 str r1, [r7, #8] + 80020ee: 607a str r2, [r7, #4] /* Control the BSY flag */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) - 8002038: 687b ldr r3, [r7, #4] - 800203a: 9300 str r3, [sp, #0] - 800203c: 68bb ldr r3, [r7, #8] - 800203e: 2200 movs r2, #0 - 8002040: 2180 movs r1, #128 ; 0x80 - 8002042: 68f8 ldr r0, [r7, #12] - 8002044: f7ff ff18 bl 8001e78 - 8002048: 4603 mov r3, r0 - 800204a: 2b00 cmp r3, #0 - 800204c: d007 beq.n 800205e + 80020f0: 687b ldr r3, [r7, #4] + 80020f2: 9300 str r3, [sp, #0] + 80020f4: 68bb ldr r3, [r7, #8] + 80020f6: 2200 movs r2, #0 + 80020f8: 2180 movs r1, #128 ; 0x80 + 80020fa: 68f8 ldr r0, [r7, #12] + 80020fc: f7ff ff18 bl 8001f30 + 8002100: 4603 mov r3, r0 + 8002102: 2b00 cmp r3, #0 + 8002104: d007 beq.n 8002116 { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - 800204e: 68fb ldr r3, [r7, #12] - 8002050: 6d5b ldr r3, [r3, #84] ; 0x54 - 8002052: f043 0220 orr.w r2, r3, #32 - 8002056: 68fb ldr r3, [r7, #12] - 8002058: 655a str r2, [r3, #84] ; 0x54 + 8002106: 68fb ldr r3, [r7, #12] + 8002108: 6d5b ldr r3, [r3, #84] ; 0x54 + 800210a: f043 0220 orr.w r2, r3, #32 + 800210e: 68fb ldr r3, [r7, #12] + 8002110: 655a str r2, [r3, #84] ; 0x54 return HAL_TIMEOUT; - 800205a: 2303 movs r3, #3 - 800205c: e000 b.n 8002060 + 8002112: 2303 movs r3, #3 + 8002114: e000 b.n 8002118 } return HAL_OK; - 800205e: 2300 movs r3, #0 + 8002116: 2300 movs r3, #0 } - 8002060: 4618 mov r0, r3 - 8002062: 3710 adds r7, #16 - 8002064: 46bd mov sp, r7 - 8002066: bd80 pop {r7, pc} + 8002118: 4618 mov r0, r3 + 800211a: 3710 adds r7, #16 + 800211c: 46bd mov sp, r7 + 800211e: bd80 pop {r7, pc} -08002068 : +08002120 : * @param ExtTiming Pointer to SRAM extended mode timing structure * @retval HAL status */ HAL_StatusTypeDef HAL_SRAM_Init(SRAM_HandleTypeDef *hsram, FSMC_NORSRAM_TimingTypeDef *Timing, FSMC_NORSRAM_TimingTypeDef *ExtTiming) { - 8002068: b580 push {r7, lr} - 800206a: b084 sub sp, #16 - 800206c: af00 add r7, sp, #0 - 800206e: 60f8 str r0, [r7, #12] - 8002070: 60b9 str r1, [r7, #8] - 8002072: 607a str r2, [r7, #4] + 8002120: b580 push {r7, lr} + 8002122: b084 sub sp, #16 + 8002124: af00 add r7, sp, #0 + 8002126: 60f8 str r0, [r7, #12] + 8002128: 60b9 str r1, [r7, #8] + 800212a: 607a str r2, [r7, #4] /* Check the SRAM handle parameter */ if ((hsram == NULL) || (hsram->Init.BurstAccessMode == FSMC_BURST_ACCESS_MODE_ENABLE)) - 8002074: 68fb ldr r3, [r7, #12] - 8002076: 2b00 cmp r3, #0 - 8002078: d004 beq.n 8002084 - 800207a: 68fb ldr r3, [r7, #12] - 800207c: 699b ldr r3, [r3, #24] - 800207e: f5b3 7f80 cmp.w r3, #256 ; 0x100 - 8002082: d101 bne.n 8002088 + 800212c: 68fb ldr r3, [r7, #12] + 800212e: 2b00 cmp r3, #0 + 8002130: d004 beq.n 800213c + 8002132: 68fb ldr r3, [r7, #12] + 8002134: 699b ldr r3, [r3, #24] + 8002136: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 800213a: d101 bne.n 8002140 { return HAL_ERROR; - 8002084: 2301 movs r3, #1 - 8002086: e038 b.n 80020fa + 800213c: 2301 movs r3, #1 + 800213e: e038 b.n 80021b2 } if (hsram->State == HAL_SRAM_STATE_RESET) - 8002088: 68fb ldr r3, [r7, #12] - 800208a: f893 3041 ldrb.w r3, [r3, #65] ; 0x41 - 800208e: b2db uxtb r3, r3 - 8002090: 2b00 cmp r3, #0 - 8002092: d106 bne.n 80020a2 + 8002140: 68fb ldr r3, [r7, #12] + 8002142: f893 3041 ldrb.w r3, [r3, #65] ; 0x41 + 8002146: b2db uxtb r3, r3 + 8002148: 2b00 cmp r3, #0 + 800214a: d106 bne.n 800215a { /* Allocate lock resource and initialize it */ hsram->Lock = HAL_UNLOCKED; - 8002094: 68fb ldr r3, [r7, #12] - 8002096: 2200 movs r2, #0 - 8002098: f883 2040 strb.w r2, [r3, #64] ; 0x40 + 800214c: 68fb ldr r3, [r7, #12] + 800214e: 2200 movs r2, #0 + 8002150: f883 2040 strb.w r2, [r3, #64] ; 0x40 /* Init the low level hardware */ hsram->MspInitCallback(hsram); #else /* Initialize the low level hardware (MSP) */ HAL_SRAM_MspInit(hsram); - 800209c: 68f8 ldr r0, [r7, #12] - 800209e: f7fe fb0f bl 80006c0 + 8002154: 68f8 ldr r0, [r7, #12] + 8002156: f7fe fac1 bl 80006dc #endif } /* Initialize SRAM control Interface */ (void)FSMC_NORSRAM_Init(hsram->Instance, &(hsram->Init)); - 80020a2: 68fb ldr r3, [r7, #12] - 80020a4: 681a ldr r2, [r3, #0] - 80020a6: 68fb ldr r3, [r7, #12] - 80020a8: 3308 adds r3, #8 - 80020aa: 4619 mov r1, r3 - 80020ac: 4610 mov r0, r2 - 80020ae: f000 f829 bl 8002104 + 800215a: 68fb ldr r3, [r7, #12] + 800215c: 681a ldr r2, [r3, #0] + 800215e: 68fb ldr r3, [r7, #12] + 8002160: 3308 adds r3, #8 + 8002162: 4619 mov r1, r3 + 8002164: 4610 mov r0, r2 + 8002166: f000 f829 bl 80021bc /* Initialize SRAM timing Interface */ (void)FSMC_NORSRAM_Timing_Init(hsram->Instance, Timing, hsram->Init.NSBank); - 80020b2: 68fb ldr r3, [r7, #12] - 80020b4: 6818 ldr r0, [r3, #0] - 80020b6: 68fb ldr r3, [r7, #12] - 80020b8: 689b ldr r3, [r3, #8] - 80020ba: 461a mov r2, r3 - 80020bc: 68b9 ldr r1, [r7, #8] - 80020be: f000 f88b bl 80021d8 + 800216a: 68fb ldr r3, [r7, #12] + 800216c: 6818 ldr r0, [r3, #0] + 800216e: 68fb ldr r3, [r7, #12] + 8002170: 689b ldr r3, [r3, #8] + 8002172: 461a mov r2, r3 + 8002174: 68b9 ldr r1, [r7, #8] + 8002176: f000 f88b bl 8002290 /* Initialize SRAM extended mode timing Interface */ (void)FSMC_NORSRAM_Extended_Timing_Init(hsram->Extended, ExtTiming, hsram->Init.NSBank, - 80020c2: 68fb ldr r3, [r7, #12] - 80020c4: 6858 ldr r0, [r3, #4] - 80020c6: 68fb ldr r3, [r7, #12] - 80020c8: 689a ldr r2, [r3, #8] - 80020ca: 68fb ldr r3, [r7, #12] - 80020cc: 6b1b ldr r3, [r3, #48] ; 0x30 - 80020ce: 6879 ldr r1, [r7, #4] - 80020d0: f000 f8b6 bl 8002240 + 800217a: 68fb ldr r3, [r7, #12] + 800217c: 6858 ldr r0, [r3, #4] + 800217e: 68fb ldr r3, [r7, #12] + 8002180: 689a ldr r2, [r3, #8] + 8002182: 68fb ldr r3, [r7, #12] + 8002184: 6b1b ldr r3, [r3, #48] ; 0x30 + 8002186: 6879 ldr r1, [r7, #4] + 8002188: f000 f8b6 bl 80022f8 hsram->Init.ExtendedMode); /* Enable the NORSRAM device */ __FSMC_NORSRAM_ENABLE(hsram->Instance, hsram->Init.NSBank); - 80020d4: 68fb ldr r3, [r7, #12] - 80020d6: 681b ldr r3, [r3, #0] - 80020d8: 68fa ldr r2, [r7, #12] - 80020da: 6892 ldr r2, [r2, #8] - 80020dc: f853 1022 ldr.w r1, [r3, r2, lsl #2] - 80020e0: 68fb ldr r3, [r7, #12] - 80020e2: 681b ldr r3, [r3, #0] - 80020e4: 68fa ldr r2, [r7, #12] - 80020e6: 6892 ldr r2, [r2, #8] - 80020e8: f041 0101 orr.w r1, r1, #1 - 80020ec: f843 1022 str.w r1, [r3, r2, lsl #2] + 800218c: 68fb ldr r3, [r7, #12] + 800218e: 681b ldr r3, [r3, #0] + 8002190: 68fa ldr r2, [r7, #12] + 8002192: 6892 ldr r2, [r2, #8] + 8002194: f853 1022 ldr.w r1, [r3, r2, lsl #2] + 8002198: 68fb ldr r3, [r7, #12] + 800219a: 681b ldr r3, [r3, #0] + 800219c: 68fa ldr r2, [r7, #12] + 800219e: 6892 ldr r2, [r2, #8] + 80021a0: f041 0101 orr.w r1, r1, #1 + 80021a4: f843 1022 str.w r1, [r3, r2, lsl #2] /* Initialize the SRAM controller state */ hsram->State = HAL_SRAM_STATE_READY; - 80020f0: 68fb ldr r3, [r7, #12] - 80020f2: 2201 movs r2, #1 - 80020f4: f883 2041 strb.w r2, [r3, #65] ; 0x41 + 80021a8: 68fb ldr r3, [r7, #12] + 80021aa: 2201 movs r2, #1 + 80021ac: f883 2041 strb.w r2, [r3, #65] ; 0x41 return HAL_OK; - 80020f8: 2300 movs r3, #0 + 80021b0: 2300 movs r3, #0 } - 80020fa: 4618 mov r0, r3 - 80020fc: 3710 adds r7, #16 - 80020fe: 46bd mov sp, r7 - 8002100: bd80 pop {r7, pc} + 80021b2: 4618 mov r0, r3 + 80021b4: 3710 adds r7, #16 + 80021b6: 46bd mov sp, r7 + 80021b8: bd80 pop {r7, pc} ... -08002104 : +080021bc : * @param Init Pointer to NORSRAM Initialization structure * @retval HAL status */ HAL_StatusTypeDef FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_InitTypeDef *Init) { - 8002104: b480 push {r7} - 8002106: b087 sub sp, #28 - 8002108: af00 add r7, sp, #0 - 800210a: 6078 str r0, [r7, #4] - 800210c: 6039 str r1, [r7, #0] + 80021bc: b480 push {r7} + 80021be: b087 sub sp, #28 + 80021c0: af00 add r7, sp, #0 + 80021c2: 6078 str r0, [r7, #4] + 80021c4: 6039 str r1, [r7, #0] assert_param(IS_FSMC_ASYNWAIT(Init->AsynchronousWait)); assert_param(IS_FSMC_WRITE_BURST(Init->WriteBurst)); assert_param(IS_FSMC_PAGESIZE(Init->PageSize)); /* Disable NORSRAM Device */ __FSMC_NORSRAM_DISABLE(Device, Init->NSBank); - 800210e: 683b ldr r3, [r7, #0] - 8002110: 681a ldr r2, [r3, #0] - 8002112: 687b ldr r3, [r7, #4] - 8002114: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002118: 683a ldr r2, [r7, #0] - 800211a: 6812 ldr r2, [r2, #0] - 800211c: f023 0101 bic.w r1, r3, #1 - 8002120: 687b ldr r3, [r7, #4] - 8002122: f843 1022 str.w r1, [r3, r2, lsl #2] + 80021c6: 683b ldr r3, [r7, #0] + 80021c8: 681a ldr r2, [r3, #0] + 80021ca: 687b ldr r3, [r7, #4] + 80021cc: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 80021d0: 683a ldr r2, [r7, #0] + 80021d2: 6812 ldr r2, [r2, #0] + 80021d4: f023 0101 bic.w r1, r3, #1 + 80021d8: 687b ldr r3, [r7, #4] + 80021da: f843 1022 str.w r1, [r3, r2, lsl #2] /* Set NORSRAM device control parameters */ if (Init->MemoryType == FSMC_MEMORY_TYPE_NOR) - 8002126: 683b ldr r3, [r7, #0] - 8002128: 689b ldr r3, [r3, #8] - 800212a: 2b08 cmp r3, #8 - 800212c: d102 bne.n 8002134 + 80021de: 683b ldr r3, [r7, #0] + 80021e0: 689b ldr r3, [r3, #8] + 80021e2: 2b08 cmp r3, #8 + 80021e4: d102 bne.n 80021ec { flashaccess = FSMC_NORSRAM_FLASH_ACCESS_ENABLE; - 800212e: 2340 movs r3, #64 ; 0x40 - 8002130: 617b str r3, [r7, #20] - 8002132: e001 b.n 8002138 + 80021e6: 2340 movs r3, #64 ; 0x40 + 80021e8: 617b str r3, [r7, #20] + 80021ea: e001 b.n 80021f0 } else { flashaccess = FSMC_NORSRAM_FLASH_ACCESS_DISABLE; - 8002134: 2300 movs r3, #0 - 8002136: 617b str r3, [r7, #20] + 80021ec: 2300 movs r3, #0 + 80021ee: 617b str r3, [r7, #20] } btcr_reg = (flashaccess | \ Init->DataAddressMux | \ - 8002138: 683b ldr r3, [r7, #0] - 800213a: 685a ldr r2, [r3, #4] + 80021f0: 683b ldr r3, [r7, #0] + 80021f2: 685a ldr r2, [r3, #4] btcr_reg = (flashaccess | \ - 800213c: 697b ldr r3, [r7, #20] - 800213e: 431a orrs r2, r3 + 80021f4: 697b ldr r3, [r7, #20] + 80021f6: 431a orrs r2, r3 Init->MemoryType | \ - 8002140: 683b ldr r3, [r7, #0] - 8002142: 689b ldr r3, [r3, #8] + 80021f8: 683b ldr r3, [r7, #0] + 80021fa: 689b ldr r3, [r3, #8] Init->DataAddressMux | \ - 8002144: 431a orrs r2, r3 + 80021fc: 431a orrs r2, r3 Init->MemoryDataWidth | \ - 8002146: 683b ldr r3, [r7, #0] - 8002148: 68db ldr r3, [r3, #12] + 80021fe: 683b ldr r3, [r7, #0] + 8002200: 68db ldr r3, [r3, #12] Init->MemoryType | \ - 800214a: 431a orrs r2, r3 + 8002202: 431a orrs r2, r3 Init->BurstAccessMode | \ - 800214c: 683b ldr r3, [r7, #0] - 800214e: 691b ldr r3, [r3, #16] + 8002204: 683b ldr r3, [r7, #0] + 8002206: 691b ldr r3, [r3, #16] Init->MemoryDataWidth | \ - 8002150: 431a orrs r2, r3 + 8002208: 431a orrs r2, r3 Init->WaitSignalPolarity | \ - 8002152: 683b ldr r3, [r7, #0] - 8002154: 695b ldr r3, [r3, #20] + 800220a: 683b ldr r3, [r7, #0] + 800220c: 695b ldr r3, [r3, #20] Init->BurstAccessMode | \ - 8002156: 431a orrs r2, r3 + 800220e: 431a orrs r2, r3 Init->WaitSignalActive | \ - 8002158: 683b ldr r3, [r7, #0] - 800215a: 69db ldr r3, [r3, #28] + 8002210: 683b ldr r3, [r7, #0] + 8002212: 69db ldr r3, [r3, #28] Init->WaitSignalPolarity | \ - 800215c: 431a orrs r2, r3 + 8002214: 431a orrs r2, r3 Init->WriteOperation | \ - 800215e: 683b ldr r3, [r7, #0] - 8002160: 6a1b ldr r3, [r3, #32] + 8002216: 683b ldr r3, [r7, #0] + 8002218: 6a1b ldr r3, [r3, #32] Init->WaitSignalActive | \ - 8002162: 431a orrs r2, r3 + 800221a: 431a orrs r2, r3 Init->WaitSignal | \ - 8002164: 683b ldr r3, [r7, #0] - 8002166: 6a5b ldr r3, [r3, #36] ; 0x24 + 800221c: 683b ldr r3, [r7, #0] + 800221e: 6a5b ldr r3, [r3, #36] ; 0x24 Init->WriteOperation | \ - 8002168: 431a orrs r2, r3 + 8002220: 431a orrs r2, r3 Init->ExtendedMode | \ - 800216a: 683b ldr r3, [r7, #0] - 800216c: 6a9b ldr r3, [r3, #40] ; 0x28 + 8002222: 683b ldr r3, [r7, #0] + 8002224: 6a9b ldr r3, [r3, #40] ; 0x28 Init->WaitSignal | \ - 800216e: 431a orrs r2, r3 + 8002226: 431a orrs r2, r3 Init->AsynchronousWait | \ - 8002170: 683b ldr r3, [r7, #0] - 8002172: 6adb ldr r3, [r3, #44] ; 0x2c + 8002228: 683b ldr r3, [r7, #0] + 800222a: 6adb ldr r3, [r3, #44] ; 0x2c Init->ExtendedMode | \ - 8002174: 431a orrs r2, r3 + 800222c: 431a orrs r2, r3 Init->WriteBurst); - 8002176: 683b ldr r3, [r7, #0] - 8002178: 6b1b ldr r3, [r3, #48] ; 0x30 + 800222e: 683b ldr r3, [r7, #0] + 8002230: 6b1b ldr r3, [r3, #48] ; 0x30 btcr_reg = (flashaccess | \ - 800217a: 4313 orrs r3, r2 - 800217c: 613b str r3, [r7, #16] + 8002232: 4313 orrs r3, r2 + 8002234: 613b str r3, [r7, #16] btcr_reg |= Init->WrapMode; - 800217e: 683b ldr r3, [r7, #0] - 8002180: 699b ldr r3, [r3, #24] - 8002182: 693a ldr r2, [r7, #16] - 8002184: 4313 orrs r3, r2 - 8002186: 613b str r3, [r7, #16] + 8002236: 683b ldr r3, [r7, #0] + 8002238: 699b ldr r3, [r3, #24] + 800223a: 693a ldr r2, [r7, #16] + 800223c: 4313 orrs r3, r2 + 800223e: 613b str r3, [r7, #16] btcr_reg |= Init->PageSize; - 8002188: 683b ldr r3, [r7, #0] - 800218a: 6b5b ldr r3, [r3, #52] ; 0x34 - 800218c: 693a ldr r2, [r7, #16] - 800218e: 4313 orrs r3, r2 - 8002190: 613b str r3, [r7, #16] + 8002240: 683b ldr r3, [r7, #0] + 8002242: 6b5b ldr r3, [r3, #52] ; 0x34 + 8002244: 693a ldr r2, [r7, #16] + 8002246: 4313 orrs r3, r2 + 8002248: 613b str r3, [r7, #16] mask = (FSMC_BCRx_MBKEN | - 8002192: 4b10 ldr r3, [pc, #64] ; (80021d4 ) - 8002194: 60fb str r3, [r7, #12] + 800224a: 4b10 ldr r3, [pc, #64] ; (800228c ) + 800224c: 60fb str r3, [r7, #12] FSMC_BCRx_WAITEN | FSMC_BCRx_EXTMOD | FSMC_BCRx_ASYNCWAIT | FSMC_BCRx_CBURSTRW); mask |= FSMC_BCRx_WRAPMOD; - 8002196: 68fb ldr r3, [r7, #12] - 8002198: f443 6380 orr.w r3, r3, #1024 ; 0x400 - 800219c: 60fb str r3, [r7, #12] + 800224e: 68fb ldr r3, [r7, #12] + 8002250: f443 6380 orr.w r3, r3, #1024 ; 0x400 + 8002254: 60fb str r3, [r7, #12] mask |= 0x00070000U; /* CPSIZE to be defined in CMSIS file */ - 800219e: 68fb ldr r3, [r7, #12] - 80021a0: f443 23e0 orr.w r3, r3, #458752 ; 0x70000 - 80021a4: 60fb str r3, [r7, #12] + 8002256: 68fb ldr r3, [r7, #12] + 8002258: f443 23e0 orr.w r3, r3, #458752 ; 0x70000 + 800225c: 60fb str r3, [r7, #12] MODIFY_REG(Device->BTCR[Init->NSBank], mask, btcr_reg); - 80021a6: 683b ldr r3, [r7, #0] - 80021a8: 681a ldr r2, [r3, #0] - 80021aa: 687b ldr r3, [r7, #4] - 80021ac: f853 2022 ldr.w r2, [r3, r2, lsl #2] - 80021b0: 68fb ldr r3, [r7, #12] - 80021b2: 43db mvns r3, r3 - 80021b4: ea02 0103 and.w r1, r2, r3 - 80021b8: 683b ldr r3, [r7, #0] - 80021ba: 681a ldr r2, [r3, #0] - 80021bc: 693b ldr r3, [r7, #16] - 80021be: 4319 orrs r1, r3 - 80021c0: 687b ldr r3, [r7, #4] - 80021c2: f843 1022 str.w r1, [r3, r2, lsl #2] + 800225e: 683b ldr r3, [r7, #0] + 8002260: 681a ldr r2, [r3, #0] + 8002262: 687b ldr r3, [r7, #4] + 8002264: f853 2022 ldr.w r2, [r3, r2, lsl #2] + 8002268: 68fb ldr r3, [r7, #12] + 800226a: 43db mvns r3, r3 + 800226c: ea02 0103 and.w r1, r2, r3 + 8002270: 683b ldr r3, [r7, #0] + 8002272: 681a ldr r2, [r3, #0] + 8002274: 693b ldr r3, [r7, #16] + 8002276: 4319 orrs r1, r3 + 8002278: 687b ldr r3, [r7, #4] + 800227a: f843 1022 str.w r1, [r3, r2, lsl #2] return HAL_OK; - 80021c6: 2300 movs r3, #0 + 800227e: 2300 movs r3, #0 } - 80021c8: 4618 mov r0, r3 - 80021ca: 371c adds r7, #28 - 80021cc: 46bd mov sp, r7 - 80021ce: bc80 pop {r7} - 80021d0: 4770 bx lr - 80021d2: bf00 nop - 80021d4: 0008fb7f .word 0x0008fb7f + 8002280: 4618 mov r0, r3 + 8002282: 371c adds r7, #28 + 8002284: 46bd mov sp, r7 + 8002286: bc80 pop {r7} + 8002288: 4770 bx lr + 800228a: bf00 nop + 800228c: 0008fb7f .word 0x0008fb7f -080021d8 : +08002290 : * @param Bank NORSRAM bank number * @retval HAL status */ HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank) { - 80021d8: b480 push {r7} - 80021da: b085 sub sp, #20 - 80021dc: af00 add r7, sp, #0 - 80021de: 60f8 str r0, [r7, #12] - 80021e0: 60b9 str r1, [r7, #8] - 80021e2: 607a str r2, [r7, #4] + 8002290: b480 push {r7} + 8002292: b085 sub sp, #20 + 8002294: af00 add r7, sp, #0 + 8002296: 60f8 str r0, [r7, #12] + 8002298: 60b9 str r1, [r7, #8] + 800229a: 607a str r2, [r7, #4] assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency)); assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode)); assert_param(IS_FSMC_NORSRAM_BANK(Bank)); /* Set FSMC_NORSRAM device timing parameters */ MODIFY_REG(Device->BTCR[Bank + 1U], BTR_CLEAR_MASK, (Timing->AddressSetupTime | - 80021e4: 687b ldr r3, [r7, #4] - 80021e6: 1c5a adds r2, r3, #1 - 80021e8: 68fb ldr r3, [r7, #12] - 80021ea: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 80021ee: f003 4140 and.w r1, r3, #3221225472 ; 0xc0000000 - 80021f2: 68bb ldr r3, [r7, #8] - 80021f4: 681a ldr r2, [r3, #0] - 80021f6: 68bb ldr r3, [r7, #8] - 80021f8: 685b ldr r3, [r3, #4] - 80021fa: 011b lsls r3, r3, #4 - 80021fc: 431a orrs r2, r3 - 80021fe: 68bb ldr r3, [r7, #8] - 8002200: 689b ldr r3, [r3, #8] - 8002202: 021b lsls r3, r3, #8 - 8002204: 431a orrs r2, r3 - 8002206: 68bb ldr r3, [r7, #8] - 8002208: 68db ldr r3, [r3, #12] - 800220a: 041b lsls r3, r3, #16 - 800220c: 431a orrs r2, r3 - 800220e: 68bb ldr r3, [r7, #8] - 8002210: 691b ldr r3, [r3, #16] - 8002212: 3b01 subs r3, #1 - 8002214: 051b lsls r3, r3, #20 - 8002216: 431a orrs r2, r3 - 8002218: 68bb ldr r3, [r7, #8] - 800221a: 695b ldr r3, [r3, #20] - 800221c: 3b02 subs r3, #2 - 800221e: 061b lsls r3, r3, #24 - 8002220: 431a orrs r2, r3 - 8002222: 68bb ldr r3, [r7, #8] - 8002224: 699b ldr r3, [r3, #24] - 8002226: 4313 orrs r3, r2 - 8002228: 687a ldr r2, [r7, #4] - 800222a: 3201 adds r2, #1 - 800222c: 4319 orrs r1, r3 - 800222e: 68fb ldr r3, [r7, #12] - 8002230: f843 1022 str.w r1, [r3, r2, lsl #2] + 800229c: 687b ldr r3, [r7, #4] + 800229e: 1c5a adds r2, r3, #1 + 80022a0: 68fb ldr r3, [r7, #12] + 80022a2: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 80022a6: f003 4140 and.w r1, r3, #3221225472 ; 0xc0000000 + 80022aa: 68bb ldr r3, [r7, #8] + 80022ac: 681a ldr r2, [r3, #0] + 80022ae: 68bb ldr r3, [r7, #8] + 80022b0: 685b ldr r3, [r3, #4] + 80022b2: 011b lsls r3, r3, #4 + 80022b4: 431a orrs r2, r3 + 80022b6: 68bb ldr r3, [r7, #8] + 80022b8: 689b ldr r3, [r3, #8] + 80022ba: 021b lsls r3, r3, #8 + 80022bc: 431a orrs r2, r3 + 80022be: 68bb ldr r3, [r7, #8] + 80022c0: 68db ldr r3, [r3, #12] + 80022c2: 041b lsls r3, r3, #16 + 80022c4: 431a orrs r2, r3 + 80022c6: 68bb ldr r3, [r7, #8] + 80022c8: 691b ldr r3, [r3, #16] + 80022ca: 3b01 subs r3, #1 + 80022cc: 051b lsls r3, r3, #20 + 80022ce: 431a orrs r2, r3 + 80022d0: 68bb ldr r3, [r7, #8] + 80022d2: 695b ldr r3, [r3, #20] + 80022d4: 3b02 subs r3, #2 + 80022d6: 061b lsls r3, r3, #24 + 80022d8: 431a orrs r2, r3 + 80022da: 68bb ldr r3, [r7, #8] + 80022dc: 699b ldr r3, [r3, #24] + 80022de: 4313 orrs r3, r2 + 80022e0: 687a ldr r2, [r7, #4] + 80022e2: 3201 adds r2, #1 + 80022e4: 4319 orrs r1, r3 + 80022e6: 68fb ldr r3, [r7, #12] + 80022e8: f843 1022 str.w r1, [r3, r2, lsl #2] ((Timing->BusTurnAroundDuration) << FSMC_BTRx_BUSTURN_Pos) | (((Timing->CLKDivision) - 1U) << FSMC_BTRx_CLKDIV_Pos) | (((Timing->DataLatency) - 2U) << FSMC_BTRx_DATLAT_Pos) | (Timing->AccessMode))); return HAL_OK; - 8002234: 2300 movs r3, #0 + 80022ec: 2300 movs r3, #0 } - 8002236: 4618 mov r0, r3 - 8002238: 3714 adds r7, #20 - 800223a: 46bd mov sp, r7 - 800223c: bc80 pop {r7} - 800223e: 4770 bx lr + 80022ee: 4618 mov r0, r3 + 80022f0: 3714 adds r7, #20 + 80022f2: 46bd mov sp, r7 + 80022f4: bc80 pop {r7} + 80022f6: 4770 bx lr -08002240 : +080022f8 : * @arg FSMC_EXTENDED_MODE_ENABLE * @retval HAL status */ HAL_StatusTypeDef FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode) { - 8002240: b480 push {r7} - 8002242: b085 sub sp, #20 - 8002244: af00 add r7, sp, #0 - 8002246: 60f8 str r0, [r7, #12] - 8002248: 60b9 str r1, [r7, #8] - 800224a: 607a str r2, [r7, #4] - 800224c: 603b str r3, [r7, #0] + 80022f8: b480 push {r7} + 80022fa: b085 sub sp, #20 + 80022fc: af00 add r7, sp, #0 + 80022fe: 60f8 str r0, [r7, #12] + 8002300: 60b9 str r1, [r7, #8] + 8002302: 607a str r2, [r7, #4] + 8002304: 603b str r3, [r7, #0] /* Check the parameters */ assert_param(IS_FSMC_EXTENDED_MODE(ExtendedMode)); /* Set NORSRAM device timing register for write configuration, if extended mode is used */ if (ExtendedMode == FSMC_EXTENDED_MODE_ENABLE) - 800224e: 683b ldr r3, [r7, #0] - 8002250: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 - 8002254: d11d bne.n 8002292 + 8002306: 683b ldr r3, [r7, #0] + 8002308: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 + 800230c: d11d bne.n 800234a assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode)); assert_param(IS_FSMC_NORSRAM_BANK(Bank)); /* Set NORSRAM device timing register for write configuration, if extended mode is used */ #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime | - 8002256: 68fb ldr r3, [r7, #12] - 8002258: 687a ldr r2, [r7, #4] - 800225a: f853 2022 ldr.w r2, [r3, r2, lsl #2] - 800225e: 4b13 ldr r3, [pc, #76] ; (80022ac ) - 8002260: 4013 ands r3, r2 - 8002262: 68ba ldr r2, [r7, #8] - 8002264: 6811 ldr r1, [r2, #0] - 8002266: 68ba ldr r2, [r7, #8] - 8002268: 6852 ldr r2, [r2, #4] - 800226a: 0112 lsls r2, r2, #4 - 800226c: 4311 orrs r1, r2 - 800226e: 68ba ldr r2, [r7, #8] - 8002270: 6892 ldr r2, [r2, #8] - 8002272: 0212 lsls r2, r2, #8 - 8002274: 4311 orrs r1, r2 - 8002276: 68ba ldr r2, [r7, #8] - 8002278: 6992 ldr r2, [r2, #24] - 800227a: 4311 orrs r1, r2 - 800227c: 68ba ldr r2, [r7, #8] - 800227e: 68d2 ldr r2, [r2, #12] - 8002280: 0412 lsls r2, r2, #16 - 8002282: 430a orrs r2, r1 - 8002284: ea43 0102 orr.w r1, r3, r2 - 8002288: 68fb ldr r3, [r7, #12] - 800228a: 687a ldr r2, [r7, #4] - 800228c: f843 1022 str.w r1, [r3, r2, lsl #2] - 8002290: e005 b.n 800229e + 800230e: 68fb ldr r3, [r7, #12] + 8002310: 687a ldr r2, [r7, #4] + 8002312: f853 2022 ldr.w r2, [r3, r2, lsl #2] + 8002316: 4b13 ldr r3, [pc, #76] ; (8002364 ) + 8002318: 4013 ands r3, r2 + 800231a: 68ba ldr r2, [r7, #8] + 800231c: 6811 ldr r1, [r2, #0] + 800231e: 68ba ldr r2, [r7, #8] + 8002320: 6852 ldr r2, [r2, #4] + 8002322: 0112 lsls r2, r2, #4 + 8002324: 4311 orrs r1, r2 + 8002326: 68ba ldr r2, [r7, #8] + 8002328: 6892 ldr r2, [r2, #8] + 800232a: 0212 lsls r2, r2, #8 + 800232c: 4311 orrs r1, r2 + 800232e: 68ba ldr r2, [r7, #8] + 8002330: 6992 ldr r2, [r2, #24] + 8002332: 4311 orrs r1, r2 + 8002334: 68ba ldr r2, [r7, #8] + 8002336: 68d2 ldr r2, [r2, #12] + 8002338: 0412 lsls r2, r2, #16 + 800233a: 430a orrs r2, r1 + 800233c: ea43 0102 orr.w r1, r3, r2 + 8002340: 68fb ldr r3, [r7, #12] + 8002342: 687a ldr r2, [r7, #4] + 8002344: f843 1022 str.w r1, [r3, r2, lsl #2] + 8002348: e005 b.n 8002356 (((Timing->DataLatency) - 2U) << FSMC_BWTRx_DATLAT_Pos))); #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG */ } else { Device->BWTR[Bank] = 0x0FFFFFFFU; - 8002292: 68fb ldr r3, [r7, #12] - 8002294: 687a ldr r2, [r7, #4] - 8002296: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 - 800229a: f843 1022 str.w r1, [r3, r2, lsl #2] + 800234a: 68fb ldr r3, [r7, #12] + 800234c: 687a ldr r2, [r7, #4] + 800234e: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 + 8002352: f843 1022 str.w r1, [r3, r2, lsl #2] } return HAL_OK; - 800229e: 2300 movs r3, #0 + 8002356: 2300 movs r3, #0 } - 80022a0: 4618 mov r0, r3 - 80022a2: 3714 adds r7, #20 - 80022a4: 46bd mov sp, r7 - 80022a6: bc80 pop {r7} - 80022a8: 4770 bx lr - 80022aa: bf00 nop - 80022ac: cff00000 .word 0xcff00000 + 8002358: 4618 mov r0, r3 + 800235a: 3714 adds r7, #20 + 800235c: 46bd mov sp, r7 + 800235e: bc80 pop {r7} + 8002360: 4770 bx lr + 8002362: bf00 nop + 8002364: cff00000 .word 0xcff00000 -080022b0 : +08002368 : /* USER CODE BEGIN Variables */ /* USER CODE END Variables */ void MX_FATFS_Init(void) { - 80022b0: b580 push {r7, lr} - 80022b2: af00 add r7, sp, #0 + 8002368: b580 push {r7, lr} + 800236a: af00 add r7, sp, #0 /*## FatFS: Link the USER driver ###########################*/ retUSER = FATFS_LinkDriver(&USER_Driver, USERPath); - 80022b4: 4904 ldr r1, [pc, #16] ; (80022c8 ) - 80022b6: 4805 ldr r0, [pc, #20] ; (80022cc ) - 80022b8: f002 fa02 bl 80046c0 - 80022bc: 4603 mov r3, r0 - 80022be: 461a mov r2, r3 - 80022c0: 4b03 ldr r3, [pc, #12] ; (80022d0 ) - 80022c2: 701a strb r2, [r3, #0] + 800236c: 4904 ldr r1, [pc, #16] ; (8002380 ) + 800236e: 4805 ldr r0, [pc, #20] ; (8002384 ) + 8002370: f002 fa02 bl 8004778 + 8002374: 4603 mov r3, r0 + 8002376: 461a mov r2, r3 + 8002378: 4b03 ldr r3, [pc, #12] ; (8002388 ) + 800237a: 701a strb r2, [r3, #0] /* USER CODE BEGIN Init */ /* additional user code for init */ /* USER CODE END Init */ } - 80022c4: bf00 nop - 80022c6: bd80 pop {r7, pc} - 80022c8: 20000118 .word 0x20000118 - 80022cc: 2000000c .word 0x2000000c - 80022d0: 2000011c .word 0x2000011c + 800237c: bf00 nop + 800237e: bd80 pop {r7, pc} + 8002380: 20000188 .word 0x20000188 + 8002384: 2000000c .word 0x2000000c + 8002388: 2000018c .word 0x2000018c -080022d4 : +0800238c : * @brief Gets Time from RTC * @param None * @retval Time in DWORD */ DWORD get_fattime(void) { - 80022d4: b480 push {r7} - 80022d6: af00 add r7, sp, #0 + 800238c: b480 push {r7} + 800238e: af00 add r7, sp, #0 /* USER CODE BEGIN get_fattime */ return 0; - 80022d8: 2300 movs r3, #0 + 8002390: 2300 movs r3, #0 /* USER CODE END get_fattime */ } - 80022da: 4618 mov r0, r3 - 80022dc: 46bd mov sp, r7 - 80022de: bc80 pop {r7} - 80022e0: 4770 bx lr + 8002392: 4618 mov r0, r3 + 8002394: 46bd mov sp, r7 + 8002396: bc80 pop {r7} + 8002398: 4770 bx lr ... -080022e4 : +0800239c : * @retval DSTATUS: Operation status */ DSTATUS USER_initialize ( BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { - 80022e4: b580 push {r7, lr} - 80022e6: b082 sub sp, #8 - 80022e8: af00 add r7, sp, #0 - 80022ea: 4603 mov r3, r0 - 80022ec: 71fb strb r3, [r7, #7] + 800239c: b580 push {r7, lr} + 800239e: b082 sub sp, #8 + 80023a0: af00 add r7, sp, #0 + 80023a2: 4603 mov r3, r0 + 80023a4: 71fb strb r3, [r7, #7] /* USER CODE BEGIN INIT */ Stat = SD_disk_initialize(pdrv); - 80022ee: 79fb ldrb r3, [r7, #7] - 80022f0: 4618 mov r0, r3 - 80022f2: f002 fc3d bl 8004b70 - 80022f6: 4603 mov r3, r0 - 80022f8: 461a mov r2, r3 - 80022fa: 4b04 ldr r3, [pc, #16] ; (800230c ) - 80022fc: 701a strb r2, [r3, #0] + 80023a6: 79fb ldrb r3, [r7, #7] + 80023a8: 4618 mov r0, r3 + 80023aa: f002 fce7 bl 8004d7c + 80023ae: 4603 mov r3, r0 + 80023b0: 461a mov r2, r3 + 80023b2: 4b04 ldr r3, [pc, #16] ; (80023c4 ) + 80023b4: 701a strb r2, [r3, #0] return Stat; - 80022fe: 4b03 ldr r3, [pc, #12] ; (800230c ) - 8002300: 781b ldrb r3, [r3, #0] - 8002302: b2db uxtb r3, r3 + 80023b6: 4b03 ldr r3, [pc, #12] ; (80023c4 ) + 80023b8: 781b ldrb r3, [r3, #0] + 80023ba: b2db uxtb r3, r3 /* USER CODE END INIT */ } - 8002304: 4618 mov r0, r3 - 8002306: 3708 adds r7, #8 - 8002308: 46bd mov sp, r7 - 800230a: bd80 pop {r7, pc} - 800230c: 20000009 .word 0x20000009 + 80023bc: 4618 mov r0, r3 + 80023be: 3708 adds r7, #8 + 80023c0: 46bd mov sp, r7 + 80023c2: bd80 pop {r7, pc} + 80023c4: 20000009 .word 0x20000009 -08002310 : +080023c8 : * @retval DSTATUS: Operation status */ DSTATUS USER_status ( BYTE pdrv /* Physical drive number to identify the drive */ ) { - 8002310: b580 push {r7, lr} - 8002312: b082 sub sp, #8 - 8002314: af00 add r7, sp, #0 - 8002316: 4603 mov r3, r0 - 8002318: 71fb strb r3, [r7, #7] + 80023c8: b580 push {r7, lr} + 80023ca: b082 sub sp, #8 + 80023cc: af00 add r7, sp, #0 + 80023ce: 4603 mov r3, r0 + 80023d0: 71fb strb r3, [r7, #7] /* USER CODE BEGIN STATUS */ Stat = SD_disk_status (pdrv); - 800231a: 79fb ldrb r3, [r7, #7] - 800231c: 4618 mov r0, r3 - 800231e: f002 fd11 bl 8004d44 - 8002322: 4603 mov r3, r0 - 8002324: 461a mov r2, r3 - 8002326: 4b04 ldr r3, [pc, #16] ; (8002338 ) - 8002328: 701a strb r2, [r3, #0] + 80023d2: 79fb ldrb r3, [r7, #7] + 80023d4: 4618 mov r0, r3 + 80023d6: f002 fdc5 bl 8004f64 + 80023da: 4603 mov r3, r0 + 80023dc: 461a mov r2, r3 + 80023de: 4b04 ldr r3, [pc, #16] ; (80023f0 ) + 80023e0: 701a strb r2, [r3, #0] return Stat; - 800232a: 4b03 ldr r3, [pc, #12] ; (8002338 ) - 800232c: 781b ldrb r3, [r3, #0] - 800232e: b2db uxtb r3, r3 + 80023e2: 4b03 ldr r3, [pc, #12] ; (80023f0 ) + 80023e4: 781b ldrb r3, [r3, #0] + 80023e6: b2db uxtb r3, r3 /* USER CODE END STATUS */ } - 8002330: 4618 mov r0, r3 - 8002332: 3708 adds r7, #8 - 8002334: 46bd mov sp, r7 - 8002336: bd80 pop {r7, pc} - 8002338: 20000009 .word 0x20000009 + 80023e8: 4618 mov r0, r3 + 80023ea: 3708 adds r7, #8 + 80023ec: 46bd mov sp, r7 + 80023ee: bd80 pop {r7, pc} + 80023f0: 20000009 .word 0x20000009 -0800233c : +080023f4 : BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { - 800233c: b580 push {r7, lr} - 800233e: b084 sub sp, #16 - 8002340: af00 add r7, sp, #0 - 8002342: 60b9 str r1, [r7, #8] - 8002344: 607a str r2, [r7, #4] - 8002346: 603b str r3, [r7, #0] - 8002348: 4603 mov r3, r0 - 800234a: 73fb strb r3, [r7, #15] + 80023f4: b580 push {r7, lr} + 80023f6: b084 sub sp, #16 + 80023f8: af00 add r7, sp, #0 + 80023fa: 60b9 str r1, [r7, #8] + 80023fc: 607a str r2, [r7, #4] + 80023fe: 603b str r3, [r7, #0] + 8002400: 4603 mov r3, r0 + 8002402: 73fb strb r3, [r7, #15] /* USER CODE BEGIN READ */ return SD_disk_read (pdrv, buff, sector, count); - 800234c: 7bf8 ldrb r0, [r7, #15] - 800234e: 683b ldr r3, [r7, #0] - 8002350: 687a ldr r2, [r7, #4] - 8002352: 68b9 ldr r1, [r7, #8] - 8002354: f002 fd0a bl 8004d6c - 8002358: 4603 mov r3, r0 + 8002404: 7bf8 ldrb r0, [r7, #15] + 8002406: 683b ldr r3, [r7, #0] + 8002408: 687a ldr r2, [r7, #4] + 800240a: 68b9 ldr r1, [r7, #8] + 800240c: f002 fdbe bl 8004f8c + 8002410: 4603 mov r3, r0 /* USER CODE END READ */ } - 800235a: 4618 mov r0, r3 - 800235c: 3710 adds r7, #16 - 800235e: 46bd mov sp, r7 - 8002360: bd80 pop {r7, pc} + 8002412: 4618 mov r0, r3 + 8002414: 3710 adds r7, #16 + 8002416: 46bd mov sp, r7 + 8002418: bd80 pop {r7, pc} -08002362 : +0800241a : BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { - 8002362: b580 push {r7, lr} - 8002364: b084 sub sp, #16 - 8002366: af00 add r7, sp, #0 - 8002368: 60b9 str r1, [r7, #8] - 800236a: 607a str r2, [r7, #4] - 800236c: 603b str r3, [r7, #0] - 800236e: 4603 mov r3, r0 - 8002370: 73fb strb r3, [r7, #15] + 800241a: b580 push {r7, lr} + 800241c: b084 sub sp, #16 + 800241e: af00 add r7, sp, #0 + 8002420: 60b9 str r1, [r7, #8] + 8002422: 607a str r2, [r7, #4] + 8002424: 603b str r3, [r7, #0] + 8002426: 4603 mov r3, r0 + 8002428: 73fb strb r3, [r7, #15] /* USER CODE BEGIN WRITE */ /* USER CODE HERE */ return SD_disk_write (pdrv, buff, sector, count); - 8002372: 7bf8 ldrb r0, [r7, #15] - 8002374: 683b ldr r3, [r7, #0] - 8002376: 687a ldr r2, [r7, #4] - 8002378: 68b9 ldr r1, [r7, #8] - 800237a: f002 fd61 bl 8004e40 - 800237e: 4603 mov r3, r0 + 800242a: 7bf8 ldrb r0, [r7, #15] + 800242c: 683b ldr r3, [r7, #0] + 800242e: 687a ldr r2, [r7, #4] + 8002430: 68b9 ldr r1, [r7, #8] + 8002432: f002 fe15 bl 8005060 + 8002436: 4603 mov r3, r0 /* USER CODE END WRITE */ } - 8002380: 4618 mov r0, r3 - 8002382: 3710 adds r7, #16 - 8002384: 46bd mov sp, r7 - 8002386: bd80 pop {r7, pc} + 8002438: 4618 mov r0, r3 + 800243a: 3710 adds r7, #16 + 800243c: 46bd mov sp, r7 + 800243e: bd80 pop {r7, pc} -08002388 : +08002440 : DRESULT USER_ioctl ( BYTE pdrv, /* Physical drive nmuber (0..) */ BYTE cmd, /* Control code */ void *buff /* Buffer to send/receive control data */ ) { - 8002388: b580 push {r7, lr} - 800238a: b084 sub sp, #16 - 800238c: af00 add r7, sp, #0 - 800238e: 4603 mov r3, r0 - 8002390: 603a str r2, [r7, #0] - 8002392: 71fb strb r3, [r7, #7] - 8002394: 460b mov r3, r1 - 8002396: 71bb strb r3, [r7, #6] + 8002440: b580 push {r7, lr} + 8002442: b084 sub sp, #16 + 8002444: af00 add r7, sp, #0 + 8002446: 4603 mov r3, r0 + 8002448: 603a str r2, [r7, #0] + 800244a: 71fb strb r3, [r7, #7] + 800244c: 460b mov r3, r1 + 800244e: 71bb strb r3, [r7, #6] /* USER CODE BEGIN IOCTL */ DRESULT res = SD_disk_ioctl (pdrv, cmd, buff); - 8002398: 79b9 ldrb r1, [r7, #6] - 800239a: 79fb ldrb r3, [r7, #7] - 800239c: 683a ldr r2, [r7, #0] - 800239e: 4618 mov r0, r3 - 80023a0: f002 fdd2 bl 8004f48 - 80023a4: 4603 mov r3, r0 - 80023a6: 73fb strb r3, [r7, #15] + 8002450: 79b9 ldrb r1, [r7, #6] + 8002452: 79fb ldrb r3, [r7, #7] + 8002454: 683a ldr r2, [r7, #0] + 8002456: 4618 mov r0, r3 + 8002458: f002 fe86 bl 8005168 + 800245c: 4603 mov r3, r0 + 800245e: 73fb strb r3, [r7, #15] return res; - 80023a8: 7bfb ldrb r3, [r7, #15] + 8002460: 7bfb ldrb r3, [r7, #15] /* USER CODE END IOCTL */ } - 80023aa: 4618 mov r0, r3 - 80023ac: 3710 adds r7, #16 - 80023ae: 46bd mov sp, r7 - 80023b0: bd80 pop {r7, pc} + 8002462: 4618 mov r0, r3 + 8002464: 3710 adds r7, #16 + 8002466: 46bd mov sp, r7 + 8002468: bd80 pop {r7, pc} ... -080023b4 : +0800246c : * @retval DSTATUS: Operation status */ DSTATUS disk_status ( BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { - 80023b4: b580 push {r7, lr} - 80023b6: b084 sub sp, #16 - 80023b8: af00 add r7, sp, #0 - 80023ba: 4603 mov r3, r0 - 80023bc: 71fb strb r3, [r7, #7] + 800246c: b580 push {r7, lr} + 800246e: b084 sub sp, #16 + 8002470: af00 add r7, sp, #0 + 8002472: 4603 mov r3, r0 + 8002474: 71fb strb r3, [r7, #7] DSTATUS stat; stat = disk.drv[pdrv]->disk_status(disk.lun[pdrv]); - 80023be: 79fb ldrb r3, [r7, #7] - 80023c0: 4a08 ldr r2, [pc, #32] ; (80023e4 ) - 80023c2: 009b lsls r3, r3, #2 - 80023c4: 4413 add r3, r2 - 80023c6: 685b ldr r3, [r3, #4] - 80023c8: 685b ldr r3, [r3, #4] - 80023ca: 79fa ldrb r2, [r7, #7] - 80023cc: 4905 ldr r1, [pc, #20] ; (80023e4 ) - 80023ce: 440a add r2, r1 - 80023d0: 7a12 ldrb r2, [r2, #8] - 80023d2: 4610 mov r0, r2 - 80023d4: 4798 blx r3 - 80023d6: 4603 mov r3, r0 - 80023d8: 73fb strb r3, [r7, #15] + 8002476: 79fb ldrb r3, [r7, #7] + 8002478: 4a08 ldr r2, [pc, #32] ; (800249c ) + 800247a: 009b lsls r3, r3, #2 + 800247c: 4413 add r3, r2 + 800247e: 685b ldr r3, [r3, #4] + 8002480: 685b ldr r3, [r3, #4] + 8002482: 79fa ldrb r2, [r7, #7] + 8002484: 4905 ldr r1, [pc, #20] ; (800249c ) + 8002486: 440a add r2, r1 + 8002488: 7a12 ldrb r2, [r2, #8] + 800248a: 4610 mov r0, r2 + 800248c: 4798 blx r3 + 800248e: 4603 mov r3, r0 + 8002490: 73fb strb r3, [r7, #15] return stat; - 80023da: 7bfb ldrb r3, [r7, #15] + 8002492: 7bfb ldrb r3, [r7, #15] } - 80023dc: 4618 mov r0, r3 - 80023de: 3710 adds r7, #16 - 80023e0: 46bd mov sp, r7 - 80023e2: bd80 pop {r7, pc} - 80023e4: 20000064 .word 0x20000064 + 8002494: 4618 mov r0, r3 + 8002496: 3710 adds r7, #16 + 8002498: 46bd mov sp, r7 + 800249a: bd80 pop {r7, pc} + 800249c: 200000cc .word 0x200000cc -080023e8 : +080024a0 : * @retval DSTATUS: Operation status */ DSTATUS disk_initialize ( BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { - 80023e8: b580 push {r7, lr} - 80023ea: b084 sub sp, #16 - 80023ec: af00 add r7, sp, #0 - 80023ee: 4603 mov r3, r0 - 80023f0: 71fb strb r3, [r7, #7] + 80024a0: b580 push {r7, lr} + 80024a2: b084 sub sp, #16 + 80024a4: af00 add r7, sp, #0 + 80024a6: 4603 mov r3, r0 + 80024a8: 71fb strb r3, [r7, #7] DSTATUS stat = RES_OK; - 80023f2: 2300 movs r3, #0 - 80023f4: 73fb strb r3, [r7, #15] + 80024aa: 2300 movs r3, #0 + 80024ac: 73fb strb r3, [r7, #15] if(disk.is_initialized[pdrv] == 0) - 80023f6: 79fb ldrb r3, [r7, #7] - 80023f8: 4a0d ldr r2, [pc, #52] ; (8002430 ) - 80023fa: 5cd3 ldrb r3, [r2, r3] - 80023fc: 2b00 cmp r3, #0 - 80023fe: d111 bne.n 8002424 + 80024ae: 79fb ldrb r3, [r7, #7] + 80024b0: 4a0d ldr r2, [pc, #52] ; (80024e8 ) + 80024b2: 5cd3 ldrb r3, [r2, r3] + 80024b4: 2b00 cmp r3, #0 + 80024b6: d111 bne.n 80024dc { disk.is_initialized[pdrv] = 1; - 8002400: 79fb ldrb r3, [r7, #7] - 8002402: 4a0b ldr r2, [pc, #44] ; (8002430 ) - 8002404: 2101 movs r1, #1 - 8002406: 54d1 strb r1, [r2, r3] + 80024b8: 79fb ldrb r3, [r7, #7] + 80024ba: 4a0b ldr r2, [pc, #44] ; (80024e8 ) + 80024bc: 2101 movs r1, #1 + 80024be: 54d1 strb r1, [r2, r3] stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]); - 8002408: 79fb ldrb r3, [r7, #7] - 800240a: 4a09 ldr r2, [pc, #36] ; (8002430 ) - 800240c: 009b lsls r3, r3, #2 - 800240e: 4413 add r3, r2 - 8002410: 685b ldr r3, [r3, #4] - 8002412: 681b ldr r3, [r3, #0] - 8002414: 79fa ldrb r2, [r7, #7] - 8002416: 4906 ldr r1, [pc, #24] ; (8002430 ) - 8002418: 440a add r2, r1 - 800241a: 7a12 ldrb r2, [r2, #8] - 800241c: 4610 mov r0, r2 - 800241e: 4798 blx r3 - 8002420: 4603 mov r3, r0 - 8002422: 73fb strb r3, [r7, #15] + 80024c0: 79fb ldrb r3, [r7, #7] + 80024c2: 4a09 ldr r2, [pc, #36] ; (80024e8 ) + 80024c4: 009b lsls r3, r3, #2 + 80024c6: 4413 add r3, r2 + 80024c8: 685b ldr r3, [r3, #4] + 80024ca: 681b ldr r3, [r3, #0] + 80024cc: 79fa ldrb r2, [r7, #7] + 80024ce: 4906 ldr r1, [pc, #24] ; (80024e8 ) + 80024d0: 440a add r2, r1 + 80024d2: 7a12 ldrb r2, [r2, #8] + 80024d4: 4610 mov r0, r2 + 80024d6: 4798 blx r3 + 80024d8: 4603 mov r3, r0 + 80024da: 73fb strb r3, [r7, #15] } return stat; - 8002424: 7bfb ldrb r3, [r7, #15] + 80024dc: 7bfb ldrb r3, [r7, #15] } - 8002426: 4618 mov r0, r3 - 8002428: 3710 adds r7, #16 - 800242a: 46bd mov sp, r7 - 800242c: bd80 pop {r7, pc} - 800242e: bf00 nop - 8002430: 20000064 .word 0x20000064 + 80024de: 4618 mov r0, r3 + 80024e0: 3710 adds r7, #16 + 80024e2: 46bd mov sp, r7 + 80024e4: bd80 pop {r7, pc} + 80024e6: bf00 nop + 80024e8: 200000cc .word 0x200000cc -08002434 : +080024ec : BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { - 8002434: b590 push {r4, r7, lr} - 8002436: b087 sub sp, #28 - 8002438: af00 add r7, sp, #0 - 800243a: 60b9 str r1, [r7, #8] - 800243c: 607a str r2, [r7, #4] - 800243e: 603b str r3, [r7, #0] - 8002440: 4603 mov r3, r0 - 8002442: 73fb strb r3, [r7, #15] + 80024ec: b590 push {r4, r7, lr} + 80024ee: b087 sub sp, #28 + 80024f0: af00 add r7, sp, #0 + 80024f2: 60b9 str r1, [r7, #8] + 80024f4: 607a str r2, [r7, #4] + 80024f6: 603b str r3, [r7, #0] + 80024f8: 4603 mov r3, r0 + 80024fa: 73fb strb r3, [r7, #15] DRESULT res; res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); - 8002444: 7bfb ldrb r3, [r7, #15] - 8002446: 4a0a ldr r2, [pc, #40] ; (8002470 ) - 8002448: 009b lsls r3, r3, #2 - 800244a: 4413 add r3, r2 - 800244c: 685b ldr r3, [r3, #4] - 800244e: 689c ldr r4, [r3, #8] - 8002450: 7bfb ldrb r3, [r7, #15] - 8002452: 4a07 ldr r2, [pc, #28] ; (8002470 ) - 8002454: 4413 add r3, r2 - 8002456: 7a18 ldrb r0, [r3, #8] - 8002458: 683b ldr r3, [r7, #0] - 800245a: 687a ldr r2, [r7, #4] - 800245c: 68b9 ldr r1, [r7, #8] - 800245e: 47a0 blx r4 - 8002460: 4603 mov r3, r0 - 8002462: 75fb strb r3, [r7, #23] + 80024fc: 7bfb ldrb r3, [r7, #15] + 80024fe: 4a0a ldr r2, [pc, #40] ; (8002528 ) + 8002500: 009b lsls r3, r3, #2 + 8002502: 4413 add r3, r2 + 8002504: 685b ldr r3, [r3, #4] + 8002506: 689c ldr r4, [r3, #8] + 8002508: 7bfb ldrb r3, [r7, #15] + 800250a: 4a07 ldr r2, [pc, #28] ; (8002528 ) + 800250c: 4413 add r3, r2 + 800250e: 7a18 ldrb r0, [r3, #8] + 8002510: 683b ldr r3, [r7, #0] + 8002512: 687a ldr r2, [r7, #4] + 8002514: 68b9 ldr r1, [r7, #8] + 8002516: 47a0 blx r4 + 8002518: 4603 mov r3, r0 + 800251a: 75fb strb r3, [r7, #23] return res; - 8002464: 7dfb ldrb r3, [r7, #23] + 800251c: 7dfb ldrb r3, [r7, #23] } - 8002466: 4618 mov r0, r3 - 8002468: 371c adds r7, #28 - 800246a: 46bd mov sp, r7 - 800246c: bd90 pop {r4, r7, pc} - 800246e: bf00 nop - 8002470: 20000064 .word 0x20000064 + 800251e: 4618 mov r0, r3 + 8002520: 371c adds r7, #28 + 8002522: 46bd mov sp, r7 + 8002524: bd90 pop {r4, r7, pc} + 8002526: bf00 nop + 8002528: 200000cc .word 0x200000cc -08002474 : +0800252c : BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { - 8002474: b590 push {r4, r7, lr} - 8002476: b087 sub sp, #28 - 8002478: af00 add r7, sp, #0 - 800247a: 60b9 str r1, [r7, #8] - 800247c: 607a str r2, [r7, #4] - 800247e: 603b str r3, [r7, #0] - 8002480: 4603 mov r3, r0 - 8002482: 73fb strb r3, [r7, #15] + 800252c: b590 push {r4, r7, lr} + 800252e: b087 sub sp, #28 + 8002530: af00 add r7, sp, #0 + 8002532: 60b9 str r1, [r7, #8] + 8002534: 607a str r2, [r7, #4] + 8002536: 603b str r3, [r7, #0] + 8002538: 4603 mov r3, r0 + 800253a: 73fb strb r3, [r7, #15] DRESULT res; res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); - 8002484: 7bfb ldrb r3, [r7, #15] - 8002486: 4a0a ldr r2, [pc, #40] ; (80024b0 ) - 8002488: 009b lsls r3, r3, #2 - 800248a: 4413 add r3, r2 - 800248c: 685b ldr r3, [r3, #4] - 800248e: 68dc ldr r4, [r3, #12] - 8002490: 7bfb ldrb r3, [r7, #15] - 8002492: 4a07 ldr r2, [pc, #28] ; (80024b0 ) - 8002494: 4413 add r3, r2 - 8002496: 7a18 ldrb r0, [r3, #8] - 8002498: 683b ldr r3, [r7, #0] - 800249a: 687a ldr r2, [r7, #4] - 800249c: 68b9 ldr r1, [r7, #8] - 800249e: 47a0 blx r4 - 80024a0: 4603 mov r3, r0 - 80024a2: 75fb strb r3, [r7, #23] + 800253c: 7bfb ldrb r3, [r7, #15] + 800253e: 4a0a ldr r2, [pc, #40] ; (8002568 ) + 8002540: 009b lsls r3, r3, #2 + 8002542: 4413 add r3, r2 + 8002544: 685b ldr r3, [r3, #4] + 8002546: 68dc ldr r4, [r3, #12] + 8002548: 7bfb ldrb r3, [r7, #15] + 800254a: 4a07 ldr r2, [pc, #28] ; (8002568 ) + 800254c: 4413 add r3, r2 + 800254e: 7a18 ldrb r0, [r3, #8] + 8002550: 683b ldr r3, [r7, #0] + 8002552: 687a ldr r2, [r7, #4] + 8002554: 68b9 ldr r1, [r7, #8] + 8002556: 47a0 blx r4 + 8002558: 4603 mov r3, r0 + 800255a: 75fb strb r3, [r7, #23] return res; - 80024a4: 7dfb ldrb r3, [r7, #23] + 800255c: 7dfb ldrb r3, [r7, #23] } - 80024a6: 4618 mov r0, r3 - 80024a8: 371c adds r7, #28 - 80024aa: 46bd mov sp, r7 - 80024ac: bd90 pop {r4, r7, pc} - 80024ae: bf00 nop - 80024b0: 20000064 .word 0x20000064 + 800255e: 4618 mov r0, r3 + 8002560: 371c adds r7, #28 + 8002562: 46bd mov sp, r7 + 8002564: bd90 pop {r4, r7, pc} + 8002566: bf00 nop + 8002568: 200000cc .word 0x200000cc -080024b4 : +0800256c : /* String functions */ /*-----------------------------------------------------------------------*/ /* Copy memory to memory */ static void mem_cpy (void* dst, const void* src, UINT cnt) { - 80024b4: b480 push {r7} - 80024b6: b087 sub sp, #28 - 80024b8: af00 add r7, sp, #0 - 80024ba: 60f8 str r0, [r7, #12] - 80024bc: 60b9 str r1, [r7, #8] - 80024be: 607a str r2, [r7, #4] + 800256c: b480 push {r7} + 800256e: b087 sub sp, #28 + 8002570: af00 add r7, sp, #0 + 8002572: 60f8 str r0, [r7, #12] + 8002574: 60b9 str r1, [r7, #8] + 8002576: 607a str r2, [r7, #4] BYTE *d = (BYTE*)dst; - 80024c0: 68fb ldr r3, [r7, #12] - 80024c2: 617b str r3, [r7, #20] + 8002578: 68fb ldr r3, [r7, #12] + 800257a: 617b str r3, [r7, #20] const BYTE *s = (const BYTE*)src; - 80024c4: 68bb ldr r3, [r7, #8] - 80024c6: 613b str r3, [r7, #16] + 800257c: 68bb ldr r3, [r7, #8] + 800257e: 613b str r3, [r7, #16] *(int*)d = *(int*)s; d += sizeof (int); s += sizeof (int); cnt -= sizeof (int); } #endif while (cnt--) - 80024c8: e007 b.n 80024da + 8002580: e007 b.n 8002592 *d++ = *s++; - 80024ca: 693a ldr r2, [r7, #16] - 80024cc: 1c53 adds r3, r2, #1 - 80024ce: 613b str r3, [r7, #16] - 80024d0: 697b ldr r3, [r7, #20] - 80024d2: 1c59 adds r1, r3, #1 - 80024d4: 6179 str r1, [r7, #20] - 80024d6: 7812 ldrb r2, [r2, #0] - 80024d8: 701a strb r2, [r3, #0] + 8002582: 693a ldr r2, [r7, #16] + 8002584: 1c53 adds r3, r2, #1 + 8002586: 613b str r3, [r7, #16] + 8002588: 697b ldr r3, [r7, #20] + 800258a: 1c59 adds r1, r3, #1 + 800258c: 6179 str r1, [r7, #20] + 800258e: 7812 ldrb r2, [r2, #0] + 8002590: 701a strb r2, [r3, #0] while (cnt--) - 80024da: 687b ldr r3, [r7, #4] - 80024dc: 1e5a subs r2, r3, #1 - 80024de: 607a str r2, [r7, #4] - 80024e0: 2b00 cmp r3, #0 - 80024e2: d1f2 bne.n 80024ca + 8002592: 687b ldr r3, [r7, #4] + 8002594: 1e5a subs r2, r3, #1 + 8002596: 607a str r2, [r7, #4] + 8002598: 2b00 cmp r3, #0 + 800259a: d1f2 bne.n 8002582 } - 80024e4: bf00 nop - 80024e6: bf00 nop - 80024e8: 371c adds r7, #28 - 80024ea: 46bd mov sp, r7 - 80024ec: bc80 pop {r7} - 80024ee: 4770 bx lr + 800259c: bf00 nop + 800259e: bf00 nop + 80025a0: 371c adds r7, #28 + 80025a2: 46bd mov sp, r7 + 80025a4: bc80 pop {r7} + 80025a6: 4770 bx lr -080024f0 : +080025a8 : /* Fill memory */ static void mem_set (void* dst, int val, UINT cnt) { - 80024f0: b480 push {r7} - 80024f2: b087 sub sp, #28 - 80024f4: af00 add r7, sp, #0 - 80024f6: 60f8 str r0, [r7, #12] - 80024f8: 60b9 str r1, [r7, #8] - 80024fa: 607a str r2, [r7, #4] + 80025a8: b480 push {r7} + 80025aa: b087 sub sp, #28 + 80025ac: af00 add r7, sp, #0 + 80025ae: 60f8 str r0, [r7, #12] + 80025b0: 60b9 str r1, [r7, #8] + 80025b2: 607a str r2, [r7, #4] BYTE *d = (BYTE*)dst; - 80024fc: 68fb ldr r3, [r7, #12] - 80024fe: 617b str r3, [r7, #20] + 80025b4: 68fb ldr r3, [r7, #12] + 80025b6: 617b str r3, [r7, #20] while (cnt--) - 8002500: e005 b.n 800250e + 80025b8: e005 b.n 80025c6 *d++ = (BYTE)val; - 8002502: 697b ldr r3, [r7, #20] - 8002504: 1c5a adds r2, r3, #1 - 8002506: 617a str r2, [r7, #20] - 8002508: 68ba ldr r2, [r7, #8] - 800250a: b2d2 uxtb r2, r2 - 800250c: 701a strb r2, [r3, #0] + 80025ba: 697b ldr r3, [r7, #20] + 80025bc: 1c5a adds r2, r3, #1 + 80025be: 617a str r2, [r7, #20] + 80025c0: 68ba ldr r2, [r7, #8] + 80025c2: b2d2 uxtb r2, r2 + 80025c4: 701a strb r2, [r3, #0] while (cnt--) - 800250e: 687b ldr r3, [r7, #4] - 8002510: 1e5a subs r2, r3, #1 - 8002512: 607a str r2, [r7, #4] - 8002514: 2b00 cmp r3, #0 - 8002516: d1f4 bne.n 8002502 + 80025c6: 687b ldr r3, [r7, #4] + 80025c8: 1e5a subs r2, r3, #1 + 80025ca: 607a str r2, [r7, #4] + 80025cc: 2b00 cmp r3, #0 + 80025ce: d1f4 bne.n 80025ba } - 8002518: bf00 nop - 800251a: bf00 nop - 800251c: 371c adds r7, #28 - 800251e: 46bd mov sp, r7 - 8002520: bc80 pop {r7} - 8002522: 4770 bx lr + 80025d0: bf00 nop + 80025d2: bf00 nop + 80025d4: 371c adds r7, #28 + 80025d6: 46bd mov sp, r7 + 80025d8: bc80 pop {r7} + 80025da: 4770 bx lr -08002524 : +080025dc : /* Compare memory to memory */ static int mem_cmp (const void* dst, const void* src, UINT cnt) { - 8002524: b480 push {r7} - 8002526: b089 sub sp, #36 ; 0x24 - 8002528: af00 add r7, sp, #0 - 800252a: 60f8 str r0, [r7, #12] - 800252c: 60b9 str r1, [r7, #8] - 800252e: 607a str r2, [r7, #4] + 80025dc: b480 push {r7} + 80025de: b089 sub sp, #36 ; 0x24 + 80025e0: af00 add r7, sp, #0 + 80025e2: 60f8 str r0, [r7, #12] + 80025e4: 60b9 str r1, [r7, #8] + 80025e6: 607a str r2, [r7, #4] const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; - 8002530: 68fb ldr r3, [r7, #12] - 8002532: 61fb str r3, [r7, #28] - 8002534: 68bb ldr r3, [r7, #8] - 8002536: 61bb str r3, [r7, #24] + 80025e8: 68fb ldr r3, [r7, #12] + 80025ea: 61fb str r3, [r7, #28] + 80025ec: 68bb ldr r3, [r7, #8] + 80025ee: 61bb str r3, [r7, #24] int r = 0; - 8002538: 2300 movs r3, #0 - 800253a: 617b str r3, [r7, #20] + 80025f0: 2300 movs r3, #0 + 80025f2: 617b str r3, [r7, #20] while (cnt-- && (r = *d++ - *s++) == 0) ; - 800253c: bf00 nop - 800253e: 687b ldr r3, [r7, #4] - 8002540: 1e5a subs r2, r3, #1 - 8002542: 607a str r2, [r7, #4] - 8002544: 2b00 cmp r3, #0 - 8002546: d00d beq.n 8002564 - 8002548: 69fb ldr r3, [r7, #28] - 800254a: 1c5a adds r2, r3, #1 - 800254c: 61fa str r2, [r7, #28] - 800254e: 781b ldrb r3, [r3, #0] - 8002550: 4619 mov r1, r3 - 8002552: 69bb ldr r3, [r7, #24] - 8002554: 1c5a adds r2, r3, #1 - 8002556: 61ba str r2, [r7, #24] - 8002558: 781b ldrb r3, [r3, #0] - 800255a: 1acb subs r3, r1, r3 - 800255c: 617b str r3, [r7, #20] - 800255e: 697b ldr r3, [r7, #20] - 8002560: 2b00 cmp r3, #0 - 8002562: d0ec beq.n 800253e + 80025f4: bf00 nop + 80025f6: 687b ldr r3, [r7, #4] + 80025f8: 1e5a subs r2, r3, #1 + 80025fa: 607a str r2, [r7, #4] + 80025fc: 2b00 cmp r3, #0 + 80025fe: d00d beq.n 800261c + 8002600: 69fb ldr r3, [r7, #28] + 8002602: 1c5a adds r2, r3, #1 + 8002604: 61fa str r2, [r7, #28] + 8002606: 781b ldrb r3, [r3, #0] + 8002608: 4619 mov r1, r3 + 800260a: 69bb ldr r3, [r7, #24] + 800260c: 1c5a adds r2, r3, #1 + 800260e: 61ba str r2, [r7, #24] + 8002610: 781b ldrb r3, [r3, #0] + 8002612: 1acb subs r3, r1, r3 + 8002614: 617b str r3, [r7, #20] + 8002616: 697b ldr r3, [r7, #20] + 8002618: 2b00 cmp r3, #0 + 800261a: d0ec beq.n 80025f6 return r; - 8002564: 697b ldr r3, [r7, #20] + 800261c: 697b ldr r3, [r7, #20] } - 8002566: 4618 mov r0, r3 - 8002568: 3724 adds r7, #36 ; 0x24 - 800256a: 46bd mov sp, r7 - 800256c: bc80 pop {r7} - 800256e: 4770 bx lr + 800261e: 4618 mov r0, r3 + 8002620: 3724 adds r7, #36 ; 0x24 + 8002622: 46bd mov sp, r7 + 8002624: bc80 pop {r7} + 8002626: 4770 bx lr -08002570 : +08002628 : /* Check if chr is contained in the string */ static int chk_chr (const char* str, int chr) { - 8002570: b480 push {r7} - 8002572: b083 sub sp, #12 - 8002574: af00 add r7, sp, #0 - 8002576: 6078 str r0, [r7, #4] - 8002578: 6039 str r1, [r7, #0] + 8002628: b480 push {r7} + 800262a: b083 sub sp, #12 + 800262c: af00 add r7, sp, #0 + 800262e: 6078 str r0, [r7, #4] + 8002630: 6039 str r1, [r7, #0] while (*str && *str != chr) str++; - 800257a: e002 b.n 8002582 - 800257c: 687b ldr r3, [r7, #4] - 800257e: 3301 adds r3, #1 - 8002580: 607b str r3, [r7, #4] - 8002582: 687b ldr r3, [r7, #4] - 8002584: 781b ldrb r3, [r3, #0] - 8002586: 2b00 cmp r3, #0 - 8002588: d005 beq.n 8002596 - 800258a: 687b ldr r3, [r7, #4] - 800258c: 781b ldrb r3, [r3, #0] - 800258e: 461a mov r2, r3 - 8002590: 683b ldr r3, [r7, #0] - 8002592: 4293 cmp r3, r2 - 8002594: d1f2 bne.n 800257c + 8002632: e002 b.n 800263a + 8002634: 687b ldr r3, [r7, #4] + 8002636: 3301 adds r3, #1 + 8002638: 607b str r3, [r7, #4] + 800263a: 687b ldr r3, [r7, #4] + 800263c: 781b ldrb r3, [r3, #0] + 800263e: 2b00 cmp r3, #0 + 8002640: d005 beq.n 800264e + 8002642: 687b ldr r3, [r7, #4] + 8002644: 781b ldrb r3, [r3, #0] + 8002646: 461a mov r2, r3 + 8002648: 683b ldr r3, [r7, #0] + 800264a: 4293 cmp r3, r2 + 800264c: d1f2 bne.n 8002634 return *str; - 8002596: 687b ldr r3, [r7, #4] - 8002598: 781b ldrb r3, [r3, #0] + 800264e: 687b ldr r3, [r7, #4] + 8002650: 781b ldrb r3, [r3, #0] } - 800259a: 4618 mov r0, r3 - 800259c: 370c adds r7, #12 - 800259e: 46bd mov sp, r7 - 80025a0: bc80 pop {r7} - 80025a2: 4770 bx lr + 8002652: 4618 mov r0, r3 + 8002654: 370c adds r7, #12 + 8002656: 46bd mov sp, r7 + 8002658: bc80 pop {r7} + 800265a: 4770 bx lr -080025a4 : +0800265c : static FRESULT chk_lock ( /* Check if the file can be accessed */ DIR* dp, /* Directory object pointing the file to be checked */ int acc /* Desired access type (0:Read, 1:Write, 2:Delete/Rename) */ ) { - 80025a4: b480 push {r7} - 80025a6: b085 sub sp, #20 - 80025a8: af00 add r7, sp, #0 - 80025aa: 6078 str r0, [r7, #4] - 80025ac: 6039 str r1, [r7, #0] + 800265c: b480 push {r7} + 800265e: b085 sub sp, #20 + 8002660: af00 add r7, sp, #0 + 8002662: 6078 str r0, [r7, #4] + 8002664: 6039 str r1, [r7, #0] UINT i, be; /* Search file semaphore table */ for (i = be = 0; i < _FS_LOCK; i++) { - 80025ae: 2300 movs r3, #0 - 80025b0: 60bb str r3, [r7, #8] - 80025b2: 68bb ldr r3, [r7, #8] - 80025b4: 60fb str r3, [r7, #12] - 80025b6: e038 b.n 800262a + 8002666: 2300 movs r3, #0 + 8002668: 60bb str r3, [r7, #8] + 800266a: 68bb ldr r3, [r7, #8] + 800266c: 60fb str r3, [r7, #12] + 800266e: e038 b.n 80026e2 if (Files[i].fs) { /* Existing entry */ - 80025b8: 492f ldr r1, [pc, #188] ; (8002678 ) - 80025ba: 68fa ldr r2, [r7, #12] - 80025bc: 4613 mov r3, r2 - 80025be: 005b lsls r3, r3, #1 - 80025c0: 4413 add r3, r2 - 80025c2: 009b lsls r3, r3, #2 - 80025c4: 440b add r3, r1 - 80025c6: 681b ldr r3, [r3, #0] - 80025c8: 2b00 cmp r3, #0 - 80025ca: d029 beq.n 8002620 + 8002670: 492f ldr r1, [pc, #188] ; (8002730 ) + 8002672: 68fa ldr r2, [r7, #12] + 8002674: 4613 mov r3, r2 + 8002676: 005b lsls r3, r3, #1 + 8002678: 4413 add r3, r2 + 800267a: 009b lsls r3, r3, #2 + 800267c: 440b add r3, r1 + 800267e: 681b ldr r3, [r3, #0] + 8002680: 2b00 cmp r3, #0 + 8002682: d029 beq.n 80026d8 if (Files[i].fs == dp->fs && /* Check if the object matched with an open object */ - 80025cc: 492a ldr r1, [pc, #168] ; (8002678 ) - 80025ce: 68fa ldr r2, [r7, #12] - 80025d0: 4613 mov r3, r2 - 80025d2: 005b lsls r3, r3, #1 - 80025d4: 4413 add r3, r2 - 80025d6: 009b lsls r3, r3, #2 - 80025d8: 440b add r3, r1 - 80025da: 681a ldr r2, [r3, #0] - 80025dc: 687b ldr r3, [r7, #4] - 80025de: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80025e2: 429a cmp r2, r3 - 80025e4: d11e bne.n 8002624 + 8002684: 492a ldr r1, [pc, #168] ; (8002730 ) + 8002686: 68fa ldr r2, [r7, #12] + 8002688: 4613 mov r3, r2 + 800268a: 005b lsls r3, r3, #1 + 800268c: 4413 add r3, r2 + 800268e: 009b lsls r3, r3, #2 + 8002690: 440b add r3, r1 + 8002692: 681a ldr r2, [r3, #0] + 8002694: 687b ldr r3, [r7, #4] + 8002696: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800269a: 429a cmp r2, r3 + 800269c: d11e bne.n 80026dc Files[i].clu == dp->sclust && - 80025e6: 4924 ldr r1, [pc, #144] ; (8002678 ) - 80025e8: 68fa ldr r2, [r7, #12] - 80025ea: 4613 mov r3, r2 - 80025ec: 005b lsls r3, r3, #1 - 80025ee: 4413 add r3, r2 - 80025f0: 009b lsls r3, r3, #2 - 80025f2: 440b add r3, r1 - 80025f4: 3304 adds r3, #4 - 80025f6: 681a ldr r2, [r3, #0] - 80025f8: 687b ldr r3, [r7, #4] - 80025fa: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 800269e: 4924 ldr r1, [pc, #144] ; (8002730 ) + 80026a0: 68fa ldr r2, [r7, #12] + 80026a2: 4613 mov r3, r2 + 80026a4: 005b lsls r3, r3, #1 + 80026a6: 4413 add r3, r2 + 80026a8: 009b lsls r3, r3, #2 + 80026aa: 440b add r3, r1 + 80026ac: 3304 adds r3, #4 + 80026ae: 681a ldr r2, [r3, #0] + 80026b0: 687b ldr r3, [r7, #4] + 80026b2: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 if (Files[i].fs == dp->fs && /* Check if the object matched with an open object */ - 80025fe: 429a cmp r2, r3 - 8002600: d110 bne.n 8002624 + 80026b6: 429a cmp r2, r3 + 80026b8: d110 bne.n 80026dc Files[i].idx == dp->index) break; - 8002602: 491d ldr r1, [pc, #116] ; (8002678 ) - 8002604: 68fa ldr r2, [r7, #12] - 8002606: 4613 mov r3, r2 - 8002608: 005b lsls r3, r3, #1 - 800260a: 4413 add r3, r2 - 800260c: 009b lsls r3, r3, #2 - 800260e: 440b add r3, r1 - 8002610: 3308 adds r3, #8 - 8002612: 881a ldrh r2, [r3, #0] - 8002614: 687b ldr r3, [r7, #4] - 8002616: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 + 80026ba: 491d ldr r1, [pc, #116] ; (8002730 ) + 80026bc: 68fa ldr r2, [r7, #12] + 80026be: 4613 mov r3, r2 + 80026c0: 005b lsls r3, r3, #1 + 80026c2: 4413 add r3, r2 + 80026c4: 009b lsls r3, r3, #2 + 80026c6: 440b add r3, r1 + 80026c8: 3308 adds r3, #8 + 80026ca: 881a ldrh r2, [r3, #0] + 80026cc: 687b ldr r3, [r7, #4] + 80026ce: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 Files[i].clu == dp->sclust && - 800261a: 429a cmp r2, r3 - 800261c: d102 bne.n 8002624 + 80026d2: 429a cmp r2, r3 + 80026d4: d102 bne.n 80026dc Files[i].idx == dp->index) break; - 800261e: e007 b.n 8002630 + 80026d6: e007 b.n 80026e8 } else { /* Blank entry */ be = 1; - 8002620: 2301 movs r3, #1 - 8002622: 60bb str r3, [r7, #8] + 80026d8: 2301 movs r3, #1 + 80026da: 60bb str r3, [r7, #8] for (i = be = 0; i < _FS_LOCK; i++) { - 8002624: 68fb ldr r3, [r7, #12] - 8002626: 3301 adds r3, #1 - 8002628: 60fb str r3, [r7, #12] - 800262a: 68fb ldr r3, [r7, #12] - 800262c: 2b01 cmp r3, #1 - 800262e: d9c3 bls.n 80025b8 + 80026dc: 68fb ldr r3, [r7, #12] + 80026de: 3301 adds r3, #1 + 80026e0: 60fb str r3, [r7, #12] + 80026e2: 68fb ldr r3, [r7, #12] + 80026e4: 2b01 cmp r3, #1 + 80026e6: d9c3 bls.n 8002670 } } if (i == _FS_LOCK) /* The object is not opened */ - 8002630: 68fb ldr r3, [r7, #12] - 8002632: 2b02 cmp r3, #2 - 8002634: d109 bne.n 800264a + 80026e8: 68fb ldr r3, [r7, #12] + 80026ea: 2b02 cmp r3, #2 + 80026ec: d109 bne.n 8002702 return (be || acc == 2) ? FR_OK : FR_TOO_MANY_OPEN_FILES; /* Is there a blank entry for new object? */ - 8002636: 68bb ldr r3, [r7, #8] - 8002638: 2b00 cmp r3, #0 - 800263a: d102 bne.n 8002642 - 800263c: 683b ldr r3, [r7, #0] - 800263e: 2b02 cmp r3, #2 - 8002640: d101 bne.n 8002646 - 8002642: 2300 movs r3, #0 - 8002644: e013 b.n 800266e - 8002646: 2312 movs r3, #18 - 8002648: e011 b.n 800266e + 80026ee: 68bb ldr r3, [r7, #8] + 80026f0: 2b00 cmp r3, #0 + 80026f2: d102 bne.n 80026fa + 80026f4: 683b ldr r3, [r7, #0] + 80026f6: 2b02 cmp r3, #2 + 80026f8: d101 bne.n 80026fe + 80026fa: 2300 movs r3, #0 + 80026fc: e013 b.n 8002726 + 80026fe: 2312 movs r3, #18 + 8002700: e011 b.n 8002726 /* The object has been opened. Reject any open against writing file and all write mode open */ return (acc || Files[i].ctr == 0x100) ? FR_LOCKED : FR_OK; - 800264a: 683b ldr r3, [r7, #0] - 800264c: 2b00 cmp r3, #0 - 800264e: d10b bne.n 8002668 - 8002650: 4909 ldr r1, [pc, #36] ; (8002678 ) - 8002652: 68fa ldr r2, [r7, #12] - 8002654: 4613 mov r3, r2 - 8002656: 005b lsls r3, r3, #1 - 8002658: 4413 add r3, r2 - 800265a: 009b lsls r3, r3, #2 - 800265c: 440b add r3, r1 - 800265e: 330a adds r3, #10 - 8002660: 881b ldrh r3, [r3, #0] - 8002662: f5b3 7f80 cmp.w r3, #256 ; 0x100 - 8002666: d101 bne.n 800266c - 8002668: 2310 movs r3, #16 - 800266a: e000 b.n 800266e - 800266c: 2300 movs r3, #0 + 8002702: 683b ldr r3, [r7, #0] + 8002704: 2b00 cmp r3, #0 + 8002706: d10b bne.n 8002720 + 8002708: 4909 ldr r1, [pc, #36] ; (8002730 ) + 800270a: 68fa ldr r2, [r7, #12] + 800270c: 4613 mov r3, r2 + 800270e: 005b lsls r3, r3, #1 + 8002710: 4413 add r3, r2 + 8002712: 009b lsls r3, r3, #2 + 8002714: 440b add r3, r1 + 8002716: 330a adds r3, #10 + 8002718: 881b ldrh r3, [r3, #0] + 800271a: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 800271e: d101 bne.n 8002724 + 8002720: 2310 movs r3, #16 + 8002722: e000 b.n 8002726 + 8002724: 2300 movs r3, #0 } - 800266e: 4618 mov r0, r3 - 8002670: 3714 adds r7, #20 - 8002672: 46bd mov sp, r7 - 8002674: bc80 pop {r7} - 8002676: 4770 bx lr - 8002678: 2000004c .word 0x2000004c + 8002726: 4618 mov r0, r3 + 8002728: 3714 adds r7, #20 + 800272a: 46bd mov sp, r7 + 800272c: bc80 pop {r7} + 800272e: 4770 bx lr + 8002730: 200000b4 .word 0x200000b4 -0800267c : +08002734 : static int enq_lock (void) /* Check if an entry is available for a new object */ { - 800267c: b480 push {r7} - 800267e: b083 sub sp, #12 - 8002680: af00 add r7, sp, #0 + 8002734: b480 push {r7} + 8002736: b083 sub sp, #12 + 8002738: af00 add r7, sp, #0 UINT i; for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; - 8002682: 2300 movs r3, #0 - 8002684: 607b str r3, [r7, #4] - 8002686: e002 b.n 800268e - 8002688: 687b ldr r3, [r7, #4] - 800268a: 3301 adds r3, #1 - 800268c: 607b str r3, [r7, #4] - 800268e: 687b ldr r3, [r7, #4] - 8002690: 2b01 cmp r3, #1 - 8002692: d809 bhi.n 80026a8 - 8002694: 490a ldr r1, [pc, #40] ; (80026c0 ) - 8002696: 687a ldr r2, [r7, #4] - 8002698: 4613 mov r3, r2 - 800269a: 005b lsls r3, r3, #1 - 800269c: 4413 add r3, r2 - 800269e: 009b lsls r3, r3, #2 - 80026a0: 440b add r3, r1 - 80026a2: 681b ldr r3, [r3, #0] - 80026a4: 2b00 cmp r3, #0 - 80026a6: d1ef bne.n 8002688 + 800273a: 2300 movs r3, #0 + 800273c: 607b str r3, [r7, #4] + 800273e: e002 b.n 8002746 + 8002740: 687b ldr r3, [r7, #4] + 8002742: 3301 adds r3, #1 + 8002744: 607b str r3, [r7, #4] + 8002746: 687b ldr r3, [r7, #4] + 8002748: 2b01 cmp r3, #1 + 800274a: d809 bhi.n 8002760 + 800274c: 490a ldr r1, [pc, #40] ; (8002778 ) + 800274e: 687a ldr r2, [r7, #4] + 8002750: 4613 mov r3, r2 + 8002752: 005b lsls r3, r3, #1 + 8002754: 4413 add r3, r2 + 8002756: 009b lsls r3, r3, #2 + 8002758: 440b add r3, r1 + 800275a: 681b ldr r3, [r3, #0] + 800275c: 2b00 cmp r3, #0 + 800275e: d1ef bne.n 8002740 return (i == _FS_LOCK) ? 0 : 1; - 80026a8: 687b ldr r3, [r7, #4] - 80026aa: 2b02 cmp r3, #2 - 80026ac: bf14 ite ne - 80026ae: 2301 movne r3, #1 - 80026b0: 2300 moveq r3, #0 - 80026b2: b2db uxtb r3, r3 + 8002760: 687b ldr r3, [r7, #4] + 8002762: 2b02 cmp r3, #2 + 8002764: bf14 ite ne + 8002766: 2301 movne r3, #1 + 8002768: 2300 moveq r3, #0 + 800276a: b2db uxtb r3, r3 } - 80026b4: 4618 mov r0, r3 - 80026b6: 370c adds r7, #12 - 80026b8: 46bd mov sp, r7 - 80026ba: bc80 pop {r7} - 80026bc: 4770 bx lr - 80026be: bf00 nop - 80026c0: 2000004c .word 0x2000004c + 800276c: 4618 mov r0, r3 + 800276e: 370c adds r7, #12 + 8002770: 46bd mov sp, r7 + 8002772: bc80 pop {r7} + 8002774: 4770 bx lr + 8002776: bf00 nop + 8002778: 200000b4 .word 0x200000b4 -080026c4 : +0800277c : static UINT inc_lock ( /* Increment object open counter and returns its index (0:Internal error) */ DIR* dp, /* Directory object pointing the file to register or increment */ int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ ) { - 80026c4: b480 push {r7} - 80026c6: b085 sub sp, #20 - 80026c8: af00 add r7, sp, #0 - 80026ca: 6078 str r0, [r7, #4] - 80026cc: 6039 str r1, [r7, #0] + 800277c: b480 push {r7} + 800277e: b085 sub sp, #20 + 8002780: af00 add r7, sp, #0 + 8002782: 6078 str r0, [r7, #4] + 8002784: 6039 str r1, [r7, #0] UINT i; for (i = 0; i < _FS_LOCK; i++) { /* Find the object */ - 80026ce: 2300 movs r3, #0 - 80026d0: 60fb str r3, [r7, #12] - 80026d2: e02b b.n 800272c + 8002786: 2300 movs r3, #0 + 8002788: 60fb str r3, [r7, #12] + 800278a: e02b b.n 80027e4 if (Files[i].fs == dp->fs && - 80026d4: 4955 ldr r1, [pc, #340] ; (800282c ) - 80026d6: 68fa ldr r2, [r7, #12] - 80026d8: 4613 mov r3, r2 - 80026da: 005b lsls r3, r3, #1 - 80026dc: 4413 add r3, r2 - 80026de: 009b lsls r3, r3, #2 - 80026e0: 440b add r3, r1 - 80026e2: 681a ldr r2, [r3, #0] - 80026e4: 687b ldr r3, [r7, #4] - 80026e6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80026ea: 429a cmp r2, r3 - 80026ec: d11b bne.n 8002726 + 800278c: 4955 ldr r1, [pc, #340] ; (80028e4 ) + 800278e: 68fa ldr r2, [r7, #12] + 8002790: 4613 mov r3, r2 + 8002792: 005b lsls r3, r3, #1 + 8002794: 4413 add r3, r2 + 8002796: 009b lsls r3, r3, #2 + 8002798: 440b add r3, r1 + 800279a: 681a ldr r2, [r3, #0] + 800279c: 687b ldr r3, [r7, #4] + 800279e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80027a2: 429a cmp r2, r3 + 80027a4: d11b bne.n 80027de Files[i].clu == dp->sclust && - 80026ee: 494f ldr r1, [pc, #316] ; (800282c ) - 80026f0: 68fa ldr r2, [r7, #12] - 80026f2: 4613 mov r3, r2 - 80026f4: 005b lsls r3, r3, #1 - 80026f6: 4413 add r3, r2 - 80026f8: 009b lsls r3, r3, #2 - 80026fa: 440b add r3, r1 - 80026fc: 3304 adds r3, #4 - 80026fe: 681a ldr r2, [r3, #0] - 8002700: 687b ldr r3, [r7, #4] - 8002702: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80027a6: 494f ldr r1, [pc, #316] ; (80028e4 ) + 80027a8: 68fa ldr r2, [r7, #12] + 80027aa: 4613 mov r3, r2 + 80027ac: 005b lsls r3, r3, #1 + 80027ae: 4413 add r3, r2 + 80027b0: 009b lsls r3, r3, #2 + 80027b2: 440b add r3, r1 + 80027b4: 3304 adds r3, #4 + 80027b6: 681a ldr r2, [r3, #0] + 80027b8: 687b ldr r3, [r7, #4] + 80027ba: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 if (Files[i].fs == dp->fs && - 8002706: 429a cmp r2, r3 - 8002708: d10d bne.n 8002726 + 80027be: 429a cmp r2, r3 + 80027c0: d10d bne.n 80027de Files[i].idx == dp->index) break; - 800270a: 4948 ldr r1, [pc, #288] ; (800282c ) - 800270c: 68fa ldr r2, [r7, #12] - 800270e: 4613 mov r3, r2 - 8002710: 005b lsls r3, r3, #1 - 8002712: 4413 add r3, r2 - 8002714: 009b lsls r3, r3, #2 - 8002716: 440b add r3, r1 - 8002718: 3308 adds r3, #8 - 800271a: 881a ldrh r2, [r3, #0] - 800271c: 687b ldr r3, [r7, #4] - 800271e: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 + 80027c2: 4948 ldr r1, [pc, #288] ; (80028e4 ) + 80027c4: 68fa ldr r2, [r7, #12] + 80027c6: 4613 mov r3, r2 + 80027c8: 005b lsls r3, r3, #1 + 80027ca: 4413 add r3, r2 + 80027cc: 009b lsls r3, r3, #2 + 80027ce: 440b add r3, r1 + 80027d0: 3308 adds r3, #8 + 80027d2: 881a ldrh r2, [r3, #0] + 80027d4: 687b ldr r3, [r7, #4] + 80027d6: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 Files[i].clu == dp->sclust && - 8002722: 429a cmp r2, r3 - 8002724: d006 beq.n 8002734 + 80027da: 429a cmp r2, r3 + 80027dc: d006 beq.n 80027ec for (i = 0; i < _FS_LOCK; i++) { /* Find the object */ - 8002726: 68fb ldr r3, [r7, #12] - 8002728: 3301 adds r3, #1 - 800272a: 60fb str r3, [r7, #12] - 800272c: 68fb ldr r3, [r7, #12] - 800272e: 2b01 cmp r3, #1 - 8002730: d9d0 bls.n 80026d4 - 8002732: e000 b.n 8002736 + 80027de: 68fb ldr r3, [r7, #12] + 80027e0: 3301 adds r3, #1 + 80027e2: 60fb str r3, [r7, #12] + 80027e4: 68fb ldr r3, [r7, #12] + 80027e6: 2b01 cmp r3, #1 + 80027e8: d9d0 bls.n 800278c + 80027ea: e000 b.n 80027ee Files[i].idx == dp->index) break; - 8002734: bf00 nop + 80027ec: bf00 nop } if (i == _FS_LOCK) { /* Not opened. Register it as new. */ - 8002736: 68fb ldr r3, [r7, #12] - 8002738: 2b02 cmp r3, #2 - 800273a: d145 bne.n 80027c8 + 80027ee: 68fb ldr r3, [r7, #12] + 80027f0: 2b02 cmp r3, #2 + 80027f2: d145 bne.n 8002880 for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; - 800273c: 2300 movs r3, #0 - 800273e: 60fb str r3, [r7, #12] - 8002740: e002 b.n 8002748 - 8002742: 68fb ldr r3, [r7, #12] - 8002744: 3301 adds r3, #1 - 8002746: 60fb str r3, [r7, #12] - 8002748: 68fb ldr r3, [r7, #12] - 800274a: 2b01 cmp r3, #1 - 800274c: d809 bhi.n 8002762 - 800274e: 4937 ldr r1, [pc, #220] ; (800282c ) - 8002750: 68fa ldr r2, [r7, #12] - 8002752: 4613 mov r3, r2 - 8002754: 005b lsls r3, r3, #1 - 8002756: 4413 add r3, r2 - 8002758: 009b lsls r3, r3, #2 - 800275a: 440b add r3, r1 - 800275c: 681b ldr r3, [r3, #0] - 800275e: 2b00 cmp r3, #0 - 8002760: d1ef bne.n 8002742 + 80027f4: 2300 movs r3, #0 + 80027f6: 60fb str r3, [r7, #12] + 80027f8: e002 b.n 8002800 + 80027fa: 68fb ldr r3, [r7, #12] + 80027fc: 3301 adds r3, #1 + 80027fe: 60fb str r3, [r7, #12] + 8002800: 68fb ldr r3, [r7, #12] + 8002802: 2b01 cmp r3, #1 + 8002804: d809 bhi.n 800281a + 8002806: 4937 ldr r1, [pc, #220] ; (80028e4 ) + 8002808: 68fa ldr r2, [r7, #12] + 800280a: 4613 mov r3, r2 + 800280c: 005b lsls r3, r3, #1 + 800280e: 4413 add r3, r2 + 8002810: 009b lsls r3, r3, #2 + 8002812: 440b add r3, r1 + 8002814: 681b ldr r3, [r3, #0] + 8002816: 2b00 cmp r3, #0 + 8002818: d1ef bne.n 80027fa if (i == _FS_LOCK) return 0; /* No free entry to register (int err) */ - 8002762: 68fb ldr r3, [r7, #12] - 8002764: 2b02 cmp r3, #2 - 8002766: d101 bne.n 800276c - 8002768: 2300 movs r3, #0 - 800276a: e05a b.n 8002822 + 800281a: 68fb ldr r3, [r7, #12] + 800281c: 2b02 cmp r3, #2 + 800281e: d101 bne.n 8002824 + 8002820: 2300 movs r3, #0 + 8002822: e05a b.n 80028da Files[i].fs = dp->fs; - 800276c: 687b ldr r3, [r7, #4] - 800276e: f8d3 1200 ldr.w r1, [r3, #512] ; 0x200 - 8002772: 482e ldr r0, [pc, #184] ; (800282c ) - 8002774: 68fa ldr r2, [r7, #12] - 8002776: 4613 mov r3, r2 - 8002778: 005b lsls r3, r3, #1 - 800277a: 4413 add r3, r2 - 800277c: 009b lsls r3, r3, #2 - 800277e: 4403 add r3, r0 - 8002780: 6019 str r1, [r3, #0] + 8002824: 687b ldr r3, [r7, #4] + 8002826: f8d3 1200 ldr.w r1, [r3, #512] ; 0x200 + 800282a: 482e ldr r0, [pc, #184] ; (80028e4 ) + 800282c: 68fa ldr r2, [r7, #12] + 800282e: 4613 mov r3, r2 + 8002830: 005b lsls r3, r3, #1 + 8002832: 4413 add r3, r2 + 8002834: 009b lsls r3, r3, #2 + 8002836: 4403 add r3, r0 + 8002838: 6019 str r1, [r3, #0] Files[i].clu = dp->sclust; - 8002782: 687b ldr r3, [r7, #4] - 8002784: f8d3 1208 ldr.w r1, [r3, #520] ; 0x208 - 8002788: 4828 ldr r0, [pc, #160] ; (800282c ) - 800278a: 68fa ldr r2, [r7, #12] - 800278c: 4613 mov r3, r2 - 800278e: 005b lsls r3, r3, #1 - 8002790: 4413 add r3, r2 - 8002792: 009b lsls r3, r3, #2 - 8002794: 4403 add r3, r0 - 8002796: 3304 adds r3, #4 - 8002798: 6019 str r1, [r3, #0] + 800283a: 687b ldr r3, [r7, #4] + 800283c: f8d3 1208 ldr.w r1, [r3, #520] ; 0x208 + 8002840: 4828 ldr r0, [pc, #160] ; (80028e4 ) + 8002842: 68fa ldr r2, [r7, #12] + 8002844: 4613 mov r3, r2 + 8002846: 005b lsls r3, r3, #1 + 8002848: 4413 add r3, r2 + 800284a: 009b lsls r3, r3, #2 + 800284c: 4403 add r3, r0 + 800284e: 3304 adds r3, #4 + 8002850: 6019 str r1, [r3, #0] Files[i].idx = dp->index; - 800279a: 687b ldr r3, [r7, #4] - 800279c: f8b3 0206 ldrh.w r0, [r3, #518] ; 0x206 - 80027a0: 4922 ldr r1, [pc, #136] ; (800282c ) - 80027a2: 68fa ldr r2, [r7, #12] - 80027a4: 4613 mov r3, r2 - 80027a6: 005b lsls r3, r3, #1 - 80027a8: 4413 add r3, r2 - 80027aa: 009b lsls r3, r3, #2 - 80027ac: 440b add r3, r1 - 80027ae: 3308 adds r3, #8 - 80027b0: 4602 mov r2, r0 - 80027b2: 801a strh r2, [r3, #0] + 8002852: 687b ldr r3, [r7, #4] + 8002854: f8b3 0206 ldrh.w r0, [r3, #518] ; 0x206 + 8002858: 4922 ldr r1, [pc, #136] ; (80028e4 ) + 800285a: 68fa ldr r2, [r7, #12] + 800285c: 4613 mov r3, r2 + 800285e: 005b lsls r3, r3, #1 + 8002860: 4413 add r3, r2 + 8002862: 009b lsls r3, r3, #2 + 8002864: 440b add r3, r1 + 8002866: 3308 adds r3, #8 + 8002868: 4602 mov r2, r0 + 800286a: 801a strh r2, [r3, #0] Files[i].ctr = 0; - 80027b4: 491d ldr r1, [pc, #116] ; (800282c ) - 80027b6: 68fa ldr r2, [r7, #12] - 80027b8: 4613 mov r3, r2 - 80027ba: 005b lsls r3, r3, #1 - 80027bc: 4413 add r3, r2 - 80027be: 009b lsls r3, r3, #2 - 80027c0: 440b add r3, r1 - 80027c2: 330a adds r3, #10 - 80027c4: 2200 movs r2, #0 - 80027c6: 801a strh r2, [r3, #0] + 800286c: 491d ldr r1, [pc, #116] ; (80028e4 ) + 800286e: 68fa ldr r2, [r7, #12] + 8002870: 4613 mov r3, r2 + 8002872: 005b lsls r3, r3, #1 + 8002874: 4413 add r3, r2 + 8002876: 009b lsls r3, r3, #2 + 8002878: 440b add r3, r1 + 800287a: 330a adds r3, #10 + 800287c: 2200 movs r2, #0 + 800287e: 801a strh r2, [r3, #0] } if (acc && Files[i].ctr) return 0; /* Access violation (int err) */ - 80027c8: 683b ldr r3, [r7, #0] - 80027ca: 2b00 cmp r3, #0 - 80027cc: d00c beq.n 80027e8 - 80027ce: 4917 ldr r1, [pc, #92] ; (800282c ) - 80027d0: 68fa ldr r2, [r7, #12] - 80027d2: 4613 mov r3, r2 - 80027d4: 005b lsls r3, r3, #1 - 80027d6: 4413 add r3, r2 - 80027d8: 009b lsls r3, r3, #2 - 80027da: 440b add r3, r1 - 80027dc: 330a adds r3, #10 - 80027de: 881b ldrh r3, [r3, #0] - 80027e0: 2b00 cmp r3, #0 - 80027e2: d001 beq.n 80027e8 - 80027e4: 2300 movs r3, #0 - 80027e6: e01c b.n 8002822 + 8002880: 683b ldr r3, [r7, #0] + 8002882: 2b00 cmp r3, #0 + 8002884: d00c beq.n 80028a0 + 8002886: 4917 ldr r1, [pc, #92] ; (80028e4 ) + 8002888: 68fa ldr r2, [r7, #12] + 800288a: 4613 mov r3, r2 + 800288c: 005b lsls r3, r3, #1 + 800288e: 4413 add r3, r2 + 8002890: 009b lsls r3, r3, #2 + 8002892: 440b add r3, r1 + 8002894: 330a adds r3, #10 + 8002896: 881b ldrh r3, [r3, #0] + 8002898: 2b00 cmp r3, #0 + 800289a: d001 beq.n 80028a0 + 800289c: 2300 movs r3, #0 + 800289e: e01c b.n 80028da Files[i].ctr = acc ? 0x100 : Files[i].ctr + 1; /* Set semaphore value */ - 80027e8: 683b ldr r3, [r7, #0] - 80027ea: 2b00 cmp r3, #0 - 80027ec: d10b bne.n 8002806 - 80027ee: 490f ldr r1, [pc, #60] ; (800282c ) - 80027f0: 68fa ldr r2, [r7, #12] - 80027f2: 4613 mov r3, r2 - 80027f4: 005b lsls r3, r3, #1 - 80027f6: 4413 add r3, r2 - 80027f8: 009b lsls r3, r3, #2 - 80027fa: 440b add r3, r1 - 80027fc: 330a adds r3, #10 - 80027fe: 881b ldrh r3, [r3, #0] - 8002800: 3301 adds r3, #1 - 8002802: b299 uxth r1, r3 - 8002804: e001 b.n 800280a - 8002806: f44f 7180 mov.w r1, #256 ; 0x100 - 800280a: 4808 ldr r0, [pc, #32] ; (800282c ) - 800280c: 68fa ldr r2, [r7, #12] - 800280e: 4613 mov r3, r2 - 8002810: 005b lsls r3, r3, #1 - 8002812: 4413 add r3, r2 - 8002814: 009b lsls r3, r3, #2 - 8002816: 4403 add r3, r0 - 8002818: 330a adds r3, #10 - 800281a: 460a mov r2, r1 - 800281c: 801a strh r2, [r3, #0] + 80028a0: 683b ldr r3, [r7, #0] + 80028a2: 2b00 cmp r3, #0 + 80028a4: d10b bne.n 80028be + 80028a6: 490f ldr r1, [pc, #60] ; (80028e4 ) + 80028a8: 68fa ldr r2, [r7, #12] + 80028aa: 4613 mov r3, r2 + 80028ac: 005b lsls r3, r3, #1 + 80028ae: 4413 add r3, r2 + 80028b0: 009b lsls r3, r3, #2 + 80028b2: 440b add r3, r1 + 80028b4: 330a adds r3, #10 + 80028b6: 881b ldrh r3, [r3, #0] + 80028b8: 3301 adds r3, #1 + 80028ba: b299 uxth r1, r3 + 80028bc: e001 b.n 80028c2 + 80028be: f44f 7180 mov.w r1, #256 ; 0x100 + 80028c2: 4808 ldr r0, [pc, #32] ; (80028e4 ) + 80028c4: 68fa ldr r2, [r7, #12] + 80028c6: 4613 mov r3, r2 + 80028c8: 005b lsls r3, r3, #1 + 80028ca: 4413 add r3, r2 + 80028cc: 009b lsls r3, r3, #2 + 80028ce: 4403 add r3, r0 + 80028d0: 330a adds r3, #10 + 80028d2: 460a mov r2, r1 + 80028d4: 801a strh r2, [r3, #0] return i + 1; - 800281e: 68fb ldr r3, [r7, #12] - 8002820: 3301 adds r3, #1 + 80028d6: 68fb ldr r3, [r7, #12] + 80028d8: 3301 adds r3, #1 } - 8002822: 4618 mov r0, r3 - 8002824: 3714 adds r7, #20 - 8002826: 46bd mov sp, r7 - 8002828: bc80 pop {r7} - 800282a: 4770 bx lr - 800282c: 2000004c .word 0x2000004c + 80028da: 4618 mov r0, r3 + 80028dc: 3714 adds r7, #20 + 80028de: 46bd mov sp, r7 + 80028e0: bc80 pop {r7} + 80028e2: 4770 bx lr + 80028e4: 200000b4 .word 0x200000b4 -08002830 : +080028e8 : static void clear_lock ( /* Clear lock entries of the volume */ FATFS *fs ) { - 8002830: b480 push {r7} - 8002832: b085 sub sp, #20 - 8002834: af00 add r7, sp, #0 - 8002836: 6078 str r0, [r7, #4] + 80028e8: b480 push {r7} + 80028ea: b085 sub sp, #20 + 80028ec: af00 add r7, sp, #0 + 80028ee: 6078 str r0, [r7, #4] UINT i; for (i = 0; i < _FS_LOCK; i++) { - 8002838: 2300 movs r3, #0 - 800283a: 60fb str r3, [r7, #12] - 800283c: e016 b.n 800286c + 80028f0: 2300 movs r3, #0 + 80028f2: 60fb str r3, [r7, #12] + 80028f4: e016 b.n 8002924 if (Files[i].fs == fs) Files[i].fs = 0; - 800283e: 4910 ldr r1, [pc, #64] ; (8002880 ) - 8002840: 68fa ldr r2, [r7, #12] - 8002842: 4613 mov r3, r2 - 8002844: 005b lsls r3, r3, #1 - 8002846: 4413 add r3, r2 - 8002848: 009b lsls r3, r3, #2 - 800284a: 440b add r3, r1 - 800284c: 681b ldr r3, [r3, #0] - 800284e: 687a ldr r2, [r7, #4] - 8002850: 429a cmp r2, r3 - 8002852: d108 bne.n 8002866 - 8002854: 490a ldr r1, [pc, #40] ; (8002880 ) - 8002856: 68fa ldr r2, [r7, #12] - 8002858: 4613 mov r3, r2 - 800285a: 005b lsls r3, r3, #1 - 800285c: 4413 add r3, r2 - 800285e: 009b lsls r3, r3, #2 - 8002860: 440b add r3, r1 - 8002862: 2200 movs r2, #0 - 8002864: 601a str r2, [r3, #0] + 80028f6: 4910 ldr r1, [pc, #64] ; (8002938 ) + 80028f8: 68fa ldr r2, [r7, #12] + 80028fa: 4613 mov r3, r2 + 80028fc: 005b lsls r3, r3, #1 + 80028fe: 4413 add r3, r2 + 8002900: 009b lsls r3, r3, #2 + 8002902: 440b add r3, r1 + 8002904: 681b ldr r3, [r3, #0] + 8002906: 687a ldr r2, [r7, #4] + 8002908: 429a cmp r2, r3 + 800290a: d108 bne.n 800291e + 800290c: 490a ldr r1, [pc, #40] ; (8002938 ) + 800290e: 68fa ldr r2, [r7, #12] + 8002910: 4613 mov r3, r2 + 8002912: 005b lsls r3, r3, #1 + 8002914: 4413 add r3, r2 + 8002916: 009b lsls r3, r3, #2 + 8002918: 440b add r3, r1 + 800291a: 2200 movs r2, #0 + 800291c: 601a str r2, [r3, #0] for (i = 0; i < _FS_LOCK; i++) { - 8002866: 68fb ldr r3, [r7, #12] - 8002868: 3301 adds r3, #1 - 800286a: 60fb str r3, [r7, #12] - 800286c: 68fb ldr r3, [r7, #12] - 800286e: 2b01 cmp r3, #1 - 8002870: d9e5 bls.n 800283e + 800291e: 68fb ldr r3, [r7, #12] + 8002920: 3301 adds r3, #1 + 8002922: 60fb str r3, [r7, #12] + 8002924: 68fb ldr r3, [r7, #12] + 8002926: 2b01 cmp r3, #1 + 8002928: d9e5 bls.n 80028f6 } } - 8002872: bf00 nop - 8002874: bf00 nop - 8002876: 3714 adds r7, #20 - 8002878: 46bd mov sp, r7 - 800287a: bc80 pop {r7} - 800287c: 4770 bx lr - 800287e: bf00 nop - 8002880: 2000004c .word 0x2000004c + 800292a: bf00 nop + 800292c: bf00 nop + 800292e: 3714 adds r7, #20 + 8002930: 46bd mov sp, r7 + 8002932: bc80 pop {r7} + 8002934: 4770 bx lr + 8002936: bf00 nop + 8002938: 200000b4 .word 0x200000b4 -08002884 : +0800293c : #if !_FS_READONLY static FRESULT sync_window ( FATFS* fs /* File system object */ ) { - 8002884: b580 push {r7, lr} - 8002886: b086 sub sp, #24 - 8002888: af00 add r7, sp, #0 - 800288a: 6078 str r0, [r7, #4] + 800293c: b580 push {r7, lr} + 800293e: b086 sub sp, #24 + 8002940: af00 add r7, sp, #0 + 8002942: 6078 str r0, [r7, #4] DWORD wsect; UINT nf; FRESULT res = FR_OK; - 800288c: 2300 movs r3, #0 - 800288e: 73fb strb r3, [r7, #15] + 8002944: 2300 movs r3, #0 + 8002946: 73fb strb r3, [r7, #15] if (fs->wflag) { /* Write back the sector if it is dirty */ - 8002890: 687b ldr r3, [r7, #4] - 8002892: f893 3204 ldrb.w r3, [r3, #516] ; 0x204 - 8002896: 2b00 cmp r3, #0 - 8002898: d038 beq.n 800290c + 8002948: 687b ldr r3, [r7, #4] + 800294a: f893 3204 ldrb.w r3, [r3, #516] ; 0x204 + 800294e: 2b00 cmp r3, #0 + 8002950: d038 beq.n 80029c4 wsect = fs->winsect; /* Current sector number */ - 800289a: 687b ldr r3, [r7, #4] - 800289c: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c - 80028a0: 617b str r3, [r7, #20] + 8002952: 687b ldr r3, [r7, #4] + 8002954: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c + 8002958: 617b str r3, [r7, #20] if (disk_write(fs->drv, fs->win.d8, wsect, 1) != RES_OK) { - 80028a2: 687b ldr r3, [r7, #4] - 80028a4: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 80028a8: 6879 ldr r1, [r7, #4] - 80028aa: 2301 movs r3, #1 - 80028ac: 697a ldr r2, [r7, #20] - 80028ae: f7ff fde1 bl 8002474 - 80028b2: 4603 mov r3, r0 - 80028b4: 2b00 cmp r3, #0 - 80028b6: d002 beq.n 80028be + 800295a: 687b ldr r3, [r7, #4] + 800295c: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 8002960: 6879 ldr r1, [r7, #4] + 8002962: 2301 movs r3, #1 + 8002964: 697a ldr r2, [r7, #20] + 8002966: f7ff fde1 bl 800252c + 800296a: 4603 mov r3, r0 + 800296c: 2b00 cmp r3, #0 + 800296e: d002 beq.n 8002976 res = FR_DISK_ERR; - 80028b8: 2301 movs r3, #1 - 80028ba: 73fb strb r3, [r7, #15] - 80028bc: e026 b.n 800290c + 8002970: 2301 movs r3, #1 + 8002972: 73fb strb r3, [r7, #15] + 8002974: e026 b.n 80029c4 } else { fs->wflag = 0; - 80028be: 687b ldr r3, [r7, #4] - 80028c0: 2200 movs r2, #0 - 80028c2: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8002976: 687b ldr r3, [r7, #4] + 8002978: 2200 movs r2, #0 + 800297a: f883 2204 strb.w r2, [r3, #516] ; 0x204 if (wsect - fs->fatbase < fs->fsize) { /* Is it in the FAT area? */ - 80028c6: 687b ldr r3, [r7, #4] - 80028c8: f8d3 3220 ldr.w r3, [r3, #544] ; 0x220 - 80028cc: 697a ldr r2, [r7, #20] - 80028ce: 1ad2 subs r2, r2, r3 - 80028d0: 687b ldr r3, [r7, #4] - 80028d2: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 80028d6: 429a cmp r2, r3 - 80028d8: d218 bcs.n 800290c + 800297e: 687b ldr r3, [r7, #4] + 8002980: f8d3 3220 ldr.w r3, [r3, #544] ; 0x220 + 8002984: 697a ldr r2, [r7, #20] + 8002986: 1ad2 subs r2, r2, r3 + 8002988: 687b ldr r3, [r7, #4] + 800298a: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 800298e: 429a cmp r2, r3 + 8002990: d218 bcs.n 80029c4 for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ - 80028da: 687b ldr r3, [r7, #4] - 80028dc: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 80028e0: 613b str r3, [r7, #16] - 80028e2: e010 b.n 8002906 + 8002992: 687b ldr r3, [r7, #4] + 8002994: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 8002998: 613b str r3, [r7, #16] + 800299a: e010 b.n 80029be wsect += fs->fsize; - 80028e4: 687b ldr r3, [r7, #4] - 80028e6: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 80028ea: 697a ldr r2, [r7, #20] - 80028ec: 4413 add r3, r2 - 80028ee: 617b str r3, [r7, #20] + 800299c: 687b ldr r3, [r7, #4] + 800299e: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 80029a2: 697a ldr r2, [r7, #20] + 80029a4: 4413 add r3, r2 + 80029a6: 617b str r3, [r7, #20] disk_write(fs->drv, fs->win.d8, wsect, 1); - 80028f0: 687b ldr r3, [r7, #4] - 80028f2: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 80028f6: 6879 ldr r1, [r7, #4] - 80028f8: 2301 movs r3, #1 - 80028fa: 697a ldr r2, [r7, #20] - 80028fc: f7ff fdba bl 8002474 + 80029a8: 687b ldr r3, [r7, #4] + 80029aa: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 80029ae: 6879 ldr r1, [r7, #4] + 80029b0: 2301 movs r3, #1 + 80029b2: 697a ldr r2, [r7, #20] + 80029b4: f7ff fdba bl 800252c for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ - 8002900: 693b ldr r3, [r7, #16] - 8002902: 3b01 subs r3, #1 - 8002904: 613b str r3, [r7, #16] - 8002906: 693b ldr r3, [r7, #16] - 8002908: 2b01 cmp r3, #1 - 800290a: d8eb bhi.n 80028e4 + 80029b8: 693b ldr r3, [r7, #16] + 80029ba: 3b01 subs r3, #1 + 80029bc: 613b str r3, [r7, #16] + 80029be: 693b ldr r3, [r7, #16] + 80029c0: 2b01 cmp r3, #1 + 80029c2: d8eb bhi.n 800299c } } } } return res; - 800290c: 7bfb ldrb r3, [r7, #15] + 80029c4: 7bfb ldrb r3, [r7, #15] } - 800290e: 4618 mov r0, r3 - 8002910: 3718 adds r7, #24 - 8002912: 46bd mov sp, r7 - 8002914: bd80 pop {r7, pc} + 80029c6: 4618 mov r0, r3 + 80029c8: 3718 adds r7, #24 + 80029ca: 46bd mov sp, r7 + 80029cc: bd80 pop {r7, pc} -08002916 : +080029ce : static FRESULT move_window ( FATFS* fs, /* File system object */ DWORD sector /* Sector number to make appearance in the fs->win[].d8 */ ) { - 8002916: b580 push {r7, lr} - 8002918: b084 sub sp, #16 - 800291a: af00 add r7, sp, #0 - 800291c: 6078 str r0, [r7, #4] - 800291e: 6039 str r1, [r7, #0] + 80029ce: b580 push {r7, lr} + 80029d0: b084 sub sp, #16 + 80029d2: af00 add r7, sp, #0 + 80029d4: 6078 str r0, [r7, #4] + 80029d6: 6039 str r1, [r7, #0] FRESULT res = FR_OK; - 8002920: 2300 movs r3, #0 - 8002922: 73fb strb r3, [r7, #15] + 80029d8: 2300 movs r3, #0 + 80029da: 73fb strb r3, [r7, #15] if (sector != fs->winsect) { /* Window offset changed? */ - 8002924: 687b ldr r3, [r7, #4] - 8002926: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c - 800292a: 683a ldr r2, [r7, #0] - 800292c: 429a cmp r2, r3 - 800292e: d01b beq.n 8002968 + 80029dc: 687b ldr r3, [r7, #4] + 80029de: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c + 80029e2: 683a ldr r2, [r7, #0] + 80029e4: 429a cmp r2, r3 + 80029e6: d01b beq.n 8002a20 #if !_FS_READONLY res = sync_window(fs); /* Write-back changes */ - 8002930: 6878 ldr r0, [r7, #4] - 8002932: f7ff ffa7 bl 8002884 - 8002936: 4603 mov r3, r0 - 8002938: 73fb strb r3, [r7, #15] + 80029e8: 6878 ldr r0, [r7, #4] + 80029ea: f7ff ffa7 bl 800293c + 80029ee: 4603 mov r3, r0 + 80029f0: 73fb strb r3, [r7, #15] #endif if (res == FR_OK) { /* Fill sector window with new data */ - 800293a: 7bfb ldrb r3, [r7, #15] - 800293c: 2b00 cmp r3, #0 - 800293e: d113 bne.n 8002968 + 80029f2: 7bfb ldrb r3, [r7, #15] + 80029f4: 2b00 cmp r3, #0 + 80029f6: d113 bne.n 8002a20 if (disk_read(fs->drv, fs->win.d8, sector, 1) != RES_OK) { - 8002940: 687b ldr r3, [r7, #4] - 8002942: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 8002946: 6879 ldr r1, [r7, #4] - 8002948: 2301 movs r3, #1 - 800294a: 683a ldr r2, [r7, #0] - 800294c: f7ff fd72 bl 8002434 - 8002950: 4603 mov r3, r0 - 8002952: 2b00 cmp r3, #0 - 8002954: d004 beq.n 8002960 + 80029f8: 687b ldr r3, [r7, #4] + 80029fa: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 80029fe: 6879 ldr r1, [r7, #4] + 8002a00: 2301 movs r3, #1 + 8002a02: 683a ldr r2, [r7, #0] + 8002a04: f7ff fd72 bl 80024ec + 8002a08: 4603 mov r3, r0 + 8002a0a: 2b00 cmp r3, #0 + 8002a0c: d004 beq.n 8002a18 sector = 0xFFFFFFFF; /* Invalidate window if data is not reliable */ - 8002956: f04f 33ff mov.w r3, #4294967295 - 800295a: 603b str r3, [r7, #0] + 8002a0e: f04f 33ff mov.w r3, #4294967295 + 8002a12: 603b str r3, [r7, #0] res = FR_DISK_ERR; - 800295c: 2301 movs r3, #1 - 800295e: 73fb strb r3, [r7, #15] + 8002a14: 2301 movs r3, #1 + 8002a16: 73fb strb r3, [r7, #15] } fs->winsect = sector; - 8002960: 687b ldr r3, [r7, #4] - 8002962: 683a ldr r2, [r7, #0] - 8002964: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 8002a18: 687b ldr r3, [r7, #4] + 8002a1a: 683a ldr r2, [r7, #0] + 8002a1c: f8c3 222c str.w r2, [r3, #556] ; 0x22c } } return res; - 8002968: 7bfb ldrb r3, [r7, #15] + 8002a20: 7bfb ldrb r3, [r7, #15] } - 800296a: 4618 mov r0, r3 - 800296c: 3710 adds r7, #16 - 800296e: 46bd mov sp, r7 - 8002970: bd80 pop {r7, pc} + 8002a22: 4618 mov r0, r3 + 8002a24: 3710 adds r7, #16 + 8002a26: 46bd mov sp, r7 + 8002a28: bd80 pop {r7, pc} -08002972 : +08002a2a : DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */ FATFS* fs, /* File system object */ DWORD clst /* Cluster# to be converted */ ) { - 8002972: b480 push {r7} - 8002974: b083 sub sp, #12 - 8002976: af00 add r7, sp, #0 - 8002978: 6078 str r0, [r7, #4] - 800297a: 6039 str r1, [r7, #0] + 8002a2a: b480 push {r7} + 8002a2c: b083 sub sp, #12 + 8002a2e: af00 add r7, sp, #0 + 8002a30: 6078 str r0, [r7, #4] + 8002a32: 6039 str r1, [r7, #0] clst -= 2; - 800297c: 683b ldr r3, [r7, #0] - 800297e: 3b02 subs r3, #2 - 8002980: 603b str r3, [r7, #0] + 8002a34: 683b ldr r3, [r7, #0] + 8002a36: 3b02 subs r3, #2 + 8002a38: 603b str r3, [r7, #0] if (clst >= fs->n_fatent - 2) return 0; /* Invalid cluster# */ - 8002982: 687b ldr r3, [r7, #4] - 8002984: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002988: 3b02 subs r3, #2 - 800298a: 683a ldr r2, [r7, #0] - 800298c: 429a cmp r2, r3 - 800298e: d301 bcc.n 8002994 - 8002990: 2300 movs r3, #0 - 8002992: e00a b.n 80029aa + 8002a3a: 687b ldr r3, [r7, #4] + 8002a3c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002a40: 3b02 subs r3, #2 + 8002a42: 683a ldr r2, [r7, #0] + 8002a44: 429a cmp r2, r3 + 8002a46: d301 bcc.n 8002a4c + 8002a48: 2300 movs r3, #0 + 8002a4a: e00a b.n 8002a62 return clst * fs->csize + fs->database; - 8002994: 687b ldr r3, [r7, #4] - 8002996: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 800299a: 461a mov r2, r3 - 800299c: 683b ldr r3, [r7, #0] - 800299e: fb03 f202 mul.w r2, r3, r2 - 80029a2: 687b ldr r3, [r7, #4] - 80029a4: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 - 80029a8: 4413 add r3, r2 + 8002a4c: 687b ldr r3, [r7, #4] + 8002a4e: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8002a52: 461a mov r2, r3 + 8002a54: 683b ldr r3, [r7, #0] + 8002a56: fb03 f202 mul.w r2, r3, r2 + 8002a5a: 687b ldr r3, [r7, #4] + 8002a5c: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 + 8002a60: 4413 add r3, r2 } - 80029aa: 4618 mov r0, r3 - 80029ac: 370c adds r7, #12 - 80029ae: 46bd mov sp, r7 - 80029b0: bc80 pop {r7} - 80029b2: 4770 bx lr + 8002a62: 4618 mov r0, r3 + 8002a64: 370c adds r7, #12 + 8002a66: 46bd mov sp, r7 + 8002a68: bc80 pop {r7} + 8002a6a: 4770 bx lr -080029b4 : +08002a6c : DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */ FATFS* fs, /* File system object */ DWORD clst /* FAT index number (cluster number) to get the value */ ) { - 80029b4: b580 push {r7, lr} - 80029b6: b086 sub sp, #24 - 80029b8: af00 add r7, sp, #0 - 80029ba: 6078 str r0, [r7, #4] - 80029bc: 6039 str r1, [r7, #0] + 8002a6c: b580 push {r7, lr} + 8002a6e: b086 sub sp, #24 + 8002a70: af00 add r7, sp, #0 + 8002a72: 6078 str r0, [r7, #4] + 8002a74: 6039 str r1, [r7, #0] UINT wc, bc; BYTE *p; DWORD val; if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - 80029be: 683b ldr r3, [r7, #0] - 80029c0: 2b01 cmp r3, #1 - 80029c2: d905 bls.n 80029d0 - 80029c4: 687b ldr r3, [r7, #4] - 80029c6: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80029ca: 683a ldr r2, [r7, #0] - 80029cc: 429a cmp r2, r3 - 80029ce: d302 bcc.n 80029d6 + 8002a76: 683b ldr r3, [r7, #0] + 8002a78: 2b01 cmp r3, #1 + 8002a7a: d905 bls.n 8002a88 + 8002a7c: 687b ldr r3, [r7, #4] + 8002a7e: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002a82: 683a ldr r2, [r7, #0] + 8002a84: 429a cmp r2, r3 + 8002a86: d302 bcc.n 8002a8e val = 1; /* Internal error */ - 80029d0: 2301 movs r3, #1 - 80029d2: 617b str r3, [r7, #20] - 80029d4: e0a3 b.n 8002b1e + 8002a88: 2301 movs r3, #1 + 8002a8a: 617b str r3, [r7, #20] + 8002a8c: e0a3 b.n 8002bd6 } else { val = 0xFFFFFFFF; /* Default value falls on disk error */ - 80029d6: f04f 33ff mov.w r3, #4294967295 - 80029da: 617b str r3, [r7, #20] + 8002a8e: f04f 33ff mov.w r3, #4294967295 + 8002a92: 617b str r3, [r7, #20] switch (fs->fs_type) { - 80029dc: 687b ldr r3, [r7, #4] - 80029de: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 80029e2: 2b03 cmp r3, #3 - 80029e4: d068 beq.n 8002ab8 - 80029e6: 2b03 cmp r3, #3 - 80029e8: f300 808f bgt.w 8002b0a - 80029ec: 2b01 cmp r3, #1 - 80029ee: d002 beq.n 80029f6 - 80029f0: 2b02 cmp r3, #2 - 80029f2: d040 beq.n 8002a76 - 80029f4: e089 b.n 8002b0a + 8002a94: 687b ldr r3, [r7, #4] + 8002a96: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8002a9a: 2b03 cmp r3, #3 + 8002a9c: d068 beq.n 8002b70 + 8002a9e: 2b03 cmp r3, #3 + 8002aa0: f300 808f bgt.w 8002bc2 + 8002aa4: 2b01 cmp r3, #1 + 8002aa6: d002 beq.n 8002aae + 8002aa8: 2b02 cmp r3, #2 + 8002aaa: d040 beq.n 8002b2e + 8002aac: e089 b.n 8002bc2 case FS_FAT12 : bc = (UINT)clst; bc += bc / 2; - 80029f6: 683b ldr r3, [r7, #0] - 80029f8: 60fb str r3, [r7, #12] - 80029fa: 68fb ldr r3, [r7, #12] - 80029fc: 085b lsrs r3, r3, #1 - 80029fe: 68fa ldr r2, [r7, #12] - 8002a00: 4413 add r3, r2 - 8002a02: 60fb str r3, [r7, #12] + 8002aae: 683b ldr r3, [r7, #0] + 8002ab0: 60fb str r3, [r7, #12] + 8002ab2: 68fb ldr r3, [r7, #12] + 8002ab4: 085b lsrs r3, r3, #1 + 8002ab6: 68fa ldr r2, [r7, #12] + 8002ab8: 4413 add r3, r2 + 8002aba: 60fb str r3, [r7, #12] if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002a04: 687b ldr r3, [r7, #4] - 8002a06: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002a0a: 68fb ldr r3, [r7, #12] - 8002a0c: 0a5b lsrs r3, r3, #9 - 8002a0e: 4413 add r3, r2 - 8002a10: 4619 mov r1, r3 - 8002a12: 6878 ldr r0, [r7, #4] - 8002a14: f7ff ff7f bl 8002916 - 8002a18: 4603 mov r3, r0 - 8002a1a: 2b00 cmp r3, #0 - 8002a1c: d178 bne.n 8002b10 + 8002abc: 687b ldr r3, [r7, #4] + 8002abe: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002ac2: 68fb ldr r3, [r7, #12] + 8002ac4: 0a5b lsrs r3, r3, #9 + 8002ac6: 4413 add r3, r2 + 8002ac8: 4619 mov r1, r3 + 8002aca: 6878 ldr r0, [r7, #4] + 8002acc: f7ff ff7f bl 80029ce + 8002ad0: 4603 mov r3, r0 + 8002ad2: 2b00 cmp r3, #0 + 8002ad4: d178 bne.n 8002bc8 wc = fs->win.d8[bc++ % SS(fs)]; - 8002a1e: 68fb ldr r3, [r7, #12] - 8002a20: 1c5a adds r2, r3, #1 - 8002a22: 60fa str r2, [r7, #12] - 8002a24: f3c3 0308 ubfx r3, r3, #0, #9 - 8002a28: 687a ldr r2, [r7, #4] - 8002a2a: 5cd3 ldrb r3, [r2, r3] - 8002a2c: 60bb str r3, [r7, #8] + 8002ad6: 68fb ldr r3, [r7, #12] + 8002ad8: 1c5a adds r2, r3, #1 + 8002ada: 60fa str r2, [r7, #12] + 8002adc: f3c3 0308 ubfx r3, r3, #0, #9 + 8002ae0: 687a ldr r2, [r7, #4] + 8002ae2: 5cd3 ldrb r3, [r2, r3] + 8002ae4: 60bb str r3, [r7, #8] if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002a2e: 687b ldr r3, [r7, #4] - 8002a30: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002a34: 68fb ldr r3, [r7, #12] - 8002a36: 0a5b lsrs r3, r3, #9 - 8002a38: 4413 add r3, r2 - 8002a3a: 4619 mov r1, r3 - 8002a3c: 6878 ldr r0, [r7, #4] - 8002a3e: f7ff ff6a bl 8002916 - 8002a42: 4603 mov r3, r0 - 8002a44: 2b00 cmp r3, #0 - 8002a46: d165 bne.n 8002b14 + 8002ae6: 687b ldr r3, [r7, #4] + 8002ae8: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002aec: 68fb ldr r3, [r7, #12] + 8002aee: 0a5b lsrs r3, r3, #9 + 8002af0: 4413 add r3, r2 + 8002af2: 4619 mov r1, r3 + 8002af4: 6878 ldr r0, [r7, #4] + 8002af6: f7ff ff6a bl 80029ce + 8002afa: 4603 mov r3, r0 + 8002afc: 2b00 cmp r3, #0 + 8002afe: d165 bne.n 8002bcc wc |= fs->win.d8[bc % SS(fs)] << 8; - 8002a48: 68fb ldr r3, [r7, #12] - 8002a4a: f3c3 0308 ubfx r3, r3, #0, #9 - 8002a4e: 687a ldr r2, [r7, #4] - 8002a50: 5cd3 ldrb r3, [r2, r3] - 8002a52: 021b lsls r3, r3, #8 - 8002a54: 461a mov r2, r3 - 8002a56: 68bb ldr r3, [r7, #8] - 8002a58: 4313 orrs r3, r2 - 8002a5a: 60bb str r3, [r7, #8] + 8002b00: 68fb ldr r3, [r7, #12] + 8002b02: f3c3 0308 ubfx r3, r3, #0, #9 + 8002b06: 687a ldr r2, [r7, #4] + 8002b08: 5cd3 ldrb r3, [r2, r3] + 8002b0a: 021b lsls r3, r3, #8 + 8002b0c: 461a mov r2, r3 + 8002b0e: 68bb ldr r3, [r7, #8] + 8002b10: 4313 orrs r3, r2 + 8002b12: 60bb str r3, [r7, #8] val = clst & 1 ? wc >> 4 : (wc & 0xFFF); - 8002a5c: 683b ldr r3, [r7, #0] - 8002a5e: f003 0301 and.w r3, r3, #1 - 8002a62: 2b00 cmp r3, #0 - 8002a64: d002 beq.n 8002a6c - 8002a66: 68bb ldr r3, [r7, #8] - 8002a68: 091b lsrs r3, r3, #4 - 8002a6a: e002 b.n 8002a72 - 8002a6c: 68bb ldr r3, [r7, #8] - 8002a6e: f3c3 030b ubfx r3, r3, #0, #12 - 8002a72: 617b str r3, [r7, #20] + 8002b14: 683b ldr r3, [r7, #0] + 8002b16: f003 0301 and.w r3, r3, #1 + 8002b1a: 2b00 cmp r3, #0 + 8002b1c: d002 beq.n 8002b24 + 8002b1e: 68bb ldr r3, [r7, #8] + 8002b20: 091b lsrs r3, r3, #4 + 8002b22: e002 b.n 8002b2a + 8002b24: 68bb ldr r3, [r7, #8] + 8002b26: f3c3 030b ubfx r3, r3, #0, #12 + 8002b2a: 617b str r3, [r7, #20] break; - 8002a74: e053 b.n 8002b1e + 8002b2c: e053 b.n 8002bd6 case FS_FAT16 : if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break; - 8002a76: 687b ldr r3, [r7, #4] - 8002a78: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002a7c: 683b ldr r3, [r7, #0] - 8002a7e: 0a1b lsrs r3, r3, #8 - 8002a80: 4413 add r3, r2 - 8002a82: 4619 mov r1, r3 - 8002a84: 6878 ldr r0, [r7, #4] - 8002a86: f7ff ff46 bl 8002916 - 8002a8a: 4603 mov r3, r0 - 8002a8c: 2b00 cmp r3, #0 - 8002a8e: d143 bne.n 8002b18 + 8002b2e: 687b ldr r3, [r7, #4] + 8002b30: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002b34: 683b ldr r3, [r7, #0] + 8002b36: 0a1b lsrs r3, r3, #8 + 8002b38: 4413 add r3, r2 + 8002b3a: 4619 mov r1, r3 + 8002b3c: 6878 ldr r0, [r7, #4] + 8002b3e: f7ff ff46 bl 80029ce + 8002b42: 4603 mov r3, r0 + 8002b44: 2b00 cmp r3, #0 + 8002b46: d143 bne.n 8002bd0 p = &fs->win.d8[clst * 2 % SS(fs)]; - 8002a90: 683b ldr r3, [r7, #0] - 8002a92: 005b lsls r3, r3, #1 - 8002a94: f403 73ff and.w r3, r3, #510 ; 0x1fe - 8002a98: 687a ldr r2, [r7, #4] - 8002a9a: 4413 add r3, r2 - 8002a9c: 613b str r3, [r7, #16] + 8002b48: 683b ldr r3, [r7, #0] + 8002b4a: 005b lsls r3, r3, #1 + 8002b4c: f403 73ff and.w r3, r3, #510 ; 0x1fe + 8002b50: 687a ldr r2, [r7, #4] + 8002b52: 4413 add r3, r2 + 8002b54: 613b str r3, [r7, #16] val = LD_WORD(p); - 8002a9e: 693b ldr r3, [r7, #16] - 8002aa0: 3301 adds r3, #1 - 8002aa2: 781b ldrb r3, [r3, #0] - 8002aa4: 021b lsls r3, r3, #8 - 8002aa6: b21a sxth r2, r3 - 8002aa8: 693b ldr r3, [r7, #16] - 8002aaa: 781b ldrb r3, [r3, #0] - 8002aac: b21b sxth r3, r3 - 8002aae: 4313 orrs r3, r2 - 8002ab0: b21b sxth r3, r3 - 8002ab2: b29b uxth r3, r3 - 8002ab4: 617b str r3, [r7, #20] + 8002b56: 693b ldr r3, [r7, #16] + 8002b58: 3301 adds r3, #1 + 8002b5a: 781b ldrb r3, [r3, #0] + 8002b5c: 021b lsls r3, r3, #8 + 8002b5e: b21a sxth r2, r3 + 8002b60: 693b ldr r3, [r7, #16] + 8002b62: 781b ldrb r3, [r3, #0] + 8002b64: b21b sxth r3, r3 + 8002b66: 4313 orrs r3, r2 + 8002b68: b21b sxth r3, r3 + 8002b6a: b29b uxth r3, r3 + 8002b6c: 617b str r3, [r7, #20] break; - 8002ab6: e032 b.n 8002b1e + 8002b6e: e032 b.n 8002bd6 case FS_FAT32 : if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; - 8002ab8: 687b ldr r3, [r7, #4] - 8002aba: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002abe: 683b ldr r3, [r7, #0] - 8002ac0: 09db lsrs r3, r3, #7 - 8002ac2: 4413 add r3, r2 - 8002ac4: 4619 mov r1, r3 - 8002ac6: 6878 ldr r0, [r7, #4] - 8002ac8: f7ff ff25 bl 8002916 - 8002acc: 4603 mov r3, r0 - 8002ace: 2b00 cmp r3, #0 - 8002ad0: d124 bne.n 8002b1c + 8002b70: 687b ldr r3, [r7, #4] + 8002b72: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002b76: 683b ldr r3, [r7, #0] + 8002b78: 09db lsrs r3, r3, #7 + 8002b7a: 4413 add r3, r2 + 8002b7c: 4619 mov r1, r3 + 8002b7e: 6878 ldr r0, [r7, #4] + 8002b80: f7ff ff25 bl 80029ce + 8002b84: 4603 mov r3, r0 + 8002b86: 2b00 cmp r3, #0 + 8002b88: d124 bne.n 8002bd4 p = &fs->win.d8[clst * 4 % SS(fs)]; - 8002ad2: 683b ldr r3, [r7, #0] - 8002ad4: 009b lsls r3, r3, #2 - 8002ad6: f403 73fe and.w r3, r3, #508 ; 0x1fc - 8002ada: 687a ldr r2, [r7, #4] - 8002adc: 4413 add r3, r2 - 8002ade: 613b str r3, [r7, #16] + 8002b8a: 683b ldr r3, [r7, #0] + 8002b8c: 009b lsls r3, r3, #2 + 8002b8e: f403 73fe and.w r3, r3, #508 ; 0x1fc + 8002b92: 687a ldr r2, [r7, #4] + 8002b94: 4413 add r3, r2 + 8002b96: 613b str r3, [r7, #16] val = LD_DWORD(p) & 0x0FFFFFFF; - 8002ae0: 693b ldr r3, [r7, #16] - 8002ae2: 3303 adds r3, #3 - 8002ae4: 781b ldrb r3, [r3, #0] - 8002ae6: 061a lsls r2, r3, #24 - 8002ae8: 693b ldr r3, [r7, #16] - 8002aea: 3302 adds r3, #2 - 8002aec: 781b ldrb r3, [r3, #0] - 8002aee: 041b lsls r3, r3, #16 - 8002af0: 4313 orrs r3, r2 - 8002af2: 693a ldr r2, [r7, #16] - 8002af4: 3201 adds r2, #1 - 8002af6: 7812 ldrb r2, [r2, #0] - 8002af8: 0212 lsls r2, r2, #8 - 8002afa: 4313 orrs r3, r2 - 8002afc: 693a ldr r2, [r7, #16] - 8002afe: 7812 ldrb r2, [r2, #0] - 8002b00: 4313 orrs r3, r2 - 8002b02: f023 4370 bic.w r3, r3, #4026531840 ; 0xf0000000 - 8002b06: 617b str r3, [r7, #20] + 8002b98: 693b ldr r3, [r7, #16] + 8002b9a: 3303 adds r3, #3 + 8002b9c: 781b ldrb r3, [r3, #0] + 8002b9e: 061a lsls r2, r3, #24 + 8002ba0: 693b ldr r3, [r7, #16] + 8002ba2: 3302 adds r3, #2 + 8002ba4: 781b ldrb r3, [r3, #0] + 8002ba6: 041b lsls r3, r3, #16 + 8002ba8: 4313 orrs r3, r2 + 8002baa: 693a ldr r2, [r7, #16] + 8002bac: 3201 adds r2, #1 + 8002bae: 7812 ldrb r2, [r2, #0] + 8002bb0: 0212 lsls r2, r2, #8 + 8002bb2: 4313 orrs r3, r2 + 8002bb4: 693a ldr r2, [r7, #16] + 8002bb6: 7812 ldrb r2, [r2, #0] + 8002bb8: 4313 orrs r3, r2 + 8002bba: f023 4370 bic.w r3, r3, #4026531840 ; 0xf0000000 + 8002bbe: 617b str r3, [r7, #20] break; - 8002b08: e009 b.n 8002b1e + 8002bc0: e009 b.n 8002bd6 default: val = 1; /* Internal error */ - 8002b0a: 2301 movs r3, #1 - 8002b0c: 617b str r3, [r7, #20] - 8002b0e: e006 b.n 8002b1e + 8002bc2: 2301 movs r3, #1 + 8002bc4: 617b str r3, [r7, #20] + 8002bc6: e006 b.n 8002bd6 if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002b10: bf00 nop - 8002b12: e004 b.n 8002b1e + 8002bc8: bf00 nop + 8002bca: e004 b.n 8002bd6 if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002b14: bf00 nop - 8002b16: e002 b.n 8002b1e + 8002bcc: bf00 nop + 8002bce: e002 b.n 8002bd6 if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break; - 8002b18: bf00 nop - 8002b1a: e000 b.n 8002b1e + 8002bd0: bf00 nop + 8002bd2: e000 b.n 8002bd6 if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; - 8002b1c: bf00 nop + 8002bd4: bf00 nop } } return val; - 8002b1e: 697b ldr r3, [r7, #20] + 8002bd6: 697b ldr r3, [r7, #20] } - 8002b20: 4618 mov r0, r3 - 8002b22: 3718 adds r7, #24 - 8002b24: 46bd mov sp, r7 - 8002b26: bd80 pop {r7, pc} + 8002bd8: 4618 mov r0, r3 + 8002bda: 3718 adds r7, #24 + 8002bdc: 46bd mov sp, r7 + 8002bde: bd80 pop {r7, pc} -08002b28 : +08002be0 : FRESULT put_fat ( FATFS* fs, /* File system object */ DWORD clst, /* FAT index number (cluster number) to be changed */ DWORD val /* New value to be set to the entry */ ) { - 8002b28: b580 push {r7, lr} - 8002b2a: b088 sub sp, #32 - 8002b2c: af00 add r7, sp, #0 - 8002b2e: 60f8 str r0, [r7, #12] - 8002b30: 60b9 str r1, [r7, #8] - 8002b32: 607a str r2, [r7, #4] + 8002be0: b580 push {r7, lr} + 8002be2: b088 sub sp, #32 + 8002be4: af00 add r7, sp, #0 + 8002be6: 60f8 str r0, [r7, #12] + 8002be8: 60b9 str r1, [r7, #8] + 8002bea: 607a str r2, [r7, #4] UINT bc; BYTE *p; FRESULT res; if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - 8002b34: 68bb ldr r3, [r7, #8] - 8002b36: 2b01 cmp r3, #1 - 8002b38: d905 bls.n 8002b46 - 8002b3a: 68fb ldr r3, [r7, #12] - 8002b3c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002b40: 68ba ldr r2, [r7, #8] - 8002b42: 429a cmp r2, r3 - 8002b44: d302 bcc.n 8002b4c + 8002bec: 68bb ldr r3, [r7, #8] + 8002bee: 2b01 cmp r3, #1 + 8002bf0: d905 bls.n 8002bfe + 8002bf2: 68fb ldr r3, [r7, #12] + 8002bf4: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002bf8: 68ba ldr r2, [r7, #8] + 8002bfa: 429a cmp r2, r3 + 8002bfc: d302 bcc.n 8002c04 res = FR_INT_ERR; - 8002b46: 2302 movs r3, #2 - 8002b48: 77fb strb r3, [r7, #31] - 8002b4a: e0f6 b.n 8002d3a + 8002bfe: 2302 movs r3, #2 + 8002c00: 77fb strb r3, [r7, #31] + 8002c02: e0f6 b.n 8002df2 } else { switch (fs->fs_type) { - 8002b4c: 68fb ldr r3, [r7, #12] - 8002b4e: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 8002b52: 2b03 cmp r3, #3 - 8002b54: f000 809e beq.w 8002c94 - 8002b58: 2b03 cmp r3, #3 - 8002b5a: f300 80e4 bgt.w 8002d26 - 8002b5e: 2b01 cmp r3, #1 - 8002b60: d002 beq.n 8002b68 - 8002b62: 2b02 cmp r3, #2 - 8002b64: d06f beq.n 8002c46 - 8002b66: e0de b.n 8002d26 + 8002c04: 68fb ldr r3, [r7, #12] + 8002c06: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8002c0a: 2b03 cmp r3, #3 + 8002c0c: f000 809e beq.w 8002d4c + 8002c10: 2b03 cmp r3, #3 + 8002c12: f300 80e4 bgt.w 8002dde + 8002c16: 2b01 cmp r3, #1 + 8002c18: d002 beq.n 8002c20 + 8002c1a: 2b02 cmp r3, #2 + 8002c1c: d06f beq.n 8002cfe + 8002c1e: e0de b.n 8002dde case FS_FAT12 : bc = (UINT)clst; bc += bc / 2; - 8002b68: 68bb ldr r3, [r7, #8] - 8002b6a: 617b str r3, [r7, #20] - 8002b6c: 697b ldr r3, [r7, #20] - 8002b6e: 085b lsrs r3, r3, #1 - 8002b70: 697a ldr r2, [r7, #20] - 8002b72: 4413 add r3, r2 - 8002b74: 617b str r3, [r7, #20] + 8002c20: 68bb ldr r3, [r7, #8] + 8002c22: 617b str r3, [r7, #20] + 8002c24: 697b ldr r3, [r7, #20] + 8002c26: 085b lsrs r3, r3, #1 + 8002c28: 697a ldr r2, [r7, #20] + 8002c2a: 4413 add r3, r2 + 8002c2c: 617b str r3, [r7, #20] res = move_window(fs, fs->fatbase + (bc / SS(fs))); - 8002b76: 68fb ldr r3, [r7, #12] - 8002b78: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002b7c: 697b ldr r3, [r7, #20] - 8002b7e: 0a5b lsrs r3, r3, #9 - 8002b80: 4413 add r3, r2 - 8002b82: 4619 mov r1, r3 - 8002b84: 68f8 ldr r0, [r7, #12] - 8002b86: f7ff fec6 bl 8002916 - 8002b8a: 4603 mov r3, r0 - 8002b8c: 77fb strb r3, [r7, #31] + 8002c2e: 68fb ldr r3, [r7, #12] + 8002c30: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002c34: 697b ldr r3, [r7, #20] + 8002c36: 0a5b lsrs r3, r3, #9 + 8002c38: 4413 add r3, r2 + 8002c3a: 4619 mov r1, r3 + 8002c3c: 68f8 ldr r0, [r7, #12] + 8002c3e: f7ff fec6 bl 80029ce + 8002c42: 4603 mov r3, r0 + 8002c44: 77fb strb r3, [r7, #31] if (res != FR_OK) break; - 8002b8e: 7ffb ldrb r3, [r7, #31] - 8002b90: 2b00 cmp r3, #0 - 8002b92: f040 80cb bne.w 8002d2c + 8002c46: 7ffb ldrb r3, [r7, #31] + 8002c48: 2b00 cmp r3, #0 + 8002c4a: f040 80cb bne.w 8002de4 p = &fs->win.d8[bc++ % SS(fs)]; - 8002b96: 697b ldr r3, [r7, #20] - 8002b98: 1c5a adds r2, r3, #1 - 8002b9a: 617a str r2, [r7, #20] - 8002b9c: f3c3 0308 ubfx r3, r3, #0, #9 - 8002ba0: 68fa ldr r2, [r7, #12] - 8002ba2: 4413 add r3, r2 - 8002ba4: 61bb str r3, [r7, #24] + 8002c4e: 697b ldr r3, [r7, #20] + 8002c50: 1c5a adds r2, r3, #1 + 8002c52: 617a str r2, [r7, #20] + 8002c54: f3c3 0308 ubfx r3, r3, #0, #9 + 8002c58: 68fa ldr r2, [r7, #12] + 8002c5a: 4413 add r3, r2 + 8002c5c: 61bb str r3, [r7, #24] *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; - 8002ba6: 68bb ldr r3, [r7, #8] - 8002ba8: f003 0301 and.w r3, r3, #1 - 8002bac: 2b00 cmp r3, #0 - 8002bae: d00d beq.n 8002bcc - 8002bb0: 69bb ldr r3, [r7, #24] - 8002bb2: 781b ldrb r3, [r3, #0] - 8002bb4: b25b sxtb r3, r3 - 8002bb6: f003 030f and.w r3, r3, #15 - 8002bba: b25a sxtb r2, r3 - 8002bbc: 687b ldr r3, [r7, #4] - 8002bbe: b2db uxtb r3, r3 - 8002bc0: 011b lsls r3, r3, #4 - 8002bc2: b25b sxtb r3, r3 - 8002bc4: 4313 orrs r3, r2 - 8002bc6: b25b sxtb r3, r3 - 8002bc8: b2db uxtb r3, r3 - 8002bca: e001 b.n 8002bd0 - 8002bcc: 687b ldr r3, [r7, #4] - 8002bce: b2db uxtb r3, r3 - 8002bd0: 69ba ldr r2, [r7, #24] - 8002bd2: 7013 strb r3, [r2, #0] + 8002c5e: 68bb ldr r3, [r7, #8] + 8002c60: f003 0301 and.w r3, r3, #1 + 8002c64: 2b00 cmp r3, #0 + 8002c66: d00d beq.n 8002c84 + 8002c68: 69bb ldr r3, [r7, #24] + 8002c6a: 781b ldrb r3, [r3, #0] + 8002c6c: b25b sxtb r3, r3 + 8002c6e: f003 030f and.w r3, r3, #15 + 8002c72: b25a sxtb r2, r3 + 8002c74: 687b ldr r3, [r7, #4] + 8002c76: b2db uxtb r3, r3 + 8002c78: 011b lsls r3, r3, #4 + 8002c7a: b25b sxtb r3, r3 + 8002c7c: 4313 orrs r3, r2 + 8002c7e: b25b sxtb r3, r3 + 8002c80: b2db uxtb r3, r3 + 8002c82: e001 b.n 8002c88 + 8002c84: 687b ldr r3, [r7, #4] + 8002c86: b2db uxtb r3, r3 + 8002c88: 69ba ldr r2, [r7, #24] + 8002c8a: 7013 strb r3, [r2, #0] fs->wflag = 1; - 8002bd4: 68fb ldr r3, [r7, #12] - 8002bd6: 2201 movs r2, #1 - 8002bd8: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8002c8c: 68fb ldr r3, [r7, #12] + 8002c8e: 2201 movs r2, #1 + 8002c90: f883 2204 strb.w r2, [r3, #516] ; 0x204 res = move_window(fs, fs->fatbase + (bc / SS(fs))); - 8002bdc: 68fb ldr r3, [r7, #12] - 8002bde: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002be2: 697b ldr r3, [r7, #20] - 8002be4: 0a5b lsrs r3, r3, #9 - 8002be6: 4413 add r3, r2 - 8002be8: 4619 mov r1, r3 - 8002bea: 68f8 ldr r0, [r7, #12] - 8002bec: f7ff fe93 bl 8002916 - 8002bf0: 4603 mov r3, r0 - 8002bf2: 77fb strb r3, [r7, #31] - if (res != FR_OK) break; - 8002bf4: 7ffb ldrb r3, [r7, #31] - 8002bf6: 2b00 cmp r3, #0 - 8002bf8: f040 809a bne.w 8002d30 - p = &fs->win.d8[bc % SS(fs)]; - 8002bfc: 697b ldr r3, [r7, #20] - 8002bfe: f3c3 0308 ubfx r3, r3, #0, #9 - 8002c02: 68fa ldr r2, [r7, #12] - 8002c04: 4413 add r3, r2 - 8002c06: 61bb str r3, [r7, #24] - *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); - 8002c08: 68bb ldr r3, [r7, #8] - 8002c0a: f003 0301 and.w r3, r3, #1 - 8002c0e: 2b00 cmp r3, #0 - 8002c10: d003 beq.n 8002c1a - 8002c12: 687b ldr r3, [r7, #4] - 8002c14: 091b lsrs r3, r3, #4 - 8002c16: b2db uxtb r3, r3 - 8002c18: e00e b.n 8002c38 - 8002c1a: 69bb ldr r3, [r7, #24] - 8002c1c: 781b ldrb r3, [r3, #0] - 8002c1e: b25b sxtb r3, r3 - 8002c20: f023 030f bic.w r3, r3, #15 - 8002c24: b25a sxtb r2, r3 - 8002c26: 687b ldr r3, [r7, #4] - 8002c28: 0a1b lsrs r3, r3, #8 - 8002c2a: b25b sxtb r3, r3 - 8002c2c: f003 030f and.w r3, r3, #15 - 8002c30: b25b sxtb r3, r3 - 8002c32: 4313 orrs r3, r2 - 8002c34: b25b sxtb r3, r3 - 8002c36: b2db uxtb r3, r3 - 8002c38: 69ba ldr r2, [r7, #24] - 8002c3a: 7013 strb r3, [r2, #0] - fs->wflag = 1; - 8002c3c: 68fb ldr r3, [r7, #12] - 8002c3e: 2201 movs r2, #1 - 8002c40: f883 2204 strb.w r2, [r3, #516] ; 0x204 - break; - 8002c44: e079 b.n 8002d3a - - case FS_FAT16 : - res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); - 8002c46: 68fb ldr r3, [r7, #12] - 8002c48: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002c4c: 68bb ldr r3, [r7, #8] - 8002c4e: 0a1b lsrs r3, r3, #8 - 8002c50: 4413 add r3, r2 - 8002c52: 4619 mov r1, r3 - 8002c54: 68f8 ldr r0, [r7, #12] - 8002c56: f7ff fe5e bl 8002916 - 8002c5a: 4603 mov r3, r0 - 8002c5c: 77fb strb r3, [r7, #31] - if (res != FR_OK) break; - 8002c5e: 7ffb ldrb r3, [r7, #31] - 8002c60: 2b00 cmp r3, #0 - 8002c62: d167 bne.n 8002d34 - p = &fs->win.d8[clst * 2 % SS(fs)]; - 8002c64: 68bb ldr r3, [r7, #8] - 8002c66: 005b lsls r3, r3, #1 - 8002c68: f403 73ff and.w r3, r3, #510 ; 0x1fe - 8002c6c: 68fa ldr r2, [r7, #12] - 8002c6e: 4413 add r3, r2 - 8002c70: 61bb str r3, [r7, #24] - ST_WORD(p, (WORD)val); - 8002c72: 687b ldr r3, [r7, #4] - 8002c74: b2da uxtb r2, r3 - 8002c76: 69bb ldr r3, [r7, #24] - 8002c78: 701a strb r2, [r3, #0] - 8002c7a: 687b ldr r3, [r7, #4] - 8002c7c: b29b uxth r3, r3 - 8002c7e: 0a1b lsrs r3, r3, #8 - 8002c80: b29a uxth r2, r3 - 8002c82: 69bb ldr r3, [r7, #24] - 8002c84: 3301 adds r3, #1 - 8002c86: b2d2 uxtb r2, r2 - 8002c88: 701a strb r2, [r3, #0] - fs->wflag = 1; - 8002c8a: 68fb ldr r3, [r7, #12] - 8002c8c: 2201 movs r2, #1 - 8002c8e: f883 2204 strb.w r2, [r3, #516] ; 0x204 - break; - 8002c92: e052 b.n 8002d3a - - case FS_FAT32 : - res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); 8002c94: 68fb ldr r3, [r7, #12] 8002c96: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002c9a: 68bb ldr r3, [r7, #8] - 8002c9c: 09db lsrs r3, r3, #7 + 8002c9a: 697b ldr r3, [r7, #20] + 8002c9c: 0a5b lsrs r3, r3, #9 8002c9e: 4413 add r3, r2 8002ca0: 4619 mov r1, r3 8002ca2: 68f8 ldr r0, [r7, #12] - 8002ca4: f7ff fe37 bl 8002916 + 8002ca4: f7ff fe93 bl 80029ce 8002ca8: 4603 mov r3, r0 8002caa: 77fb strb r3, [r7, #31] if (res != FR_OK) break; 8002cac: 7ffb ldrb r3, [r7, #31] 8002cae: 2b00 cmp r3, #0 - 8002cb0: d142 bne.n 8002d38 - p = &fs->win.d8[clst * 4 % SS(fs)]; - 8002cb2: 68bb ldr r3, [r7, #8] - 8002cb4: 009b lsls r3, r3, #2 - 8002cb6: f403 73fe and.w r3, r3, #508 ; 0x1fc + 8002cb0: f040 809a bne.w 8002de8 + p = &fs->win.d8[bc % SS(fs)]; + 8002cb4: 697b ldr r3, [r7, #20] + 8002cb6: f3c3 0308 ubfx r3, r3, #0, #9 8002cba: 68fa ldr r2, [r7, #12] 8002cbc: 4413 add r3, r2 8002cbe: 61bb str r3, [r7, #24] - val |= LD_DWORD(p) & 0xF0000000; - 8002cc0: 69bb ldr r3, [r7, #24] - 8002cc2: 3303 adds r3, #3 - 8002cc4: 781b ldrb r3, [r3, #0] - 8002cc6: 061a lsls r2, r3, #24 - 8002cc8: 69bb ldr r3, [r7, #24] - 8002cca: 3302 adds r3, #2 - 8002ccc: 781b ldrb r3, [r3, #0] - 8002cce: 041b lsls r3, r3, #16 - 8002cd0: 4313 orrs r3, r2 - 8002cd2: 69ba ldr r2, [r7, #24] - 8002cd4: 3201 adds r2, #1 - 8002cd6: 7812 ldrb r2, [r2, #0] - 8002cd8: 0212 lsls r2, r2, #8 - 8002cda: 4313 orrs r3, r2 - 8002cdc: 69ba ldr r2, [r7, #24] - 8002cde: 7812 ldrb r2, [r2, #0] - 8002ce0: 4313 orrs r3, r2 - 8002ce2: f003 4370 and.w r3, r3, #4026531840 ; 0xf0000000 - 8002ce6: 687a ldr r2, [r7, #4] - 8002ce8: 4313 orrs r3, r2 - 8002cea: 607b str r3, [r7, #4] - ST_DWORD(p, val); - 8002cec: 687b ldr r3, [r7, #4] - 8002cee: b2da uxtb r2, r3 - 8002cf0: 69bb ldr r3, [r7, #24] - 8002cf2: 701a strb r2, [r3, #0] - 8002cf4: 687b ldr r3, [r7, #4] - 8002cf6: b29b uxth r3, r3 - 8002cf8: 0a1b lsrs r3, r3, #8 - 8002cfa: b29a uxth r2, r3 - 8002cfc: 69bb ldr r3, [r7, #24] - 8002cfe: 3301 adds r3, #1 - 8002d00: b2d2 uxtb r2, r2 - 8002d02: 701a strb r2, [r3, #0] - 8002d04: 687b ldr r3, [r7, #4] - 8002d06: 0c1a lsrs r2, r3, #16 - 8002d08: 69bb ldr r3, [r7, #24] - 8002d0a: 3302 adds r3, #2 - 8002d0c: b2d2 uxtb r2, r2 - 8002d0e: 701a strb r2, [r3, #0] - 8002d10: 687b ldr r3, [r7, #4] - 8002d12: 0e1a lsrs r2, r3, #24 - 8002d14: 69bb ldr r3, [r7, #24] - 8002d16: 3303 adds r3, #3 - 8002d18: b2d2 uxtb r2, r2 - 8002d1a: 701a strb r2, [r3, #0] + *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); + 8002cc0: 68bb ldr r3, [r7, #8] + 8002cc2: f003 0301 and.w r3, r3, #1 + 8002cc6: 2b00 cmp r3, #0 + 8002cc8: d003 beq.n 8002cd2 + 8002cca: 687b ldr r3, [r7, #4] + 8002ccc: 091b lsrs r3, r3, #4 + 8002cce: b2db uxtb r3, r3 + 8002cd0: e00e b.n 8002cf0 + 8002cd2: 69bb ldr r3, [r7, #24] + 8002cd4: 781b ldrb r3, [r3, #0] + 8002cd6: b25b sxtb r3, r3 + 8002cd8: f023 030f bic.w r3, r3, #15 + 8002cdc: b25a sxtb r2, r3 + 8002cde: 687b ldr r3, [r7, #4] + 8002ce0: 0a1b lsrs r3, r3, #8 + 8002ce2: b25b sxtb r3, r3 + 8002ce4: f003 030f and.w r3, r3, #15 + 8002ce8: b25b sxtb r3, r3 + 8002cea: 4313 orrs r3, r2 + 8002cec: b25b sxtb r3, r3 + 8002cee: b2db uxtb r3, r3 + 8002cf0: 69ba ldr r2, [r7, #24] + 8002cf2: 7013 strb r3, [r2, #0] fs->wflag = 1; - 8002d1c: 68fb ldr r3, [r7, #12] - 8002d1e: 2201 movs r2, #1 - 8002d20: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8002cf4: 68fb ldr r3, [r7, #12] + 8002cf6: 2201 movs r2, #1 + 8002cf8: f883 2204 strb.w r2, [r3, #516] ; 0x204 break; - 8002d24: e009 b.n 8002d3a + 8002cfc: e079 b.n 8002df2 + + case FS_FAT16 : + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); + 8002cfe: 68fb ldr r3, [r7, #12] + 8002d00: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002d04: 68bb ldr r3, [r7, #8] + 8002d06: 0a1b lsrs r3, r3, #8 + 8002d08: 4413 add r3, r2 + 8002d0a: 4619 mov r1, r3 + 8002d0c: 68f8 ldr r0, [r7, #12] + 8002d0e: f7ff fe5e bl 80029ce + 8002d12: 4603 mov r3, r0 + 8002d14: 77fb strb r3, [r7, #31] + if (res != FR_OK) break; + 8002d16: 7ffb ldrb r3, [r7, #31] + 8002d18: 2b00 cmp r3, #0 + 8002d1a: d167 bne.n 8002dec + p = &fs->win.d8[clst * 2 % SS(fs)]; + 8002d1c: 68bb ldr r3, [r7, #8] + 8002d1e: 005b lsls r3, r3, #1 + 8002d20: f403 73ff and.w r3, r3, #510 ; 0x1fe + 8002d24: 68fa ldr r2, [r7, #12] + 8002d26: 4413 add r3, r2 + 8002d28: 61bb str r3, [r7, #24] + ST_WORD(p, (WORD)val); + 8002d2a: 687b ldr r3, [r7, #4] + 8002d2c: b2da uxtb r2, r3 + 8002d2e: 69bb ldr r3, [r7, #24] + 8002d30: 701a strb r2, [r3, #0] + 8002d32: 687b ldr r3, [r7, #4] + 8002d34: b29b uxth r3, r3 + 8002d36: 0a1b lsrs r3, r3, #8 + 8002d38: b29a uxth r2, r3 + 8002d3a: 69bb ldr r3, [r7, #24] + 8002d3c: 3301 adds r3, #1 + 8002d3e: b2d2 uxtb r2, r2 + 8002d40: 701a strb r2, [r3, #0] + fs->wflag = 1; + 8002d42: 68fb ldr r3, [r7, #12] + 8002d44: 2201 movs r2, #1 + 8002d46: f883 2204 strb.w r2, [r3, #516] ; 0x204 + break; + 8002d4a: e052 b.n 8002df2 + + case FS_FAT32 : + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); + 8002d4c: 68fb ldr r3, [r7, #12] + 8002d4e: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002d52: 68bb ldr r3, [r7, #8] + 8002d54: 09db lsrs r3, r3, #7 + 8002d56: 4413 add r3, r2 + 8002d58: 4619 mov r1, r3 + 8002d5a: 68f8 ldr r0, [r7, #12] + 8002d5c: f7ff fe37 bl 80029ce + 8002d60: 4603 mov r3, r0 + 8002d62: 77fb strb r3, [r7, #31] + if (res != FR_OK) break; + 8002d64: 7ffb ldrb r3, [r7, #31] + 8002d66: 2b00 cmp r3, #0 + 8002d68: d142 bne.n 8002df0 + p = &fs->win.d8[clst * 4 % SS(fs)]; + 8002d6a: 68bb ldr r3, [r7, #8] + 8002d6c: 009b lsls r3, r3, #2 + 8002d6e: f403 73fe and.w r3, r3, #508 ; 0x1fc + 8002d72: 68fa ldr r2, [r7, #12] + 8002d74: 4413 add r3, r2 + 8002d76: 61bb str r3, [r7, #24] + val |= LD_DWORD(p) & 0xF0000000; + 8002d78: 69bb ldr r3, [r7, #24] + 8002d7a: 3303 adds r3, #3 + 8002d7c: 781b ldrb r3, [r3, #0] + 8002d7e: 061a lsls r2, r3, #24 + 8002d80: 69bb ldr r3, [r7, #24] + 8002d82: 3302 adds r3, #2 + 8002d84: 781b ldrb r3, [r3, #0] + 8002d86: 041b lsls r3, r3, #16 + 8002d88: 4313 orrs r3, r2 + 8002d8a: 69ba ldr r2, [r7, #24] + 8002d8c: 3201 adds r2, #1 + 8002d8e: 7812 ldrb r2, [r2, #0] + 8002d90: 0212 lsls r2, r2, #8 + 8002d92: 4313 orrs r3, r2 + 8002d94: 69ba ldr r2, [r7, #24] + 8002d96: 7812 ldrb r2, [r2, #0] + 8002d98: 4313 orrs r3, r2 + 8002d9a: f003 4370 and.w r3, r3, #4026531840 ; 0xf0000000 + 8002d9e: 687a ldr r2, [r7, #4] + 8002da0: 4313 orrs r3, r2 + 8002da2: 607b str r3, [r7, #4] + ST_DWORD(p, val); + 8002da4: 687b ldr r3, [r7, #4] + 8002da6: b2da uxtb r2, r3 + 8002da8: 69bb ldr r3, [r7, #24] + 8002daa: 701a strb r2, [r3, #0] + 8002dac: 687b ldr r3, [r7, #4] + 8002dae: b29b uxth r3, r3 + 8002db0: 0a1b lsrs r3, r3, #8 + 8002db2: b29a uxth r2, r3 + 8002db4: 69bb ldr r3, [r7, #24] + 8002db6: 3301 adds r3, #1 + 8002db8: b2d2 uxtb r2, r2 + 8002dba: 701a strb r2, [r3, #0] + 8002dbc: 687b ldr r3, [r7, #4] + 8002dbe: 0c1a lsrs r2, r3, #16 + 8002dc0: 69bb ldr r3, [r7, #24] + 8002dc2: 3302 adds r3, #2 + 8002dc4: b2d2 uxtb r2, r2 + 8002dc6: 701a strb r2, [r3, #0] + 8002dc8: 687b ldr r3, [r7, #4] + 8002dca: 0e1a lsrs r2, r3, #24 + 8002dcc: 69bb ldr r3, [r7, #24] + 8002dce: 3303 adds r3, #3 + 8002dd0: b2d2 uxtb r2, r2 + 8002dd2: 701a strb r2, [r3, #0] + fs->wflag = 1; + 8002dd4: 68fb ldr r3, [r7, #12] + 8002dd6: 2201 movs r2, #1 + 8002dd8: f883 2204 strb.w r2, [r3, #516] ; 0x204 + break; + 8002ddc: e009 b.n 8002df2 default : res = FR_INT_ERR; - 8002d26: 2302 movs r3, #2 - 8002d28: 77fb strb r3, [r7, #31] - 8002d2a: e006 b.n 8002d3a + 8002dde: 2302 movs r3, #2 + 8002de0: 77fb strb r3, [r7, #31] + 8002de2: e006 b.n 8002df2 if (res != FR_OK) break; - 8002d2c: bf00 nop - 8002d2e: e004 b.n 8002d3a + 8002de4: bf00 nop + 8002de6: e004 b.n 8002df2 if (res != FR_OK) break; - 8002d30: bf00 nop - 8002d32: e002 b.n 8002d3a + 8002de8: bf00 nop + 8002dea: e002 b.n 8002df2 if (res != FR_OK) break; - 8002d34: bf00 nop - 8002d36: e000 b.n 8002d3a + 8002dec: bf00 nop + 8002dee: e000 b.n 8002df2 if (res != FR_OK) break; - 8002d38: bf00 nop + 8002df0: bf00 nop } } return res; - 8002d3a: 7ffb ldrb r3, [r7, #31] + 8002df2: 7ffb ldrb r3, [r7, #31] } - 8002d3c: 4618 mov r0, r3 - 8002d3e: 3720 adds r7, #32 - 8002d40: 46bd mov sp, r7 - 8002d42: bd80 pop {r7, pc} + 8002df4: 4618 mov r0, r3 + 8002df6: 3720 adds r7, #32 + 8002df8: 46bd mov sp, r7 + 8002dfa: bd80 pop {r7, pc} -08002d44 : +08002dfc : static FRESULT remove_chain ( FATFS* fs, /* File system object */ DWORD clst /* Cluster# to remove a chain from */ ) { - 8002d44: b580 push {r7, lr} - 8002d46: b084 sub sp, #16 - 8002d48: af00 add r7, sp, #0 - 8002d4a: 6078 str r0, [r7, #4] - 8002d4c: 6039 str r1, [r7, #0] + 8002dfc: b580 push {r7, lr} + 8002dfe: b084 sub sp, #16 + 8002e00: af00 add r7, sp, #0 + 8002e02: 6078 str r0, [r7, #4] + 8002e04: 6039 str r1, [r7, #0] DWORD nxt; #if _USE_TRIM DWORD scl = clst, ecl = clst, rt[2]; #endif if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - 8002d4e: 683b ldr r3, [r7, #0] - 8002d50: 2b01 cmp r3, #1 - 8002d52: d905 bls.n 8002d60 - 8002d54: 687b ldr r3, [r7, #4] - 8002d56: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002d5a: 683a ldr r2, [r7, #0] - 8002d5c: 429a cmp r2, r3 - 8002d5e: d302 bcc.n 8002d66 + 8002e06: 683b ldr r3, [r7, #0] + 8002e08: 2b01 cmp r3, #1 + 8002e0a: d905 bls.n 8002e18 + 8002e0c: 687b ldr r3, [r7, #4] + 8002e0e: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002e12: 683a ldr r2, [r7, #0] + 8002e14: 429a cmp r2, r3 + 8002e16: d302 bcc.n 8002e1e res = FR_INT_ERR; - 8002d60: 2302 movs r3, #2 - 8002d62: 73fb strb r3, [r7, #15] - 8002d64: e043 b.n 8002dee + 8002e18: 2302 movs r3, #2 + 8002e1a: 73fb strb r3, [r7, #15] + 8002e1c: e043 b.n 8002ea6 } else { res = FR_OK; - 8002d66: 2300 movs r3, #0 - 8002d68: 73fb strb r3, [r7, #15] + 8002e1e: 2300 movs r3, #0 + 8002e20: 73fb strb r3, [r7, #15] while (clst < fs->n_fatent) { /* Not a last link? */ - 8002d6a: e036 b.n 8002dda + 8002e22: e036 b.n 8002e92 nxt = get_fat(fs, clst); /* Get cluster status */ - 8002d6c: 6839 ldr r1, [r7, #0] - 8002d6e: 6878 ldr r0, [r7, #4] - 8002d70: f7ff fe20 bl 80029b4 - 8002d74: 60b8 str r0, [r7, #8] + 8002e24: 6839 ldr r1, [r7, #0] + 8002e26: 6878 ldr r0, [r7, #4] + 8002e28: f7ff fe20 bl 8002a6c + 8002e2c: 60b8 str r0, [r7, #8] if (nxt == 0) break; /* Empty cluster? */ - 8002d76: 68bb ldr r3, [r7, #8] - 8002d78: 2b00 cmp r3, #0 - 8002d7a: d035 beq.n 8002de8 + 8002e2e: 68bb ldr r3, [r7, #8] + 8002e30: 2b00 cmp r3, #0 + 8002e32: d035 beq.n 8002ea0 if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ - 8002d7c: 68bb ldr r3, [r7, #8] - 8002d7e: 2b01 cmp r3, #1 - 8002d80: d102 bne.n 8002d88 - 8002d82: 2302 movs r3, #2 - 8002d84: 73fb strb r3, [r7, #15] - 8002d86: e032 b.n 8002dee + 8002e34: 68bb ldr r3, [r7, #8] + 8002e36: 2b01 cmp r3, #1 + 8002e38: d102 bne.n 8002e40 + 8002e3a: 2302 movs r3, #2 + 8002e3c: 73fb strb r3, [r7, #15] + 8002e3e: e032 b.n 8002ea6 if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ - 8002d88: 68bb ldr r3, [r7, #8] - 8002d8a: f1b3 3fff cmp.w r3, #4294967295 - 8002d8e: d102 bne.n 8002d96 - 8002d90: 2301 movs r3, #1 - 8002d92: 73fb strb r3, [r7, #15] - 8002d94: e02b b.n 8002dee + 8002e40: 68bb ldr r3, [r7, #8] + 8002e42: f1b3 3fff cmp.w r3, #4294967295 + 8002e46: d102 bne.n 8002e4e + 8002e48: 2301 movs r3, #1 + 8002e4a: 73fb strb r3, [r7, #15] + 8002e4c: e02b b.n 8002ea6 res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ - 8002d96: 2200 movs r2, #0 - 8002d98: 6839 ldr r1, [r7, #0] - 8002d9a: 6878 ldr r0, [r7, #4] - 8002d9c: f7ff fec4 bl 8002b28 - 8002da0: 4603 mov r3, r0 - 8002da2: 73fb strb r3, [r7, #15] + 8002e4e: 2200 movs r2, #0 + 8002e50: 6839 ldr r1, [r7, #0] + 8002e52: 6878 ldr r0, [r7, #4] + 8002e54: f7ff fec4 bl 8002be0 + 8002e58: 4603 mov r3, r0 + 8002e5a: 73fb strb r3, [r7, #15] if (res != FR_OK) break; - 8002da4: 7bfb ldrb r3, [r7, #15] - 8002da6: 2b00 cmp r3, #0 - 8002da8: d120 bne.n 8002dec + 8002e5c: 7bfb ldrb r3, [r7, #15] + 8002e5e: 2b00 cmp r3, #0 + 8002e60: d120 bne.n 8002ea4 if (fs->free_clust != 0xFFFFFFFF) { /* Update FSINFO */ - 8002daa: 687b ldr r3, [r7, #4] - 8002dac: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002db0: f1b3 3fff cmp.w r3, #4294967295 - 8002db4: d00f beq.n 8002dd6 + 8002e62: 687b ldr r3, [r7, #4] + 8002e64: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002e68: f1b3 3fff cmp.w r3, #4294967295 + 8002e6c: d00f beq.n 8002e8e fs->free_clust++; - 8002db6: 687b ldr r3, [r7, #4] - 8002db8: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002dbc: 1c5a adds r2, r3, #1 - 8002dbe: 687b ldr r3, [r7, #4] - 8002dc0: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8002e6e: 687b ldr r3, [r7, #4] + 8002e70: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002e74: 1c5a adds r2, r3, #1 + 8002e76: 687b ldr r3, [r7, #4] + 8002e78: f8c3 2210 str.w r2, [r3, #528] ; 0x210 fs->fsi_flag |= 1; - 8002dc4: 687b ldr r3, [r7, #4] - 8002dc6: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 - 8002dca: f043 0301 orr.w r3, r3, #1 - 8002dce: b2da uxtb r2, r3 - 8002dd0: 687b ldr r3, [r7, #4] - 8002dd2: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8002e7c: 687b ldr r3, [r7, #4] + 8002e7e: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 + 8002e82: f043 0301 orr.w r3, r3, #1 + 8002e86: b2da uxtb r2, r3 + 8002e88: 687b ldr r3, [r7, #4] + 8002e8a: f883 2205 strb.w r2, [r3, #517] ; 0x205 rt[1] = clust2sect(fs, ecl) + fs->csize - 1; /* End sector */ disk_ioctl(fs->drv, CTRL_TRIM, rt); /* Erase the block */ scl = ecl = nxt; } #endif clst = nxt; /* Next cluster */ - 8002dd6: 68bb ldr r3, [r7, #8] - 8002dd8: 603b str r3, [r7, #0] + 8002e8e: 68bb ldr r3, [r7, #8] + 8002e90: 603b str r3, [r7, #0] while (clst < fs->n_fatent) { /* Not a last link? */ - 8002dda: 687b ldr r3, [r7, #4] - 8002ddc: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002de0: 683a ldr r2, [r7, #0] - 8002de2: 429a cmp r2, r3 - 8002de4: d3c2 bcc.n 8002d6c - 8002de6: e002 b.n 8002dee + 8002e92: 687b ldr r3, [r7, #4] + 8002e94: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002e98: 683a ldr r2, [r7, #0] + 8002e9a: 429a cmp r2, r3 + 8002e9c: d3c2 bcc.n 8002e24 + 8002e9e: e002 b.n 8002ea6 if (nxt == 0) break; /* Empty cluster? */ - 8002de8: bf00 nop - 8002dea: e000 b.n 8002dee + 8002ea0: bf00 nop + 8002ea2: e000 b.n 8002ea6 if (res != FR_OK) break; - 8002dec: bf00 nop + 8002ea4: bf00 nop } } return res; - 8002dee: 7bfb ldrb r3, [r7, #15] + 8002ea6: 7bfb ldrb r3, [r7, #15] } - 8002df0: 4618 mov r0, r3 - 8002df2: 3710 adds r7, #16 - 8002df4: 46bd mov sp, r7 - 8002df6: bd80 pop {r7, pc} + 8002ea8: 4618 mov r0, r3 + 8002eaa: 3710 adds r7, #16 + 8002eac: 46bd mov sp, r7 + 8002eae: bd80 pop {r7, pc} -08002df8 : +08002eb0 : static DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */ FATFS* fs, /* File system object */ DWORD clst /* Cluster# to stretch. 0 means create a new chain. */ ) { - 8002df8: b580 push {r7, lr} - 8002dfa: b086 sub sp, #24 - 8002dfc: af00 add r7, sp, #0 - 8002dfe: 6078 str r0, [r7, #4] - 8002e00: 6039 str r1, [r7, #0] + 8002eb0: b580 push {r7, lr} + 8002eb2: b086 sub sp, #24 + 8002eb4: af00 add r7, sp, #0 + 8002eb6: 6078 str r0, [r7, #4] + 8002eb8: 6039 str r1, [r7, #0] DWORD cs, ncl, scl; FRESULT res; if (clst == 0) { /* Create a new chain */ - 8002e02: 683b ldr r3, [r7, #0] - 8002e04: 2b00 cmp r3, #0 - 8002e06: d10f bne.n 8002e28 + 8002eba: 683b ldr r3, [r7, #0] + 8002ebc: 2b00 cmp r3, #0 + 8002ebe: d10f bne.n 8002ee0 scl = fs->last_clust; /* Get suggested start point */ - 8002e08: 687b ldr r3, [r7, #4] - 8002e0a: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 8002e0e: 613b str r3, [r7, #16] + 8002ec0: 687b ldr r3, [r7, #4] + 8002ec2: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 8002ec6: 613b str r3, [r7, #16] if (!scl || scl >= fs->n_fatent) scl = 1; - 8002e10: 693b ldr r3, [r7, #16] - 8002e12: 2b00 cmp r3, #0 - 8002e14: d005 beq.n 8002e22 - 8002e16: 687b ldr r3, [r7, #4] - 8002e18: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002e1c: 693a ldr r2, [r7, #16] - 8002e1e: 429a cmp r2, r3 - 8002e20: d31c bcc.n 8002e5c - 8002e22: 2301 movs r3, #1 - 8002e24: 613b str r3, [r7, #16] - 8002e26: e019 b.n 8002e5c + 8002ec8: 693b ldr r3, [r7, #16] + 8002eca: 2b00 cmp r3, #0 + 8002ecc: d005 beq.n 8002eda + 8002ece: 687b ldr r3, [r7, #4] + 8002ed0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002ed4: 693a ldr r2, [r7, #16] + 8002ed6: 429a cmp r2, r3 + 8002ed8: d31c bcc.n 8002f14 + 8002eda: 2301 movs r3, #1 + 8002edc: 613b str r3, [r7, #16] + 8002ede: e019 b.n 8002f14 } else { /* Stretch the current chain */ cs = get_fat(fs, clst); /* Check the cluster status */ - 8002e28: 6839 ldr r1, [r7, #0] - 8002e2a: 6878 ldr r0, [r7, #4] - 8002e2c: f7ff fdc2 bl 80029b4 - 8002e30: 60b8 str r0, [r7, #8] + 8002ee0: 6839 ldr r1, [r7, #0] + 8002ee2: 6878 ldr r0, [r7, #4] + 8002ee4: f7ff fdc2 bl 8002a6c + 8002ee8: 60b8 str r0, [r7, #8] if (cs < 2) return 1; /* Invalid value */ - 8002e32: 68bb ldr r3, [r7, #8] - 8002e34: 2b01 cmp r3, #1 - 8002e36: d801 bhi.n 8002e3c - 8002e38: 2301 movs r3, #1 - 8002e3a: e076 b.n 8002f2a + 8002eea: 68bb ldr r3, [r7, #8] + 8002eec: 2b01 cmp r3, #1 + 8002eee: d801 bhi.n 8002ef4 + 8002ef0: 2301 movs r3, #1 + 8002ef2: e076 b.n 8002fe2 if (cs == 0xFFFFFFFF) return cs; /* A disk error occurred */ - 8002e3c: 68bb ldr r3, [r7, #8] - 8002e3e: f1b3 3fff cmp.w r3, #4294967295 - 8002e42: d101 bne.n 8002e48 - 8002e44: 68bb ldr r3, [r7, #8] - 8002e46: e070 b.n 8002f2a + 8002ef4: 68bb ldr r3, [r7, #8] + 8002ef6: f1b3 3fff cmp.w r3, #4294967295 + 8002efa: d101 bne.n 8002f00 + 8002efc: 68bb ldr r3, [r7, #8] + 8002efe: e070 b.n 8002fe2 if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ - 8002e48: 687b ldr r3, [r7, #4] - 8002e4a: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002e4e: 68ba ldr r2, [r7, #8] - 8002e50: 429a cmp r2, r3 - 8002e52: d201 bcs.n 8002e58 - 8002e54: 68bb ldr r3, [r7, #8] - 8002e56: e068 b.n 8002f2a + 8002f00: 687b ldr r3, [r7, #4] + 8002f02: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002f06: 68ba ldr r2, [r7, #8] + 8002f08: 429a cmp r2, r3 + 8002f0a: d201 bcs.n 8002f10 + 8002f0c: 68bb ldr r3, [r7, #8] + 8002f0e: e068 b.n 8002fe2 scl = clst; - 8002e58: 683b ldr r3, [r7, #0] - 8002e5a: 613b str r3, [r7, #16] + 8002f10: 683b ldr r3, [r7, #0] + 8002f12: 613b str r3, [r7, #16] } ncl = scl; /* Start cluster */ - 8002e5c: 693b ldr r3, [r7, #16] - 8002e5e: 617b str r3, [r7, #20] + 8002f14: 693b ldr r3, [r7, #16] + 8002f16: 617b str r3, [r7, #20] for (;;) { ncl++; /* Next cluster */ - 8002e60: 697b ldr r3, [r7, #20] - 8002e62: 3301 adds r3, #1 - 8002e64: 617b str r3, [r7, #20] + 8002f18: 697b ldr r3, [r7, #20] + 8002f1a: 3301 adds r3, #1 + 8002f1c: 617b str r3, [r7, #20] if (ncl >= fs->n_fatent) { /* Check wrap around */ - 8002e66: 687b ldr r3, [r7, #4] - 8002e68: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002e6c: 697a ldr r2, [r7, #20] - 8002e6e: 429a cmp r2, r3 - 8002e70: d307 bcc.n 8002e82 + 8002f1e: 687b ldr r3, [r7, #4] + 8002f20: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002f24: 697a ldr r2, [r7, #20] + 8002f26: 429a cmp r2, r3 + 8002f28: d307 bcc.n 8002f3a ncl = 2; - 8002e72: 2302 movs r3, #2 - 8002e74: 617b str r3, [r7, #20] + 8002f2a: 2302 movs r3, #2 + 8002f2c: 617b str r3, [r7, #20] if (ncl > scl) return 0; /* No free cluster */ - 8002e76: 697a ldr r2, [r7, #20] - 8002e78: 693b ldr r3, [r7, #16] - 8002e7a: 429a cmp r2, r3 - 8002e7c: d901 bls.n 8002e82 - 8002e7e: 2300 movs r3, #0 - 8002e80: e053 b.n 8002f2a + 8002f2e: 697a ldr r2, [r7, #20] + 8002f30: 693b ldr r3, [r7, #16] + 8002f32: 429a cmp r2, r3 + 8002f34: d901 bls.n 8002f3a + 8002f36: 2300 movs r3, #0 + 8002f38: e053 b.n 8002fe2 } cs = get_fat(fs, ncl); /* Get the cluster status */ - 8002e82: 6979 ldr r1, [r7, #20] - 8002e84: 6878 ldr r0, [r7, #4] - 8002e86: f7ff fd95 bl 80029b4 - 8002e8a: 60b8 str r0, [r7, #8] + 8002f3a: 6979 ldr r1, [r7, #20] + 8002f3c: 6878 ldr r0, [r7, #4] + 8002f3e: f7ff fd95 bl 8002a6c + 8002f42: 60b8 str r0, [r7, #8] if (cs == 0) break; /* Found a free cluster */ - 8002e8c: 68bb ldr r3, [r7, #8] - 8002e8e: 2b00 cmp r3, #0 - 8002e90: d00e beq.n 8002eb0 + 8002f44: 68bb ldr r3, [r7, #8] + 8002f46: 2b00 cmp r3, #0 + 8002f48: d00e beq.n 8002f68 if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ - 8002e92: 68bb ldr r3, [r7, #8] - 8002e94: f1b3 3fff cmp.w r3, #4294967295 - 8002e98: d002 beq.n 8002ea0 - 8002e9a: 68bb ldr r3, [r7, #8] - 8002e9c: 2b01 cmp r3, #1 - 8002e9e: d101 bne.n 8002ea4 + 8002f4a: 68bb ldr r3, [r7, #8] + 8002f4c: f1b3 3fff cmp.w r3, #4294967295 + 8002f50: d002 beq.n 8002f58 + 8002f52: 68bb ldr r3, [r7, #8] + 8002f54: 2b01 cmp r3, #1 + 8002f56: d101 bne.n 8002f5c return cs; - 8002ea0: 68bb ldr r3, [r7, #8] - 8002ea2: e042 b.n 8002f2a + 8002f58: 68bb ldr r3, [r7, #8] + 8002f5a: e042 b.n 8002fe2 if (ncl == scl) return 0; /* No free cluster */ - 8002ea4: 697a ldr r2, [r7, #20] - 8002ea6: 693b ldr r3, [r7, #16] - 8002ea8: 429a cmp r2, r3 - 8002eaa: d1d9 bne.n 8002e60 - 8002eac: 2300 movs r3, #0 - 8002eae: e03c b.n 8002f2a + 8002f5c: 697a ldr r2, [r7, #20] + 8002f5e: 693b ldr r3, [r7, #16] + 8002f60: 429a cmp r2, r3 + 8002f62: d1d9 bne.n 8002f18 + 8002f64: 2300 movs r3, #0 + 8002f66: e03c b.n 8002fe2 if (cs == 0) break; /* Found a free cluster */ - 8002eb0: bf00 nop + 8002f68: bf00 nop } res = put_fat(fs, ncl, 0x0FFFFFFF); /* Mark the new cluster "last link" */ - 8002eb2: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 - 8002eb6: 6979 ldr r1, [r7, #20] - 8002eb8: 6878 ldr r0, [r7, #4] - 8002eba: f7ff fe35 bl 8002b28 - 8002ebe: 4603 mov r3, r0 - 8002ec0: 73fb strb r3, [r7, #15] + 8002f6a: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 + 8002f6e: 6979 ldr r1, [r7, #20] + 8002f70: 6878 ldr r0, [r7, #4] + 8002f72: f7ff fe35 bl 8002be0 + 8002f76: 4603 mov r3, r0 + 8002f78: 73fb strb r3, [r7, #15] if (res == FR_OK && clst != 0) { - 8002ec2: 7bfb ldrb r3, [r7, #15] - 8002ec4: 2b00 cmp r3, #0 - 8002ec6: d109 bne.n 8002edc - 8002ec8: 683b ldr r3, [r7, #0] - 8002eca: 2b00 cmp r3, #0 - 8002ecc: d006 beq.n 8002edc + 8002f7a: 7bfb ldrb r3, [r7, #15] + 8002f7c: 2b00 cmp r3, #0 + 8002f7e: d109 bne.n 8002f94 + 8002f80: 683b ldr r3, [r7, #0] + 8002f82: 2b00 cmp r3, #0 + 8002f84: d006 beq.n 8002f94 res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ - 8002ece: 697a ldr r2, [r7, #20] - 8002ed0: 6839 ldr r1, [r7, #0] - 8002ed2: 6878 ldr r0, [r7, #4] - 8002ed4: f7ff fe28 bl 8002b28 - 8002ed8: 4603 mov r3, r0 - 8002eda: 73fb strb r3, [r7, #15] + 8002f86: 697a ldr r2, [r7, #20] + 8002f88: 6839 ldr r1, [r7, #0] + 8002f8a: 6878 ldr r0, [r7, #4] + 8002f8c: f7ff fe28 bl 8002be0 + 8002f90: 4603 mov r3, r0 + 8002f92: 73fb strb r3, [r7, #15] } if (res == FR_OK) { - 8002edc: 7bfb ldrb r3, [r7, #15] - 8002ede: 2b00 cmp r3, #0 - 8002ee0: d11a bne.n 8002f18 + 8002f94: 7bfb ldrb r3, [r7, #15] + 8002f96: 2b00 cmp r3, #0 + 8002f98: d11a bne.n 8002fd0 fs->last_clust = ncl; /* Update FSINFO */ - 8002ee2: 687b ldr r3, [r7, #4] - 8002ee4: 697a ldr r2, [r7, #20] - 8002ee6: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8002f9a: 687b ldr r3, [r7, #4] + 8002f9c: 697a ldr r2, [r7, #20] + 8002f9e: f8c3 220c str.w r2, [r3, #524] ; 0x20c if (fs->free_clust != 0xFFFFFFFF) { - 8002eea: 687b ldr r3, [r7, #4] - 8002eec: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002ef0: f1b3 3fff cmp.w r3, #4294967295 - 8002ef4: d018 beq.n 8002f28 + 8002fa2: 687b ldr r3, [r7, #4] + 8002fa4: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002fa8: f1b3 3fff cmp.w r3, #4294967295 + 8002fac: d018 beq.n 8002fe0 fs->free_clust--; - 8002ef6: 687b ldr r3, [r7, #4] - 8002ef8: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002efc: 1e5a subs r2, r3, #1 - 8002efe: 687b ldr r3, [r7, #4] - 8002f00: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8002fae: 687b ldr r3, [r7, #4] + 8002fb0: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002fb4: 1e5a subs r2, r3, #1 + 8002fb6: 687b ldr r3, [r7, #4] + 8002fb8: f8c3 2210 str.w r2, [r3, #528] ; 0x210 fs->fsi_flag |= 1; - 8002f04: 687b ldr r3, [r7, #4] - 8002f06: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 - 8002f0a: f043 0301 orr.w r3, r3, #1 - 8002f0e: b2da uxtb r2, r3 - 8002f10: 687b ldr r3, [r7, #4] - 8002f12: f883 2205 strb.w r2, [r3, #517] ; 0x205 - 8002f16: e007 b.n 8002f28 + 8002fbc: 687b ldr r3, [r7, #4] + 8002fbe: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 + 8002fc2: f043 0301 orr.w r3, r3, #1 + 8002fc6: b2da uxtb r2, r3 + 8002fc8: 687b ldr r3, [r7, #4] + 8002fca: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8002fce: e007 b.n 8002fe0 } } else { ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; - 8002f18: 7bfb ldrb r3, [r7, #15] - 8002f1a: 2b01 cmp r3, #1 - 8002f1c: d102 bne.n 8002f24 - 8002f1e: f04f 33ff mov.w r3, #4294967295 - 8002f22: e000 b.n 8002f26 - 8002f24: 2301 movs r3, #1 - 8002f26: 617b str r3, [r7, #20] + 8002fd0: 7bfb ldrb r3, [r7, #15] + 8002fd2: 2b01 cmp r3, #1 + 8002fd4: d102 bne.n 8002fdc + 8002fd6: f04f 33ff mov.w r3, #4294967295 + 8002fda: e000 b.n 8002fde + 8002fdc: 2301 movs r3, #1 + 8002fde: 617b str r3, [r7, #20] } return ncl; /* Return new cluster number or error code */ - 8002f28: 697b ldr r3, [r7, #20] + 8002fe0: 697b ldr r3, [r7, #20] } - 8002f2a: 4618 mov r0, r3 - 8002f2c: 3718 adds r7, #24 - 8002f2e: 46bd mov sp, r7 - 8002f30: bd80 pop {r7, pc} + 8002fe2: 4618 mov r0, r3 + 8002fe4: 3718 adds r7, #24 + 8002fe6: 46bd mov sp, r7 + 8002fe8: bd80 pop {r7, pc} -08002f32 : +08002fea : static DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */ FIL* fp, /* Pointer to the file object */ DWORD ofs /* File offset to be converted to cluster# */ ) { - 8002f32: b480 push {r7} - 8002f34: b087 sub sp, #28 - 8002f36: af00 add r7, sp, #0 - 8002f38: 6078 str r0, [r7, #4] - 8002f3a: 6039 str r1, [r7, #0] + 8002fea: b480 push {r7} + 8002fec: b087 sub sp, #28 + 8002fee: af00 add r7, sp, #0 + 8002ff0: 6078 str r0, [r7, #4] + 8002ff2: 6039 str r1, [r7, #0] DWORD cl, ncl, *tbl; tbl = fp->cltbl + 1; /* Top of CLMT */ - 8002f3c: 687b ldr r3, [r7, #4] - 8002f3e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 8002f42: 3304 adds r3, #4 - 8002f44: 613b str r3, [r7, #16] + 8002ff4: 687b ldr r3, [r7, #4] + 8002ff6: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 8002ffa: 3304 adds r3, #4 + 8002ffc: 613b str r3, [r7, #16] cl = ofs / SS(fp->fs) / fp->fs->csize; /* Cluster order from top of the file */ - 8002f46: 683b ldr r3, [r7, #0] - 8002f48: 0a5b lsrs r3, r3, #9 - 8002f4a: 687a ldr r2, [r7, #4] - 8002f4c: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 - 8002f50: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 8002f54: fbb3 f3f2 udiv r3, r3, r2 - 8002f58: 617b str r3, [r7, #20] + 8002ffe: 683b ldr r3, [r7, #0] + 8003000: 0a5b lsrs r3, r3, #9 + 8003002: 687a ldr r2, [r7, #4] + 8003004: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 + 8003008: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 800300c: fbb3 f3f2 udiv r3, r3, r2 + 8003010: 617b str r3, [r7, #20] for (;;) { ncl = *tbl++; /* Number of cluters in the fragment */ - 8002f5a: 693b ldr r3, [r7, #16] - 8002f5c: 1d1a adds r2, r3, #4 - 8002f5e: 613a str r2, [r7, #16] - 8002f60: 681b ldr r3, [r3, #0] - 8002f62: 60fb str r3, [r7, #12] + 8003012: 693b ldr r3, [r7, #16] + 8003014: 1d1a adds r2, r3, #4 + 8003016: 613a str r2, [r7, #16] + 8003018: 681b ldr r3, [r3, #0] + 800301a: 60fb str r3, [r7, #12] if (!ncl) return 0; /* End of table? (error) */ - 8002f64: 68fb ldr r3, [r7, #12] - 8002f66: 2b00 cmp r3, #0 - 8002f68: d101 bne.n 8002f6e - 8002f6a: 2300 movs r3, #0 - 8002f6c: e010 b.n 8002f90 + 800301c: 68fb ldr r3, [r7, #12] + 800301e: 2b00 cmp r3, #0 + 8003020: d101 bne.n 8003026 + 8003022: 2300 movs r3, #0 + 8003024: e010 b.n 8003048 if (cl < ncl) break; /* In this fragment? */ - 8002f6e: 697a ldr r2, [r7, #20] - 8002f70: 68fb ldr r3, [r7, #12] - 8002f72: 429a cmp r2, r3 - 8002f74: d307 bcc.n 8002f86 + 8003026: 697a ldr r2, [r7, #20] + 8003028: 68fb ldr r3, [r7, #12] + 800302a: 429a cmp r2, r3 + 800302c: d307 bcc.n 800303e cl -= ncl; tbl++; /* Next fragment */ - 8002f76: 697a ldr r2, [r7, #20] - 8002f78: 68fb ldr r3, [r7, #12] - 8002f7a: 1ad3 subs r3, r2, r3 - 8002f7c: 617b str r3, [r7, #20] - 8002f7e: 693b ldr r3, [r7, #16] - 8002f80: 3304 adds r3, #4 - 8002f82: 613b str r3, [r7, #16] + 800302e: 697a ldr r2, [r7, #20] + 8003030: 68fb ldr r3, [r7, #12] + 8003032: 1ad3 subs r3, r2, r3 + 8003034: 617b str r3, [r7, #20] + 8003036: 693b ldr r3, [r7, #16] + 8003038: 3304 adds r3, #4 + 800303a: 613b str r3, [r7, #16] ncl = *tbl++; /* Number of cluters in the fragment */ - 8002f84: e7e9 b.n 8002f5a + 800303c: e7e9 b.n 8003012 if (cl < ncl) break; /* In this fragment? */ - 8002f86: bf00 nop + 800303e: bf00 nop } return cl + *tbl; /* Return the cluster number */ - 8002f88: 693b ldr r3, [r7, #16] - 8002f8a: 681a ldr r2, [r3, #0] - 8002f8c: 697b ldr r3, [r7, #20] - 8002f8e: 4413 add r3, r2 + 8003040: 693b ldr r3, [r7, #16] + 8003042: 681a ldr r2, [r3, #0] + 8003044: 697b ldr r3, [r7, #20] + 8003046: 4413 add r3, r2 } - 8002f90: 4618 mov r0, r3 - 8002f92: 371c adds r7, #28 - 8002f94: 46bd mov sp, r7 - 8002f96: bc80 pop {r7} - 8002f98: 4770 bx lr + 8003048: 4618 mov r0, r3 + 800304a: 371c adds r7, #28 + 800304c: 46bd mov sp, r7 + 800304e: bc80 pop {r7} + 8003050: 4770 bx lr -08002f9a : +08003052 : static FRESULT dir_sdi ( DIR* dp, /* Pointer to directory object */ UINT idx /* Index of directory table */ ) { - 8002f9a: b580 push {r7, lr} - 8002f9c: b086 sub sp, #24 - 8002f9e: af00 add r7, sp, #0 - 8002fa0: 6078 str r0, [r7, #4] - 8002fa2: 6039 str r1, [r7, #0] + 8003052: b580 push {r7, lr} + 8003054: b086 sub sp, #24 + 8003056: af00 add r7, sp, #0 + 8003058: 6078 str r0, [r7, #4] + 800305a: 6039 str r1, [r7, #0] DWORD clst, sect; UINT ic; dp->index = (WORD)idx; /* Current index */ - 8002fa4: 683b ldr r3, [r7, #0] - 8002fa6: b29a uxth r2, r3 - 8002fa8: 687b ldr r3, [r7, #4] - 8002faa: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 + 800305c: 683b ldr r3, [r7, #0] + 800305e: b29a uxth r2, r3 + 8003060: 687b ldr r3, [r7, #4] + 8003062: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 clst = dp->sclust; /* Table start cluster (0:root) */ - 8002fae: 687b ldr r3, [r7, #4] - 8002fb0: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 8002fb4: 617b str r3, [r7, #20] + 8003066: 687b ldr r3, [r7, #4] + 8003068: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 800306c: 617b str r3, [r7, #20] if (clst == 1 || clst >= dp->fs->n_fatent) /* Check start cluster range */ - 8002fb6: 697b ldr r3, [r7, #20] - 8002fb8: 2b01 cmp r3, #1 - 8002fba: d007 beq.n 8002fcc - 8002fbc: 687b ldr r3, [r7, #4] - 8002fbe: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8002fc2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002fc6: 697a ldr r2, [r7, #20] - 8002fc8: 429a cmp r2, r3 - 8002fca: d301 bcc.n 8002fd0 + 800306e: 697b ldr r3, [r7, #20] + 8003070: 2b01 cmp r3, #1 + 8003072: d007 beq.n 8003084 + 8003074: 687b ldr r3, [r7, #4] + 8003076: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800307a: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 800307e: 697a ldr r2, [r7, #20] + 8003080: 429a cmp r2, r3 + 8003082: d301 bcc.n 8003088 return FR_INT_ERR; - 8002fcc: 2302 movs r3, #2 - 8002fce: e074 b.n 80030ba + 8003084: 2302 movs r3, #2 + 8003086: e074 b.n 8003172 if (!clst && dp->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ - 8002fd0: 697b ldr r3, [r7, #20] - 8002fd2: 2b00 cmp r3, #0 - 8002fd4: d10c bne.n 8002ff0 - 8002fd6: 687b ldr r3, [r7, #4] - 8002fd8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8002fdc: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 8002fe0: 2b03 cmp r3, #3 - 8002fe2: d105 bne.n 8002ff0 + 8003088: 697b ldr r3, [r7, #20] + 800308a: 2b00 cmp r3, #0 + 800308c: d10c bne.n 80030a8 + 800308e: 687b ldr r3, [r7, #4] + 8003090: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003094: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8003098: 2b03 cmp r3, #3 + 800309a: d105 bne.n 80030a8 clst = dp->fs->dirbase; - 8002fe4: 687b ldr r3, [r7, #4] - 8002fe6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8002fea: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 8002fee: 617b str r3, [r7, #20] + 800309c: 687b ldr r3, [r7, #4] + 800309e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80030a2: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 80030a6: 617b str r3, [r7, #20] if (clst == 0) { /* Static table (root-directory in FAT12/16) */ - 8002ff0: 697b ldr r3, [r7, #20] - 8002ff2: 2b00 cmp r3, #0 - 8002ff4: d111 bne.n 800301a + 80030a8: 697b ldr r3, [r7, #20] + 80030aa: 2b00 cmp r3, #0 + 80030ac: d111 bne.n 80030d2 if (idx >= dp->fs->n_rootdir) /* Is index out of range? */ - 8002ff6: 687b ldr r3, [r7, #4] - 8002ff8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8002ffc: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003000: 461a mov r2, r3 - 8003002: 683b ldr r3, [r7, #0] - 8003004: 4293 cmp r3, r2 - 8003006: d301 bcc.n 800300c + 80030ae: 687b ldr r3, [r7, #4] + 80030b0: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80030b4: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 80030b8: 461a mov r2, r3 + 80030ba: 683b ldr r3, [r7, #0] + 80030bc: 4293 cmp r3, r2 + 80030be: d301 bcc.n 80030c4 return FR_INT_ERR; - 8003008: 2302 movs r3, #2 - 800300a: e056 b.n 80030ba + 80030c0: 2302 movs r3, #2 + 80030c2: e056 b.n 8003172 sect = dp->fs->dirbase; - 800300c: 687b ldr r3, [r7, #4] - 800300e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003012: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 8003016: 613b str r3, [r7, #16] - 8003018: e032 b.n 8003080 + 80030c4: 687b ldr r3, [r7, #4] + 80030c6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80030ca: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 80030ce: 613b str r3, [r7, #16] + 80030d0: e032 b.n 8003138 } else { /* Dynamic table (root-directory in FAT32 or sub-directory) */ ic = SS(dp->fs) / SZ_DIRE * dp->fs->csize; /* Entries per cluster */ - 800301a: 687b ldr r3, [r7, #4] - 800301c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003020: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003024: 011b lsls r3, r3, #4 - 8003026: 60fb str r3, [r7, #12] + 80030d2: 687b ldr r3, [r7, #4] + 80030d4: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80030d8: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 80030dc: 011b lsls r3, r3, #4 + 80030de: 60fb str r3, [r7, #12] while (idx >= ic) { /* Follow cluster chain */ - 8003028: e01e b.n 8003068 + 80030e0: e01e b.n 8003120 clst = get_fat(dp->fs, clst); /* Get next cluster */ - 800302a: 687b ldr r3, [r7, #4] - 800302c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003030: 6979 ldr r1, [r7, #20] - 8003032: 4618 mov r0, r3 - 8003034: f7ff fcbe bl 80029b4 - 8003038: 6178 str r0, [r7, #20] + 80030e2: 687b ldr r3, [r7, #4] + 80030e4: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80030e8: 6979 ldr r1, [r7, #20] + 80030ea: 4618 mov r0, r3 + 80030ec: f7ff fcbe bl 8002a6c + 80030f0: 6178 str r0, [r7, #20] if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ - 800303a: 697b ldr r3, [r7, #20] - 800303c: f1b3 3fff cmp.w r3, #4294967295 - 8003040: d101 bne.n 8003046 - 8003042: 2301 movs r3, #1 - 8003044: e039 b.n 80030ba + 80030f2: 697b ldr r3, [r7, #20] + 80030f4: f1b3 3fff cmp.w r3, #4294967295 + 80030f8: d101 bne.n 80030fe + 80030fa: 2301 movs r3, #1 + 80030fc: e039 b.n 8003172 if (clst < 2 || clst >= dp->fs->n_fatent) /* Reached to end of table or internal error */ - 8003046: 697b ldr r3, [r7, #20] - 8003048: 2b01 cmp r3, #1 - 800304a: d907 bls.n 800305c - 800304c: 687b ldr r3, [r7, #4] - 800304e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003052: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003056: 697a ldr r2, [r7, #20] - 8003058: 429a cmp r2, r3 - 800305a: d301 bcc.n 8003060 + 80030fe: 697b ldr r3, [r7, #20] + 8003100: 2b01 cmp r3, #1 + 8003102: d907 bls.n 8003114 + 8003104: 687b ldr r3, [r7, #4] + 8003106: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800310a: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 800310e: 697a ldr r2, [r7, #20] + 8003110: 429a cmp r2, r3 + 8003112: d301 bcc.n 8003118 return FR_INT_ERR; - 800305c: 2302 movs r3, #2 - 800305e: e02c b.n 80030ba + 8003114: 2302 movs r3, #2 + 8003116: e02c b.n 8003172 idx -= ic; - 8003060: 683a ldr r2, [r7, #0] - 8003062: 68fb ldr r3, [r7, #12] - 8003064: 1ad3 subs r3, r2, r3 - 8003066: 603b str r3, [r7, #0] + 8003118: 683a ldr r2, [r7, #0] + 800311a: 68fb ldr r3, [r7, #12] + 800311c: 1ad3 subs r3, r2, r3 + 800311e: 603b str r3, [r7, #0] while (idx >= ic) { /* Follow cluster chain */ - 8003068: 683a ldr r2, [r7, #0] - 800306a: 68fb ldr r3, [r7, #12] - 800306c: 429a cmp r2, r3 - 800306e: d2dc bcs.n 800302a + 8003120: 683a ldr r2, [r7, #0] + 8003122: 68fb ldr r3, [r7, #12] + 8003124: 429a cmp r2, r3 + 8003126: d2dc bcs.n 80030e2 } sect = clust2sect(dp->fs, clst); - 8003070: 687b ldr r3, [r7, #4] - 8003072: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003076: 6979 ldr r1, [r7, #20] - 8003078: 4618 mov r0, r3 - 800307a: f7ff fc7a bl 8002972 - 800307e: 6138 str r0, [r7, #16] + 8003128: 687b ldr r3, [r7, #4] + 800312a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800312e: 6979 ldr r1, [r7, #20] + 8003130: 4618 mov r0, r3 + 8003132: f7ff fc7a bl 8002a2a + 8003136: 6138 str r0, [r7, #16] } dp->clust = clst; /* Current cluster# */ - 8003080: 687b ldr r3, [r7, #4] - 8003082: 697a ldr r2, [r7, #20] - 8003084: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8003138: 687b ldr r3, [r7, #4] + 800313a: 697a ldr r2, [r7, #20] + 800313c: f8c3 220c str.w r2, [r3, #524] ; 0x20c if (!sect) return FR_INT_ERR; - 8003088: 693b ldr r3, [r7, #16] - 800308a: 2b00 cmp r3, #0 - 800308c: d101 bne.n 8003092 - 800308e: 2302 movs r3, #2 - 8003090: e013 b.n 80030ba + 8003140: 693b ldr r3, [r7, #16] + 8003142: 2b00 cmp r3, #0 + 8003144: d101 bne.n 800314a + 8003146: 2302 movs r3, #2 + 8003148: e013 b.n 8003172 dp->sect = sect + idx / (SS(dp->fs) / SZ_DIRE); /* Sector# of the directory entry */ - 8003092: 683b ldr r3, [r7, #0] - 8003094: 091a lsrs r2, r3, #4 - 8003096: 693b ldr r3, [r7, #16] - 8003098: 441a add r2, r3 - 800309a: 687b ldr r3, [r7, #4] - 800309c: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 800314a: 683b ldr r3, [r7, #0] + 800314c: 091a lsrs r2, r3, #4 + 800314e: 693b ldr r3, [r7, #16] + 8003150: 441a add r2, r3 + 8003152: 687b ldr r3, [r7, #4] + 8003154: f8c3 2210 str.w r2, [r3, #528] ; 0x210 dp->dir = dp->fs->win.d8 + (idx % (SS(dp->fs) / SZ_DIRE)) * SZ_DIRE; /* Ptr to the entry in the sector */ - 80030a0: 687b ldr r3, [r7, #4] - 80030a2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80030a6: 461a mov r2, r3 - 80030a8: 683b ldr r3, [r7, #0] - 80030aa: f003 030f and.w r3, r3, #15 - 80030ae: 015b lsls r3, r3, #5 - 80030b0: 441a add r2, r3 - 80030b2: 687b ldr r3, [r7, #4] - 80030b4: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 8003158: 687b ldr r3, [r7, #4] + 800315a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800315e: 461a mov r2, r3 + 8003160: 683b ldr r3, [r7, #0] + 8003162: f003 030f and.w r3, r3, #15 + 8003166: 015b lsls r3, r3, #5 + 8003168: 441a add r2, r3 + 800316a: 687b ldr r3, [r7, #4] + 800316c: f8c3 2214 str.w r2, [r3, #532] ; 0x214 return FR_OK; - 80030b8: 2300 movs r3, #0 + 8003170: 2300 movs r3, #0 } - 80030ba: 4618 mov r0, r3 - 80030bc: 3718 adds r7, #24 - 80030be: 46bd mov sp, r7 - 80030c0: bd80 pop {r7, pc} + 8003172: 4618 mov r0, r3 + 8003174: 3718 adds r7, #24 + 8003176: 46bd mov sp, r7 + 8003178: bd80 pop {r7, pc} -080030c2 : +0800317a : static FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */ DIR* dp, /* Pointer to the directory object */ int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ ) { - 80030c2: b590 push {r4, r7, lr} - 80030c4: b087 sub sp, #28 - 80030c6: af00 add r7, sp, #0 - 80030c8: 6078 str r0, [r7, #4] - 80030ca: 6039 str r1, [r7, #0] + 800317a: b590 push {r4, r7, lr} + 800317c: b087 sub sp, #28 + 800317e: af00 add r7, sp, #0 + 8003180: 6078 str r0, [r7, #4] + 8003182: 6039 str r1, [r7, #0] #if !_FS_READONLY UINT c; #endif i = dp->index + 1; - 80030cc: 687b ldr r3, [r7, #4] - 80030ce: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 - 80030d2: 3301 adds r3, #1 - 80030d4: 60fb str r3, [r7, #12] + 8003184: 687b ldr r3, [r7, #4] + 8003186: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 + 800318a: 3301 adds r3, #1 + 800318c: 60fb str r3, [r7, #12] if (!(i & 0xFFFF) || !dp->sect) /* Report EOT when index has reached 65535 */ - 80030d6: 68fb ldr r3, [r7, #12] - 80030d8: b29b uxth r3, r3 - 80030da: 2b00 cmp r3, #0 - 80030dc: d004 beq.n 80030e8 - 80030de: 687b ldr r3, [r7, #4] - 80030e0: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 80030e4: 2b00 cmp r3, #0 - 80030e6: d101 bne.n 80030ec + 800318e: 68fb ldr r3, [r7, #12] + 8003190: b29b uxth r3, r3 + 8003192: 2b00 cmp r3, #0 + 8003194: d004 beq.n 80031a0 + 8003196: 687b ldr r3, [r7, #4] + 8003198: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 800319c: 2b00 cmp r3, #0 + 800319e: d101 bne.n 80031a4 return FR_NO_FILE; - 80030e8: 2304 movs r3, #4 - 80030ea: e0dd b.n 80032a8 + 80031a0: 2304 movs r3, #4 + 80031a2: e0dd b.n 8003360 if (!(i % (SS(dp->fs) / SZ_DIRE))) { /* Sector changed? */ - 80030ec: 68fb ldr r3, [r7, #12] - 80030ee: f003 030f and.w r3, r3, #15 - 80030f2: 2b00 cmp r3, #0 - 80030f4: f040 80c6 bne.w 8003284 + 80031a4: 68fb ldr r3, [r7, #12] + 80031a6: f003 030f and.w r3, r3, #15 + 80031aa: 2b00 cmp r3, #0 + 80031ac: f040 80c6 bne.w 800333c dp->sect++; /* Next sector */ - 80030f8: 687b ldr r3, [r7, #4] - 80030fa: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 80030fe: 1c5a adds r2, r3, #1 - 8003100: 687b ldr r3, [r7, #4] - 8003102: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 80031b0: 687b ldr r3, [r7, #4] + 80031b2: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 80031b6: 1c5a adds r2, r3, #1 + 80031b8: 687b ldr r3, [r7, #4] + 80031ba: f8c3 2210 str.w r2, [r3, #528] ; 0x210 if (!dp->clust) { /* Static table */ - 8003106: 687b ldr r3, [r7, #4] - 8003108: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 800310c: 2b00 cmp r3, #0 - 800310e: d10b bne.n 8003128 + 80031be: 687b ldr r3, [r7, #4] + 80031c0: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 80031c4: 2b00 cmp r3, #0 + 80031c6: d10b bne.n 80031e0 if (i >= dp->fs->n_rootdir) /* Report EOT if it reached end of static table */ - 8003110: 687b ldr r3, [r7, #4] - 8003112: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003116: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 800311a: 461a mov r2, r3 - 800311c: 68fb ldr r3, [r7, #12] - 800311e: 4293 cmp r3, r2 - 8003120: f0c0 80b0 bcc.w 8003284 + 80031c8: 687b ldr r3, [r7, #4] + 80031ca: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80031ce: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 80031d2: 461a mov r2, r3 + 80031d4: 68fb ldr r3, [r7, #12] + 80031d6: 4293 cmp r3, r2 + 80031d8: f0c0 80b0 bcc.w 800333c return FR_NO_FILE; - 8003124: 2304 movs r3, #4 - 8003126: e0bf b.n 80032a8 + 80031dc: 2304 movs r3, #4 + 80031de: e0bf b.n 8003360 } else { /* Dynamic table */ if (((i / (SS(dp->fs) / SZ_DIRE)) & (dp->fs->csize - 1)) == 0) { /* Cluster changed? */ - 8003128: 68fb ldr r3, [r7, #12] - 800312a: 091b lsrs r3, r3, #4 - 800312c: 687a ldr r2, [r7, #4] - 800312e: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 - 8003132: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 8003136: 3a01 subs r2, #1 - 8003138: 4013 ands r3, r2 - 800313a: 2b00 cmp r3, #0 - 800313c: f040 80a2 bne.w 8003284 + 80031e0: 68fb ldr r3, [r7, #12] + 80031e2: 091b lsrs r3, r3, #4 + 80031e4: 687a ldr r2, [r7, #4] + 80031e6: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 + 80031ea: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 80031ee: 3a01 subs r2, #1 + 80031f0: 4013 ands r3, r2 + 80031f2: 2b00 cmp r3, #0 + 80031f4: f040 80a2 bne.w 800333c clst = get_fat(dp->fs, dp->clust); /* Get next cluster */ - 8003140: 687b ldr r3, [r7, #4] - 8003142: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 8003146: 687b ldr r3, [r7, #4] - 8003148: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 800314c: 4619 mov r1, r3 - 800314e: 4610 mov r0, r2 - 8003150: f7ff fc30 bl 80029b4 - 8003154: 6178 str r0, [r7, #20] + 80031f8: 687b ldr r3, [r7, #4] + 80031fa: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80031fe: 687b ldr r3, [r7, #4] + 8003200: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 8003204: 4619 mov r1, r3 + 8003206: 4610 mov r0, r2 + 8003208: f7ff fc30 bl 8002a6c + 800320c: 6178 str r0, [r7, #20] if (clst <= 1) return FR_INT_ERR; - 8003156: 697b ldr r3, [r7, #20] - 8003158: 2b01 cmp r3, #1 - 800315a: d801 bhi.n 8003160 - 800315c: 2302 movs r3, #2 - 800315e: e0a3 b.n 80032a8 + 800320e: 697b ldr r3, [r7, #20] + 8003210: 2b01 cmp r3, #1 + 8003212: d801 bhi.n 8003218 + 8003214: 2302 movs r3, #2 + 8003216: e0a3 b.n 8003360 if (clst == 0xFFFFFFFF) return FR_DISK_ERR; - 8003160: 697b ldr r3, [r7, #20] - 8003162: f1b3 3fff cmp.w r3, #4294967295 - 8003166: d101 bne.n 800316c - 8003168: 2301 movs r3, #1 - 800316a: e09d b.n 80032a8 + 8003218: 697b ldr r3, [r7, #20] + 800321a: f1b3 3fff cmp.w r3, #4294967295 + 800321e: d101 bne.n 8003224 + 8003220: 2301 movs r3, #1 + 8003222: e09d b.n 8003360 if (clst >= dp->fs->n_fatent) { /* If it reached end of dynamic table, */ - 800316c: 687b ldr r3, [r7, #4] - 800316e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003172: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003176: 697a ldr r2, [r7, #20] - 8003178: 429a cmp r2, r3 - 800317a: d374 bcc.n 8003266 + 8003224: 687b ldr r3, [r7, #4] + 8003226: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800322a: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 800322e: 697a ldr r2, [r7, #20] + 8003230: 429a cmp r2, r3 + 8003232: d374 bcc.n 800331e #if !_FS_READONLY if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT */ - 800317c: 683b ldr r3, [r7, #0] - 800317e: 2b00 cmp r3, #0 - 8003180: d101 bne.n 8003186 - 8003182: 2304 movs r3, #4 - 8003184: e090 b.n 80032a8 + 8003234: 683b ldr r3, [r7, #0] + 8003236: 2b00 cmp r3, #0 + 8003238: d101 bne.n 800323e + 800323a: 2304 movs r3, #4 + 800323c: e090 b.n 8003360 clst = create_chain(dp->fs, dp->clust); /* Stretch cluster chain */ - 8003186: 687b ldr r3, [r7, #4] - 8003188: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 800318c: 687b ldr r3, [r7, #4] - 800318e: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 8003192: 4619 mov r1, r3 - 8003194: 4610 mov r0, r2 - 8003196: f7ff fe2f bl 8002df8 - 800319a: 6178 str r0, [r7, #20] + 800323e: 687b ldr r3, [r7, #4] + 8003240: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 8003244: 687b ldr r3, [r7, #4] + 8003246: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 800324a: 4619 mov r1, r3 + 800324c: 4610 mov r0, r2 + 800324e: f7ff fe2f bl 8002eb0 + 8003252: 6178 str r0, [r7, #20] if (clst == 0) return FR_DENIED; /* No free cluster */ - 800319c: 697b ldr r3, [r7, #20] - 800319e: 2b00 cmp r3, #0 - 80031a0: d101 bne.n 80031a6 - 80031a2: 2307 movs r3, #7 - 80031a4: e080 b.n 80032a8 + 8003254: 697b ldr r3, [r7, #20] + 8003256: 2b00 cmp r3, #0 + 8003258: d101 bne.n 800325e + 800325a: 2307 movs r3, #7 + 800325c: e080 b.n 8003360 if (clst == 1) return FR_INT_ERR; - 80031a6: 697b ldr r3, [r7, #20] - 80031a8: 2b01 cmp r3, #1 - 80031aa: d101 bne.n 80031b0 - 80031ac: 2302 movs r3, #2 - 80031ae: e07b b.n 80032a8 + 800325e: 697b ldr r3, [r7, #20] + 8003260: 2b01 cmp r3, #1 + 8003262: d101 bne.n 8003268 + 8003264: 2302 movs r3, #2 + 8003266: e07b b.n 8003360 if (clst == 0xFFFFFFFF) return FR_DISK_ERR; - 80031b0: 697b ldr r3, [r7, #20] - 80031b2: f1b3 3fff cmp.w r3, #4294967295 - 80031b6: d101 bne.n 80031bc - 80031b8: 2301 movs r3, #1 - 80031ba: e075 b.n 80032a8 + 8003268: 697b ldr r3, [r7, #20] + 800326a: f1b3 3fff cmp.w r3, #4294967295 + 800326e: d101 bne.n 8003274 + 8003270: 2301 movs r3, #1 + 8003272: e075 b.n 8003360 /* Clean-up stretched table */ if (sync_window(dp->fs)) return FR_DISK_ERR;/* Flush disk access window */ - 80031bc: 687b ldr r3, [r7, #4] - 80031be: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80031c2: 4618 mov r0, r3 - 80031c4: f7ff fb5e bl 8002884 - 80031c8: 4603 mov r3, r0 - 80031ca: 2b00 cmp r3, #0 - 80031cc: d001 beq.n 80031d2 - 80031ce: 2301 movs r3, #1 - 80031d0: e06a b.n 80032a8 + 8003274: 687b ldr r3, [r7, #4] + 8003276: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800327a: 4618 mov r0, r3 + 800327c: f7ff fb5e bl 800293c + 8003280: 4603 mov r3, r0 + 8003282: 2b00 cmp r3, #0 + 8003284: d001 beq.n 800328a + 8003286: 2301 movs r3, #1 + 8003288: e06a b.n 8003360 mem_set(dp->fs->win.d8, 0, SS(dp->fs)); /* Clear window buffer */ - 80031d2: 687b ldr r3, [r7, #4] - 80031d4: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80031d8: f44f 7200 mov.w r2, #512 ; 0x200 - 80031dc: 2100 movs r1, #0 - 80031de: 4618 mov r0, r3 - 80031e0: f7ff f986 bl 80024f0 + 800328a: 687b ldr r3, [r7, #4] + 800328c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003290: f44f 7200 mov.w r2, #512 ; 0x200 + 8003294: 2100 movs r1, #0 + 8003296: 4618 mov r0, r3 + 8003298: f7ff f986 bl 80025a8 dp->fs->winsect = clust2sect(dp->fs, clst); /* Cluster start sector */ - 80031e4: 687b ldr r3, [r7, #4] - 80031e6: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 80031ea: 687b ldr r3, [r7, #4] - 80031ec: f8d3 4200 ldr.w r4, [r3, #512] ; 0x200 - 80031f0: 6979 ldr r1, [r7, #20] - 80031f2: 4610 mov r0, r2 - 80031f4: f7ff fbbd bl 8002972 - 80031f8: 4603 mov r3, r0 - 80031fa: f8c4 322c str.w r3, [r4, #556] ; 0x22c + 800329c: 687b ldr r3, [r7, #4] + 800329e: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80032a2: 687b ldr r3, [r7, #4] + 80032a4: f8d3 4200 ldr.w r4, [r3, #512] ; 0x200 + 80032a8: 6979 ldr r1, [r7, #20] + 80032aa: 4610 mov r0, r2 + 80032ac: f7ff fbbd bl 8002a2a + 80032b0: 4603 mov r3, r0 + 80032b2: f8c4 322c str.w r3, [r4, #556] ; 0x22c for (c = 0; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ - 80031fe: 2300 movs r3, #0 - 8003200: 613b str r3, [r7, #16] - 8003202: e01b b.n 800323c + 80032b6: 2300 movs r3, #0 + 80032b8: 613b str r3, [r7, #16] + 80032ba: e01b b.n 80032f4 dp->fs->wflag = 1; - 8003204: 687b ldr r3, [r7, #4] - 8003206: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800320a: 2201 movs r2, #1 - 800320c: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 80032bc: 687b ldr r3, [r7, #4] + 80032be: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80032c2: 2201 movs r2, #1 + 80032c4: f883 2204 strb.w r2, [r3, #516] ; 0x204 if (sync_window(dp->fs)) return FR_DISK_ERR; - 8003210: 687b ldr r3, [r7, #4] - 8003212: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003216: 4618 mov r0, r3 - 8003218: f7ff fb34 bl 8002884 - 800321c: 4603 mov r3, r0 - 800321e: 2b00 cmp r3, #0 - 8003220: d001 beq.n 8003226 - 8003222: 2301 movs r3, #1 - 8003224: e040 b.n 80032a8 + 80032c8: 687b ldr r3, [r7, #4] + 80032ca: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80032ce: 4618 mov r0, r3 + 80032d0: f7ff fb34 bl 800293c + 80032d4: 4603 mov r3, r0 + 80032d6: 2b00 cmp r3, #0 + 80032d8: d001 beq.n 80032de + 80032da: 2301 movs r3, #1 + 80032dc: e040 b.n 8003360 dp->fs->winsect++; - 8003226: 687b ldr r3, [r7, #4] - 8003228: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800322c: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c - 8003230: 3201 adds r2, #1 - 8003232: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 80032de: 687b ldr r3, [r7, #4] + 80032e0: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80032e4: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c + 80032e8: 3201 adds r2, #1 + 80032ea: f8c3 222c str.w r2, [r3, #556] ; 0x22c for (c = 0; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ - 8003236: 693b ldr r3, [r7, #16] - 8003238: 3301 adds r3, #1 - 800323a: 613b str r3, [r7, #16] - 800323c: 687b ldr r3, [r7, #4] - 800323e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003242: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003246: 461a mov r2, r3 - 8003248: 693b ldr r3, [r7, #16] - 800324a: 4293 cmp r3, r2 - 800324c: d3da bcc.n 8003204 + 80032ee: 693b ldr r3, [r7, #16] + 80032f0: 3301 adds r3, #1 + 80032f2: 613b str r3, [r7, #16] + 80032f4: 687b ldr r3, [r7, #4] + 80032f6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80032fa: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 80032fe: 461a mov r2, r3 + 8003300: 693b ldr r3, [r7, #16] + 8003302: 4293 cmp r3, r2 + 8003304: d3da bcc.n 80032bc } dp->fs->winsect -= c; /* Rewind window offset */ - 800324e: 687b ldr r3, [r7, #4] - 8003250: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003254: f8d3 122c ldr.w r1, [r3, #556] ; 0x22c - 8003258: 687b ldr r3, [r7, #4] - 800325a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800325e: 693a ldr r2, [r7, #16] - 8003260: 1a8a subs r2, r1, r2 - 8003262: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 8003306: 687b ldr r3, [r7, #4] + 8003308: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800330c: f8d3 122c ldr.w r1, [r3, #556] ; 0x22c + 8003310: 687b ldr r3, [r7, #4] + 8003312: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003316: 693a ldr r2, [r7, #16] + 8003318: 1a8a subs r2, r1, r2 + 800331a: f8c3 222c str.w r2, [r3, #556] ; 0x22c #else if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT (this is to suppress warning) */ return FR_NO_FILE; /* Report EOT */ #endif } dp->clust = clst; /* Initialize data for new cluster */ - 8003266: 687b ldr r3, [r7, #4] - 8003268: 697a ldr r2, [r7, #20] - 800326a: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 800331e: 687b ldr r3, [r7, #4] + 8003320: 697a ldr r2, [r7, #20] + 8003322: f8c3 220c str.w r2, [r3, #524] ; 0x20c dp->sect = clust2sect(dp->fs, clst); - 800326e: 687b ldr r3, [r7, #4] - 8003270: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003274: 6979 ldr r1, [r7, #20] - 8003276: 4618 mov r0, r3 - 8003278: f7ff fb7b bl 8002972 - 800327c: 4602 mov r2, r0 - 800327e: 687b ldr r3, [r7, #4] - 8003280: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8003326: 687b ldr r3, [r7, #4] + 8003328: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800332c: 6979 ldr r1, [r7, #20] + 800332e: 4618 mov r0, r3 + 8003330: f7ff fb7b bl 8002a2a + 8003334: 4602 mov r2, r0 + 8003336: 687b ldr r3, [r7, #4] + 8003338: f8c3 2210 str.w r2, [r3, #528] ; 0x210 } } } dp->index = (WORD)i; /* Current index */ - 8003284: 68fb ldr r3, [r7, #12] - 8003286: b29a uxth r2, r3 - 8003288: 687b ldr r3, [r7, #4] - 800328a: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 + 800333c: 68fb ldr r3, [r7, #12] + 800333e: b29a uxth r2, r3 + 8003340: 687b ldr r3, [r7, #4] + 8003342: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 dp->dir = dp->fs->win.d8 + (i % (SS(dp->fs) / SZ_DIRE)) * SZ_DIRE; /* Current entry in the window */ - 800328e: 687b ldr r3, [r7, #4] - 8003290: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003294: 461a mov r2, r3 - 8003296: 68fb ldr r3, [r7, #12] - 8003298: f003 030f and.w r3, r3, #15 - 800329c: 015b lsls r3, r3, #5 - 800329e: 441a add r2, r3 - 80032a0: 687b ldr r3, [r7, #4] - 80032a2: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 8003346: 687b ldr r3, [r7, #4] + 8003348: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800334c: 461a mov r2, r3 + 800334e: 68fb ldr r3, [r7, #12] + 8003350: f003 030f and.w r3, r3, #15 + 8003354: 015b lsls r3, r3, #5 + 8003356: 441a add r2, r3 + 8003358: 687b ldr r3, [r7, #4] + 800335a: f8c3 2214 str.w r2, [r3, #532] ; 0x214 return FR_OK; - 80032a6: 2300 movs r3, #0 + 800335e: 2300 movs r3, #0 } - 80032a8: 4618 mov r0, r3 - 80032aa: 371c adds r7, #28 - 80032ac: 46bd mov sp, r7 - 80032ae: bd90 pop {r4, r7, pc} + 8003360: 4618 mov r0, r3 + 8003362: 371c adds r7, #28 + 8003364: 46bd mov sp, r7 + 8003366: bd90 pop {r4, r7, pc} -080032b0 : +08003368 : static FRESULT dir_alloc ( DIR* dp, /* Pointer to the directory object */ UINT nent /* Number of contiguous entries to allocate (1-21) */ ) { - 80032b0: b580 push {r7, lr} - 80032b2: b084 sub sp, #16 - 80032b4: af00 add r7, sp, #0 - 80032b6: 6078 str r0, [r7, #4] - 80032b8: 6039 str r1, [r7, #0] + 8003368: b580 push {r7, lr} + 800336a: b084 sub sp, #16 + 800336c: af00 add r7, sp, #0 + 800336e: 6078 str r0, [r7, #4] + 8003370: 6039 str r1, [r7, #0] FRESULT res; UINT n; res = dir_sdi(dp, 0); - 80032ba: 2100 movs r1, #0 - 80032bc: 6878 ldr r0, [r7, #4] - 80032be: f7ff fe6c bl 8002f9a - 80032c2: 4603 mov r3, r0 - 80032c4: 73fb strb r3, [r7, #15] + 8003372: 2100 movs r1, #0 + 8003374: 6878 ldr r0, [r7, #4] + 8003376: f7ff fe6c bl 8003052 + 800337a: 4603 mov r3, r0 + 800337c: 73fb strb r3, [r7, #15] if (res == FR_OK) { - 80032c6: 7bfb ldrb r3, [r7, #15] - 80032c8: 2b00 cmp r3, #0 - 80032ca: d131 bne.n 8003330 + 800337e: 7bfb ldrb r3, [r7, #15] + 8003380: 2b00 cmp r3, #0 + 8003382: d131 bne.n 80033e8 n = 0; - 80032cc: 2300 movs r3, #0 - 80032ce: 60bb str r3, [r7, #8] + 8003384: 2300 movs r3, #0 + 8003386: 60bb str r3, [r7, #8] do { res = move_window(dp->fs, dp->sect); - 80032d0: 687b ldr r3, [r7, #4] - 80032d2: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 80032d6: 687b ldr r3, [r7, #4] - 80032d8: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 80032dc: 4619 mov r1, r3 - 80032de: 4610 mov r0, r2 - 80032e0: f7ff fb19 bl 8002916 - 80032e4: 4603 mov r3, r0 - 80032e6: 73fb strb r3, [r7, #15] + 8003388: 687b ldr r3, [r7, #4] + 800338a: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 800338e: 687b ldr r3, [r7, #4] + 8003390: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8003394: 4619 mov r1, r3 + 8003396: 4610 mov r0, r2 + 8003398: f7ff fb19 bl 80029ce + 800339c: 4603 mov r3, r0 + 800339e: 73fb strb r3, [r7, #15] if (res != FR_OK) break; - 80032e8: 7bfb ldrb r3, [r7, #15] - 80032ea: 2b00 cmp r3, #0 - 80032ec: d11f bne.n 800332e + 80033a0: 7bfb ldrb r3, [r7, #15] + 80033a2: 2b00 cmp r3, #0 + 80033a4: d11f bne.n 80033e6 if (dp->dir[0] == DDEM || dp->dir[0] == 0) { /* Is it a free entry? */ - 80032ee: 687b ldr r3, [r7, #4] - 80032f0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80032f4: 781b ldrb r3, [r3, #0] - 80032f6: 2be5 cmp r3, #229 ; 0xe5 - 80032f8: d005 beq.n 8003306 - 80032fa: 687b ldr r3, [r7, #4] - 80032fc: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003300: 781b ldrb r3, [r3, #0] - 8003302: 2b00 cmp r3, #0 - 8003304: d107 bne.n 8003316 + 80033a6: 687b ldr r3, [r7, #4] + 80033a8: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80033ac: 781b ldrb r3, [r3, #0] + 80033ae: 2be5 cmp r3, #229 ; 0xe5 + 80033b0: d005 beq.n 80033be + 80033b2: 687b ldr r3, [r7, #4] + 80033b4: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80033b8: 781b ldrb r3, [r3, #0] + 80033ba: 2b00 cmp r3, #0 + 80033bc: d107 bne.n 80033ce if (++n == nent) break; /* A block of contiguous free entries is found */ - 8003306: 68bb ldr r3, [r7, #8] - 8003308: 3301 adds r3, #1 - 800330a: 60bb str r3, [r7, #8] - 800330c: 68ba ldr r2, [r7, #8] - 800330e: 683b ldr r3, [r7, #0] - 8003310: 429a cmp r2, r3 - 8003312: d102 bne.n 800331a - 8003314: e00c b.n 8003330 + 80033be: 68bb ldr r3, [r7, #8] + 80033c0: 3301 adds r3, #1 + 80033c2: 60bb str r3, [r7, #8] + 80033c4: 68ba ldr r2, [r7, #8] + 80033c6: 683b ldr r3, [r7, #0] + 80033c8: 429a cmp r2, r3 + 80033ca: d102 bne.n 80033d2 + 80033cc: e00c b.n 80033e8 } else { n = 0; /* Not a blank entry. Restart to search */ - 8003316: 2300 movs r3, #0 - 8003318: 60bb str r3, [r7, #8] + 80033ce: 2300 movs r3, #0 + 80033d0: 60bb str r3, [r7, #8] } res = dir_next(dp, 1); /* Next entry with table stretch enabled */ - 800331a: 2101 movs r1, #1 - 800331c: 6878 ldr r0, [r7, #4] - 800331e: f7ff fed0 bl 80030c2 - 8003322: 4603 mov r3, r0 - 8003324: 73fb strb r3, [r7, #15] + 80033d2: 2101 movs r1, #1 + 80033d4: 6878 ldr r0, [r7, #4] + 80033d6: f7ff fed0 bl 800317a + 80033da: 4603 mov r3, r0 + 80033dc: 73fb strb r3, [r7, #15] } while (res == FR_OK); - 8003326: 7bfb ldrb r3, [r7, #15] - 8003328: 2b00 cmp r3, #0 - 800332a: d0d1 beq.n 80032d0 - 800332c: e000 b.n 8003330 + 80033de: 7bfb ldrb r3, [r7, #15] + 80033e0: 2b00 cmp r3, #0 + 80033e2: d0d1 beq.n 8003388 + 80033e4: e000 b.n 80033e8 if (res != FR_OK) break; - 800332e: bf00 nop + 80033e6: bf00 nop } if (res == FR_NO_FILE) res = FR_DENIED; /* No directory entry to allocate */ - 8003330: 7bfb ldrb r3, [r7, #15] - 8003332: 2b04 cmp r3, #4 - 8003334: d101 bne.n 800333a - 8003336: 2307 movs r3, #7 - 8003338: 73fb strb r3, [r7, #15] + 80033e8: 7bfb ldrb r3, [r7, #15] + 80033ea: 2b04 cmp r3, #4 + 80033ec: d101 bne.n 80033f2 + 80033ee: 2307 movs r3, #7 + 80033f0: 73fb strb r3, [r7, #15] return res; - 800333a: 7bfb ldrb r3, [r7, #15] + 80033f2: 7bfb ldrb r3, [r7, #15] } - 800333c: 4618 mov r0, r3 - 800333e: 3710 adds r7, #16 - 8003340: 46bd mov sp, r7 - 8003342: bd80 pop {r7, pc} + 80033f4: 4618 mov r0, r3 + 80033f6: 3710 adds r7, #16 + 80033f8: 46bd mov sp, r7 + 80033fa: bd80 pop {r7, pc} -08003344 : +080033fc : static DWORD ld_clust ( FATFS* fs, /* Pointer to the fs object */ BYTE* dir /* Pointer to the directory entry */ ) { - 8003344: b480 push {r7} - 8003346: b085 sub sp, #20 - 8003348: af00 add r7, sp, #0 - 800334a: 6078 str r0, [r7, #4] - 800334c: 6039 str r1, [r7, #0] + 80033fc: b480 push {r7} + 80033fe: b085 sub sp, #20 + 8003400: af00 add r7, sp, #0 + 8003402: 6078 str r0, [r7, #4] + 8003404: 6039 str r1, [r7, #0] DWORD cl; cl = LD_WORD(dir + DIR_FstClusLO); - 800334e: 683b ldr r3, [r7, #0] - 8003350: 331b adds r3, #27 - 8003352: 781b ldrb r3, [r3, #0] - 8003354: 021b lsls r3, r3, #8 - 8003356: b21a sxth r2, r3 - 8003358: 683b ldr r3, [r7, #0] - 800335a: 331a adds r3, #26 - 800335c: 781b ldrb r3, [r3, #0] - 800335e: b21b sxth r3, r3 - 8003360: 4313 orrs r3, r2 - 8003362: b21b sxth r3, r3 - 8003364: b29b uxth r3, r3 - 8003366: 60fb str r3, [r7, #12] + 8003406: 683b ldr r3, [r7, #0] + 8003408: 331b adds r3, #27 + 800340a: 781b ldrb r3, [r3, #0] + 800340c: 021b lsls r3, r3, #8 + 800340e: b21a sxth r2, r3 + 8003410: 683b ldr r3, [r7, #0] + 8003412: 331a adds r3, #26 + 8003414: 781b ldrb r3, [r3, #0] + 8003416: b21b sxth r3, r3 + 8003418: 4313 orrs r3, r2 + 800341a: b21b sxth r3, r3 + 800341c: b29b uxth r3, r3 + 800341e: 60fb str r3, [r7, #12] if (fs->fs_type == FS_FAT32) - 8003368: 687b ldr r3, [r7, #4] - 800336a: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 800336e: 2b03 cmp r3, #3 - 8003370: d10f bne.n 8003392 + 8003420: 687b ldr r3, [r7, #4] + 8003422: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8003426: 2b03 cmp r3, #3 + 8003428: d10f bne.n 800344a cl |= (DWORD)LD_WORD(dir + DIR_FstClusHI) << 16; - 8003372: 683b ldr r3, [r7, #0] - 8003374: 3315 adds r3, #21 - 8003376: 781b ldrb r3, [r3, #0] - 8003378: 021b lsls r3, r3, #8 - 800337a: b21a sxth r2, r3 - 800337c: 683b ldr r3, [r7, #0] - 800337e: 3314 adds r3, #20 - 8003380: 781b ldrb r3, [r3, #0] - 8003382: b21b sxth r3, r3 - 8003384: 4313 orrs r3, r2 - 8003386: b21b sxth r3, r3 - 8003388: b29b uxth r3, r3 - 800338a: 041b lsls r3, r3, #16 - 800338c: 68fa ldr r2, [r7, #12] - 800338e: 4313 orrs r3, r2 - 8003390: 60fb str r3, [r7, #12] + 800342a: 683b ldr r3, [r7, #0] + 800342c: 3315 adds r3, #21 + 800342e: 781b ldrb r3, [r3, #0] + 8003430: 021b lsls r3, r3, #8 + 8003432: b21a sxth r2, r3 + 8003434: 683b ldr r3, [r7, #0] + 8003436: 3314 adds r3, #20 + 8003438: 781b ldrb r3, [r3, #0] + 800343a: b21b sxth r3, r3 + 800343c: 4313 orrs r3, r2 + 800343e: b21b sxth r3, r3 + 8003440: b29b uxth r3, r3 + 8003442: 041b lsls r3, r3, #16 + 8003444: 68fa ldr r2, [r7, #12] + 8003446: 4313 orrs r3, r2 + 8003448: 60fb str r3, [r7, #12] return cl; - 8003392: 68fb ldr r3, [r7, #12] + 800344a: 68fb ldr r3, [r7, #12] } - 8003394: 4618 mov r0, r3 - 8003396: 3714 adds r7, #20 - 8003398: 46bd mov sp, r7 - 800339a: bc80 pop {r7} - 800339c: 4770 bx lr + 800344c: 4618 mov r0, r3 + 800344e: 3714 adds r7, #20 + 8003450: 46bd mov sp, r7 + 8003452: bc80 pop {r7} + 8003454: 4770 bx lr -0800339e : +08003456 : static void st_clust ( BYTE* dir, /* Pointer to the directory entry */ DWORD cl /* Value to be set */ ) { - 800339e: b480 push {r7} - 80033a0: b083 sub sp, #12 - 80033a2: af00 add r7, sp, #0 - 80033a4: 6078 str r0, [r7, #4] - 80033a6: 6039 str r1, [r7, #0] + 8003456: b480 push {r7} + 8003458: b083 sub sp, #12 + 800345a: af00 add r7, sp, #0 + 800345c: 6078 str r0, [r7, #4] + 800345e: 6039 str r1, [r7, #0] ST_WORD(dir + DIR_FstClusLO, cl); - 80033a8: 687b ldr r3, [r7, #4] - 80033aa: 331a adds r3, #26 - 80033ac: 683a ldr r2, [r7, #0] - 80033ae: b2d2 uxtb r2, r2 - 80033b0: 701a strb r2, [r3, #0] - 80033b2: 683b ldr r3, [r7, #0] - 80033b4: b29b uxth r3, r3 - 80033b6: 0a1b lsrs r3, r3, #8 - 80033b8: b29a uxth r2, r3 - 80033ba: 687b ldr r3, [r7, #4] - 80033bc: 331b adds r3, #27 - 80033be: b2d2 uxtb r2, r2 - 80033c0: 701a strb r2, [r3, #0] + 8003460: 687b ldr r3, [r7, #4] + 8003462: 331a adds r3, #26 + 8003464: 683a ldr r2, [r7, #0] + 8003466: b2d2 uxtb r2, r2 + 8003468: 701a strb r2, [r3, #0] + 800346a: 683b ldr r3, [r7, #0] + 800346c: b29b uxth r3, r3 + 800346e: 0a1b lsrs r3, r3, #8 + 8003470: b29a uxth r2, r3 + 8003472: 687b ldr r3, [r7, #4] + 8003474: 331b adds r3, #27 + 8003476: b2d2 uxtb r2, r2 + 8003478: 701a strb r2, [r3, #0] ST_WORD(dir + DIR_FstClusHI, cl >> 16); - 80033c2: 683b ldr r3, [r7, #0] - 80033c4: 0c1a lsrs r2, r3, #16 - 80033c6: 687b ldr r3, [r7, #4] - 80033c8: 3314 adds r3, #20 - 80033ca: b2d2 uxtb r2, r2 - 80033cc: 701a strb r2, [r3, #0] - 80033ce: 683b ldr r3, [r7, #0] - 80033d0: 0c1b lsrs r3, r3, #16 - 80033d2: b29b uxth r3, r3 - 80033d4: 0a1b lsrs r3, r3, #8 - 80033d6: b29a uxth r2, r3 - 80033d8: 687b ldr r3, [r7, #4] - 80033da: 3315 adds r3, #21 - 80033dc: b2d2 uxtb r2, r2 - 80033de: 701a strb r2, [r3, #0] + 800347a: 683b ldr r3, [r7, #0] + 800347c: 0c1a lsrs r2, r3, #16 + 800347e: 687b ldr r3, [r7, #4] + 8003480: 3314 adds r3, #20 + 8003482: b2d2 uxtb r2, r2 + 8003484: 701a strb r2, [r3, #0] + 8003486: 683b ldr r3, [r7, #0] + 8003488: 0c1b lsrs r3, r3, #16 + 800348a: b29b uxth r3, r3 + 800348c: 0a1b lsrs r3, r3, #8 + 800348e: b29a uxth r2, r3 + 8003490: 687b ldr r3, [r7, #4] + 8003492: 3315 adds r3, #21 + 8003494: b2d2 uxtb r2, r2 + 8003496: 701a strb r2, [r3, #0] } - 80033e0: bf00 nop - 80033e2: 370c adds r7, #12 - 80033e4: 46bd mov sp, r7 - 80033e6: bc80 pop {r7} - 80033e8: 4770 bx lr + 8003498: bf00 nop + 800349a: 370c adds r7, #12 + 800349c: 46bd mov sp, r7 + 800349e: bc80 pop {r7} + 80034a0: 4770 bx lr -080033ea : +080034a2 : static FRESULT dir_find ( DIR* dp /* Pointer to the directory object linked to the file name */ ) { - 80033ea: b580 push {r7, lr} - 80033ec: b086 sub sp, #24 - 80033ee: af00 add r7, sp, #0 - 80033f0: 6078 str r0, [r7, #4] + 80034a2: b580 push {r7, lr} + 80034a4: b086 sub sp, #24 + 80034a6: af00 add r7, sp, #0 + 80034a8: 6078 str r0, [r7, #4] BYTE c, *dir; #if _USE_LFN BYTE a, ord, sum; #endif res = dir_sdi(dp, 0); /* Rewind directory object */ - 80033f2: 2100 movs r1, #0 - 80033f4: 6878 ldr r0, [r7, #4] - 80033f6: f7ff fdd0 bl 8002f9a - 80033fa: 4603 mov r3, r0 - 80033fc: 75fb strb r3, [r7, #23] + 80034aa: 2100 movs r1, #0 + 80034ac: 6878 ldr r0, [r7, #4] + 80034ae: f7ff fdd0 bl 8003052 + 80034b2: 4603 mov r3, r0 + 80034b4: 75fb strb r3, [r7, #23] if (res != FR_OK) return res; - 80033fe: 7dfb ldrb r3, [r7, #23] - 8003400: 2b00 cmp r3, #0 - 8003402: d001 beq.n 8003408 - 8003404: 7dfb ldrb r3, [r7, #23] - 8003406: e03b b.n 8003480 + 80034b6: 7dfb ldrb r3, [r7, #23] + 80034b8: 2b00 cmp r3, #0 + 80034ba: d001 beq.n 80034c0 + 80034bc: 7dfb ldrb r3, [r7, #23] + 80034be: e03b b.n 8003538 #if _USE_LFN ord = sum = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ #endif do { res = move_window(dp->fs, dp->sect); - 8003408: 687b ldr r3, [r7, #4] - 800340a: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 800340e: 687b ldr r3, [r7, #4] - 8003410: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8003414: 4619 mov r1, r3 - 8003416: 4610 mov r0, r2 - 8003418: f7ff fa7d bl 8002916 - 800341c: 4603 mov r3, r0 - 800341e: 75fb strb r3, [r7, #23] + 80034c0: 687b ldr r3, [r7, #4] + 80034c2: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80034c6: 687b ldr r3, [r7, #4] + 80034c8: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 80034cc: 4619 mov r1, r3 + 80034ce: 4610 mov r0, r2 + 80034d0: f7ff fa7d bl 80029ce + 80034d4: 4603 mov r3, r0 + 80034d6: 75fb strb r3, [r7, #23] if (res != FR_OK) break; - 8003420: 7dfb ldrb r3, [r7, #23] - 8003422: 2b00 cmp r3, #0 - 8003424: d128 bne.n 8003478 + 80034d8: 7dfb ldrb r3, [r7, #23] + 80034da: 2b00 cmp r3, #0 + 80034dc: d128 bne.n 8003530 dir = dp->dir; /* Ptr to the directory entry of current index */ - 8003426: 687b ldr r3, [r7, #4] - 8003428: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 800342c: 613b str r3, [r7, #16] + 80034de: 687b ldr r3, [r7, #4] + 80034e0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80034e4: 613b str r3, [r7, #16] c = dir[DIR_Name]; - 800342e: 693b ldr r3, [r7, #16] - 8003430: 781b ldrb r3, [r3, #0] - 8003432: 73fb strb r3, [r7, #15] + 80034e6: 693b ldr r3, [r7, #16] + 80034e8: 781b ldrb r3, [r3, #0] + 80034ea: 73fb strb r3, [r7, #15] if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ - 8003434: 7bfb ldrb r3, [r7, #15] - 8003436: 2b00 cmp r3, #0 - 8003438: d102 bne.n 8003440 - 800343a: 2304 movs r3, #4 - 800343c: 75fb strb r3, [r7, #23] - 800343e: e01e b.n 800347e + 80034ec: 7bfb ldrb r3, [r7, #15] + 80034ee: 2b00 cmp r3, #0 + 80034f0: d102 bne.n 80034f8 + 80034f2: 2304 movs r3, #4 + 80034f4: 75fb strb r3, [r7, #23] + 80034f6: e01e b.n 8003536 if (!(dp->fn[NSFLAG] & NS_LOSS) && !mem_cmp(dir, dp->fn, 11)) break; /* SFN matched? */ ord = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ } } #else /* Non LFN configuration */ if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dp->fn, 11)) /* Is it a valid entry? */ - 8003440: 693b ldr r3, [r7, #16] - 8003442: 330b adds r3, #11 - 8003444: 781b ldrb r3, [r3, #0] - 8003446: f003 0308 and.w r3, r3, #8 - 800344a: 2b00 cmp r3, #0 - 800344c: d10a bne.n 8003464 - 800344e: 687b ldr r3, [r7, #4] - 8003450: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 8003454: 220b movs r2, #11 - 8003456: 4619 mov r1, r3 - 8003458: 6938 ldr r0, [r7, #16] - 800345a: f7ff f863 bl 8002524 - 800345e: 4603 mov r3, r0 - 8003460: 2b00 cmp r3, #0 - 8003462: d00b beq.n 800347c + 80034f8: 693b ldr r3, [r7, #16] + 80034fa: 330b adds r3, #11 + 80034fc: 781b ldrb r3, [r3, #0] + 80034fe: f003 0308 and.w r3, r3, #8 + 8003502: 2b00 cmp r3, #0 + 8003504: d10a bne.n 800351c + 8003506: 687b ldr r3, [r7, #4] + 8003508: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 800350c: 220b movs r2, #11 + 800350e: 4619 mov r1, r3 + 8003510: 6938 ldr r0, [r7, #16] + 8003512: f7ff f863 bl 80025dc + 8003516: 4603 mov r3, r0 + 8003518: 2b00 cmp r3, #0 + 800351a: d00b beq.n 8003534 break; #endif res = dir_next(dp, 0); /* Next entry */ - 8003464: 2100 movs r1, #0 - 8003466: 6878 ldr r0, [r7, #4] - 8003468: f7ff fe2b bl 80030c2 - 800346c: 4603 mov r3, r0 - 800346e: 75fb strb r3, [r7, #23] + 800351c: 2100 movs r1, #0 + 800351e: 6878 ldr r0, [r7, #4] + 8003520: f7ff fe2b bl 800317a + 8003524: 4603 mov r3, r0 + 8003526: 75fb strb r3, [r7, #23] } while (res == FR_OK); - 8003470: 7dfb ldrb r3, [r7, #23] - 8003472: 2b00 cmp r3, #0 - 8003474: d0c8 beq.n 8003408 - 8003476: e002 b.n 800347e + 8003528: 7dfb ldrb r3, [r7, #23] + 800352a: 2b00 cmp r3, #0 + 800352c: d0c8 beq.n 80034c0 + 800352e: e002 b.n 8003536 if (res != FR_OK) break; - 8003478: bf00 nop - 800347a: e000 b.n 800347e + 8003530: bf00 nop + 8003532: e000 b.n 8003536 break; - 800347c: bf00 nop + 8003534: bf00 nop return res; - 800347e: 7dfb ldrb r3, [r7, #23] + 8003536: 7dfb ldrb r3, [r7, #23] } - 8003480: 4618 mov r0, r3 - 8003482: 3718 adds r7, #24 - 8003484: 46bd mov sp, r7 - 8003486: bd80 pop {r7, pc} + 8003538: 4618 mov r0, r3 + 800353a: 3718 adds r7, #24 + 800353c: 46bd mov sp, r7 + 800353e: bd80 pop {r7, pc} -08003488 : +08003540 : #if !_FS_READONLY static FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */ DIR* dp /* Target directory with object name to be created */ ) { - 8003488: b580 push {r7, lr} - 800348a: b084 sub sp, #16 - 800348c: af00 add r7, sp, #0 - 800348e: 6078 str r0, [r7, #4] + 8003540: b580 push {r7, lr} + 8003542: b084 sub sp, #16 + 8003544: af00 add r7, sp, #0 + 8003546: 6078 str r0, [r7, #4] res = dir_next(dp, 0); /* Next entry */ } while (res == FR_OK && --nent); } } #else /* Non LFN configuration */ res = dir_alloc(dp, 1); /* Allocate an entry for SFN */ - 8003490: 2101 movs r1, #1 - 8003492: 6878 ldr r0, [r7, #4] - 8003494: f7ff ff0c bl 80032b0 - 8003498: 4603 mov r3, r0 - 800349a: 73fb strb r3, [r7, #15] + 8003548: 2101 movs r1, #1 + 800354a: 6878 ldr r0, [r7, #4] + 800354c: f7ff ff0c bl 8003368 + 8003550: 4603 mov r3, r0 + 8003552: 73fb strb r3, [r7, #15] #endif if (res == FR_OK) { /* Set SFN entry */ - 800349c: 7bfb ldrb r3, [r7, #15] - 800349e: 2b00 cmp r3, #0 - 80034a0: d126 bne.n 80034f0 + 8003554: 7bfb ldrb r3, [r7, #15] + 8003556: 2b00 cmp r3, #0 + 8003558: d126 bne.n 80035a8 res = move_window(dp->fs, dp->sect); - 80034a2: 687b ldr r3, [r7, #4] - 80034a4: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 80034a8: 687b ldr r3, [r7, #4] - 80034aa: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 80034ae: 4619 mov r1, r3 - 80034b0: 4610 mov r0, r2 - 80034b2: f7ff fa30 bl 8002916 - 80034b6: 4603 mov r3, r0 - 80034b8: 73fb strb r3, [r7, #15] + 800355a: 687b ldr r3, [r7, #4] + 800355c: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 8003560: 687b ldr r3, [r7, #4] + 8003562: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8003566: 4619 mov r1, r3 + 8003568: 4610 mov r0, r2 + 800356a: f7ff fa30 bl 80029ce + 800356e: 4603 mov r3, r0 + 8003570: 73fb strb r3, [r7, #15] if (res == FR_OK) { - 80034ba: 7bfb ldrb r3, [r7, #15] - 80034bc: 2b00 cmp r3, #0 - 80034be: d117 bne.n 80034f0 + 8003572: 7bfb ldrb r3, [r7, #15] + 8003574: 2b00 cmp r3, #0 + 8003576: d117 bne.n 80035a8 mem_set(dp->dir, 0, SZ_DIRE); /* Clean the entry */ - 80034c0: 687b ldr r3, [r7, #4] - 80034c2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80034c6: 2220 movs r2, #32 - 80034c8: 2100 movs r1, #0 - 80034ca: 4618 mov r0, r3 - 80034cc: f7ff f810 bl 80024f0 + 8003578: 687b ldr r3, [r7, #4] + 800357a: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 800357e: 2220 movs r2, #32 + 8003580: 2100 movs r1, #0 + 8003582: 4618 mov r0, r3 + 8003584: f7ff f810 bl 80025a8 mem_cpy(dp->dir, dp->fn, 11); /* Put SFN */ - 80034d0: 687b ldr r3, [r7, #4] - 80034d2: f8d3 0214 ldr.w r0, [r3, #532] ; 0x214 - 80034d6: 687b ldr r3, [r7, #4] - 80034d8: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 80034dc: 220b movs r2, #11 - 80034de: 4619 mov r1, r3 - 80034e0: f7fe ffe8 bl 80024b4 + 8003588: 687b ldr r3, [r7, #4] + 800358a: f8d3 0214 ldr.w r0, [r3, #532] ; 0x214 + 800358e: 687b ldr r3, [r7, #4] + 8003590: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 8003594: 220b movs r2, #11 + 8003596: 4619 mov r1, r3 + 8003598: f7fe ffe8 bl 800256c #if _USE_LFN dp->dir[DIR_NTres] = dp->fn[NSFLAG] & (NS_BODY | NS_EXT); /* Put NT flag */ #endif dp->fs->wflag = 1; - 80034e4: 687b ldr r3, [r7, #4] - 80034e6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80034ea: 2201 movs r2, #1 - 80034ec: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 800359c: 687b ldr r3, [r7, #4] + 800359e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80035a2: 2201 movs r2, #1 + 80035a4: f883 2204 strb.w r2, [r3, #516] ; 0x204 } } return res; - 80034f0: 7bfb ldrb r3, [r7, #15] + 80035a8: 7bfb ldrb r3, [r7, #15] } - 80034f2: 4618 mov r0, r3 - 80034f4: 3710 adds r7, #16 - 80034f6: 46bd mov sp, r7 - 80034f8: bd80 pop {r7, pc} + 80035aa: 4618 mov r0, r3 + 80035ac: 3710 adds r7, #16 + 80035ae: 46bd mov sp, r7 + 80035b0: bd80 pop {r7, pc} ... -080034fc : +080035b4 : static FRESULT create_name ( DIR* dp, /* Pointer to the directory object */ const TCHAR** path /* Pointer to pointer to the segment in the path string */ ) { - 80034fc: b580 push {r7, lr} - 80034fe: b088 sub sp, #32 - 8003500: af00 add r7, sp, #0 - 8003502: 6078 str r0, [r7, #4] - 8003504: 6039 str r1, [r7, #0] + 80035b4: b580 push {r7, lr} + 80035b6: b088 sub sp, #32 + 80035b8: af00 add r7, sp, #0 + 80035ba: 6078 str r0, [r7, #4] + 80035bc: 6039 str r1, [r7, #0] BYTE b, c, d, *sfn; UINT ni, si, i; const char *p; /* Create file name in directory form */ for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ - 8003506: 683b ldr r3, [r7, #0] - 8003508: 681b ldr r3, [r3, #0] - 800350a: 60fb str r3, [r7, #12] - 800350c: e002 b.n 8003514 - 800350e: 68fb ldr r3, [r7, #12] - 8003510: 3301 adds r3, #1 - 8003512: 60fb str r3, [r7, #12] - 8003514: 68fb ldr r3, [r7, #12] - 8003516: 781b ldrb r3, [r3, #0] - 8003518: 2b2f cmp r3, #47 ; 0x2f - 800351a: d0f8 beq.n 800350e - 800351c: 68fb ldr r3, [r7, #12] - 800351e: 781b ldrb r3, [r3, #0] - 8003520: 2b5c cmp r3, #92 ; 0x5c - 8003522: d0f4 beq.n 800350e + 80035be: 683b ldr r3, [r7, #0] + 80035c0: 681b ldr r3, [r3, #0] + 80035c2: 60fb str r3, [r7, #12] + 80035c4: e002 b.n 80035cc + 80035c6: 68fb ldr r3, [r7, #12] + 80035c8: 3301 adds r3, #1 + 80035ca: 60fb str r3, [r7, #12] + 80035cc: 68fb ldr r3, [r7, #12] + 80035ce: 781b ldrb r3, [r3, #0] + 80035d0: 2b2f cmp r3, #47 ; 0x2f + 80035d2: d0f8 beq.n 80035c6 + 80035d4: 68fb ldr r3, [r7, #12] + 80035d6: 781b ldrb r3, [r3, #0] + 80035d8: 2b5c cmp r3, #92 ; 0x5c + 80035da: d0f4 beq.n 80035c6 sfn = dp->fn; - 8003524: 687b ldr r3, [r7, #4] - 8003526: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 800352a: 60bb str r3, [r7, #8] + 80035dc: 687b ldr r3, [r7, #4] + 80035de: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 80035e2: 60bb str r3, [r7, #8] mem_set(sfn, ' ', 11); - 800352c: 220b movs r2, #11 - 800352e: 2120 movs r1, #32 - 8003530: 68b8 ldr r0, [r7, #8] - 8003532: f7fe ffdd bl 80024f0 + 80035e4: 220b movs r2, #11 + 80035e6: 2120 movs r1, #32 + 80035e8: 68b8 ldr r0, [r7, #8] + 80035ea: f7fe ffdd bl 80025a8 si = i = b = 0; ni = 8; - 8003536: 2300 movs r3, #0 - 8003538: 77fb strb r3, [r7, #31] - 800353a: 2300 movs r3, #0 - 800353c: 613b str r3, [r7, #16] - 800353e: 693b ldr r3, [r7, #16] - 8003540: 617b str r3, [r7, #20] - 8003542: 2308 movs r3, #8 - 8003544: 61bb str r3, [r7, #24] + 80035ee: 2300 movs r3, #0 + 80035f0: 77fb strb r3, [r7, #31] + 80035f2: 2300 movs r3, #0 + 80035f4: 613b str r3, [r7, #16] + 80035f6: 693b ldr r3, [r7, #16] + 80035f8: 617b str r3, [r7, #20] + 80035fa: 2308 movs r3, #8 + 80035fc: 61bb str r3, [r7, #24] sfn[NSFLAG] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ return FR_OK; } #endif for (;;) { c = (BYTE)p[si++]; - 8003546: 697b ldr r3, [r7, #20] - 8003548: 1c5a adds r2, r3, #1 - 800354a: 617a str r2, [r7, #20] - 800354c: 68fa ldr r2, [r7, #12] - 800354e: 4413 add r3, r2 - 8003550: 781b ldrb r3, [r3, #0] - 8003552: 77bb strb r3, [r7, #30] + 80035fe: 697b ldr r3, [r7, #20] + 8003600: 1c5a adds r2, r3, #1 + 8003602: 617a str r2, [r7, #20] + 8003604: 68fa ldr r2, [r7, #12] + 8003606: 4413 add r3, r2 + 8003608: 781b ldrb r3, [r3, #0] + 800360a: 77bb strb r3, [r7, #30] if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */ - 8003554: 7fbb ldrb r3, [r7, #30] - 8003556: 2b20 cmp r3, #32 - 8003558: d953 bls.n 8003602 - 800355a: 7fbb ldrb r3, [r7, #30] - 800355c: 2b2f cmp r3, #47 ; 0x2f - 800355e: d050 beq.n 8003602 - 8003560: 7fbb ldrb r3, [r7, #30] - 8003562: 2b5c cmp r3, #92 ; 0x5c - 8003564: d04d beq.n 8003602 + 800360c: 7fbb ldrb r3, [r7, #30] + 800360e: 2b20 cmp r3, #32 + 8003610: d953 bls.n 80036ba + 8003612: 7fbb ldrb r3, [r7, #30] + 8003614: 2b2f cmp r3, #47 ; 0x2f + 8003616: d050 beq.n 80036ba + 8003618: 7fbb ldrb r3, [r7, #30] + 800361a: 2b5c cmp r3, #92 ; 0x5c + 800361c: d04d beq.n 80036ba if (c == '.' || i >= ni) { - 8003566: 7fbb ldrb r3, [r7, #30] - 8003568: 2b2e cmp r3, #46 ; 0x2e - 800356a: d003 beq.n 8003574 - 800356c: 693a ldr r2, [r7, #16] - 800356e: 69bb ldr r3, [r7, #24] - 8003570: 429a cmp r2, r3 - 8003572: d30f bcc.n 8003594 + 800361e: 7fbb ldrb r3, [r7, #30] + 8003620: 2b2e cmp r3, #46 ; 0x2e + 8003622: d003 beq.n 800362c + 8003624: 693a ldr r2, [r7, #16] + 8003626: 69bb ldr r3, [r7, #24] + 8003628: 429a cmp r2, r3 + 800362a: d30f bcc.n 800364c if (ni != 8 || c != '.') return FR_INVALID_NAME; - 8003574: 69bb ldr r3, [r7, #24] - 8003576: 2b08 cmp r3, #8 - 8003578: d102 bne.n 8003580 - 800357a: 7fbb ldrb r3, [r7, #30] - 800357c: 2b2e cmp r3, #46 ; 0x2e - 800357e: d001 beq.n 8003584 - 8003580: 2306 movs r3, #6 - 8003582: e073 b.n 800366c + 800362c: 69bb ldr r3, [r7, #24] + 800362e: 2b08 cmp r3, #8 + 8003630: d102 bne.n 8003638 + 8003632: 7fbb ldrb r3, [r7, #30] + 8003634: 2b2e cmp r3, #46 ; 0x2e + 8003636: d001 beq.n 800363c + 8003638: 2306 movs r3, #6 + 800363a: e073 b.n 8003724 i = 8; ni = 11; - 8003584: 2308 movs r3, #8 - 8003586: 613b str r3, [r7, #16] - 8003588: 230b movs r3, #11 - 800358a: 61bb str r3, [r7, #24] + 800363c: 2308 movs r3, #8 + 800363e: 613b str r3, [r7, #16] + 8003640: 230b movs r3, #11 + 8003642: 61bb str r3, [r7, #24] b <<= 2; continue; - 800358c: 7ffb ldrb r3, [r7, #31] - 800358e: 009b lsls r3, r3, #2 - 8003590: 77fb strb r3, [r7, #31] - 8003592: e035 b.n 8003600 + 8003644: 7ffb ldrb r3, [r7, #31] + 8003646: 009b lsls r3, r3, #2 + 8003648: 77fb strb r3, [r7, #31] + 800364a: e035 b.n 80036b8 } if (c >= 0x80) { /* Extended character? */ - 8003594: f997 301e ldrsb.w r3, [r7, #30] - 8003598: 2b00 cmp r3, #0 - 800359a: da08 bge.n 80035ae + 800364c: f997 301e ldrsb.w r3, [r7, #30] + 8003650: 2b00 cmp r3, #0 + 8003652: da08 bge.n 8003666 b |= 3; /* Eliminate NT flag */ - 800359c: 7ffb ldrb r3, [r7, #31] - 800359e: f043 0303 orr.w r3, r3, #3 - 80035a2: 77fb strb r3, [r7, #31] + 8003654: 7ffb ldrb r3, [r7, #31] + 8003656: f043 0303 orr.w r3, r3, #3 + 800365a: 77fb strb r3, [r7, #31] #ifdef _EXCVT c = ExCvt[c - 0x80]; /* To upper extended characters (SBCS cfg) */ - 80035a4: 7fbb ldrb r3, [r7, #30] - 80035a6: 3b80 subs r3, #128 ; 0x80 - 80035a8: 4a32 ldr r2, [pc, #200] ; (8003674 ) - 80035aa: 5cd3 ldrb r3, [r2, r3] - 80035ac: 77bb strb r3, [r7, #30] + 800365c: 7fbb ldrb r3, [r7, #30] + 800365e: 3b80 subs r3, #128 ; 0x80 + 8003660: 4a32 ldr r2, [pc, #200] ; (800372c ) + 8003662: 5cd3 ldrb r3, [r2, r3] + 8003664: 77bb strb r3, [r7, #30] if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ return FR_INVALID_NAME; sfn[i++] = c; sfn[i++] = d; } else { /* SBC */ if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ - 80035ae: 7fbb ldrb r3, [r7, #30] - 80035b0: 4619 mov r1, r3 - 80035b2: 4831 ldr r0, [pc, #196] ; (8003678 ) - 80035b4: f7fe ffdc bl 8002570 - 80035b8: 4603 mov r3, r0 - 80035ba: 2b00 cmp r3, #0 - 80035bc: d001 beq.n 80035c2 + 8003666: 7fbb ldrb r3, [r7, #30] + 8003668: 4619 mov r1, r3 + 800366a: 4831 ldr r0, [pc, #196] ; (8003730 ) + 800366c: f7fe ffdc bl 8002628 + 8003670: 4603 mov r3, r0 + 8003672: 2b00 cmp r3, #0 + 8003674: d001 beq.n 800367a return FR_INVALID_NAME; - 80035be: 2306 movs r3, #6 - 80035c0: e054 b.n 800366c + 8003676: 2306 movs r3, #6 + 8003678: e054 b.n 8003724 if (IsUpper(c)) { /* ASCII large capital? */ - 80035c2: 7fbb ldrb r3, [r7, #30] - 80035c4: 2b40 cmp r3, #64 ; 0x40 - 80035c6: d907 bls.n 80035d8 - 80035c8: 7fbb ldrb r3, [r7, #30] - 80035ca: 2b5a cmp r3, #90 ; 0x5a - 80035cc: d804 bhi.n 80035d8 + 800367a: 7fbb ldrb r3, [r7, #30] + 800367c: 2b40 cmp r3, #64 ; 0x40 + 800367e: d907 bls.n 8003690 + 8003680: 7fbb ldrb r3, [r7, #30] + 8003682: 2b5a cmp r3, #90 ; 0x5a + 8003684: d804 bhi.n 8003690 b |= 2; - 80035ce: 7ffb ldrb r3, [r7, #31] - 80035d0: f043 0302 orr.w r3, r3, #2 - 80035d4: 77fb strb r3, [r7, #31] - 80035d6: e00c b.n 80035f2 + 8003686: 7ffb ldrb r3, [r7, #31] + 8003688: f043 0302 orr.w r3, r3, #2 + 800368c: 77fb strb r3, [r7, #31] + 800368e: e00c b.n 80036aa } else { if (IsLower(c)) { /* ASCII small capital? */ - 80035d8: 7fbb ldrb r3, [r7, #30] - 80035da: 2b60 cmp r3, #96 ; 0x60 - 80035dc: d909 bls.n 80035f2 - 80035de: 7fbb ldrb r3, [r7, #30] - 80035e0: 2b7a cmp r3, #122 ; 0x7a - 80035e2: d806 bhi.n 80035f2 + 8003690: 7fbb ldrb r3, [r7, #30] + 8003692: 2b60 cmp r3, #96 ; 0x60 + 8003694: d909 bls.n 80036aa + 8003696: 7fbb ldrb r3, [r7, #30] + 8003698: 2b7a cmp r3, #122 ; 0x7a + 800369a: d806 bhi.n 80036aa b |= 1; c -= 0x20; - 80035e4: 7ffb ldrb r3, [r7, #31] - 80035e6: f043 0301 orr.w r3, r3, #1 - 80035ea: 77fb strb r3, [r7, #31] - 80035ec: 7fbb ldrb r3, [r7, #30] - 80035ee: 3b20 subs r3, #32 - 80035f0: 77bb strb r3, [r7, #30] + 800369c: 7ffb ldrb r3, [r7, #31] + 800369e: f043 0301 orr.w r3, r3, #1 + 80036a2: 77fb strb r3, [r7, #31] + 80036a4: 7fbb ldrb r3, [r7, #30] + 80036a6: 3b20 subs r3, #32 + 80036a8: 77bb strb r3, [r7, #30] } } sfn[i++] = c; - 80035f2: 693b ldr r3, [r7, #16] - 80035f4: 1c5a adds r2, r3, #1 - 80035f6: 613a str r2, [r7, #16] - 80035f8: 68ba ldr r2, [r7, #8] - 80035fa: 4413 add r3, r2 - 80035fc: 7fba ldrb r2, [r7, #30] - 80035fe: 701a strb r2, [r3, #0] + 80036aa: 693b ldr r3, [r7, #16] + 80036ac: 1c5a adds r2, r3, #1 + 80036ae: 613a str r2, [r7, #16] + 80036b0: 68ba ldr r2, [r7, #8] + 80036b2: 4413 add r3, r2 + 80036b4: 7fba ldrb r2, [r7, #30] + 80036b6: 701a strb r2, [r3, #0] c = (BYTE)p[si++]; - 8003600: e7a1 b.n 8003546 + 80036b8: e7a1 b.n 80035fe } } *path = &p[si]; /* Return pointer to the next segment */ - 8003602: 68fa ldr r2, [r7, #12] - 8003604: 697b ldr r3, [r7, #20] - 8003606: 441a add r2, r3 - 8003608: 683b ldr r3, [r7, #0] - 800360a: 601a str r2, [r3, #0] + 80036ba: 68fa ldr r2, [r7, #12] + 80036bc: 697b ldr r3, [r7, #20] + 80036be: 441a add r2, r3 + 80036c0: 683b ldr r3, [r7, #0] + 80036c2: 601a str r2, [r3, #0] c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ - 800360c: 7fbb ldrb r3, [r7, #30] - 800360e: 2b20 cmp r3, #32 - 8003610: d801 bhi.n 8003616 - 8003612: 2304 movs r3, #4 - 8003614: e000 b.n 8003618 - 8003616: 2300 movs r3, #0 - 8003618: 77bb strb r3, [r7, #30] + 80036c4: 7fbb ldrb r3, [r7, #30] + 80036c6: 2b20 cmp r3, #32 + 80036c8: d801 bhi.n 80036ce + 80036ca: 2304 movs r3, #4 + 80036cc: e000 b.n 80036d0 + 80036ce: 2300 movs r3, #0 + 80036d0: 77bb strb r3, [r7, #30] if (!i) return FR_INVALID_NAME; /* Reject nul string */ - 800361a: 693b ldr r3, [r7, #16] - 800361c: 2b00 cmp r3, #0 - 800361e: d101 bne.n 8003624 - 8003620: 2306 movs r3, #6 - 8003622: e023 b.n 800366c + 80036d2: 693b ldr r3, [r7, #16] + 80036d4: 2b00 cmp r3, #0 + 80036d6: d101 bne.n 80036dc + 80036d8: 2306 movs r3, #6 + 80036da: e023 b.n 8003724 if (sfn[0] == DDEM) sfn[0] = RDDEM; /* When first character collides with DDEM, replace it with RDDEM */ - 8003624: 68bb ldr r3, [r7, #8] - 8003626: 781b ldrb r3, [r3, #0] - 8003628: 2be5 cmp r3, #229 ; 0xe5 - 800362a: d102 bne.n 8003632 - 800362c: 68bb ldr r3, [r7, #8] - 800362e: 2205 movs r2, #5 - 8003630: 701a strb r2, [r3, #0] + 80036dc: 68bb ldr r3, [r7, #8] + 80036de: 781b ldrb r3, [r3, #0] + 80036e0: 2be5 cmp r3, #229 ; 0xe5 + 80036e2: d102 bne.n 80036ea + 80036e4: 68bb ldr r3, [r7, #8] + 80036e6: 2205 movs r2, #5 + 80036e8: 701a strb r2, [r3, #0] if (ni == 8) b <<= 2; - 8003632: 69bb ldr r3, [r7, #24] - 8003634: 2b08 cmp r3, #8 - 8003636: d102 bne.n 800363e - 8003638: 7ffb ldrb r3, [r7, #31] - 800363a: 009b lsls r3, r3, #2 - 800363c: 77fb strb r3, [r7, #31] + 80036ea: 69bb ldr r3, [r7, #24] + 80036ec: 2b08 cmp r3, #8 + 80036ee: d102 bne.n 80036f6 + 80036f0: 7ffb ldrb r3, [r7, #31] + 80036f2: 009b lsls r3, r3, #2 + 80036f4: 77fb strb r3, [r7, #31] if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */ - 800363e: 7ffb ldrb r3, [r7, #31] - 8003640: f003 0303 and.w r3, r3, #3 - 8003644: 2b01 cmp r3, #1 - 8003646: d103 bne.n 8003650 - 8003648: 7fbb ldrb r3, [r7, #30] - 800364a: f043 0310 orr.w r3, r3, #16 - 800364e: 77bb strb r3, [r7, #30] + 80036f6: 7ffb ldrb r3, [r7, #31] + 80036f8: f003 0303 and.w r3, r3, #3 + 80036fc: 2b01 cmp r3, #1 + 80036fe: d103 bne.n 8003708 + 8003700: 7fbb ldrb r3, [r7, #30] + 8003702: f043 0310 orr.w r3, r3, #16 + 8003706: 77bb strb r3, [r7, #30] if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */ - 8003650: 7ffb ldrb r3, [r7, #31] - 8003652: f003 030c and.w r3, r3, #12 - 8003656: 2b04 cmp r3, #4 - 8003658: d103 bne.n 8003662 - 800365a: 7fbb ldrb r3, [r7, #30] - 800365c: f043 0308 orr.w r3, r3, #8 - 8003660: 77bb strb r3, [r7, #30] + 8003708: 7ffb ldrb r3, [r7, #31] + 800370a: f003 030c and.w r3, r3, #12 + 800370e: 2b04 cmp r3, #4 + 8003710: d103 bne.n 800371a + 8003712: 7fbb ldrb r3, [r7, #30] + 8003714: f043 0308 orr.w r3, r3, #8 + 8003718: 77bb strb r3, [r7, #30] sfn[NSFLAG] = c; /* Store NT flag, File name is created */ - 8003662: 68bb ldr r3, [r7, #8] - 8003664: 330b adds r3, #11 - 8003666: 7fba ldrb r2, [r7, #30] - 8003668: 701a strb r2, [r3, #0] + 800371a: 68bb ldr r3, [r7, #8] + 800371c: 330b adds r3, #11 + 800371e: 7fba ldrb r2, [r7, #30] + 8003720: 701a strb r2, [r3, #0] return FR_OK; - 800366a: 2300 movs r3, #0 + 8003722: 2300 movs r3, #0 #endif } - 800366c: 4618 mov r0, r3 - 800366e: 3720 adds r7, #32 - 8003670: 46bd mov sp, r7 - 8003672: bd80 pop {r7, pc} - 8003674: 08005fc8 .word 0x08005fc8 - 8003678: 08005f5c .word 0x08005f5c + 8003724: 4618 mov r0, r3 + 8003726: 3720 adds r7, #32 + 8003728: 46bd mov sp, r7 + 800372a: bd80 pop {r7, pc} + 800372c: 08006a78 .word 0x08006a78 + 8003730: 08006a08 .word 0x08006a08 -0800367c : +08003734 : static FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ DIR* dp, /* Directory object to return last directory and found object */ const TCHAR* path /* Full-path string to find a file or directory */ ) { - 800367c: b580 push {r7, lr} - 800367e: b084 sub sp, #16 - 8003680: af00 add r7, sp, #0 - 8003682: 6078 str r0, [r7, #4] - 8003684: 6039 str r1, [r7, #0] + 8003734: b580 push {r7, lr} + 8003736: b084 sub sp, #16 + 8003738: af00 add r7, sp, #0 + 800373a: 6078 str r0, [r7, #4] + 800373c: 6039 str r1, [r7, #0] path++; dp->sclust = 0; /* Strip it and start from the root directory */ } else { /* No heading separator */ dp->sclust = dp->fs->cdir; /* Start from the current directory */ } #else if (*path == '/' || *path == '\\') /* Strip heading separator if exist */ - 8003686: 683b ldr r3, [r7, #0] - 8003688: 781b ldrb r3, [r3, #0] - 800368a: 2b2f cmp r3, #47 ; 0x2f - 800368c: d003 beq.n 8003696 - 800368e: 683b ldr r3, [r7, #0] - 8003690: 781b ldrb r3, [r3, #0] - 8003692: 2b5c cmp r3, #92 ; 0x5c - 8003694: d102 bne.n 800369c + 800373e: 683b ldr r3, [r7, #0] + 8003740: 781b ldrb r3, [r3, #0] + 8003742: 2b2f cmp r3, #47 ; 0x2f + 8003744: d003 beq.n 800374e + 8003746: 683b ldr r3, [r7, #0] + 8003748: 781b ldrb r3, [r3, #0] + 800374a: 2b5c cmp r3, #92 ; 0x5c + 800374c: d102 bne.n 8003754 path++; - 8003696: 683b ldr r3, [r7, #0] - 8003698: 3301 adds r3, #1 - 800369a: 603b str r3, [r7, #0] + 800374e: 683b ldr r3, [r7, #0] + 8003750: 3301 adds r3, #1 + 8003752: 603b str r3, [r7, #0] dp->sclust = 0; /* Always start from the root directory */ - 800369c: 687b ldr r3, [r7, #4] - 800369e: 2200 movs r2, #0 - 80036a0: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + 8003754: 687b ldr r3, [r7, #4] + 8003756: 2200 movs r2, #0 + 8003758: f8c3 2208 str.w r2, [r3, #520] ; 0x208 #endif if ((UINT)*path < ' ') { /* Null path name is the origin directory itself */ - 80036a4: 683b ldr r3, [r7, #0] - 80036a6: 781b ldrb r3, [r3, #0] - 80036a8: 2b1f cmp r3, #31 - 80036aa: d80a bhi.n 80036c2 + 800375c: 683b ldr r3, [r7, #0] + 800375e: 781b ldrb r3, [r3, #0] + 8003760: 2b1f cmp r3, #31 + 8003762: d80a bhi.n 800377a res = dir_sdi(dp, 0); - 80036ac: 2100 movs r1, #0 - 80036ae: 6878 ldr r0, [r7, #4] - 80036b0: f7ff fc73 bl 8002f9a - 80036b4: 4603 mov r3, r0 - 80036b6: 73fb strb r3, [r7, #15] + 8003764: 2100 movs r1, #0 + 8003766: 6878 ldr r0, [r7, #4] + 8003768: f7ff fc73 bl 8003052 + 800376c: 4603 mov r3, r0 + 800376e: 73fb strb r3, [r7, #15] dp->dir = 0; - 80036b8: 687b ldr r3, [r7, #4] - 80036ba: 2200 movs r2, #0 - 80036bc: f8c3 2214 str.w r2, [r3, #532] ; 0x214 - 80036c0: e045 b.n 800374e + 8003770: 687b ldr r3, [r7, #4] + 8003772: 2200 movs r2, #0 + 8003774: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 8003778: e045 b.n 8003806 } else { /* Follow path */ for (;;) { res = create_name(dp, &path); /* Get a segment name of the path */ - 80036c2: 463b mov r3, r7 - 80036c4: 4619 mov r1, r3 - 80036c6: 6878 ldr r0, [r7, #4] - 80036c8: f7ff ff18 bl 80034fc - 80036cc: 4603 mov r3, r0 - 80036ce: 73fb strb r3, [r7, #15] + 800377a: 463b mov r3, r7 + 800377c: 4619 mov r1, r3 + 800377e: 6878 ldr r0, [r7, #4] + 8003780: f7ff ff18 bl 80035b4 + 8003784: 4603 mov r3, r0 + 8003786: 73fb strb r3, [r7, #15] if (res != FR_OK) break; - 80036d0: 7bfb ldrb r3, [r7, #15] - 80036d2: 2b00 cmp r3, #0 - 80036d4: d136 bne.n 8003744 + 8003788: 7bfb ldrb r3, [r7, #15] + 800378a: 2b00 cmp r3, #0 + 800378c: d136 bne.n 80037fc res = dir_find(dp); /* Find an object with the sagment name */ - 80036d6: 6878 ldr r0, [r7, #4] - 80036d8: f7ff fe87 bl 80033ea - 80036dc: 4603 mov r3, r0 - 80036de: 73fb strb r3, [r7, #15] + 800378e: 6878 ldr r0, [r7, #4] + 8003790: f7ff fe87 bl 80034a2 + 8003794: 4603 mov r3, r0 + 8003796: 73fb strb r3, [r7, #15] ns = dp->fn[NSFLAG]; - 80036e0: 687b ldr r3, [r7, #4] - 80036e2: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 80036e6: 7adb ldrb r3, [r3, #11] - 80036e8: 73bb strb r3, [r7, #14] + 8003798: 687b ldr r3, [r7, #4] + 800379a: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 800379e: 7adb ldrb r3, [r3, #11] + 80037a0: 73bb strb r3, [r7, #14] if (res != FR_OK) { /* Failed to find the object */ - 80036ea: 7bfb ldrb r3, [r7, #15] - 80036ec: 2b00 cmp r3, #0 - 80036ee: d00a beq.n 8003706 + 80037a2: 7bfb ldrb r3, [r7, #15] + 80037a4: 2b00 cmp r3, #0 + 80037a6: d00a beq.n 80037be if (res == FR_NO_FILE) { /* Object is not found */ - 80036f0: 7bfb ldrb r3, [r7, #15] - 80036f2: 2b04 cmp r3, #4 - 80036f4: d128 bne.n 8003748 + 80037a8: 7bfb ldrb r3, [r7, #15] + 80037aa: 2b04 cmp r3, #4 + 80037ac: d128 bne.n 8003800 if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, */ dp->sclust = 0; dp->dir = 0; /* it is the root directory and stay there */ if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */ res = FR_OK; /* Ended at the root directroy. Function completed. */ } else { /* Could not find the object */ if (!(ns & NS_LAST)) res = FR_NO_PATH; /* Adjust error code if not last segment */ - 80036f6: 7bbb ldrb r3, [r7, #14] - 80036f8: f003 0304 and.w r3, r3, #4 - 80036fc: 2b00 cmp r3, #0 - 80036fe: d123 bne.n 8003748 - 8003700: 2305 movs r3, #5 - 8003702: 73fb strb r3, [r7, #15] + 80037ae: 7bbb ldrb r3, [r7, #14] + 80037b0: f003 0304 and.w r3, r3, #4 + 80037b4: 2b00 cmp r3, #0 + 80037b6: d123 bne.n 8003800 + 80037b8: 2305 movs r3, #5 + 80037ba: 73fb strb r3, [r7, #15] } } break; - 8003704: e020 b.n 8003748 + 80037bc: e020 b.n 8003800 } if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ - 8003706: 7bbb ldrb r3, [r7, #14] - 8003708: f003 0304 and.w r3, r3, #4 - 800370c: 2b00 cmp r3, #0 - 800370e: d11d bne.n 800374c + 80037be: 7bbb ldrb r3, [r7, #14] + 80037c0: f003 0304 and.w r3, r3, #4 + 80037c4: 2b00 cmp r3, #0 + 80037c6: d11d bne.n 8003804 dir = dp->dir; /* Follow the sub-directory */ - 8003710: 687b ldr r3, [r7, #4] - 8003712: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003716: 60bb str r3, [r7, #8] + 80037c8: 687b ldr r3, [r7, #4] + 80037ca: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80037ce: 60bb str r3, [r7, #8] if (!(dir[DIR_Attr] & AM_DIR)) { /* It is not a sub-directory and cannot follow */ - 8003718: 68bb ldr r3, [r7, #8] - 800371a: 330b adds r3, #11 - 800371c: 781b ldrb r3, [r3, #0] - 800371e: f003 0310 and.w r3, r3, #16 - 8003722: 2b00 cmp r3, #0 - 8003724: d102 bne.n 800372c + 80037d0: 68bb ldr r3, [r7, #8] + 80037d2: 330b adds r3, #11 + 80037d4: 781b ldrb r3, [r3, #0] + 80037d6: f003 0310 and.w r3, r3, #16 + 80037da: 2b00 cmp r3, #0 + 80037dc: d102 bne.n 80037e4 res = FR_NO_PATH; break; - 8003726: 2305 movs r3, #5 - 8003728: 73fb strb r3, [r7, #15] - 800372a: e010 b.n 800374e + 80037de: 2305 movs r3, #5 + 80037e0: 73fb strb r3, [r7, #15] + 80037e2: e010 b.n 8003806 } dp->sclust = ld_clust(dp->fs, dir); - 800372c: 687b ldr r3, [r7, #4] - 800372e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003732: 68b9 ldr r1, [r7, #8] - 8003734: 4618 mov r0, r3 - 8003736: f7ff fe05 bl 8003344 - 800373a: 4602 mov r2, r0 - 800373c: 687b ldr r3, [r7, #4] - 800373e: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + 80037e4: 687b ldr r3, [r7, #4] + 80037e6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80037ea: 68b9 ldr r1, [r7, #8] + 80037ec: 4618 mov r0, r3 + 80037ee: f7ff fe05 bl 80033fc + 80037f2: 4602 mov r2, r0 + 80037f4: 687b ldr r3, [r7, #4] + 80037f6: f8c3 2208 str.w r2, [r3, #520] ; 0x208 res = create_name(dp, &path); /* Get a segment name of the path */ - 8003742: e7be b.n 80036c2 + 80037fa: e7be b.n 800377a if (res != FR_OK) break; - 8003744: bf00 nop - 8003746: e002 b.n 800374e + 80037fc: bf00 nop + 80037fe: e002 b.n 8003806 break; - 8003748: bf00 nop - 800374a: e000 b.n 800374e + 8003800: bf00 nop + 8003802: e000 b.n 8003806 if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ - 800374c: bf00 nop + 8003804: bf00 nop } } return res; - 800374e: 7bfb ldrb r3, [r7, #15] + 8003806: 7bfb ldrb r3, [r7, #15] } - 8003750: 4618 mov r0, r3 - 8003752: 3710 adds r7, #16 - 8003754: 46bd mov sp, r7 - 8003756: bd80 pop {r7, pc} + 8003808: 4618 mov r0, r3 + 800380a: 3710 adds r7, #16 + 800380c: 46bd mov sp, r7 + 800380e: bd80 pop {r7, pc} -08003758 : +08003810 : static int get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */ const TCHAR** path /* Pointer to pointer to the path name */ ) { - 8003758: b480 push {r7} - 800375a: b087 sub sp, #28 - 800375c: af00 add r7, sp, #0 - 800375e: 6078 str r0, [r7, #4] + 8003810: b480 push {r7} + 8003812: b087 sub sp, #28 + 8003814: af00 add r7, sp, #0 + 8003816: 6078 str r0, [r7, #4] const TCHAR *tp, *tt; UINT i; int vol = -1; - 8003760: f04f 33ff mov.w r3, #4294967295 - 8003764: 613b str r3, [r7, #16] + 8003818: f04f 33ff mov.w r3, #4294967295 + 800381c: 613b str r3, [r7, #16] char c; TCHAR tc; #endif if (*path) { /* If the pointer is not a null */ - 8003766: 687b ldr r3, [r7, #4] - 8003768: 681b ldr r3, [r3, #0] - 800376a: 2b00 cmp r3, #0 - 800376c: d031 beq.n 80037d2 + 800381e: 687b ldr r3, [r7, #4] + 8003820: 681b ldr r3, [r3, #0] + 8003822: 2b00 cmp r3, #0 + 8003824: d031 beq.n 800388a for (tt = *path; (UINT)*tt >= (_USE_LFN ? ' ' : '!') && *tt != ':'; tt++) ; /* Find ':' in the path */ - 800376e: 687b ldr r3, [r7, #4] - 8003770: 681b ldr r3, [r3, #0] - 8003772: 617b str r3, [r7, #20] - 8003774: e002 b.n 800377c - 8003776: 697b ldr r3, [r7, #20] - 8003778: 3301 adds r3, #1 - 800377a: 617b str r3, [r7, #20] - 800377c: 697b ldr r3, [r7, #20] - 800377e: 781b ldrb r3, [r3, #0] - 8003780: 2b20 cmp r3, #32 - 8003782: d903 bls.n 800378c - 8003784: 697b ldr r3, [r7, #20] - 8003786: 781b ldrb r3, [r3, #0] - 8003788: 2b3a cmp r3, #58 ; 0x3a - 800378a: d1f4 bne.n 8003776 + 8003826: 687b ldr r3, [r7, #4] + 8003828: 681b ldr r3, [r3, #0] + 800382a: 617b str r3, [r7, #20] + 800382c: e002 b.n 8003834 + 800382e: 697b ldr r3, [r7, #20] + 8003830: 3301 adds r3, #1 + 8003832: 617b str r3, [r7, #20] + 8003834: 697b ldr r3, [r7, #20] + 8003836: 781b ldrb r3, [r3, #0] + 8003838: 2b20 cmp r3, #32 + 800383a: d903 bls.n 8003844 + 800383c: 697b ldr r3, [r7, #20] + 800383e: 781b ldrb r3, [r3, #0] + 8003840: 2b3a cmp r3, #58 ; 0x3a + 8003842: d1f4 bne.n 800382e if (*tt == ':') { /* If a ':' is exist in the path name */ - 800378c: 697b ldr r3, [r7, #20] - 800378e: 781b ldrb r3, [r3, #0] - 8003790: 2b3a cmp r3, #58 ; 0x3a - 8003792: d11c bne.n 80037ce + 8003844: 697b ldr r3, [r7, #20] + 8003846: 781b ldrb r3, [r3, #0] + 8003848: 2b3a cmp r3, #58 ; 0x3a + 800384a: d11c bne.n 8003886 tp = *path; - 8003794: 687b ldr r3, [r7, #4] - 8003796: 681b ldr r3, [r3, #0] - 8003798: 60fb str r3, [r7, #12] + 800384c: 687b ldr r3, [r7, #4] + 800384e: 681b ldr r3, [r3, #0] + 8003850: 60fb str r3, [r7, #12] i = *tp++ - '0'; - 800379a: 68fb ldr r3, [r7, #12] - 800379c: 1c5a adds r2, r3, #1 - 800379e: 60fa str r2, [r7, #12] - 80037a0: 781b ldrb r3, [r3, #0] - 80037a2: 3b30 subs r3, #48 ; 0x30 - 80037a4: 60bb str r3, [r7, #8] + 8003852: 68fb ldr r3, [r7, #12] + 8003854: 1c5a adds r2, r3, #1 + 8003856: 60fa str r2, [r7, #12] + 8003858: 781b ldrb r3, [r3, #0] + 800385a: 3b30 subs r3, #48 ; 0x30 + 800385c: 60bb str r3, [r7, #8] if (i < 10 && tp == tt) { /* Is there a numeric drive id? */ - 80037a6: 68bb ldr r3, [r7, #8] - 80037a8: 2b09 cmp r3, #9 - 80037aa: d80e bhi.n 80037ca - 80037ac: 68fa ldr r2, [r7, #12] - 80037ae: 697b ldr r3, [r7, #20] - 80037b0: 429a cmp r2, r3 - 80037b2: d10a bne.n 80037ca + 800385e: 68bb ldr r3, [r7, #8] + 8003860: 2b09 cmp r3, #9 + 8003862: d80e bhi.n 8003882 + 8003864: 68fa ldr r2, [r7, #12] + 8003866: 697b ldr r3, [r7, #20] + 8003868: 429a cmp r2, r3 + 800386a: d10a bne.n 8003882 if (i < _VOLUMES) { /* If a drive id is found, get the value and strip it */ - 80037b4: 68bb ldr r3, [r7, #8] - 80037b6: 2b00 cmp r3, #0 - 80037b8: d107 bne.n 80037ca + 800386c: 68bb ldr r3, [r7, #8] + 800386e: 2b00 cmp r3, #0 + 8003870: d107 bne.n 8003882 vol = (int)i; - 80037ba: 68bb ldr r3, [r7, #8] - 80037bc: 613b str r3, [r7, #16] + 8003872: 68bb ldr r3, [r7, #8] + 8003874: 613b str r3, [r7, #16] *path = ++tt; - 80037be: 697b ldr r3, [r7, #20] - 80037c0: 3301 adds r3, #1 - 80037c2: 617b str r3, [r7, #20] - 80037c4: 687b ldr r3, [r7, #4] - 80037c6: 697a ldr r2, [r7, #20] - 80037c8: 601a str r2, [r3, #0] + 8003876: 697b ldr r3, [r7, #20] + 8003878: 3301 adds r3, #1 + 800387a: 617b str r3, [r7, #20] + 800387c: 687b ldr r3, [r7, #4] + 800387e: 697a ldr r2, [r7, #20] + 8003880: 601a str r2, [r3, #0] vol = (int)i; *path = tt; } } #endif return vol; - 80037ca: 693b ldr r3, [r7, #16] - 80037cc: e002 b.n 80037d4 + 8003882: 693b ldr r3, [r7, #16] + 8003884: e002 b.n 800388c } #if _FS_RPATH && _VOLUMES >= 2 vol = CurrVol; /* Current drive */ #else vol = 0; /* Drive 0 */ - 80037ce: 2300 movs r3, #0 - 80037d0: 613b str r3, [r7, #16] + 8003886: 2300 movs r3, #0 + 8003888: 613b str r3, [r7, #16] #endif } return vol; - 80037d2: 693b ldr r3, [r7, #16] + 800388a: 693b ldr r3, [r7, #16] } - 80037d4: 4618 mov r0, r3 - 80037d6: 371c adds r7, #28 - 80037d8: 46bd mov sp, r7 - 80037da: bc80 pop {r7} - 80037dc: 4770 bx lr + 800388c: 4618 mov r0, r3 + 800388e: 371c adds r7, #28 + 8003890: 46bd mov sp, r7 + 8003892: bc80 pop {r7} + 8003894: 4770 bx lr ... -080037e0 : +08003898 : static BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3:Disk error */ FATFS* fs, /* File system object */ DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ ) { - 80037e0: b580 push {r7, lr} - 80037e2: b082 sub sp, #8 - 80037e4: af00 add r7, sp, #0 - 80037e6: 6078 str r0, [r7, #4] - 80037e8: 6039 str r1, [r7, #0] + 8003898: b580 push {r7, lr} + 800389a: b082 sub sp, #8 + 800389c: af00 add r7, sp, #0 + 800389e: 6078 str r0, [r7, #4] + 80038a0: 6039 str r1, [r7, #0] fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */ - 80037ea: 687b ldr r3, [r7, #4] - 80037ec: 2200 movs r2, #0 - 80037ee: f883 2204 strb.w r2, [r3, #516] ; 0x204 - 80037f2: 687b ldr r3, [r7, #4] - 80037f4: f04f 32ff mov.w r2, #4294967295 - 80037f8: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 80038a2: 687b ldr r3, [r7, #4] + 80038a4: 2200 movs r2, #0 + 80038a6: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 80038aa: 687b ldr r3, [r7, #4] + 80038ac: f04f 32ff mov.w r2, #4294967295 + 80038b0: f8c3 222c str.w r2, [r3, #556] ; 0x22c if (move_window(fs, sect) != FR_OK) /* Load boot record */ - 80037fc: 6839 ldr r1, [r7, #0] - 80037fe: 6878 ldr r0, [r7, #4] - 8003800: f7ff f889 bl 8002916 - 8003804: 4603 mov r3, r0 - 8003806: 2b00 cmp r3, #0 - 8003808: d001 beq.n 800380e + 80038b4: 6839 ldr r1, [r7, #0] + 80038b6: 6878 ldr r0, [r7, #4] + 80038b8: f7ff f889 bl 80029ce + 80038bc: 4603 mov r3, r0 + 80038be: 2b00 cmp r3, #0 + 80038c0: d001 beq.n 80038c6 return 3; - 800380a: 2303 movs r3, #3 - 800380c: e04a b.n 80038a4 + 80038c2: 2303 movs r3, #3 + 80038c4: e04a b.n 800395c if (LD_WORD(&fs->win.d8[BS_55AA]) != 0xAA55) /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */ - 800380e: 687b ldr r3, [r7, #4] - 8003810: f503 73ff add.w r3, r3, #510 ; 0x1fe - 8003814: 3301 adds r3, #1 - 8003816: 781b ldrb r3, [r3, #0] - 8003818: 021b lsls r3, r3, #8 - 800381a: b21a sxth r2, r3 - 800381c: 687b ldr r3, [r7, #4] - 800381e: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe - 8003822: b21b sxth r3, r3 - 8003824: 4313 orrs r3, r2 - 8003826: b21b sxth r3, r3 - 8003828: 4a20 ldr r2, [pc, #128] ; (80038ac ) - 800382a: 4293 cmp r3, r2 - 800382c: d001 beq.n 8003832 + 80038c6: 687b ldr r3, [r7, #4] + 80038c8: f503 73ff add.w r3, r3, #510 ; 0x1fe + 80038cc: 3301 adds r3, #1 + 80038ce: 781b ldrb r3, [r3, #0] + 80038d0: 021b lsls r3, r3, #8 + 80038d2: b21a sxth r2, r3 + 80038d4: 687b ldr r3, [r7, #4] + 80038d6: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe + 80038da: b21b sxth r3, r3 + 80038dc: 4313 orrs r3, r2 + 80038de: b21b sxth r3, r3 + 80038e0: 4a20 ldr r2, [pc, #128] ; (8003964 ) + 80038e2: 4293 cmp r3, r2 + 80038e4: d001 beq.n 80038ea return 2; - 800382e: 2302 movs r3, #2 - 8003830: e038 b.n 80038a4 + 80038e6: 2302 movs r3, #2 + 80038e8: e038 b.n 800395c if ((LD_DWORD(&fs->win.d8[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - 8003832: 687b ldr r3, [r7, #4] - 8003834: 3336 adds r3, #54 ; 0x36 - 8003836: 3303 adds r3, #3 - 8003838: 781b ldrb r3, [r3, #0] - 800383a: 061a lsls r2, r3, #24 - 800383c: 687b ldr r3, [r7, #4] - 800383e: 3336 adds r3, #54 ; 0x36 - 8003840: 3302 adds r3, #2 - 8003842: 781b ldrb r3, [r3, #0] - 8003844: 041b lsls r3, r3, #16 - 8003846: 4313 orrs r3, r2 - 8003848: 687a ldr r2, [r7, #4] - 800384a: 3236 adds r2, #54 ; 0x36 - 800384c: 3201 adds r2, #1 - 800384e: 7812 ldrb r2, [r2, #0] - 8003850: 0212 lsls r2, r2, #8 - 8003852: 4313 orrs r3, r2 - 8003854: 687a ldr r2, [r7, #4] - 8003856: f892 2036 ldrb.w r2, [r2, #54] ; 0x36 - 800385a: 4313 orrs r3, r2 - 800385c: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 - 8003860: 4a13 ldr r2, [pc, #76] ; (80038b0 ) - 8003862: 4293 cmp r3, r2 - 8003864: d101 bne.n 800386a + 80038ea: 687b ldr r3, [r7, #4] + 80038ec: 3336 adds r3, #54 ; 0x36 + 80038ee: 3303 adds r3, #3 + 80038f0: 781b ldrb r3, [r3, #0] + 80038f2: 061a lsls r2, r3, #24 + 80038f4: 687b ldr r3, [r7, #4] + 80038f6: 3336 adds r3, #54 ; 0x36 + 80038f8: 3302 adds r3, #2 + 80038fa: 781b ldrb r3, [r3, #0] + 80038fc: 041b lsls r3, r3, #16 + 80038fe: 4313 orrs r3, r2 + 8003900: 687a ldr r2, [r7, #4] + 8003902: 3236 adds r2, #54 ; 0x36 + 8003904: 3201 adds r2, #1 + 8003906: 7812 ldrb r2, [r2, #0] + 8003908: 0212 lsls r2, r2, #8 + 800390a: 4313 orrs r3, r2 + 800390c: 687a ldr r2, [r7, #4] + 800390e: f892 2036 ldrb.w r2, [r2, #54] ; 0x36 + 8003912: 4313 orrs r3, r2 + 8003914: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 + 8003918: 4a13 ldr r2, [pc, #76] ; (8003968 ) + 800391a: 4293 cmp r3, r2 + 800391c: d101 bne.n 8003922 return 0; - 8003866: 2300 movs r3, #0 - 8003868: e01c b.n 80038a4 + 800391e: 2300 movs r3, #0 + 8003920: e01c b.n 800395c if ((LD_DWORD(&fs->win.d8[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - 800386a: 687b ldr r3, [r7, #4] - 800386c: 3352 adds r3, #82 ; 0x52 - 800386e: 3303 adds r3, #3 - 8003870: 781b ldrb r3, [r3, #0] - 8003872: 061a lsls r2, r3, #24 - 8003874: 687b ldr r3, [r7, #4] - 8003876: 3352 adds r3, #82 ; 0x52 - 8003878: 3302 adds r3, #2 - 800387a: 781b ldrb r3, [r3, #0] - 800387c: 041b lsls r3, r3, #16 - 800387e: 4313 orrs r3, r2 - 8003880: 687a ldr r2, [r7, #4] - 8003882: 3252 adds r2, #82 ; 0x52 - 8003884: 3201 adds r2, #1 - 8003886: 7812 ldrb r2, [r2, #0] - 8003888: 0212 lsls r2, r2, #8 - 800388a: 4313 orrs r3, r2 - 800388c: 687a ldr r2, [r7, #4] - 800388e: f892 2052 ldrb.w r2, [r2, #82] ; 0x52 - 8003892: 4313 orrs r3, r2 - 8003894: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 - 8003898: 4a05 ldr r2, [pc, #20] ; (80038b0 ) - 800389a: 4293 cmp r3, r2 - 800389c: d101 bne.n 80038a2 + 8003922: 687b ldr r3, [r7, #4] + 8003924: 3352 adds r3, #82 ; 0x52 + 8003926: 3303 adds r3, #3 + 8003928: 781b ldrb r3, [r3, #0] + 800392a: 061a lsls r2, r3, #24 + 800392c: 687b ldr r3, [r7, #4] + 800392e: 3352 adds r3, #82 ; 0x52 + 8003930: 3302 adds r3, #2 + 8003932: 781b ldrb r3, [r3, #0] + 8003934: 041b lsls r3, r3, #16 + 8003936: 4313 orrs r3, r2 + 8003938: 687a ldr r2, [r7, #4] + 800393a: 3252 adds r2, #82 ; 0x52 + 800393c: 3201 adds r2, #1 + 800393e: 7812 ldrb r2, [r2, #0] + 8003940: 0212 lsls r2, r2, #8 + 8003942: 4313 orrs r3, r2 + 8003944: 687a ldr r2, [r7, #4] + 8003946: f892 2052 ldrb.w r2, [r2, #82] ; 0x52 + 800394a: 4313 orrs r3, r2 + 800394c: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 + 8003950: 4a05 ldr r2, [pc, #20] ; (8003968 ) + 8003952: 4293 cmp r3, r2 + 8003954: d101 bne.n 800395a return 0; - 800389e: 2300 movs r3, #0 - 80038a0: e000 b.n 80038a4 + 8003956: 2300 movs r3, #0 + 8003958: e000 b.n 800395c return 1; - 80038a2: 2301 movs r3, #1 + 800395a: 2301 movs r3, #1 } - 80038a4: 4618 mov r0, r3 - 80038a6: 3708 adds r7, #8 - 80038a8: 46bd mov sp, r7 - 80038aa: bd80 pop {r7, pc} - 80038ac: ffffaa55 .word 0xffffaa55 - 80038b0: 00544146 .word 0x00544146 + 800395c: 4618 mov r0, r3 + 800395e: 3708 adds r7, #8 + 8003960: 46bd mov sp, r7 + 8003962: bd80 pop {r7, pc} + 8003964: ffffaa55 .word 0xffffaa55 + 8003968: 00544146 .word 0x00544146 -080038b4 : +0800396c : FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ FATFS** rfs, /* Pointer to pointer to the found file system object */ const TCHAR** path, /* Pointer to pointer to the path name (drive number) */ BYTE wmode /* !=0: Check write protection for write access */ ) { - 80038b4: b580 push {r7, lr} - 80038b6: b096 sub sp, #88 ; 0x58 - 80038b8: af00 add r7, sp, #0 - 80038ba: 60f8 str r0, [r7, #12] - 80038bc: 60b9 str r1, [r7, #8] - 80038be: 4613 mov r3, r2 - 80038c0: 71fb strb r3, [r7, #7] + 800396c: b580 push {r7, lr} + 800396e: b096 sub sp, #88 ; 0x58 + 8003970: af00 add r7, sp, #0 + 8003972: 60f8 str r0, [r7, #12] + 8003974: 60b9 str r1, [r7, #8] + 8003976: 4613 mov r3, r2 + 8003978: 71fb strb r3, [r7, #7] FATFS *fs; UINT i; /* Get logical drive number from the path name */ *rfs = 0; - 80038c2: 68fb ldr r3, [r7, #12] - 80038c4: 2200 movs r2, #0 - 80038c6: 601a str r2, [r3, #0] + 800397a: 68fb ldr r3, [r7, #12] + 800397c: 2200 movs r2, #0 + 800397e: 601a str r2, [r3, #0] vol = get_ldnumber(path); - 80038c8: 68b8 ldr r0, [r7, #8] - 80038ca: f7ff ff45 bl 8003758 - 80038ce: 63f8 str r0, [r7, #60] ; 0x3c + 8003980: 68b8 ldr r0, [r7, #8] + 8003982: f7ff ff45 bl 8003810 + 8003986: 63f8 str r0, [r7, #60] ; 0x3c if (vol < 0) return FR_INVALID_DRIVE; - 80038d0: 6bfb ldr r3, [r7, #60] ; 0x3c - 80038d2: 2b00 cmp r3, #0 - 80038d4: da01 bge.n 80038da - 80038d6: 230b movs r3, #11 - 80038d8: e2aa b.n 8003e30 + 8003988: 6bfb ldr r3, [r7, #60] ; 0x3c + 800398a: 2b00 cmp r3, #0 + 800398c: da01 bge.n 8003992 + 800398e: 230b movs r3, #11 + 8003990: e2aa b.n 8003ee8 /* Check if the file system object is valid or not */ fs = FatFs[vol]; /* Get pointer to the file system object */ - 80038da: 4a9e ldr r2, [pc, #632] ; (8003b54 ) - 80038dc: 6bfb ldr r3, [r7, #60] ; 0x3c - 80038de: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 80038e2: 63bb str r3, [r7, #56] ; 0x38 + 8003992: 4a9e ldr r2, [pc, #632] ; (8003c0c ) + 8003994: 6bfb ldr r3, [r7, #60] ; 0x3c + 8003996: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 800399a: 63bb str r3, [r7, #56] ; 0x38 if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ - 80038e4: 6bbb ldr r3, [r7, #56] ; 0x38 - 80038e6: 2b00 cmp r3, #0 - 80038e8: d101 bne.n 80038ee - 80038ea: 230c movs r3, #12 - 80038ec: e2a0 b.n 8003e30 + 800399c: 6bbb ldr r3, [r7, #56] ; 0x38 + 800399e: 2b00 cmp r3, #0 + 80039a0: d101 bne.n 80039a6 + 80039a2: 230c movs r3, #12 + 80039a4: e2a0 b.n 8003ee8 ENTER_FF(fs); /* Lock the volume */ *rfs = fs; /* Return pointer to the file system object */ - 80038ee: 68fb ldr r3, [r7, #12] - 80038f0: 6bba ldr r2, [r7, #56] ; 0x38 - 80038f2: 601a str r2, [r3, #0] + 80039a6: 68fb ldr r3, [r7, #12] + 80039a8: 6bba ldr r2, [r7, #56] ; 0x38 + 80039aa: 601a str r2, [r3, #0] if (fs->fs_type) { /* If the volume has been mounted */ - 80038f4: 6bbb ldr r3, [r7, #56] ; 0x38 - 80038f6: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 80038fa: 2b00 cmp r3, #0 - 80038fc: d01b beq.n 8003936 + 80039ac: 6bbb ldr r3, [r7, #56] ; 0x38 + 80039ae: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 80039b2: 2b00 cmp r3, #0 + 80039b4: d01b beq.n 80039ee stat = disk_status(fs->drv); - 80038fe: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003900: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 - 8003904: 4618 mov r0, r3 - 8003906: f7fe fd55 bl 80023b4 - 800390a: 4603 mov r3, r0 - 800390c: f887 3037 strb.w r3, [r7, #55] ; 0x37 + 80039b6: 6bbb ldr r3, [r7, #56] ; 0x38 + 80039b8: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 + 80039bc: 4618 mov r0, r3 + 80039be: f7fe fd55 bl 800246c + 80039c2: 4603 mov r3, r0 + 80039c4: f887 3037 strb.w r3, [r7, #55] ; 0x37 if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */ - 8003910: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 8003914: f003 0301 and.w r3, r3, #1 - 8003918: 2b00 cmp r3, #0 - 800391a: d10c bne.n 8003936 + 80039c8: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 80039cc: f003 0301 and.w r3, r3, #1 + 80039d0: 2b00 cmp r3, #0 + 80039d2: d10c bne.n 80039ee if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check write protection if needed */ - 800391c: 79fb ldrb r3, [r7, #7] - 800391e: 2b00 cmp r3, #0 - 8003920: d007 beq.n 8003932 - 8003922: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 8003926: f003 0304 and.w r3, r3, #4 - 800392a: 2b00 cmp r3, #0 - 800392c: d001 beq.n 8003932 + 80039d4: 79fb ldrb r3, [r7, #7] + 80039d6: 2b00 cmp r3, #0 + 80039d8: d007 beq.n 80039ea + 80039da: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 80039de: f003 0304 and.w r3, r3, #4 + 80039e2: 2b00 cmp r3, #0 + 80039e4: d001 beq.n 80039ea return FR_WRITE_PROTECTED; - 800392e: 230a movs r3, #10 - 8003930: e27e b.n 8003e30 + 80039e6: 230a movs r3, #10 + 80039e8: e27e b.n 8003ee8 return FR_OK; /* The file system object is valid */ - 8003932: 2300 movs r3, #0 - 8003934: e27c b.n 8003e30 + 80039ea: 2300 movs r3, #0 + 80039ec: e27c b.n 8003ee8 } /* The file system object is not valid. */ /* Following code attempts to mount the volume. (analyze BPB and initialize the fs object) */ fs->fs_type = 0; /* Clear the file system object */ - 8003936: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003938: 2200 movs r2, #0 - 800393a: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 80039ee: 6bbb ldr r3, [r7, #56] ; 0x38 + 80039f0: 2200 movs r2, #0 + 80039f2: f883 2200 strb.w r2, [r3, #512] ; 0x200 fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ - 800393e: 6bfb ldr r3, [r7, #60] ; 0x3c - 8003940: b2da uxtb r2, r3 - 8003942: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003944: f883 2201 strb.w r2, [r3, #513] ; 0x201 + 80039f6: 6bfb ldr r3, [r7, #60] ; 0x3c + 80039f8: b2da uxtb r2, r3 + 80039fa: 6bbb ldr r3, [r7, #56] ; 0x38 + 80039fc: f883 2201 strb.w r2, [r3, #513] ; 0x201 stat = disk_initialize(fs->drv); /* Initialize the physical drive */ - 8003948: 6bbb ldr r3, [r7, #56] ; 0x38 - 800394a: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 - 800394e: 4618 mov r0, r3 - 8003950: f7fe fd4a bl 80023e8 - 8003954: 4603 mov r3, r0 - 8003956: f887 3037 strb.w r3, [r7, #55] ; 0x37 + 8003a00: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003a02: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 + 8003a06: 4618 mov r0, r3 + 8003a08: f7fe fd4a bl 80024a0 + 8003a0c: 4603 mov r3, r0 + 8003a0e: f887 3037 strb.w r3, [r7, #55] ; 0x37 if (stat & STA_NOINIT) /* Check if the initialization succeeded */ - 800395a: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 800395e: f003 0301 and.w r3, r3, #1 - 8003962: 2b00 cmp r3, #0 - 8003964: d001 beq.n 800396a + 8003a12: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 8003a16: f003 0301 and.w r3, r3, #1 + 8003a1a: 2b00 cmp r3, #0 + 8003a1c: d001 beq.n 8003a22 return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ - 8003966: 2303 movs r3, #3 - 8003968: e262 b.n 8003e30 + 8003a1e: 2303 movs r3, #3 + 8003a20: e262 b.n 8003ee8 if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check disk write protection if needed */ - 800396a: 79fb ldrb r3, [r7, #7] - 800396c: 2b00 cmp r3, #0 - 800396e: d007 beq.n 8003980 - 8003970: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 8003974: f003 0304 and.w r3, r3, #4 - 8003978: 2b00 cmp r3, #0 - 800397a: d001 beq.n 8003980 + 8003a22: 79fb ldrb r3, [r7, #7] + 8003a24: 2b00 cmp r3, #0 + 8003a26: d007 beq.n 8003a38 + 8003a28: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 8003a2c: f003 0304 and.w r3, r3, #4 + 8003a30: 2b00 cmp r3, #0 + 8003a32: d001 beq.n 8003a38 return FR_WRITE_PROTECTED; - 800397c: 230a movs r3, #10 - 800397e: e257 b.n 8003e30 + 8003a34: 230a movs r3, #10 + 8003a36: e257 b.n 8003ee8 #if _MAX_SS != _MIN_SS /* Get sector size (multiple sector size cfg only) */ if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) < _MIN_SS || SS(fs) > _MAX_SS) return FR_DISK_ERR; #endif /* Find an FAT partition on the drive. Supports only generic partitioning, FDISK and SFD. */ bsect = 0; - 8003980: 2300 movs r3, #0 - 8003982: 653b str r3, [r7, #80] ; 0x50 + 8003a38: 2300 movs r3, #0 + 8003a3a: 653b str r3, [r7, #80] ; 0x50 fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */ - 8003984: 6d39 ldr r1, [r7, #80] ; 0x50 - 8003986: 6bb8 ldr r0, [r7, #56] ; 0x38 - 8003988: f7ff ff2a bl 80037e0 - 800398c: 4603 mov r3, r0 - 800398e: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003a3c: 6d39 ldr r1, [r7, #80] ; 0x50 + 8003a3e: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003a40: f7ff ff2a bl 8003898 + 8003a44: 4603 mov r3, r0 + 8003a46: f887 3057 strb.w r3, [r7, #87] ; 0x57 if (fmt == 1 || (!fmt && (LD2PT(vol)))) { /* Not an FAT boot sector or forced partition number */ - 8003992: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003996: 2b01 cmp r3, #1 - 8003998: d155 bne.n 8003a46 + 8003a4a: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003a4e: 2b01 cmp r3, #1 + 8003a50: d155 bne.n 8003afe for (i = 0; i < 4; i++) { /* Get partition offset */ - 800399a: 2300 movs r3, #0 - 800399c: 643b str r3, [r7, #64] ; 0x40 - 800399e: e029 b.n 80039f4 + 8003a52: 2300 movs r3, #0 + 8003a54: 643b str r3, [r7, #64] ; 0x40 + 8003a56: e029 b.n 8003aac pt = fs->win.d8 + MBR_Table + i * SZ_PTE; - 80039a0: 6bba ldr r2, [r7, #56] ; 0x38 - 80039a2: 6c3b ldr r3, [r7, #64] ; 0x40 - 80039a4: 011b lsls r3, r3, #4 - 80039a6: f503 73df add.w r3, r3, #446 ; 0x1be - 80039aa: 4413 add r3, r2 - 80039ac: 633b str r3, [r7, #48] ; 0x30 + 8003a58: 6bba ldr r2, [r7, #56] ; 0x38 + 8003a5a: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003a5c: 011b lsls r3, r3, #4 + 8003a5e: f503 73df add.w r3, r3, #446 ; 0x1be + 8003a62: 4413 add r3, r2 + 8003a64: 633b str r3, [r7, #48] ; 0x30 br[i] = pt[4] ? LD_DWORD(&pt[8]) : 0; - 80039ae: 6b3b ldr r3, [r7, #48] ; 0x30 - 80039b0: 3304 adds r3, #4 - 80039b2: 781b ldrb r3, [r3, #0] - 80039b4: 2b00 cmp r3, #0 - 80039b6: d012 beq.n 80039de - 80039b8: 6b3b ldr r3, [r7, #48] ; 0x30 - 80039ba: 330b adds r3, #11 - 80039bc: 781b ldrb r3, [r3, #0] - 80039be: 061a lsls r2, r3, #24 - 80039c0: 6b3b ldr r3, [r7, #48] ; 0x30 - 80039c2: 330a adds r3, #10 - 80039c4: 781b ldrb r3, [r3, #0] - 80039c6: 041b lsls r3, r3, #16 - 80039c8: 4313 orrs r3, r2 - 80039ca: 6b3a ldr r2, [r7, #48] ; 0x30 - 80039cc: 3209 adds r2, #9 - 80039ce: 7812 ldrb r2, [r2, #0] - 80039d0: 0212 lsls r2, r2, #8 - 80039d2: 4313 orrs r3, r2 - 80039d4: 6b3a ldr r2, [r7, #48] ; 0x30 - 80039d6: 3208 adds r2, #8 - 80039d8: 7812 ldrb r2, [r2, #0] - 80039da: 431a orrs r2, r3 - 80039dc: e000 b.n 80039e0 - 80039de: 2200 movs r2, #0 - 80039e0: 6c3b ldr r3, [r7, #64] ; 0x40 - 80039e2: 009b lsls r3, r3, #2 - 80039e4: f107 0158 add.w r1, r7, #88 ; 0x58 - 80039e8: 440b add r3, r1 - 80039ea: f843 2c44 str.w r2, [r3, #-68] + 8003a66: 6b3b ldr r3, [r7, #48] ; 0x30 + 8003a68: 3304 adds r3, #4 + 8003a6a: 781b ldrb r3, [r3, #0] + 8003a6c: 2b00 cmp r3, #0 + 8003a6e: d012 beq.n 8003a96 + 8003a70: 6b3b ldr r3, [r7, #48] ; 0x30 + 8003a72: 330b adds r3, #11 + 8003a74: 781b ldrb r3, [r3, #0] + 8003a76: 061a lsls r2, r3, #24 + 8003a78: 6b3b ldr r3, [r7, #48] ; 0x30 + 8003a7a: 330a adds r3, #10 + 8003a7c: 781b ldrb r3, [r3, #0] + 8003a7e: 041b lsls r3, r3, #16 + 8003a80: 4313 orrs r3, r2 + 8003a82: 6b3a ldr r2, [r7, #48] ; 0x30 + 8003a84: 3209 adds r2, #9 + 8003a86: 7812 ldrb r2, [r2, #0] + 8003a88: 0212 lsls r2, r2, #8 + 8003a8a: 4313 orrs r3, r2 + 8003a8c: 6b3a ldr r2, [r7, #48] ; 0x30 + 8003a8e: 3208 adds r2, #8 + 8003a90: 7812 ldrb r2, [r2, #0] + 8003a92: 431a orrs r2, r3 + 8003a94: e000 b.n 8003a98 + 8003a96: 2200 movs r2, #0 + 8003a98: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003a9a: 009b lsls r3, r3, #2 + 8003a9c: f107 0158 add.w r1, r7, #88 ; 0x58 + 8003aa0: 440b add r3, r1 + 8003aa2: f843 2c44 str.w r2, [r3, #-68] for (i = 0; i < 4; i++) { /* Get partition offset */ - 80039ee: 6c3b ldr r3, [r7, #64] ; 0x40 - 80039f0: 3301 adds r3, #1 - 80039f2: 643b str r3, [r7, #64] ; 0x40 - 80039f4: 6c3b ldr r3, [r7, #64] ; 0x40 - 80039f6: 2b03 cmp r3, #3 - 80039f8: d9d2 bls.n 80039a0 + 8003aa6: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003aa8: 3301 adds r3, #1 + 8003aaa: 643b str r3, [r7, #64] ; 0x40 + 8003aac: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003aae: 2b03 cmp r3, #3 + 8003ab0: d9d2 bls.n 8003a58 } i = LD2PT(vol); /* Partition number: 0:auto, 1-4:forced */ - 80039fa: 2300 movs r3, #0 - 80039fc: 643b str r3, [r7, #64] ; 0x40 + 8003ab2: 2300 movs r3, #0 + 8003ab4: 643b str r3, [r7, #64] ; 0x40 if (i) i--; - 80039fe: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a00: 2b00 cmp r3, #0 - 8003a02: d002 beq.n 8003a0a - 8003a04: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a06: 3b01 subs r3, #1 - 8003a08: 643b str r3, [r7, #64] ; 0x40 + 8003ab6: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003ab8: 2b00 cmp r3, #0 + 8003aba: d002 beq.n 8003ac2 + 8003abc: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003abe: 3b01 subs r3, #1 + 8003ac0: 643b str r3, [r7, #64] ; 0x40 do { /* Find an FAT volume */ bsect = br[i]; - 8003a0a: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a0c: 009b lsls r3, r3, #2 - 8003a0e: f107 0258 add.w r2, r7, #88 ; 0x58 - 8003a12: 4413 add r3, r2 - 8003a14: f853 3c44 ldr.w r3, [r3, #-68] - 8003a18: 653b str r3, [r7, #80] ; 0x50 + 8003ac2: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003ac4: 009b lsls r3, r3, #2 + 8003ac6: f107 0258 add.w r2, r7, #88 ; 0x58 + 8003aca: 4413 add r3, r2 + 8003acc: f853 3c44 ldr.w r3, [r3, #-68] + 8003ad0: 653b str r3, [r7, #80] ; 0x50 fmt = bsect ? check_fs(fs, bsect) : 2; /* Check the partition */ - 8003a1a: 6d3b ldr r3, [r7, #80] ; 0x50 - 8003a1c: 2b00 cmp r3, #0 - 8003a1e: d005 beq.n 8003a2c - 8003a20: 6d39 ldr r1, [r7, #80] ; 0x50 - 8003a22: 6bb8 ldr r0, [r7, #56] ; 0x38 - 8003a24: f7ff fedc bl 80037e0 - 8003a28: 4603 mov r3, r0 - 8003a2a: e000 b.n 8003a2e - 8003a2c: 2302 movs r3, #2 - 8003a2e: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003ad2: 6d3b ldr r3, [r7, #80] ; 0x50 + 8003ad4: 2b00 cmp r3, #0 + 8003ad6: d005 beq.n 8003ae4 + 8003ad8: 6d39 ldr r1, [r7, #80] ; 0x50 + 8003ada: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003adc: f7ff fedc bl 8003898 + 8003ae0: 4603 mov r3, r0 + 8003ae2: e000 b.n 8003ae6 + 8003ae4: 2302 movs r3, #2 + 8003ae6: f887 3057 strb.w r3, [r7, #87] ; 0x57 } while (!LD2PT(vol) && fmt && ++i < 4); - 8003a32: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003a36: 2b00 cmp r3, #0 - 8003a38: d005 beq.n 8003a46 - 8003a3a: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a3c: 3301 adds r3, #1 - 8003a3e: 643b str r3, [r7, #64] ; 0x40 - 8003a40: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a42: 2b03 cmp r3, #3 - 8003a44: d9e1 bls.n 8003a0a + 8003aea: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003aee: 2b00 cmp r3, #0 + 8003af0: d005 beq.n 8003afe + 8003af2: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003af4: 3301 adds r3, #1 + 8003af6: 643b str r3, [r7, #64] ; 0x40 + 8003af8: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003afa: 2b03 cmp r3, #3 + 8003afc: d9e1 bls.n 8003ac2 } if (fmt == 3) return FR_DISK_ERR; /* An error occured in the disk I/O layer */ - 8003a46: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003a4a: 2b03 cmp r3, #3 - 8003a4c: d101 bne.n 8003a52 - 8003a4e: 2301 movs r3, #1 - 8003a50: e1ee b.n 8003e30 + 8003afe: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003b02: 2b03 cmp r3, #3 + 8003b04: d101 bne.n 8003b0a + 8003b06: 2301 movs r3, #1 + 8003b08: e1ee b.n 8003ee8 if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ - 8003a52: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003a56: 2b00 cmp r3, #0 - 8003a58: d001 beq.n 8003a5e - 8003a5a: 230d movs r3, #13 - 8003a5c: e1e8 b.n 8003e30 + 8003b0a: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003b0e: 2b00 cmp r3, #0 + 8003b10: d001 beq.n 8003b16 + 8003b12: 230d movs r3, #13 + 8003b14: e1e8 b.n 8003ee8 /* An FAT volume is found. Following code initializes the file system object */ if (LD_WORD(fs->win.d8 + BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ - 8003a5e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003a60: 7b1b ldrb r3, [r3, #12] - 8003a62: 021b lsls r3, r3, #8 - 8003a64: b21a sxth r2, r3 - 8003a66: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003a68: 7adb ldrb r3, [r3, #11] - 8003a6a: b21b sxth r3, r3 - 8003a6c: 4313 orrs r3, r2 - 8003a6e: b21b sxth r3, r3 - 8003a70: f5b3 7f00 cmp.w r3, #512 ; 0x200 - 8003a74: d001 beq.n 8003a7a + 8003b16: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b18: 7b1b ldrb r3, [r3, #12] + 8003b1a: 021b lsls r3, r3, #8 + 8003b1c: b21a sxth r2, r3 + 8003b1e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b20: 7adb ldrb r3, [r3, #11] + 8003b22: b21b sxth r3, r3 + 8003b24: 4313 orrs r3, r2 + 8003b26: b21b sxth r3, r3 + 8003b28: f5b3 7f00 cmp.w r3, #512 ; 0x200 + 8003b2c: d001 beq.n 8003b32 return FR_NO_FILESYSTEM; - 8003a76: 230d movs r3, #13 - 8003a78: e1da b.n 8003e30 + 8003b2e: 230d movs r3, #13 + 8003b30: e1da b.n 8003ee8 fasize = LD_WORD(fs->win.d8 + BPB_FATSz16); /* Number of sectors per FAT */ - 8003a7a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003a7c: 7ddb ldrb r3, [r3, #23] - 8003a7e: 021b lsls r3, r3, #8 - 8003a80: b21a sxth r2, r3 - 8003a82: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003a84: 7d9b ldrb r3, [r3, #22] - 8003a86: b21b sxth r3, r3 - 8003a88: 4313 orrs r3, r2 - 8003a8a: b21b sxth r3, r3 - 8003a8c: b29b uxth r3, r3 - 8003a8e: 64fb str r3, [r7, #76] ; 0x4c + 8003b32: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b34: 7ddb ldrb r3, [r3, #23] + 8003b36: 021b lsls r3, r3, #8 + 8003b38: b21a sxth r2, r3 + 8003b3a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b3c: 7d9b ldrb r3, [r3, #22] + 8003b3e: b21b sxth r3, r3 + 8003b40: 4313 orrs r3, r2 + 8003b42: b21b sxth r3, r3 + 8003b44: b29b uxth r3, r3 + 8003b46: 64fb str r3, [r7, #76] ; 0x4c if (!fasize) fasize = LD_DWORD(fs->win.d8 + BPB_FATSz32); - 8003a90: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003a92: 2b00 cmp r3, #0 - 8003a94: d112 bne.n 8003abc - 8003a96: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003a98: f893 3027 ldrb.w r3, [r3, #39] ; 0x27 - 8003a9c: 061a lsls r2, r3, #24 - 8003a9e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003aa0: f893 3026 ldrb.w r3, [r3, #38] ; 0x26 - 8003aa4: 041b lsls r3, r3, #16 - 8003aa6: 4313 orrs r3, r2 - 8003aa8: 6bba ldr r2, [r7, #56] ; 0x38 - 8003aaa: f892 2025 ldrb.w r2, [r2, #37] ; 0x25 - 8003aae: 0212 lsls r2, r2, #8 - 8003ab0: 4313 orrs r3, r2 - 8003ab2: 6bba ldr r2, [r7, #56] ; 0x38 - 8003ab4: f892 2024 ldrb.w r2, [r2, #36] ; 0x24 - 8003ab8: 4313 orrs r3, r2 - 8003aba: 64fb str r3, [r7, #76] ; 0x4c + 8003b48: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003b4a: 2b00 cmp r3, #0 + 8003b4c: d112 bne.n 8003b74 + 8003b4e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b50: f893 3027 ldrb.w r3, [r3, #39] ; 0x27 + 8003b54: 061a lsls r2, r3, #24 + 8003b56: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b58: f893 3026 ldrb.w r3, [r3, #38] ; 0x26 + 8003b5c: 041b lsls r3, r3, #16 + 8003b5e: 4313 orrs r3, r2 + 8003b60: 6bba ldr r2, [r7, #56] ; 0x38 + 8003b62: f892 2025 ldrb.w r2, [r2, #37] ; 0x25 + 8003b66: 0212 lsls r2, r2, #8 + 8003b68: 4313 orrs r3, r2 + 8003b6a: 6bba ldr r2, [r7, #56] ; 0x38 + 8003b6c: f892 2024 ldrb.w r2, [r2, #36] ; 0x24 + 8003b70: 4313 orrs r3, r2 + 8003b72: 64fb str r3, [r7, #76] ; 0x4c fs->fsize = fasize; - 8003abc: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003abe: 6cfa ldr r2, [r7, #76] ; 0x4c - 8003ac0: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 8003b74: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b76: 6cfa ldr r2, [r7, #76] ; 0x4c + 8003b78: f8c3 2218 str.w r2, [r3, #536] ; 0x218 fs->n_fats = fs->win.d8[BPB_NumFATs]; /* Number of FAT copies */ - 8003ac4: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ac6: 7c1a ldrb r2, [r3, #16] - 8003ac8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003aca: f883 2203 strb.w r2, [r3, #515] ; 0x203 + 8003b7c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b7e: 7c1a ldrb r2, [r3, #16] + 8003b80: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b82: f883 2203 strb.w r2, [r3, #515] ; 0x203 if (fs->n_fats != 1 && fs->n_fats != 2) /* (Must be 1 or 2) */ - 8003ace: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ad0: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 8003ad4: 2b01 cmp r3, #1 - 8003ad6: d006 beq.n 8003ae6 - 8003ad8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ada: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 8003ade: 2b02 cmp r3, #2 - 8003ae0: d001 beq.n 8003ae6 + 8003b86: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b88: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 8003b8c: 2b01 cmp r3, #1 + 8003b8e: d006 beq.n 8003b9e + 8003b90: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b92: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 8003b96: 2b02 cmp r3, #2 + 8003b98: d001 beq.n 8003b9e return FR_NO_FILESYSTEM; - 8003ae2: 230d movs r3, #13 - 8003ae4: e1a4 b.n 8003e30 + 8003b9a: 230d movs r3, #13 + 8003b9c: e1a4 b.n 8003ee8 fasize *= fs->n_fats; /* Number of sectors for FAT area */ - 8003ae6: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ae8: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 8003aec: 461a mov r2, r3 - 8003aee: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003af0: fb02 f303 mul.w r3, r2, r3 - 8003af4: 64fb str r3, [r7, #76] ; 0x4c + 8003b9e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ba0: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 8003ba4: 461a mov r2, r3 + 8003ba6: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003ba8: fb02 f303 mul.w r3, r2, r3 + 8003bac: 64fb str r3, [r7, #76] ; 0x4c fs->csize = fs->win.d8[BPB_SecPerClus]; /* Number of sectors per cluster */ - 8003af6: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003af8: 7b5a ldrb r2, [r3, #13] - 8003afa: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003afc: f883 2202 strb.w r2, [r3, #514] ; 0x202 + 8003bae: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bb0: 7b5a ldrb r2, [r3, #13] + 8003bb2: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bb4: f883 2202 strb.w r2, [r3, #514] ; 0x202 if (!fs->csize || (fs->csize & (fs->csize - 1))) /* (Must be power of 2) */ - 8003b00: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b02: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003b06: 2b00 cmp r3, #0 - 8003b08: d00a beq.n 8003b20 - 8003b0a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b0c: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003b10: 461a mov r2, r3 - 8003b12: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b14: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003b18: 3b01 subs r3, #1 - 8003b1a: 4013 ands r3, r2 - 8003b1c: 2b00 cmp r3, #0 - 8003b1e: d001 beq.n 8003b24 + 8003bb8: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bba: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003bbe: 2b00 cmp r3, #0 + 8003bc0: d00a beq.n 8003bd8 + 8003bc2: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bc4: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003bc8: 461a mov r2, r3 + 8003bca: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bcc: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003bd0: 3b01 subs r3, #1 + 8003bd2: 4013 ands r3, r2 + 8003bd4: 2b00 cmp r3, #0 + 8003bd6: d001 beq.n 8003bdc return FR_NO_FILESYSTEM; - 8003b20: 230d movs r3, #13 - 8003b22: e185 b.n 8003e30 + 8003bd8: 230d movs r3, #13 + 8003bda: e185 b.n 8003ee8 fs->n_rootdir = LD_WORD(fs->win.d8 + BPB_RootEntCnt); /* Number of root directory entries */ - 8003b24: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b26: 7c9b ldrb r3, [r3, #18] - 8003b28: 021b lsls r3, r3, #8 - 8003b2a: b21a sxth r2, r3 - 8003b2c: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b2e: 7c5b ldrb r3, [r3, #17] - 8003b30: b21b sxth r3, r3 - 8003b32: 4313 orrs r3, r2 - 8003b34: b21b sxth r3, r3 - 8003b36: b29a uxth r2, r3 - 8003b38: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b3a: f8a3 2208 strh.w r2, [r3, #520] ; 0x208 + 8003bdc: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bde: 7c9b ldrb r3, [r3, #18] + 8003be0: 021b lsls r3, r3, #8 + 8003be2: b21a sxth r2, r3 + 8003be4: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003be6: 7c5b ldrb r3, [r3, #17] + 8003be8: b21b sxth r3, r3 + 8003bea: 4313 orrs r3, r2 + 8003bec: b21b sxth r3, r3 + 8003bee: b29a uxth r2, r3 + 8003bf0: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bf2: f8a3 2208 strh.w r2, [r3, #520] ; 0x208 if (fs->n_rootdir % (SS(fs) / SZ_DIRE)) /* (Must be sector aligned) */ - 8003b3e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b40: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003b44: f003 030f and.w r3, r3, #15 - 8003b48: b29b uxth r3, r3 - 8003b4a: 2b00 cmp r3, #0 - 8003b4c: d004 beq.n 8003b58 + 8003bf6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003bf8: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 8003bfc: f003 030f and.w r3, r3, #15 + 8003c00: b29b uxth r3, r3 + 8003c02: 2b00 cmp r3, #0 + 8003c04: d004 beq.n 8003c10 return FR_NO_FILESYSTEM; - 8003b4e: 230d movs r3, #13 - 8003b50: e16e b.n 8003e30 - 8003b52: bf00 nop - 8003b54: 20000044 .word 0x20000044 + 8003c06: 230d movs r3, #13 + 8003c08: e16e b.n 8003ee8 + 8003c0a: bf00 nop + 8003c0c: 200000ac .word 0x200000ac tsect = LD_WORD(fs->win.d8 + BPB_TotSec16); /* Number of sectors on the volume */ - 8003b58: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b5a: 7d1b ldrb r3, [r3, #20] - 8003b5c: 021b lsls r3, r3, #8 - 8003b5e: b21a sxth r2, r3 - 8003b60: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b62: 7cdb ldrb r3, [r3, #19] - 8003b64: b21b sxth r3, r3 - 8003b66: 4313 orrs r3, r2 - 8003b68: b21b sxth r3, r3 - 8003b6a: b29b uxth r3, r3 - 8003b6c: 64bb str r3, [r7, #72] ; 0x48 + 8003c10: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c12: 7d1b ldrb r3, [r3, #20] + 8003c14: 021b lsls r3, r3, #8 + 8003c16: b21a sxth r2, r3 + 8003c18: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c1a: 7cdb ldrb r3, [r3, #19] + 8003c1c: b21b sxth r3, r3 + 8003c1e: 4313 orrs r3, r2 + 8003c20: b21b sxth r3, r3 + 8003c22: b29b uxth r3, r3 + 8003c24: 64bb str r3, [r7, #72] ; 0x48 if (!tsect) tsect = LD_DWORD(fs->win.d8 + BPB_TotSec32); - 8003b6e: 6cbb ldr r3, [r7, #72] ; 0x48 - 8003b70: 2b00 cmp r3, #0 - 8003b72: d112 bne.n 8003b9a - 8003b74: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b76: f893 3023 ldrb.w r3, [r3, #35] ; 0x23 - 8003b7a: 061a lsls r2, r3, #24 - 8003b7c: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b7e: f893 3022 ldrb.w r3, [r3, #34] ; 0x22 - 8003b82: 041b lsls r3, r3, #16 - 8003b84: 4313 orrs r3, r2 - 8003b86: 6bba ldr r2, [r7, #56] ; 0x38 - 8003b88: f892 2021 ldrb.w r2, [r2, #33] ; 0x21 - 8003b8c: 0212 lsls r2, r2, #8 - 8003b8e: 4313 orrs r3, r2 - 8003b90: 6bba ldr r2, [r7, #56] ; 0x38 - 8003b92: f892 2020 ldrb.w r2, [r2, #32] - 8003b96: 4313 orrs r3, r2 - 8003b98: 64bb str r3, [r7, #72] ; 0x48 + 8003c26: 6cbb ldr r3, [r7, #72] ; 0x48 + 8003c28: 2b00 cmp r3, #0 + 8003c2a: d112 bne.n 8003c52 + 8003c2c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c2e: f893 3023 ldrb.w r3, [r3, #35] ; 0x23 + 8003c32: 061a lsls r2, r3, #24 + 8003c34: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c36: f893 3022 ldrb.w r3, [r3, #34] ; 0x22 + 8003c3a: 041b lsls r3, r3, #16 + 8003c3c: 4313 orrs r3, r2 + 8003c3e: 6bba ldr r2, [r7, #56] ; 0x38 + 8003c40: f892 2021 ldrb.w r2, [r2, #33] ; 0x21 + 8003c44: 0212 lsls r2, r2, #8 + 8003c46: 4313 orrs r3, r2 + 8003c48: 6bba ldr r2, [r7, #56] ; 0x38 + 8003c4a: f892 2020 ldrb.w r2, [r2, #32] + 8003c4e: 4313 orrs r3, r2 + 8003c50: 64bb str r3, [r7, #72] ; 0x48 nrsv = LD_WORD(fs->win.d8 + BPB_RsvdSecCnt); /* Number of reserved sectors */ - 8003b9a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b9c: 7bdb ldrb r3, [r3, #15] - 8003b9e: 021b lsls r3, r3, #8 - 8003ba0: b21a sxth r2, r3 - 8003ba2: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ba4: 7b9b ldrb r3, [r3, #14] - 8003ba6: b21b sxth r3, r3 - 8003ba8: 4313 orrs r3, r2 - 8003baa: b21b sxth r3, r3 - 8003bac: 85fb strh r3, [r7, #46] ; 0x2e + 8003c52: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c54: 7bdb ldrb r3, [r3, #15] + 8003c56: 021b lsls r3, r3, #8 + 8003c58: b21a sxth r2, r3 + 8003c5a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c5c: 7b9b ldrb r3, [r3, #14] + 8003c5e: b21b sxth r3, r3 + 8003c60: 4313 orrs r3, r2 + 8003c62: b21b sxth r3, r3 + 8003c64: 85fb strh r3, [r7, #46] ; 0x2e if (!nrsv) return FR_NO_FILESYSTEM; /* (Must not be 0) */ - 8003bae: 8dfb ldrh r3, [r7, #46] ; 0x2e - 8003bb0: 2b00 cmp r3, #0 - 8003bb2: d101 bne.n 8003bb8 - 8003bb4: 230d movs r3, #13 - 8003bb6: e13b b.n 8003e30 + 8003c66: 8dfb ldrh r3, [r7, #46] ; 0x2e + 8003c68: 2b00 cmp r3, #0 + 8003c6a: d101 bne.n 8003c70 + 8003c6c: 230d movs r3, #13 + 8003c6e: e13b b.n 8003ee8 /* Determine the FAT sub type */ sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZ_DIRE); /* RSV + FAT + DIR */ - 8003bb8: 8dfa ldrh r2, [r7, #46] ; 0x2e - 8003bba: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003bbc: 4413 add r3, r2 - 8003bbe: 6bba ldr r2, [r7, #56] ; 0x38 - 8003bc0: f8b2 2208 ldrh.w r2, [r2, #520] ; 0x208 - 8003bc4: 0912 lsrs r2, r2, #4 - 8003bc6: b292 uxth r2, r2 - 8003bc8: 4413 add r3, r2 - 8003bca: 62bb str r3, [r7, #40] ; 0x28 + 8003c70: 8dfa ldrh r2, [r7, #46] ; 0x2e + 8003c72: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003c74: 4413 add r3, r2 + 8003c76: 6bba ldr r2, [r7, #56] ; 0x38 + 8003c78: f8b2 2208 ldrh.w r2, [r2, #520] ; 0x208 + 8003c7c: 0912 lsrs r2, r2, #4 + 8003c7e: b292 uxth r2, r2 + 8003c80: 4413 add r3, r2 + 8003c82: 62bb str r3, [r7, #40] ; 0x28 if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ - 8003bcc: 6cba ldr r2, [r7, #72] ; 0x48 - 8003bce: 6abb ldr r3, [r7, #40] ; 0x28 - 8003bd0: 429a cmp r2, r3 - 8003bd2: d201 bcs.n 8003bd8 - 8003bd4: 230d movs r3, #13 - 8003bd6: e12b b.n 8003e30 + 8003c84: 6cba ldr r2, [r7, #72] ; 0x48 + 8003c86: 6abb ldr r3, [r7, #40] ; 0x28 + 8003c88: 429a cmp r2, r3 + 8003c8a: d201 bcs.n 8003c90 + 8003c8c: 230d movs r3, #13 + 8003c8e: e12b b.n 8003ee8 nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ - 8003bd8: 6cba ldr r2, [r7, #72] ; 0x48 - 8003bda: 6abb ldr r3, [r7, #40] ; 0x28 - 8003bdc: 1ad3 subs r3, r2, r3 - 8003bde: 6bba ldr r2, [r7, #56] ; 0x38 - 8003be0: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 8003be4: fbb3 f3f2 udiv r3, r3, r2 - 8003be8: 627b str r3, [r7, #36] ; 0x24 + 8003c90: 6cba ldr r2, [r7, #72] ; 0x48 + 8003c92: 6abb ldr r3, [r7, #40] ; 0x28 + 8003c94: 1ad3 subs r3, r2, r3 + 8003c96: 6bba ldr r2, [r7, #56] ; 0x38 + 8003c98: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 8003c9c: fbb3 f3f2 udiv r3, r3, r2 + 8003ca0: 627b str r3, [r7, #36] ; 0x24 if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ - 8003bea: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003bec: 2b00 cmp r3, #0 - 8003bee: d101 bne.n 8003bf4 - 8003bf0: 230d movs r3, #13 - 8003bf2: e11d b.n 8003e30 + 8003ca2: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003ca4: 2b00 cmp r3, #0 + 8003ca6: d101 bne.n 8003cac + 8003ca8: 230d movs r3, #13 + 8003caa: e11d b.n 8003ee8 fmt = FS_FAT12; - 8003bf4: 2301 movs r3, #1 - 8003bf6: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003cac: 2301 movs r3, #1 + 8003cae: f887 3057 strb.w r3, [r7, #87] ; 0x57 if (nclst >= MIN_FAT16) fmt = FS_FAT16; - 8003bfa: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003bfc: f640 72f5 movw r2, #4085 ; 0xff5 - 8003c00: 4293 cmp r3, r2 - 8003c02: d902 bls.n 8003c0a - 8003c04: 2302 movs r3, #2 - 8003c06: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003cb2: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003cb4: f640 72f5 movw r2, #4085 ; 0xff5 + 8003cb8: 4293 cmp r3, r2 + 8003cba: d902 bls.n 8003cc2 + 8003cbc: 2302 movs r3, #2 + 8003cbe: f887 3057 strb.w r3, [r7, #87] ; 0x57 if (nclst >= MIN_FAT32) fmt = FS_FAT32; - 8003c0a: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003c0c: f64f 72f5 movw r2, #65525 ; 0xfff5 - 8003c10: 4293 cmp r3, r2 - 8003c12: d902 bls.n 8003c1a - 8003c14: 2303 movs r3, #3 - 8003c16: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003cc2: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003cc4: f64f 72f5 movw r2, #65525 ; 0xfff5 + 8003cc8: 4293 cmp r3, r2 + 8003cca: d902 bls.n 8003cd2 + 8003ccc: 2303 movs r3, #3 + 8003cce: f887 3057 strb.w r3, [r7, #87] ; 0x57 /* Boundaries and Limits */ fs->n_fatent = nclst + 2; /* Number of FAT entries */ - 8003c1a: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003c1c: 1c9a adds r2, r3, #2 - 8003c1e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c20: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 8003cd2: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003cd4: 1c9a adds r2, r3, #2 + 8003cd6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cd8: f8c3 2214 str.w r2, [r3, #532] ; 0x214 fs->volbase = bsect; /* Volume start sector */ - 8003c24: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c26: 6d3a ldr r2, [r7, #80] ; 0x50 - 8003c28: f8c3 221c str.w r2, [r3, #540] ; 0x21c + 8003cdc: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cde: 6d3a ldr r2, [r7, #80] ; 0x50 + 8003ce0: f8c3 221c str.w r2, [r3, #540] ; 0x21c fs->fatbase = bsect + nrsv; /* FAT start sector */ - 8003c2c: 8dfa ldrh r2, [r7, #46] ; 0x2e - 8003c2e: 6d3b ldr r3, [r7, #80] ; 0x50 - 8003c30: 441a add r2, r3 - 8003c32: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c34: f8c3 2220 str.w r2, [r3, #544] ; 0x220 + 8003ce4: 8dfa ldrh r2, [r7, #46] ; 0x2e + 8003ce6: 6d3b ldr r3, [r7, #80] ; 0x50 + 8003ce8: 441a add r2, r3 + 8003cea: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cec: f8c3 2220 str.w r2, [r3, #544] ; 0x220 fs->database = bsect + sysect; /* Data start sector */ - 8003c38: 6d3a ldr r2, [r7, #80] ; 0x50 - 8003c3a: 6abb ldr r3, [r7, #40] ; 0x28 - 8003c3c: 441a add r2, r3 - 8003c3e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c40: f8c3 2228 str.w r2, [r3, #552] ; 0x228 + 8003cf0: 6d3a ldr r2, [r7, #80] ; 0x50 + 8003cf2: 6abb ldr r3, [r7, #40] ; 0x28 + 8003cf4: 441a add r2, r3 + 8003cf6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cf8: f8c3 2228 str.w r2, [r3, #552] ; 0x228 if (fmt == FS_FAT32) { - 8003c44: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003c48: 2b03 cmp r3, #3 - 8003c4a: d121 bne.n 8003c90 + 8003cfc: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003d00: 2b03 cmp r3, #3 + 8003d02: d121 bne.n 8003d48 if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ - 8003c4c: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c4e: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003c52: 2b00 cmp r3, #0 - 8003c54: d001 beq.n 8003c5a - 8003c56: 230d movs r3, #13 - 8003c58: e0ea b.n 8003e30 + 8003d04: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d06: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 8003d0a: 2b00 cmp r3, #0 + 8003d0c: d001 beq.n 8003d12 + 8003d0e: 230d movs r3, #13 + 8003d10: e0ea b.n 8003ee8 fs->dirbase = LD_DWORD(fs->win.d8 + BPB_RootClus); /* Root directory start cluster */ - 8003c5a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c5c: f893 302f ldrb.w r3, [r3, #47] ; 0x2f - 8003c60: 061a lsls r2, r3, #24 - 8003c62: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c64: f893 302e ldrb.w r3, [r3, #46] ; 0x2e - 8003c68: 041b lsls r3, r3, #16 - 8003c6a: 4313 orrs r3, r2 - 8003c6c: 6bba ldr r2, [r7, #56] ; 0x38 - 8003c6e: f892 202d ldrb.w r2, [r2, #45] ; 0x2d - 8003c72: 0212 lsls r2, r2, #8 - 8003c74: 4313 orrs r3, r2 - 8003c76: 6bba ldr r2, [r7, #56] ; 0x38 - 8003c78: f892 202c ldrb.w r2, [r2, #44] ; 0x2c - 8003c7c: 431a orrs r2, r3 - 8003c7e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c80: f8c3 2224 str.w r2, [r3, #548] ; 0x224 + 8003d12: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d14: f893 302f ldrb.w r3, [r3, #47] ; 0x2f + 8003d18: 061a lsls r2, r3, #24 + 8003d1a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d1c: f893 302e ldrb.w r3, [r3, #46] ; 0x2e + 8003d20: 041b lsls r3, r3, #16 + 8003d22: 4313 orrs r3, r2 + 8003d24: 6bba ldr r2, [r7, #56] ; 0x38 + 8003d26: f892 202d ldrb.w r2, [r2, #45] ; 0x2d + 8003d2a: 0212 lsls r2, r2, #8 + 8003d2c: 4313 orrs r3, r2 + 8003d2e: 6bba ldr r2, [r7, #56] ; 0x38 + 8003d30: f892 202c ldrb.w r2, [r2, #44] ; 0x2c + 8003d34: 431a orrs r2, r3 + 8003d36: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d38: f8c3 2224 str.w r2, [r3, #548] ; 0x224 szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ - 8003c84: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c86: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003c8a: 009b lsls r3, r3, #2 - 8003c8c: 647b str r3, [r7, #68] ; 0x44 - 8003c8e: e025 b.n 8003cdc + 8003d3c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d3e: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003d42: 009b lsls r3, r3, #2 + 8003d44: 647b str r3, [r7, #68] ; 0x44 + 8003d46: e025 b.n 8003d94 } else { if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ - 8003c90: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c92: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003c96: 2b00 cmp r3, #0 - 8003c98: d101 bne.n 8003c9e - 8003c9a: 230d movs r3, #13 - 8003c9c: e0c8 b.n 8003e30 + 8003d48: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d4a: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 8003d4e: 2b00 cmp r3, #0 + 8003d50: d101 bne.n 8003d56 + 8003d52: 230d movs r3, #13 + 8003d54: e0c8 b.n 8003ee8 fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ - 8003c9e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ca0: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8003ca4: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003ca6: 441a add r2, r3 - 8003ca8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003caa: f8c3 2224 str.w r2, [r3, #548] ; 0x224 + 8003d56: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d58: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8003d5c: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003d5e: 441a add r2, r3 + 8003d60: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d62: f8c3 2224 str.w r2, [r3, #548] ; 0x224 szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); - 8003cae: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003cb2: 2b02 cmp r3, #2 - 8003cb4: d104 bne.n 8003cc0 - 8003cb6: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cb8: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003cbc: 005b lsls r3, r3, #1 - 8003cbe: e00c b.n 8003cda - 8003cc0: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cc2: f8d3 2214 ldr.w r2, [r3, #532] ; 0x214 - 8003cc6: 4613 mov r3, r2 - 8003cc8: 005b lsls r3, r3, #1 - 8003cca: 4413 add r3, r2 - 8003ccc: 085a lsrs r2, r3, #1 - 8003cce: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cd0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003cd4: f003 0301 and.w r3, r3, #1 - 8003cd8: 4413 add r3, r2 + 8003d66: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003d6a: 2b02 cmp r3, #2 + 8003d6c: d104 bne.n 8003d78 + 8003d6e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d70: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003d74: 005b lsls r3, r3, #1 + 8003d76: e00c b.n 8003d92 + 8003d78: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d7a: f8d3 2214 ldr.w r2, [r3, #532] ; 0x214 + 8003d7e: 4613 mov r3, r2 + 8003d80: 005b lsls r3, r3, #1 + 8003d82: 4413 add r3, r2 + 8003d84: 085a lsrs r2, r3, #1 + 8003d86: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d88: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003d8c: f003 0301 and.w r3, r3, #1 + 8003d90: 4413 add r3, r2 szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ - 8003cda: 647b str r3, [r7, #68] ; 0x44 + 8003d92: 647b str r3, [r7, #68] ; 0x44 } if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (BPB_FATSz must not be less than the size needed) */ - 8003cdc: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cde: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 8003ce2: 6c7b ldr r3, [r7, #68] ; 0x44 - 8003ce4: f203 13ff addw r3, r3, #511 ; 0x1ff - 8003ce8: 0a5b lsrs r3, r3, #9 - 8003cea: 429a cmp r2, r3 - 8003cec: d201 bcs.n 8003cf2 + 8003d94: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d96: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 8003d9a: 6c7b ldr r3, [r7, #68] ; 0x44 + 8003d9c: f203 13ff addw r3, r3, #511 ; 0x1ff + 8003da0: 0a5b lsrs r3, r3, #9 + 8003da2: 429a cmp r2, r3 + 8003da4: d201 bcs.n 8003daa return FR_NO_FILESYSTEM; - 8003cee: 230d movs r3, #13 - 8003cf0: e09e b.n 8003e30 + 8003da6: 230d movs r3, #13 + 8003da8: e09e b.n 8003ee8 #if !_FS_READONLY /* Initialize cluster allocation information */ fs->last_clust = fs->free_clust = 0xFFFFFFFF; - 8003cf2: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cf4: f04f 32ff mov.w r2, #4294967295 - 8003cf8: f8c3 2210 str.w r2, [r3, #528] ; 0x210 - 8003cfc: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cfe: f8d3 2210 ldr.w r2, [r3, #528] ; 0x210 - 8003d02: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d04: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8003daa: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003dac: f04f 32ff mov.w r2, #4294967295 + 8003db0: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8003db4: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003db6: f8d3 2210 ldr.w r2, [r3, #528] ; 0x210 + 8003dba: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003dbc: f8c3 220c str.w r2, [r3, #524] ; 0x20c /* Get fsinfo if available */ fs->fsi_flag = 0x80; - 8003d08: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d0a: 2280 movs r2, #128 ; 0x80 - 8003d0c: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8003dc0: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003dc2: 2280 movs r2, #128 ; 0x80 + 8003dc4: f883 2205 strb.w r2, [r3, #517] ; 0x205 #if (_FS_NOFSINFO & 3) != 3 if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */ - 8003d10: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003d14: 2b03 cmp r3, #3 - 8003d16: d177 bne.n 8003e08 + 8003dc8: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003dcc: 2b03 cmp r3, #3 + 8003dce: d177 bne.n 8003ec0 && LD_WORD(fs->win.d8 + BPB_FSInfo) == 1 - 8003d18: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d1a: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8003d1e: 021b lsls r3, r3, #8 - 8003d20: b21a sxth r2, r3 - 8003d22: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d24: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 - 8003d28: b21b sxth r3, r3 - 8003d2a: 4313 orrs r3, r2 - 8003d2c: b21b sxth r3, r3 - 8003d2e: 2b01 cmp r3, #1 - 8003d30: d16a bne.n 8003e08 + 8003dd0: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003dd2: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 + 8003dd6: 021b lsls r3, r3, #8 + 8003dd8: b21a sxth r2, r3 + 8003dda: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ddc: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 + 8003de0: b21b sxth r3, r3 + 8003de2: 4313 orrs r3, r2 + 8003de4: b21b sxth r3, r3 + 8003de6: 2b01 cmp r3, #1 + 8003de8: d16a bne.n 8003ec0 && move_window(fs, bsect + 1) == FR_OK) - 8003d32: 6d3b ldr r3, [r7, #80] ; 0x50 - 8003d34: 3301 adds r3, #1 - 8003d36: 4619 mov r1, r3 - 8003d38: 6bb8 ldr r0, [r7, #56] ; 0x38 - 8003d3a: f7fe fdec bl 8002916 - 8003d3e: 4603 mov r3, r0 - 8003d40: 2b00 cmp r3, #0 - 8003d42: d161 bne.n 8003e08 + 8003dea: 6d3b ldr r3, [r7, #80] ; 0x50 + 8003dec: 3301 adds r3, #1 + 8003dee: 4619 mov r1, r3 + 8003df0: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003df2: f7fe fdec bl 80029ce + 8003df6: 4603 mov r3, r0 + 8003df8: 2b00 cmp r3, #0 + 8003dfa: d161 bne.n 8003ec0 { fs->fsi_flag = 0; - 8003d44: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d46: 2200 movs r2, #0 - 8003d48: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8003dfc: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003dfe: 2200 movs r2, #0 + 8003e00: f883 2205 strb.w r2, [r3, #517] ; 0x205 if (LD_WORD(fs->win.d8 + BS_55AA) == 0xAA55 /* Load FSINFO data if available */ - 8003d4c: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d4e: f893 31ff ldrb.w r3, [r3, #511] ; 0x1ff - 8003d52: 021b lsls r3, r3, #8 - 8003d54: b21a sxth r2, r3 - 8003d56: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d58: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe - 8003d5c: b21b sxth r3, r3 - 8003d5e: 4313 orrs r3, r2 - 8003d60: b21b sxth r3, r3 - 8003d62: 4a35 ldr r2, [pc, #212] ; (8003e38 ) - 8003d64: 4293 cmp r3, r2 - 8003d66: d14f bne.n 8003e08 + 8003e04: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e06: f893 31ff ldrb.w r3, [r3, #511] ; 0x1ff + 8003e0a: 021b lsls r3, r3, #8 + 8003e0c: b21a sxth r2, r3 + 8003e0e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e10: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe + 8003e14: b21b sxth r3, r3 + 8003e16: 4313 orrs r3, r2 + 8003e18: b21b sxth r3, r3 + 8003e1a: 4a35 ldr r2, [pc, #212] ; (8003ef0 ) + 8003e1c: 4293 cmp r3, r2 + 8003e1e: d14f bne.n 8003ec0 && LD_DWORD(fs->win.d8 + FSI_LeadSig) == 0x41615252 - 8003d68: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d6a: 78db ldrb r3, [r3, #3] - 8003d6c: 061a lsls r2, r3, #24 - 8003d6e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d70: 789b ldrb r3, [r3, #2] - 8003d72: 041b lsls r3, r3, #16 - 8003d74: 4313 orrs r3, r2 - 8003d76: 6bba ldr r2, [r7, #56] ; 0x38 - 8003d78: 7852 ldrb r2, [r2, #1] - 8003d7a: 0212 lsls r2, r2, #8 - 8003d7c: 4313 orrs r3, r2 - 8003d7e: 6bba ldr r2, [r7, #56] ; 0x38 - 8003d80: 7812 ldrb r2, [r2, #0] - 8003d82: 4313 orrs r3, r2 - 8003d84: 4a2d ldr r2, [pc, #180] ; (8003e3c ) - 8003d86: 4293 cmp r3, r2 - 8003d88: d13e bne.n 8003e08 + 8003e20: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e22: 78db ldrb r3, [r3, #3] + 8003e24: 061a lsls r2, r3, #24 + 8003e26: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e28: 789b ldrb r3, [r3, #2] + 8003e2a: 041b lsls r3, r3, #16 + 8003e2c: 4313 orrs r3, r2 + 8003e2e: 6bba ldr r2, [r7, #56] ; 0x38 + 8003e30: 7852 ldrb r2, [r2, #1] + 8003e32: 0212 lsls r2, r2, #8 + 8003e34: 4313 orrs r3, r2 + 8003e36: 6bba ldr r2, [r7, #56] ; 0x38 + 8003e38: 7812 ldrb r2, [r2, #0] + 8003e3a: 4313 orrs r3, r2 + 8003e3c: 4a2d ldr r2, [pc, #180] ; (8003ef4 ) + 8003e3e: 4293 cmp r3, r2 + 8003e40: d13e bne.n 8003ec0 && LD_DWORD(fs->win.d8 + FSI_StrucSig) == 0x61417272) - 8003d8a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d8c: f893 31e7 ldrb.w r3, [r3, #487] ; 0x1e7 - 8003d90: 061a lsls r2, r3, #24 - 8003d92: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d94: f893 31e6 ldrb.w r3, [r3, #486] ; 0x1e6 - 8003d98: 041b lsls r3, r3, #16 - 8003d9a: 4313 orrs r3, r2 - 8003d9c: 6bba ldr r2, [r7, #56] ; 0x38 - 8003d9e: f892 21e5 ldrb.w r2, [r2, #485] ; 0x1e5 - 8003da2: 0212 lsls r2, r2, #8 - 8003da4: 4313 orrs r3, r2 - 8003da6: 6bba ldr r2, [r7, #56] ; 0x38 - 8003da8: f892 21e4 ldrb.w r2, [r2, #484] ; 0x1e4 - 8003dac: 4313 orrs r3, r2 - 8003dae: 4a24 ldr r2, [pc, #144] ; (8003e40 ) - 8003db0: 4293 cmp r3, r2 - 8003db2: d129 bne.n 8003e08 + 8003e42: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e44: f893 31e7 ldrb.w r3, [r3, #487] ; 0x1e7 + 8003e48: 061a lsls r2, r3, #24 + 8003e4a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e4c: f893 31e6 ldrb.w r3, [r3, #486] ; 0x1e6 + 8003e50: 041b lsls r3, r3, #16 + 8003e52: 4313 orrs r3, r2 + 8003e54: 6bba ldr r2, [r7, #56] ; 0x38 + 8003e56: f892 21e5 ldrb.w r2, [r2, #485] ; 0x1e5 + 8003e5a: 0212 lsls r2, r2, #8 + 8003e5c: 4313 orrs r3, r2 + 8003e5e: 6bba ldr r2, [r7, #56] ; 0x38 + 8003e60: f892 21e4 ldrb.w r2, [r2, #484] ; 0x1e4 + 8003e64: 4313 orrs r3, r2 + 8003e66: 4a24 ldr r2, [pc, #144] ; (8003ef8 ) + 8003e68: 4293 cmp r3, r2 + 8003e6a: d129 bne.n 8003ec0 { #if (_FS_NOFSINFO & 1) == 0 fs->free_clust = LD_DWORD(fs->win.d8 + FSI_Free_Count); - 8003db4: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003db6: f893 31eb ldrb.w r3, [r3, #491] ; 0x1eb - 8003dba: 061a lsls r2, r3, #24 - 8003dbc: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003dbe: f893 31ea ldrb.w r3, [r3, #490] ; 0x1ea - 8003dc2: 041b lsls r3, r3, #16 - 8003dc4: 4313 orrs r3, r2 - 8003dc6: 6bba ldr r2, [r7, #56] ; 0x38 - 8003dc8: f892 21e9 ldrb.w r2, [r2, #489] ; 0x1e9 - 8003dcc: 0212 lsls r2, r2, #8 - 8003dce: 4313 orrs r3, r2 - 8003dd0: 6bba ldr r2, [r7, #56] ; 0x38 - 8003dd2: f892 21e8 ldrb.w r2, [r2, #488] ; 0x1e8 - 8003dd6: 431a orrs r2, r3 - 8003dd8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003dda: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8003e6c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e6e: f893 31eb ldrb.w r3, [r3, #491] ; 0x1eb + 8003e72: 061a lsls r2, r3, #24 + 8003e74: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e76: f893 31ea ldrb.w r3, [r3, #490] ; 0x1ea + 8003e7a: 041b lsls r3, r3, #16 + 8003e7c: 4313 orrs r3, r2 + 8003e7e: 6bba ldr r2, [r7, #56] ; 0x38 + 8003e80: f892 21e9 ldrb.w r2, [r2, #489] ; 0x1e9 + 8003e84: 0212 lsls r2, r2, #8 + 8003e86: 4313 orrs r3, r2 + 8003e88: 6bba ldr r2, [r7, #56] ; 0x38 + 8003e8a: f892 21e8 ldrb.w r2, [r2, #488] ; 0x1e8 + 8003e8e: 431a orrs r2, r3 + 8003e90: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e92: f8c3 2210 str.w r2, [r3, #528] ; 0x210 #endif #if (_FS_NOFSINFO & 2) == 0 fs->last_clust = LD_DWORD(fs->win.d8 + FSI_Nxt_Free); - 8003dde: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003de0: f893 31ef ldrb.w r3, [r3, #495] ; 0x1ef - 8003de4: 061a lsls r2, r3, #24 - 8003de6: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003de8: f893 31ee ldrb.w r3, [r3, #494] ; 0x1ee - 8003dec: 041b lsls r3, r3, #16 - 8003dee: 4313 orrs r3, r2 - 8003df0: 6bba ldr r2, [r7, #56] ; 0x38 - 8003df2: f892 21ed ldrb.w r2, [r2, #493] ; 0x1ed - 8003df6: 0212 lsls r2, r2, #8 - 8003df8: 4313 orrs r3, r2 - 8003dfa: 6bba ldr r2, [r7, #56] ; 0x38 - 8003dfc: f892 21ec ldrb.w r2, [r2, #492] ; 0x1ec - 8003e00: 431a orrs r2, r3 - 8003e02: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e04: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8003e96: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e98: f893 31ef ldrb.w r3, [r3, #495] ; 0x1ef + 8003e9c: 061a lsls r2, r3, #24 + 8003e9e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ea0: f893 31ee ldrb.w r3, [r3, #494] ; 0x1ee + 8003ea4: 041b lsls r3, r3, #16 + 8003ea6: 4313 orrs r3, r2 + 8003ea8: 6bba ldr r2, [r7, #56] ; 0x38 + 8003eaa: f892 21ed ldrb.w r2, [r2, #493] ; 0x1ed + 8003eae: 0212 lsls r2, r2, #8 + 8003eb0: 4313 orrs r3, r2 + 8003eb2: 6bba ldr r2, [r7, #56] ; 0x38 + 8003eb4: f892 21ec ldrb.w r2, [r2, #492] ; 0x1ec + 8003eb8: 431a orrs r2, r3 + 8003eba: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ebc: f8c3 220c str.w r2, [r3, #524] ; 0x20c #endif } } #endif #endif fs->fs_type = fmt; /* FAT sub-type */ - 8003e08: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e0a: f897 2057 ldrb.w r2, [r7, #87] ; 0x57 - 8003e0e: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 8003ec0: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ec2: f897 2057 ldrb.w r2, [r7, #87] ; 0x57 + 8003ec6: f883 2200 strb.w r2, [r3, #512] ; 0x200 fs->id = ++Fsid; /* File system mount ID */ - 8003e12: 4b0c ldr r3, [pc, #48] ; (8003e44 ) - 8003e14: 881b ldrh r3, [r3, #0] - 8003e16: 3301 adds r3, #1 - 8003e18: b29a uxth r2, r3 - 8003e1a: 4b0a ldr r3, [pc, #40] ; (8003e44 ) - 8003e1c: 801a strh r2, [r3, #0] - 8003e1e: 4b09 ldr r3, [pc, #36] ; (8003e44 ) - 8003e20: 881a ldrh r2, [r3, #0] - 8003e22: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e24: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 + 8003eca: 4b0c ldr r3, [pc, #48] ; (8003efc ) + 8003ecc: 881b ldrh r3, [r3, #0] + 8003ece: 3301 adds r3, #1 + 8003ed0: b29a uxth r2, r3 + 8003ed2: 4b0a ldr r3, [pc, #40] ; (8003efc ) + 8003ed4: 801a strh r2, [r3, #0] + 8003ed6: 4b09 ldr r3, [pc, #36] ; (8003efc ) + 8003ed8: 881a ldrh r2, [r3, #0] + 8003eda: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003edc: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 #if _FS_RPATH fs->cdir = 0; /* Set current directory to root */ #endif #if _FS_LOCK /* Clear file lock semaphores */ clear_lock(fs); - 8003e28: 6bb8 ldr r0, [r7, #56] ; 0x38 - 8003e2a: f7fe fd01 bl 8002830 + 8003ee0: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003ee2: f7fe fd01 bl 80028e8 #endif return FR_OK; - 8003e2e: 2300 movs r3, #0 + 8003ee6: 2300 movs r3, #0 } - 8003e30: 4618 mov r0, r3 - 8003e32: 3758 adds r7, #88 ; 0x58 - 8003e34: 46bd mov sp, r7 - 8003e36: bd80 pop {r7, pc} - 8003e38: ffffaa55 .word 0xffffaa55 - 8003e3c: 41615252 .word 0x41615252 - 8003e40: 61417272 .word 0x61417272 - 8003e44: 20000048 .word 0x20000048 + 8003ee8: 4618 mov r0, r3 + 8003eea: 3758 adds r7, #88 ; 0x58 + 8003eec: 46bd mov sp, r7 + 8003eee: bd80 pop {r7, pc} + 8003ef0: ffffaa55 .word 0xffffaa55 + 8003ef4: 41615252 .word 0x41615252 + 8003ef8: 61417272 .word 0x61417272 + 8003efc: 200000b0 .word 0x200000b0 -08003e48 : +08003f00 : static FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */ void* obj /* Pointer to the object FIL/DIR to check validity */ ) { - 8003e48: b580 push {r7, lr} - 8003e4a: b084 sub sp, #16 - 8003e4c: af00 add r7, sp, #0 - 8003e4e: 6078 str r0, [r7, #4] + 8003f00: b580 push {r7, lr} + 8003f02: b084 sub sp, #16 + 8003f04: af00 add r7, sp, #0 + 8003f06: 6078 str r0, [r7, #4] FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */ - 8003e50: 687b ldr r3, [r7, #4] - 8003e52: 60fb str r3, [r7, #12] + 8003f08: 687b ldr r3, [r7, #4] + 8003f0a: 60fb str r3, [r7, #12] if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id || (disk_status(fil->fs->drv) & STA_NOINIT)) - 8003e54: 68fb ldr r3, [r7, #12] - 8003e56: 2b00 cmp r3, #0 - 8003e58: d022 beq.n 8003ea0 - 8003e5a: 68fb ldr r3, [r7, #12] - 8003e5c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003e60: 2b00 cmp r3, #0 - 8003e62: d01d beq.n 8003ea0 - 8003e64: 68fb ldr r3, [r7, #12] - 8003e66: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003e6a: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 8003e6e: 2b00 cmp r3, #0 - 8003e70: d016 beq.n 8003ea0 - 8003e72: 68fb ldr r3, [r7, #12] - 8003e74: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003e78: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 - 8003e7c: 68fb ldr r3, [r7, #12] - 8003e7e: f8b3 3204 ldrh.w r3, [r3, #516] ; 0x204 - 8003e82: 429a cmp r2, r3 - 8003e84: d10c bne.n 8003ea0 - 8003e86: 68fb ldr r3, [r7, #12] - 8003e88: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003e8c: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 - 8003e90: 4618 mov r0, r3 - 8003e92: f7fe fa8f bl 80023b4 - 8003e96: 4603 mov r3, r0 - 8003e98: f003 0301 and.w r3, r3, #1 - 8003e9c: 2b00 cmp r3, #0 - 8003e9e: d001 beq.n 8003ea4 + 8003f0c: 68fb ldr r3, [r7, #12] + 8003f0e: 2b00 cmp r3, #0 + 8003f10: d022 beq.n 8003f58 + 8003f12: 68fb ldr r3, [r7, #12] + 8003f14: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003f18: 2b00 cmp r3, #0 + 8003f1a: d01d beq.n 8003f58 + 8003f1c: 68fb ldr r3, [r7, #12] + 8003f1e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003f22: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8003f26: 2b00 cmp r3, #0 + 8003f28: d016 beq.n 8003f58 + 8003f2a: 68fb ldr r3, [r7, #12] + 8003f2c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003f30: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 + 8003f34: 68fb ldr r3, [r7, #12] + 8003f36: f8b3 3204 ldrh.w r3, [r3, #516] ; 0x204 + 8003f3a: 429a cmp r2, r3 + 8003f3c: d10c bne.n 8003f58 + 8003f3e: 68fb ldr r3, [r7, #12] + 8003f40: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003f44: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 + 8003f48: 4618 mov r0, r3 + 8003f4a: f7fe fa8f bl 800246c + 8003f4e: 4603 mov r3, r0 + 8003f50: f003 0301 and.w r3, r3, #1 + 8003f54: 2b00 cmp r3, #0 + 8003f56: d001 beq.n 8003f5c return FR_INVALID_OBJECT; - 8003ea0: 2309 movs r3, #9 - 8003ea2: e000 b.n 8003ea6 + 8003f58: 2309 movs r3, #9 + 8003f5a: e000 b.n 8003f5e ENTER_FF(fil->fs); /* Lock file system */ return FR_OK; - 8003ea4: 2300 movs r3, #0 + 8003f5c: 2300 movs r3, #0 } - 8003ea6: 4618 mov r0, r3 - 8003ea8: 3710 adds r7, #16 - 8003eaa: 46bd mov sp, r7 - 8003eac: bd80 pop {r7, pc} + 8003f5e: 4618 mov r0, r3 + 8003f60: 3710 adds r7, #16 + 8003f62: 46bd mov sp, r7 + 8003f64: bd80 pop {r7, pc} ... -08003eb0 : +08003f68 : FRESULT f_mount ( FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/ const TCHAR* path, /* Logical drive number to be mounted/unmounted */ BYTE opt /* 0:Do not mount (delayed mount), 1:Mount immediately */ ) { - 8003eb0: b580 push {r7, lr} - 8003eb2: b088 sub sp, #32 - 8003eb4: af00 add r7, sp, #0 - 8003eb6: 60f8 str r0, [r7, #12] - 8003eb8: 60b9 str r1, [r7, #8] - 8003eba: 4613 mov r3, r2 - 8003ebc: 71fb strb r3, [r7, #7] + 8003f68: b580 push {r7, lr} + 8003f6a: b088 sub sp, #32 + 8003f6c: af00 add r7, sp, #0 + 8003f6e: 60f8 str r0, [r7, #12] + 8003f70: 60b9 str r1, [r7, #8] + 8003f72: 4613 mov r3, r2 + 8003f74: 71fb strb r3, [r7, #7] FATFS *cfs; int vol; FRESULT res; const TCHAR *rp = path; - 8003ebe: 68bb ldr r3, [r7, #8] - 8003ec0: 613b str r3, [r7, #16] + 8003f76: 68bb ldr r3, [r7, #8] + 8003f78: 613b str r3, [r7, #16] vol = get_ldnumber(&rp); - 8003ec2: f107 0310 add.w r3, r7, #16 - 8003ec6: 4618 mov r0, r3 - 8003ec8: f7ff fc46 bl 8003758 - 8003ecc: 61f8 str r0, [r7, #28] + 8003f7a: f107 0310 add.w r3, r7, #16 + 8003f7e: 4618 mov r0, r3 + 8003f80: f7ff fc46 bl 8003810 + 8003f84: 61f8 str r0, [r7, #28] if (vol < 0) return FR_INVALID_DRIVE; - 8003ece: 69fb ldr r3, [r7, #28] - 8003ed0: 2b00 cmp r3, #0 - 8003ed2: da01 bge.n 8003ed8 - 8003ed4: 230b movs r3, #11 - 8003ed6: e02d b.n 8003f34 + 8003f86: 69fb ldr r3, [r7, #28] + 8003f88: 2b00 cmp r3, #0 + 8003f8a: da01 bge.n 8003f90 + 8003f8c: 230b movs r3, #11 + 8003f8e: e02d b.n 8003fec cfs = FatFs[vol]; /* Pointer to fs object */ - 8003ed8: 4a18 ldr r2, [pc, #96] ; (8003f3c ) - 8003eda: 69fb ldr r3, [r7, #28] - 8003edc: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 8003ee0: 61bb str r3, [r7, #24] + 8003f90: 4a18 ldr r2, [pc, #96] ; (8003ff4 ) + 8003f92: 69fb ldr r3, [r7, #28] + 8003f94: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 8003f98: 61bb str r3, [r7, #24] if (cfs) { - 8003ee2: 69bb ldr r3, [r7, #24] - 8003ee4: 2b00 cmp r3, #0 - 8003ee6: d006 beq.n 8003ef6 + 8003f9a: 69bb ldr r3, [r7, #24] + 8003f9c: 2b00 cmp r3, #0 + 8003f9e: d006 beq.n 8003fae #if _FS_LOCK clear_lock(cfs); - 8003ee8: 69b8 ldr r0, [r7, #24] - 8003eea: f7fe fca1 bl 8002830 + 8003fa0: 69b8 ldr r0, [r7, #24] + 8003fa2: f7fe fca1 bl 80028e8 #endif #if _FS_REENTRANT /* Discard sync object of the current volume */ if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR; #endif cfs->fs_type = 0; /* Clear old fs object */ - 8003eee: 69bb ldr r3, [r7, #24] - 8003ef0: 2200 movs r2, #0 - 8003ef2: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 8003fa6: 69bb ldr r3, [r7, #24] + 8003fa8: 2200 movs r2, #0 + 8003faa: f883 2200 strb.w r2, [r3, #512] ; 0x200 } if (fs) { - 8003ef6: 68fb ldr r3, [r7, #12] - 8003ef8: 2b00 cmp r3, #0 - 8003efa: d003 beq.n 8003f04 + 8003fae: 68fb ldr r3, [r7, #12] + 8003fb0: 2b00 cmp r3, #0 + 8003fb2: d003 beq.n 8003fbc fs->fs_type = 0; /* Clear new fs object */ - 8003efc: 68fb ldr r3, [r7, #12] - 8003efe: 2200 movs r2, #0 - 8003f00: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 8003fb4: 68fb ldr r3, [r7, #12] + 8003fb6: 2200 movs r2, #0 + 8003fb8: f883 2200 strb.w r2, [r3, #512] ; 0x200 #if _FS_REENTRANT /* Create sync object for the new volume */ if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR; #endif } FatFs[vol] = fs; /* Register new fs object */ - 8003f04: 68fa ldr r2, [r7, #12] - 8003f06: 490d ldr r1, [pc, #52] ; (8003f3c ) - 8003f08: 69fb ldr r3, [r7, #28] - 8003f0a: f841 2023 str.w r2, [r1, r3, lsl #2] + 8003fbc: 68fa ldr r2, [r7, #12] + 8003fbe: 490d ldr r1, [pc, #52] ; (8003ff4 ) + 8003fc0: 69fb ldr r3, [r7, #28] + 8003fc2: f841 2023 str.w r2, [r1, r3, lsl #2] if (!fs || opt != 1) return FR_OK; /* Do not mount now, it will be mounted later */ - 8003f0e: 68fb ldr r3, [r7, #12] - 8003f10: 2b00 cmp r3, #0 - 8003f12: d002 beq.n 8003f1a - 8003f14: 79fb ldrb r3, [r7, #7] - 8003f16: 2b01 cmp r3, #1 - 8003f18: d001 beq.n 8003f1e - 8003f1a: 2300 movs r3, #0 - 8003f1c: e00a b.n 8003f34 + 8003fc6: 68fb ldr r3, [r7, #12] + 8003fc8: 2b00 cmp r3, #0 + 8003fca: d002 beq.n 8003fd2 + 8003fcc: 79fb ldrb r3, [r7, #7] + 8003fce: 2b01 cmp r3, #1 + 8003fd0: d001 beq.n 8003fd6 + 8003fd2: 2300 movs r3, #0 + 8003fd4: e00a b.n 8003fec res = find_volume(&fs, &path, 0); /* Force mounted the volume */ - 8003f1e: f107 0108 add.w r1, r7, #8 - 8003f22: f107 030c add.w r3, r7, #12 - 8003f26: 2200 movs r2, #0 - 8003f28: 4618 mov r0, r3 - 8003f2a: f7ff fcc3 bl 80038b4 - 8003f2e: 4603 mov r3, r0 - 8003f30: 75fb strb r3, [r7, #23] + 8003fd6: f107 0108 add.w r1, r7, #8 + 8003fda: f107 030c add.w r3, r7, #12 + 8003fde: 2200 movs r2, #0 + 8003fe0: 4618 mov r0, r3 + 8003fe2: f7ff fcc3 bl 800396c + 8003fe6: 4603 mov r3, r0 + 8003fe8: 75fb strb r3, [r7, #23] LEAVE_FF(fs, res); - 8003f32: 7dfb ldrb r3, [r7, #23] + 8003fea: 7dfb ldrb r3, [r7, #23] } - 8003f34: 4618 mov r0, r3 - 8003f36: 3720 adds r7, #32 - 8003f38: 46bd mov sp, r7 - 8003f3a: bd80 pop {r7, pc} - 8003f3c: 20000044 .word 0x20000044 + 8003fec: 4618 mov r0, r3 + 8003fee: 3720 adds r7, #32 + 8003ff0: 46bd mov sp, r7 + 8003ff2: bd80 pop {r7, pc} + 8003ff4: 200000ac .word 0x200000ac -08003f40 : +08003ff8 : FRESULT f_open ( FIL* fp, /* Pointer to the blank file object */ const TCHAR* path, /* Pointer to the file name */ BYTE mode /* Access mode and file open mode flags */ ) { - 8003f40: b580 push {r7, lr} - 8003f42: f5ad 7d14 sub.w sp, sp, #592 ; 0x250 - 8003f46: af00 add r7, sp, #0 - 8003f48: f107 030c add.w r3, r7, #12 - 8003f4c: 6018 str r0, [r3, #0] - 8003f4e: f107 0308 add.w r3, r7, #8 - 8003f52: 6019 str r1, [r3, #0] - 8003f54: 1dfb adds r3, r7, #7 - 8003f56: 701a strb r2, [r3, #0] + 8003ff8: b580 push {r7, lr} + 8003ffa: f5ad 7d14 sub.w sp, sp, #592 ; 0x250 + 8003ffe: af00 add r7, sp, #0 + 8004000: f107 030c add.w r3, r7, #12 + 8004004: 6018 str r0, [r3, #0] + 8004006: f107 0308 add.w r3, r7, #8 + 800400a: 6019 str r1, [r3, #0] + 800400c: 1dfb adds r3, r7, #7 + 800400e: 701a strb r2, [r3, #0] #if !_FS_READONLY DWORD dw, cl; #endif if (!fp) return FR_INVALID_OBJECT; - 8003f58: f107 030c add.w r3, r7, #12 - 8003f5c: 681b ldr r3, [r3, #0] - 8003f5e: 2b00 cmp r3, #0 - 8003f60: d101 bne.n 8003f66 - 8003f62: 2309 movs r3, #9 - 8003f64: e1f2 b.n 800434c + 8004010: f107 030c add.w r3, r7, #12 + 8004014: 681b ldr r3, [r3, #0] + 8004016: 2b00 cmp r3, #0 + 8004018: d101 bne.n 800401e + 800401a: 2309 movs r3, #9 + 800401c: e1f2 b.n 8004404 fp->fs = 0; /* Clear file object */ - 8003f66: f107 030c add.w r3, r7, #12 - 8003f6a: 681b ldr r3, [r3, #0] - 8003f6c: 2200 movs r2, #0 - 8003f6e: f8c3 2200 str.w r2, [r3, #512] ; 0x200 + 800401e: f107 030c add.w r3, r7, #12 + 8004022: 681b ldr r3, [r3, #0] + 8004024: 2200 movs r2, #0 + 8004026: f8c3 2200 str.w r2, [r3, #512] ; 0x200 /* Get logical drive number */ #if !_FS_READONLY mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; - 8003f72: 1dfb adds r3, r7, #7 - 8003f74: 1dfa adds r2, r7, #7 - 8003f76: 7812 ldrb r2, [r2, #0] - 8003f78: f002 021f and.w r2, r2, #31 - 8003f7c: 701a strb r2, [r3, #0] + 800402a: 1dfb adds r3, r7, #7 + 800402c: 1dfa adds r2, r7, #7 + 800402e: 7812 ldrb r2, [r2, #0] + 8004030: f002 021f and.w r2, r2, #31 + 8004034: 701a strb r2, [r3, #0] res = find_volume(&dj.fs, &path, (BYTE)(mode & ~FA_READ)); - 8003f7e: 1dfb adds r3, r7, #7 - 8003f80: 781b ldrb r3, [r3, #0] - 8003f82: f023 0301 bic.w r3, r3, #1 - 8003f86: b2da uxtb r2, r3 - 8003f88: f107 0108 add.w r1, r7, #8 - 8003f8c: f107 0320 add.w r3, r7, #32 - 8003f90: f503 7300 add.w r3, r3, #512 ; 0x200 - 8003f94: 4618 mov r0, r3 - 8003f96: f7ff fc8d bl 80038b4 - 8003f9a: 4603 mov r3, r0 - 8003f9c: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004036: 1dfb adds r3, r7, #7 + 8004038: 781b ldrb r3, [r3, #0] + 800403a: f023 0301 bic.w r3, r3, #1 + 800403e: b2da uxtb r2, r3 + 8004040: f107 0108 add.w r1, r7, #8 + 8004044: f107 0320 add.w r3, r7, #32 + 8004048: f503 7300 add.w r3, r3, #512 ; 0x200 + 800404c: 4618 mov r0, r3 + 800404e: f7ff fc8d bl 800396c + 8004052: 4603 mov r3, r0 + 8004054: f887 324f strb.w r3, [r7, #591] ; 0x24f #else mode &= FA_READ; res = find_volume(&dj.fs, &path, 0); #endif if (res == FR_OK) { - 8003fa0: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8003fa4: 2b00 cmp r3, #0 - 8003fa6: f040 81cf bne.w 8004348 + 8004058: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 800405c: 2b00 cmp r3, #0 + 800405e: f040 81cf bne.w 8004400 INIT_BUF(dj); - 8003faa: f107 0320 add.w r3, r7, #32 - 8003fae: f107 0214 add.w r2, r7, #20 - 8003fb2: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 8004062: f107 0320 add.w r3, r7, #32 + 8004066: f107 0214 add.w r2, r7, #20 + 800406a: f8c3 2218 str.w r2, [r3, #536] ; 0x218 res = follow_path(&dj, path); /* Follow the file path */ - 8003fb6: f107 0308 add.w r3, r7, #8 - 8003fba: 681a ldr r2, [r3, #0] - 8003fbc: f107 0320 add.w r3, r7, #32 - 8003fc0: 4611 mov r1, r2 - 8003fc2: 4618 mov r0, r3 - 8003fc4: f7ff fb5a bl 800367c - 8003fc8: 4603 mov r3, r0 - 8003fca: f887 324f strb.w r3, [r7, #591] ; 0x24f + 800406e: f107 0308 add.w r3, r7, #8 + 8004072: 681a ldr r2, [r3, #0] + 8004074: f107 0320 add.w r3, r7, #32 + 8004078: 4611 mov r1, r2 + 800407a: 4618 mov r0, r3 + 800407c: f7ff fb5a bl 8003734 + 8004080: 4603 mov r3, r0 + 8004082: f887 324f strb.w r3, [r7, #591] ; 0x24f dir = dj.dir; - 8003fce: f107 0320 add.w r3, r7, #32 - 8003fd2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003fd6: f8c7 3248 str.w r3, [r7, #584] ; 0x248 + 8004086: f107 0320 add.w r3, r7, #32 + 800408a: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 800408e: f8c7 3248 str.w r3, [r7, #584] ; 0x248 #if !_FS_READONLY /* R/W configuration */ if (res == FR_OK) { - 8003fda: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8003fde: 2b00 cmp r3, #0 - 8003fe0: d11a bne.n 8004018 + 8004092: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004096: 2b00 cmp r3, #0 + 8004098: d11a bne.n 80040d0 if (!dir) /* Default directory itself */ - 8003fe2: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8003fe6: 2b00 cmp r3, #0 - 8003fe8: d103 bne.n 8003ff2 + 800409a: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 800409e: 2b00 cmp r3, #0 + 80040a0: d103 bne.n 80040aa res = FR_INVALID_NAME; - 8003fea: 2306 movs r3, #6 - 8003fec: f887 324f strb.w r3, [r7, #591] ; 0x24f - 8003ff0: e012 b.n 8004018 + 80040a2: 2306 movs r3, #6 + 80040a4: f887 324f strb.w r3, [r7, #591] ; 0x24f + 80040a8: e012 b.n 80040d0 #if _FS_LOCK else res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); - 8003ff2: 1dfb adds r3, r7, #7 - 8003ff4: 781b ldrb r3, [r3, #0] - 8003ff6: f023 0301 bic.w r3, r3, #1 - 8003ffa: 2b00 cmp r3, #0 - 8003ffc: bf14 ite ne - 8003ffe: 2301 movne r3, #1 - 8004000: 2300 moveq r3, #0 - 8004002: b2db uxtb r3, r3 - 8004004: 461a mov r2, r3 - 8004006: f107 0320 add.w r3, r7, #32 - 800400a: 4611 mov r1, r2 - 800400c: 4618 mov r0, r3 - 800400e: f7fe fac9 bl 80025a4 - 8004012: 4603 mov r3, r0 - 8004014: f887 324f strb.w r3, [r7, #591] ; 0x24f + 80040aa: 1dfb adds r3, r7, #7 + 80040ac: 781b ldrb r3, [r3, #0] + 80040ae: f023 0301 bic.w r3, r3, #1 + 80040b2: 2b00 cmp r3, #0 + 80040b4: bf14 ite ne + 80040b6: 2301 movne r3, #1 + 80040b8: 2300 moveq r3, #0 + 80040ba: b2db uxtb r3, r3 + 80040bc: 461a mov r2, r3 + 80040be: f107 0320 add.w r3, r7, #32 + 80040c2: 4611 mov r1, r2 + 80040c4: 4618 mov r0, r3 + 80040c6: f7fe fac9 bl 800265c + 80040ca: 4603 mov r3, r0 + 80040cc: f887 324f strb.w r3, [r7, #591] ; 0x24f #endif } /* Create or Open a file */ if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { - 8004018: 1dfb adds r3, r7, #7 - 800401a: 781b ldrb r3, [r3, #0] - 800401c: f003 031c and.w r3, r3, #28 - 8004020: 2b00 cmp r3, #0 - 8004022: f000 80cc beq.w 80041be + 80040d0: 1dfb adds r3, r7, #7 + 80040d2: 781b ldrb r3, [r3, #0] + 80040d4: f003 031c and.w r3, r3, #28 + 80040d8: 2b00 cmp r3, #0 + 80040da: f000 80cc beq.w 8004276 if (res != FR_OK) { /* No file, create new */ - 8004026: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 800402a: 2b00 cmp r3, #0 - 800402c: d01f beq.n 800406e + 80040de: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 80040e2: 2b00 cmp r3, #0 + 80040e4: d01f beq.n 8004126 if (res == FR_NO_FILE) /* There is no file to open, create a new entry */ - 800402e: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8004032: 2b04 cmp r3, #4 - 8004034: d10e bne.n 8004054 + 80040e6: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 80040ea: 2b04 cmp r3, #4 + 80040ec: d10e bne.n 800410c #if _FS_LOCK res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; - 8004036: f7fe fb21 bl 800267c - 800403a: 4603 mov r3, r0 - 800403c: 2b00 cmp r3, #0 - 800403e: d006 beq.n 800404e - 8004040: f107 0320 add.w r3, r7, #32 - 8004044: 4618 mov r0, r3 - 8004046: f7ff fa1f bl 8003488 - 800404a: 4603 mov r3, r0 - 800404c: e000 b.n 8004050 - 800404e: 2312 movs r3, #18 - 8004050: f887 324f strb.w r3, [r7, #591] ; 0x24f + 80040ee: f7fe fb21 bl 8002734 + 80040f2: 4603 mov r3, r0 + 80040f4: 2b00 cmp r3, #0 + 80040f6: d006 beq.n 8004106 + 80040f8: f107 0320 add.w r3, r7, #32 + 80040fc: 4618 mov r0, r3 + 80040fe: f7ff fa1f bl 8003540 + 8004102: 4603 mov r3, r0 + 8004104: e000 b.n 8004108 + 8004106: 2312 movs r3, #18 + 8004108: f887 324f strb.w r3, [r7, #591] ; 0x24f #else res = dir_register(&dj); #endif mode |= FA_CREATE_ALWAYS; /* File is created */ - 8004054: 1dfb adds r3, r7, #7 - 8004056: 1dfa adds r2, r7, #7 - 8004058: 7812 ldrb r2, [r2, #0] - 800405a: f042 0208 orr.w r2, r2, #8 - 800405e: 701a strb r2, [r3, #0] + 800410c: 1dfb adds r3, r7, #7 + 800410e: 1dfa adds r2, r7, #7 + 8004110: 7812 ldrb r2, [r2, #0] + 8004112: f042 0208 orr.w r2, r2, #8 + 8004116: 701a strb r2, [r3, #0] dir = dj.dir; /* New entry */ - 8004060: f107 0320 add.w r3, r7, #32 - 8004064: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8004068: f8c7 3248 str.w r3, [r7, #584] ; 0x248 - 800406c: e014 b.n 8004098 + 8004118: f107 0320 add.w r3, r7, #32 + 800411c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8004120: f8c7 3248 str.w r3, [r7, #584] ; 0x248 + 8004124: e014 b.n 8004150 } else { /* Any object is already existing */ if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ - 800406e: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004072: 330b adds r3, #11 - 8004074: 781b ldrb r3, [r3, #0] - 8004076: f003 0311 and.w r3, r3, #17 - 800407a: 2b00 cmp r3, #0 - 800407c: d003 beq.n 8004086 + 8004126: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 800412a: 330b adds r3, #11 + 800412c: 781b ldrb r3, [r3, #0] + 800412e: f003 0311 and.w r3, r3, #17 + 8004132: 2b00 cmp r3, #0 + 8004134: d003 beq.n 800413e res = FR_DENIED; - 800407e: 2307 movs r3, #7 - 8004080: f887 324f strb.w r3, [r7, #591] ; 0x24f - 8004084: e008 b.n 8004098 + 8004136: 2307 movs r3, #7 + 8004138: f887 324f strb.w r3, [r7, #591] ; 0x24f + 800413c: e008 b.n 8004150 } else { if (mode & FA_CREATE_NEW) /* Cannot create as new file */ - 8004086: 1dfb adds r3, r7, #7 - 8004088: 781b ldrb r3, [r3, #0] - 800408a: f003 0304 and.w r3, r3, #4 - 800408e: 2b00 cmp r3, #0 - 8004090: d002 beq.n 8004098 + 800413e: 1dfb adds r3, r7, #7 + 8004140: 781b ldrb r3, [r3, #0] + 8004142: f003 0304 and.w r3, r3, #4 + 8004146: 2b00 cmp r3, #0 + 8004148: d002 beq.n 8004150 res = FR_EXIST; - 8004092: 2308 movs r3, #8 - 8004094: f887 324f strb.w r3, [r7, #591] ; 0x24f + 800414a: 2308 movs r3, #8 + 800414c: f887 324f strb.w r3, [r7, #591] ; 0x24f } } if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ - 8004098: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 800409c: 2b00 cmp r3, #0 - 800409e: f040 80af bne.w 8004200 - 80040a2: 1dfb adds r3, r7, #7 - 80040a4: 781b ldrb r3, [r3, #0] - 80040a6: f003 0308 and.w r3, r3, #8 - 80040aa: 2b00 cmp r3, #0 - 80040ac: f000 80a8 beq.w 8004200 + 8004150: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004154: 2b00 cmp r3, #0 + 8004156: f040 80af bne.w 80042b8 + 800415a: 1dfb adds r3, r7, #7 + 800415c: 781b ldrb r3, [r3, #0] + 800415e: f003 0308 and.w r3, r3, #8 + 8004162: 2b00 cmp r3, #0 + 8004164: f000 80a8 beq.w 80042b8 dw = GET_FATTIME(); /* Created time */ - 80040b0: f7fe f910 bl 80022d4 - 80040b4: f8c7 0244 str.w r0, [r7, #580] ; 0x244 + 8004168: f7fe f910 bl 800238c + 800416c: f8c7 0244 str.w r0, [r7, #580] ; 0x244 ST_DWORD(dir + DIR_CrtTime, dw); - 80040b8: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80040bc: 330e adds r3, #14 - 80040be: f8d7 2244 ldr.w r2, [r7, #580] ; 0x244 - 80040c2: b2d2 uxtb r2, r2 - 80040c4: 701a strb r2, [r3, #0] - 80040c6: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 - 80040ca: b29b uxth r3, r3 - 80040cc: 0a1b lsrs r3, r3, #8 - 80040ce: b29a uxth r2, r3 - 80040d0: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80040d4: 330f adds r3, #15 - 80040d6: b2d2 uxtb r2, r2 - 80040d8: 701a strb r2, [r3, #0] - 80040da: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 - 80040de: 0c1a lsrs r2, r3, #16 - 80040e0: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80040e4: 3310 adds r3, #16 - 80040e6: b2d2 uxtb r2, r2 - 80040e8: 701a strb r2, [r3, #0] - 80040ea: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 - 80040ee: 0e1a lsrs r2, r3, #24 - 80040f0: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80040f4: 3311 adds r3, #17 - 80040f6: b2d2 uxtb r2, r2 - 80040f8: 701a strb r2, [r3, #0] + 8004170: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8004174: 330e adds r3, #14 + 8004176: f8d7 2244 ldr.w r2, [r7, #580] ; 0x244 + 800417a: b2d2 uxtb r2, r2 + 800417c: 701a strb r2, [r3, #0] + 800417e: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 + 8004182: b29b uxth r3, r3 + 8004184: 0a1b lsrs r3, r3, #8 + 8004186: b29a uxth r2, r3 + 8004188: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 800418c: 330f adds r3, #15 + 800418e: b2d2 uxtb r2, r2 + 8004190: 701a strb r2, [r3, #0] + 8004192: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 + 8004196: 0c1a lsrs r2, r3, #16 + 8004198: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 800419c: 3310 adds r3, #16 + 800419e: b2d2 uxtb r2, r2 + 80041a0: 701a strb r2, [r3, #0] + 80041a2: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 + 80041a6: 0e1a lsrs r2, r3, #24 + 80041a8: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041ac: 3311 adds r3, #17 + 80041ae: b2d2 uxtb r2, r2 + 80041b0: 701a strb r2, [r3, #0] dir[DIR_Attr] = 0; /* Reset attribute */ - 80040fa: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80040fe: 330b adds r3, #11 - 8004100: 2200 movs r2, #0 - 8004102: 701a strb r2, [r3, #0] + 80041b2: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041b6: 330b adds r3, #11 + 80041b8: 2200 movs r2, #0 + 80041ba: 701a strb r2, [r3, #0] ST_DWORD(dir + DIR_FileSize, 0);/* size = 0 */ - 8004104: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004108: 331c adds r3, #28 - 800410a: 2200 movs r2, #0 - 800410c: 701a strb r2, [r3, #0] - 800410e: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004112: 331d adds r3, #29 - 8004114: 2200 movs r2, #0 - 8004116: 701a strb r2, [r3, #0] - 8004118: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 800411c: 331e adds r3, #30 - 800411e: 2200 movs r2, #0 - 8004120: 701a strb r2, [r3, #0] - 8004122: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004126: 331f adds r3, #31 - 8004128: 2200 movs r2, #0 - 800412a: 701a strb r2, [r3, #0] + 80041bc: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041c0: 331c adds r3, #28 + 80041c2: 2200 movs r2, #0 + 80041c4: 701a strb r2, [r3, #0] + 80041c6: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041ca: 331d adds r3, #29 + 80041cc: 2200 movs r2, #0 + 80041ce: 701a strb r2, [r3, #0] + 80041d0: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041d4: 331e adds r3, #30 + 80041d6: 2200 movs r2, #0 + 80041d8: 701a strb r2, [r3, #0] + 80041da: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041de: 331f adds r3, #31 + 80041e0: 2200 movs r2, #0 + 80041e2: 701a strb r2, [r3, #0] cl = ld_clust(dj.fs, dir); /* Get start cluster */ - 800412c: f107 0320 add.w r3, r7, #32 - 8004130: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004134: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 - 8004138: 4618 mov r0, r3 - 800413a: f7ff f903 bl 8003344 - 800413e: f8c7 0240 str.w r0, [r7, #576] ; 0x240 + 80041e4: f107 0320 add.w r3, r7, #32 + 80041e8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80041ec: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 + 80041f0: 4618 mov r0, r3 + 80041f2: f7ff f903 bl 80033fc + 80041f6: f8c7 0240 str.w r0, [r7, #576] ; 0x240 st_clust(dir, 0); /* cluster = 0 */ - 8004142: 2100 movs r1, #0 - 8004144: f8d7 0248 ldr.w r0, [r7, #584] ; 0x248 - 8004148: f7ff f929 bl 800339e + 80041fa: 2100 movs r1, #0 + 80041fc: f8d7 0248 ldr.w r0, [r7, #584] ; 0x248 + 8004200: f7ff f929 bl 8003456 dj.fs->wflag = 1; - 800414c: f107 0320 add.w r3, r7, #32 - 8004150: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004154: 2201 movs r2, #1 - 8004156: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8004204: f107 0320 add.w r3, r7, #32 + 8004208: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800420c: 2201 movs r2, #1 + 800420e: f883 2204 strb.w r2, [r3, #516] ; 0x204 if (cl) { /* Remove the cluster chain if exist */ - 800415a: f8d7 3240 ldr.w r3, [r7, #576] ; 0x240 - 800415e: 2b00 cmp r3, #0 - 8004160: d04e beq.n 8004200 + 8004212: f8d7 3240 ldr.w r3, [r7, #576] ; 0x240 + 8004216: 2b00 cmp r3, #0 + 8004218: d04e beq.n 80042b8 dw = dj.fs->winsect; - 8004162: f107 0320 add.w r3, r7, #32 - 8004166: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800416a: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c - 800416e: f8c7 3244 str.w r3, [r7, #580] ; 0x244 + 800421a: f107 0320 add.w r3, r7, #32 + 800421e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004222: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c + 8004226: f8c7 3244 str.w r3, [r7, #580] ; 0x244 res = remove_chain(dj.fs, cl); - 8004172: f107 0320 add.w r3, r7, #32 - 8004176: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800417a: f8d7 1240 ldr.w r1, [r7, #576] ; 0x240 - 800417e: 4618 mov r0, r3 - 8004180: f7fe fde0 bl 8002d44 - 8004184: 4603 mov r3, r0 - 8004186: f887 324f strb.w r3, [r7, #591] ; 0x24f + 800422a: f107 0320 add.w r3, r7, #32 + 800422e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004232: f8d7 1240 ldr.w r1, [r7, #576] ; 0x240 + 8004236: 4618 mov r0, r3 + 8004238: f7fe fde0 bl 8002dfc + 800423c: 4603 mov r3, r0 + 800423e: f887 324f strb.w r3, [r7, #591] ; 0x24f if (res == FR_OK) { - 800418a: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 800418e: 2b00 cmp r3, #0 - 8004190: d136 bne.n 8004200 + 8004242: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004246: 2b00 cmp r3, #0 + 8004248: d136 bne.n 80042b8 dj.fs->last_clust = cl - 1; /* Reuse the cluster hole */ - 8004192: f107 0320 add.w r3, r7, #32 - 8004196: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800419a: f8d7 2240 ldr.w r2, [r7, #576] ; 0x240 - 800419e: 3a01 subs r2, #1 - 80041a0: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 800424a: f107 0320 add.w r3, r7, #32 + 800424e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004252: f8d7 2240 ldr.w r2, [r7, #576] ; 0x240 + 8004256: 3a01 subs r2, #1 + 8004258: f8c3 220c str.w r2, [r3, #524] ; 0x20c res = move_window(dj.fs, dw); - 80041a4: f107 0320 add.w r3, r7, #32 - 80041a8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80041ac: f8d7 1244 ldr.w r1, [r7, #580] ; 0x244 - 80041b0: 4618 mov r0, r3 - 80041b2: f7fe fbb0 bl 8002916 - 80041b6: 4603 mov r3, r0 - 80041b8: f887 324f strb.w r3, [r7, #591] ; 0x24f - 80041bc: e020 b.n 8004200 + 800425c: f107 0320 add.w r3, r7, #32 + 8004260: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004264: f8d7 1244 ldr.w r1, [r7, #580] ; 0x244 + 8004268: 4618 mov r0, r3 + 800426a: f7fe fbb0 bl 80029ce + 800426e: 4603 mov r3, r0 + 8004270: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004274: e020 b.n 80042b8 } } } } else { /* Open an existing file */ if (res == FR_OK) { /* Follow succeeded */ - 80041be: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 80041c2: 2b00 cmp r3, #0 - 80041c4: d11c bne.n 8004200 + 8004276: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 800427a: 2b00 cmp r3, #0 + 800427c: d11c bne.n 80042b8 if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ - 80041c6: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80041ca: 330b adds r3, #11 - 80041cc: 781b ldrb r3, [r3, #0] - 80041ce: f003 0310 and.w r3, r3, #16 - 80041d2: 2b00 cmp r3, #0 - 80041d4: d003 beq.n 80041de + 800427e: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8004282: 330b adds r3, #11 + 8004284: 781b ldrb r3, [r3, #0] + 8004286: f003 0310 and.w r3, r3, #16 + 800428a: 2b00 cmp r3, #0 + 800428c: d003 beq.n 8004296 res = FR_NO_FILE; - 80041d6: 2304 movs r3, #4 - 80041d8: f887 324f strb.w r3, [r7, #591] ; 0x24f - 80041dc: e010 b.n 8004200 + 800428e: 2304 movs r3, #4 + 8004290: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004294: e010 b.n 80042b8 } else { if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ - 80041de: 1dfb adds r3, r7, #7 - 80041e0: 781b ldrb r3, [r3, #0] - 80041e2: f003 0302 and.w r3, r3, #2 - 80041e6: 2b00 cmp r3, #0 - 80041e8: d00a beq.n 8004200 - 80041ea: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80041ee: 330b adds r3, #11 - 80041f0: 781b ldrb r3, [r3, #0] - 80041f2: f003 0301 and.w r3, r3, #1 - 80041f6: 2b00 cmp r3, #0 - 80041f8: d002 beq.n 8004200 + 8004296: 1dfb adds r3, r7, #7 + 8004298: 781b ldrb r3, [r3, #0] + 800429a: f003 0302 and.w r3, r3, #2 + 800429e: 2b00 cmp r3, #0 + 80042a0: d00a beq.n 80042b8 + 80042a2: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80042a6: 330b adds r3, #11 + 80042a8: 781b ldrb r3, [r3, #0] + 80042aa: f003 0301 and.w r3, r3, #1 + 80042ae: 2b00 cmp r3, #0 + 80042b0: d002 beq.n 80042b8 res = FR_DENIED; - 80041fa: 2307 movs r3, #7 - 80041fc: f887 324f strb.w r3, [r7, #591] ; 0x24f + 80042b2: 2307 movs r3, #7 + 80042b4: f887 324f strb.w r3, [r7, #591] ; 0x24f } } } if (res == FR_OK) { - 8004200: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8004204: 2b00 cmp r3, #0 - 8004206: d13d bne.n 8004284 + 80042b8: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 80042bc: 2b00 cmp r3, #0 + 80042be: d13d bne.n 800433c if (mode & FA_CREATE_ALWAYS) /* Set file change flag if created or overwritten */ - 8004208: 1dfb adds r3, r7, #7 - 800420a: 781b ldrb r3, [r3, #0] - 800420c: f003 0308 and.w r3, r3, #8 - 8004210: 2b00 cmp r3, #0 - 8004212: d005 beq.n 8004220 + 80042c0: 1dfb adds r3, r7, #7 + 80042c2: 781b ldrb r3, [r3, #0] + 80042c4: f003 0308 and.w r3, r3, #8 + 80042c8: 2b00 cmp r3, #0 + 80042ca: d005 beq.n 80042d8 mode |= FA__WRITTEN; - 8004214: 1dfb adds r3, r7, #7 - 8004216: 1dfa adds r2, r7, #7 - 8004218: 7812 ldrb r2, [r2, #0] - 800421a: f042 0220 orr.w r2, r2, #32 - 800421e: 701a strb r2, [r3, #0] + 80042cc: 1dfb adds r3, r7, #7 + 80042ce: 1dfa adds r2, r7, #7 + 80042d0: 7812 ldrb r2, [r2, #0] + 80042d2: f042 0220 orr.w r2, r2, #32 + 80042d6: 701a strb r2, [r3, #0] fp->dir_sect = dj.fs->winsect; /* Pointer to the directory entry */ - 8004220: f107 0320 add.w r3, r7, #32 - 8004224: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004228: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c - 800422c: f107 030c add.w r3, r7, #12 - 8004230: 681b ldr r3, [r3, #0] - 8004232: f8c3 221c str.w r2, [r3, #540] ; 0x21c + 80042d8: f107 0320 add.w r3, r7, #32 + 80042dc: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80042e0: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c + 80042e4: f107 030c add.w r3, r7, #12 + 80042e8: 681b ldr r3, [r3, #0] + 80042ea: f8c3 221c str.w r2, [r3, #540] ; 0x21c fp->dir_ptr = dir; - 8004236: f107 030c add.w r3, r7, #12 - 800423a: 681b ldr r3, [r3, #0] - 800423c: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 - 8004240: f8c3 2220 str.w r2, [r3, #544] ; 0x220 + 80042ee: f107 030c add.w r3, r7, #12 + 80042f2: 681b ldr r3, [r3, #0] + 80042f4: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 + 80042f8: f8c3 2220 str.w r2, [r3, #544] ; 0x220 #if _FS_LOCK fp->lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); - 8004244: 1dfb adds r3, r7, #7 - 8004246: 781b ldrb r3, [r3, #0] - 8004248: f023 0301 bic.w r3, r3, #1 - 800424c: 2b00 cmp r3, #0 - 800424e: bf14 ite ne - 8004250: 2301 movne r3, #1 - 8004252: 2300 moveq r3, #0 - 8004254: b2db uxtb r3, r3 - 8004256: 461a mov r2, r3 - 8004258: f107 0320 add.w r3, r7, #32 - 800425c: 4611 mov r1, r2 - 800425e: 4618 mov r0, r3 - 8004260: f7fe fa30 bl 80026c4 - 8004264: 4602 mov r2, r0 - 8004266: f107 030c add.w r3, r7, #12 - 800426a: 681b ldr r3, [r3, #0] - 800426c: f8c3 2228 str.w r2, [r3, #552] ; 0x228 + 80042fc: 1dfb adds r3, r7, #7 + 80042fe: 781b ldrb r3, [r3, #0] + 8004300: f023 0301 bic.w r3, r3, #1 + 8004304: 2b00 cmp r3, #0 + 8004306: bf14 ite ne + 8004308: 2301 movne r3, #1 + 800430a: 2300 moveq r3, #0 + 800430c: b2db uxtb r3, r3 + 800430e: 461a mov r2, r3 + 8004310: f107 0320 add.w r3, r7, #32 + 8004314: 4611 mov r1, r2 + 8004316: 4618 mov r0, r3 + 8004318: f7fe fa30 bl 800277c + 800431c: 4602 mov r2, r0 + 800431e: f107 030c add.w r3, r7, #12 + 8004322: 681b ldr r3, [r3, #0] + 8004324: f8c3 2228 str.w r2, [r3, #552] ; 0x228 if (!fp->lockid) res = FR_INT_ERR; - 8004270: f107 030c add.w r3, r7, #12 - 8004274: 681b ldr r3, [r3, #0] - 8004276: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 - 800427a: 2b00 cmp r3, #0 - 800427c: d102 bne.n 8004284 - 800427e: 2302 movs r3, #2 - 8004280: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004328: f107 030c add.w r3, r7, #12 + 800432c: 681b ldr r3, [r3, #0] + 800432e: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 + 8004332: 2b00 cmp r3, #0 + 8004334: d102 bne.n 800433c + 8004336: 2302 movs r3, #2 + 8004338: f887 324f strb.w r3, [r7, #591] ; 0x24f } } #endif FREE_BUF(); if (res == FR_OK) { - 8004284: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8004288: 2b00 cmp r3, #0 - 800428a: d15d bne.n 8004348 + 800433c: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004340: 2b00 cmp r3, #0 + 8004342: d15d bne.n 8004400 fp->flag = mode; /* File access mode */ - 800428c: f107 030c add.w r3, r7, #12 - 8004290: 681b ldr r3, [r3, #0] - 8004292: 1dfa adds r2, r7, #7 - 8004294: 7812 ldrb r2, [r2, #0] - 8004296: f883 2206 strb.w r2, [r3, #518] ; 0x206 + 8004344: f107 030c add.w r3, r7, #12 + 8004348: 681b ldr r3, [r3, #0] + 800434a: 1dfa adds r2, r7, #7 + 800434c: 7812 ldrb r2, [r2, #0] + 800434e: f883 2206 strb.w r2, [r3, #518] ; 0x206 fp->err = 0; /* Clear error flag */ - 800429a: f107 030c add.w r3, r7, #12 - 800429e: 681b ldr r3, [r3, #0] - 80042a0: 2200 movs r2, #0 - 80042a2: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004352: f107 030c add.w r3, r7, #12 + 8004356: 681b ldr r3, [r3, #0] + 8004358: 2200 movs r2, #0 + 800435a: f883 2207 strb.w r2, [r3, #519] ; 0x207 fp->sclust = ld_clust(dj.fs, dir); /* File start cluster */ - 80042a6: f107 0320 add.w r3, r7, #32 - 80042aa: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80042ae: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 - 80042b2: 4618 mov r0, r3 - 80042b4: f7ff f846 bl 8003344 - 80042b8: 4602 mov r2, r0 - 80042ba: f107 030c add.w r3, r7, #12 - 80042be: 681b ldr r3, [r3, #0] - 80042c0: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 800435e: f107 0320 add.w r3, r7, #32 + 8004362: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004366: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 + 800436a: 4618 mov r0, r3 + 800436c: f7ff f846 bl 80033fc + 8004370: 4602 mov r2, r0 + 8004372: f107 030c add.w r3, r7, #12 + 8004376: 681b ldr r3, [r3, #0] + 8004378: f8c3 2210 str.w r2, [r3, #528] ; 0x210 fp->fsize = LD_DWORD(dir + DIR_FileSize); /* File size */ - 80042c4: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80042c8: 331f adds r3, #31 - 80042ca: 781b ldrb r3, [r3, #0] - 80042cc: 061a lsls r2, r3, #24 - 80042ce: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80042d2: 331e adds r3, #30 - 80042d4: 781b ldrb r3, [r3, #0] - 80042d6: 041b lsls r3, r3, #16 - 80042d8: 4313 orrs r3, r2 - 80042da: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 - 80042de: 321d adds r2, #29 - 80042e0: 7812 ldrb r2, [r2, #0] - 80042e2: 0212 lsls r2, r2, #8 - 80042e4: 4313 orrs r3, r2 - 80042e6: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 - 80042ea: 321c adds r2, #28 - 80042ec: 7812 ldrb r2, [r2, #0] - 80042ee: 431a orrs r2, r3 - 80042f0: f107 030c add.w r3, r7, #12 - 80042f4: 681b ldr r3, [r3, #0] - 80042f6: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 800437c: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8004380: 331f adds r3, #31 + 8004382: 781b ldrb r3, [r3, #0] + 8004384: 061a lsls r2, r3, #24 + 8004386: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 800438a: 331e adds r3, #30 + 800438c: 781b ldrb r3, [r3, #0] + 800438e: 041b lsls r3, r3, #16 + 8004390: 4313 orrs r3, r2 + 8004392: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 + 8004396: 321d adds r2, #29 + 8004398: 7812 ldrb r2, [r2, #0] + 800439a: 0212 lsls r2, r2, #8 + 800439c: 4313 orrs r3, r2 + 800439e: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 + 80043a2: 321c adds r2, #28 + 80043a4: 7812 ldrb r2, [r2, #0] + 80043a6: 431a orrs r2, r3 + 80043a8: f107 030c add.w r3, r7, #12 + 80043ac: 681b ldr r3, [r3, #0] + 80043ae: f8c3 220c str.w r2, [r3, #524] ; 0x20c fp->fptr = 0; /* File pointer */ - 80042fa: f107 030c add.w r3, r7, #12 - 80042fe: 681b ldr r3, [r3, #0] - 8004300: 2200 movs r2, #0 - 8004302: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + 80043b2: f107 030c add.w r3, r7, #12 + 80043b6: 681b ldr r3, [r3, #0] + 80043b8: 2200 movs r2, #0 + 80043ba: f8c3 2208 str.w r2, [r3, #520] ; 0x208 fp->dsect = 0; - 8004306: f107 030c add.w r3, r7, #12 - 800430a: 681b ldr r3, [r3, #0] - 800430c: 2200 movs r2, #0 - 800430e: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 80043be: f107 030c add.w r3, r7, #12 + 80043c2: 681b ldr r3, [r3, #0] + 80043c4: 2200 movs r2, #0 + 80043c6: f8c3 2218 str.w r2, [r3, #536] ; 0x218 #if _USE_FASTSEEK fp->cltbl = 0; /* Normal seek mode */ - 8004312: f107 030c add.w r3, r7, #12 - 8004316: 681b ldr r3, [r3, #0] - 8004318: 2200 movs r2, #0 - 800431a: f8c3 2224 str.w r2, [r3, #548] ; 0x224 + 80043ca: f107 030c add.w r3, r7, #12 + 80043ce: 681b ldr r3, [r3, #0] + 80043d0: 2200 movs r2, #0 + 80043d2: f8c3 2224 str.w r2, [r3, #548] ; 0x224 #endif fp->fs = dj.fs; /* Validate file object */ - 800431e: f107 0320 add.w r3, r7, #32 - 8004322: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 8004326: f107 030c add.w r3, r7, #12 - 800432a: 681b ldr r3, [r3, #0] - 800432c: f8c3 2200 str.w r2, [r3, #512] ; 0x200 + 80043d6: f107 0320 add.w r3, r7, #32 + 80043da: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80043de: f107 030c add.w r3, r7, #12 + 80043e2: 681b ldr r3, [r3, #0] + 80043e4: f8c3 2200 str.w r2, [r3, #512] ; 0x200 fp->id = fp->fs->id; - 8004330: f107 030c add.w r3, r7, #12 - 8004334: 681b ldr r3, [r3, #0] - 8004336: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800433a: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 - 800433e: f107 030c add.w r3, r7, #12 - 8004342: 681b ldr r3, [r3, #0] - 8004344: f8a3 2204 strh.w r2, [r3, #516] ; 0x204 + 80043e8: f107 030c add.w r3, r7, #12 + 80043ec: 681b ldr r3, [r3, #0] + 80043ee: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80043f2: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 + 80043f6: f107 030c add.w r3, r7, #12 + 80043fa: 681b ldr r3, [r3, #0] + 80043fc: f8a3 2204 strh.w r2, [r3, #516] ; 0x204 } } LEAVE_FF(dj.fs, res); - 8004348: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004400: f897 324f ldrb.w r3, [r7, #591] ; 0x24f } - 800434c: 4618 mov r0, r3 - 800434e: f507 7714 add.w r7, r7, #592 ; 0x250 - 8004352: 46bd mov sp, r7 - 8004354: bd80 pop {r7, pc} + 8004404: 4618 mov r0, r3 + 8004406: f507 7714 add.w r7, r7, #592 ; 0x250 + 800440a: 46bd mov sp, r7 + 800440c: bd80 pop {r7, pc} -08004356 : +0800440e : FIL* fp, /* Pointer to the file object */ void* buff, /* Pointer to data buffer */ UINT btr, /* Number of bytes to read */ UINT* br /* Pointer to number of bytes read */ ) { - 8004356: b580 push {r7, lr} - 8004358: b08c sub sp, #48 ; 0x30 - 800435a: af00 add r7, sp, #0 - 800435c: 60f8 str r0, [r7, #12] - 800435e: 60b9 str r1, [r7, #8] - 8004360: 607a str r2, [r7, #4] - 8004362: 603b str r3, [r7, #0] + 800440e: b580 push {r7, lr} + 8004410: b08c sub sp, #48 ; 0x30 + 8004412: af00 add r7, sp, #0 + 8004414: 60f8 str r0, [r7, #12] + 8004416: 60b9 str r1, [r7, #8] + 8004418: 607a str r2, [r7, #4] + 800441a: 603b str r3, [r7, #0] FRESULT res; DWORD clst, sect, remain; UINT rcnt, cc; BYTE csect, *rbuff = (BYTE*)buff; - 8004364: 68bb ldr r3, [r7, #8] - 8004366: 623b str r3, [r7, #32] + 800441c: 68bb ldr r3, [r7, #8] + 800441e: 623b str r3, [r7, #32] *br = 0; /* Clear read byte counter */ - 8004368: 683b ldr r3, [r7, #0] - 800436a: 2200 movs r2, #0 - 800436c: 601a str r2, [r3, #0] + 8004420: 683b ldr r3, [r7, #0] + 8004422: 2200 movs r2, #0 + 8004424: 601a str r2, [r3, #0] res = validate(fp); /* Check validity */ - 800436e: 68f8 ldr r0, [r7, #12] - 8004370: f7ff fd6a bl 8003e48 - 8004374: 4603 mov r3, r0 - 8004376: 77fb strb r3, [r7, #31] + 8004426: 68f8 ldr r0, [r7, #12] + 8004428: f7ff fd6a bl 8003f00 + 800442c: 4603 mov r3, r0 + 800442e: 77fb strb r3, [r7, #31] if (res != FR_OK) LEAVE_FF(fp->fs, res); - 8004378: 7ffb ldrb r3, [r7, #31] - 800437a: 2b00 cmp r3, #0 - 800437c: d001 beq.n 8004382 - 800437e: 7ffb ldrb r3, [r7, #31] - 8004380: e150 b.n 8004624 + 8004430: 7ffb ldrb r3, [r7, #31] + 8004432: 2b00 cmp r3, #0 + 8004434: d001 beq.n 800443a + 8004436: 7ffb ldrb r3, [r7, #31] + 8004438: e150 b.n 80046dc if (fp->err) /* Check error */ - 8004382: 68fb ldr r3, [r7, #12] - 8004384: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 - 8004388: 2b00 cmp r3, #0 - 800438a: d003 beq.n 8004394 + 800443a: 68fb ldr r3, [r7, #12] + 800443c: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 + 8004440: 2b00 cmp r3, #0 + 8004442: d003 beq.n 800444c LEAVE_FF(fp->fs, (FRESULT)fp->err); - 800438c: 68fb ldr r3, [r7, #12] - 800438e: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 - 8004392: e147 b.n 8004624 + 8004444: 68fb ldr r3, [r7, #12] + 8004446: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 + 800444a: e147 b.n 80046dc if (!(fp->flag & FA_READ)) /* Check access mode */ - 8004394: 68fb ldr r3, [r7, #12] - 8004396: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 800439a: f003 0301 and.w r3, r3, #1 - 800439e: 2b00 cmp r3, #0 - 80043a0: d101 bne.n 80043a6 + 800444c: 68fb ldr r3, [r7, #12] + 800444e: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 8004452: f003 0301 and.w r3, r3, #1 + 8004456: 2b00 cmp r3, #0 + 8004458: d101 bne.n 800445e LEAVE_FF(fp->fs, FR_DENIED); - 80043a2: 2307 movs r3, #7 - 80043a4: e13e b.n 8004624 + 800445a: 2307 movs r3, #7 + 800445c: e13e b.n 80046dc remain = fp->fsize - fp->fptr; - 80043a6: 68fb ldr r3, [r7, #12] - 80043a8: f8d3 220c ldr.w r2, [r3, #524] ; 0x20c - 80043ac: 68fb ldr r3, [r7, #12] - 80043ae: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 80043b2: 1ad3 subs r3, r2, r3 - 80043b4: 61bb str r3, [r7, #24] + 800445e: 68fb ldr r3, [r7, #12] + 8004460: f8d3 220c ldr.w r2, [r3, #524] ; 0x20c + 8004464: 68fb ldr r3, [r7, #12] + 8004466: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 800446a: 1ad3 subs r3, r2, r3 + 800446c: 61bb str r3, [r7, #24] if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ - 80043b6: 687a ldr r2, [r7, #4] - 80043b8: 69bb ldr r3, [r7, #24] - 80043ba: 429a cmp r2, r3 - 80043bc: f240 812d bls.w 800461a - 80043c0: 69bb ldr r3, [r7, #24] - 80043c2: 607b str r3, [r7, #4] + 800446e: 687a ldr r2, [r7, #4] + 8004470: 69bb ldr r3, [r7, #24] + 8004472: 429a cmp r2, r3 + 8004474: f240 812d bls.w 80046d2 + 8004478: 69bb ldr r3, [r7, #24] + 800447a: 607b str r3, [r7, #4] for ( ; btr; /* Repeat until all data read */ - 80043c4: e129 b.n 800461a + 800447c: e129 b.n 80046d2 rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - 80043c6: 68fb ldr r3, [r7, #12] - 80043c8: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 80043cc: f3c3 0308 ubfx r3, r3, #0, #9 - 80043d0: 2b00 cmp r3, #0 - 80043d2: f040 80f2 bne.w 80045ba + 800447e: 68fb ldr r3, [r7, #12] + 8004480: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 8004484: f3c3 0308 ubfx r3, r3, #0, #9 + 8004488: 2b00 cmp r3, #0 + 800448a: f040 80f2 bne.w 8004672 csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ - 80043d6: 68fb ldr r3, [r7, #12] - 80043d8: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 80043dc: 0a5b lsrs r3, r3, #9 - 80043de: b2da uxtb r2, r3 - 80043e0: 68fb ldr r3, [r7, #12] - 80043e2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80043e6: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 80043ea: 3b01 subs r3, #1 - 80043ec: b2db uxtb r3, r3 - 80043ee: 4013 ands r3, r2 - 80043f0: 75fb strb r3, [r7, #23] + 800448e: 68fb ldr r3, [r7, #12] + 8004490: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 8004494: 0a5b lsrs r3, r3, #9 + 8004496: b2da uxtb r2, r3 + 8004498: 68fb ldr r3, [r7, #12] + 800449a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800449e: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 80044a2: 3b01 subs r3, #1 + 80044a4: b2db uxtb r3, r3 + 80044a6: 4013 ands r3, r2 + 80044a8: 75fb strb r3, [r7, #23] if (!csect) { /* On the cluster boundary? */ - 80043f2: 7dfb ldrb r3, [r7, #23] - 80043f4: 2b00 cmp r3, #0 - 80043f6: d139 bne.n 800446c + 80044aa: 7dfb ldrb r3, [r7, #23] + 80044ac: 2b00 cmp r3, #0 + 80044ae: d139 bne.n 8004524 if (fp->fptr == 0) { /* On the top of the file? */ - 80043f8: 68fb ldr r3, [r7, #12] - 80043fa: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 80043fe: 2b00 cmp r3, #0 - 8004400: d104 bne.n 800440c + 80044b0: 68fb ldr r3, [r7, #12] + 80044b2: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80044b6: 2b00 cmp r3, #0 + 80044b8: d104 bne.n 80044c4 clst = fp->sclust; /* Follow from the origin */ - 8004402: 68fb ldr r3, [r7, #12] - 8004404: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8004408: 62fb str r3, [r7, #44] ; 0x2c - 800440a: e018 b.n 800443e + 80044ba: 68fb ldr r3, [r7, #12] + 80044bc: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 80044c0: 62fb str r3, [r7, #44] ; 0x2c + 80044c2: e018 b.n 80044f6 } else { /* Middle or end of the file */ #if _USE_FASTSEEK if (fp->cltbl) - 800440c: 68fb ldr r3, [r7, #12] - 800440e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 8004412: 2b00 cmp r3, #0 - 8004414: d008 beq.n 8004428 + 80044c4: 68fb ldr r3, [r7, #12] + 80044c6: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 80044ca: 2b00 cmp r3, #0 + 80044cc: d008 beq.n 80044e0 clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ - 8004416: 68fb ldr r3, [r7, #12] - 8004418: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 800441c: 4619 mov r1, r3 - 800441e: 68f8 ldr r0, [r7, #12] - 8004420: f7fe fd87 bl 8002f32 - 8004424: 62f8 str r0, [r7, #44] ; 0x2c - 8004426: e00a b.n 800443e + 80044ce: 68fb ldr r3, [r7, #12] + 80044d0: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80044d4: 4619 mov r1, r3 + 80044d6: 68f8 ldr r0, [r7, #12] + 80044d8: f7fe fd87 bl 8002fea + 80044dc: 62f8 str r0, [r7, #44] ; 0x2c + 80044de: e00a b.n 80044f6 else #endif clst = get_fat(fp->fs, fp->clust); /* Follow cluster chain on the FAT */ - 8004428: 68fb ldr r3, [r7, #12] - 800442a: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 800442e: 68fb ldr r3, [r7, #12] - 8004430: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8004434: 4619 mov r1, r3 - 8004436: 4610 mov r0, r2 - 8004438: f7fe fabc bl 80029b4 - 800443c: 62f8 str r0, [r7, #44] ; 0x2c + 80044e0: 68fb ldr r3, [r7, #12] + 80044e2: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80044e6: 68fb ldr r3, [r7, #12] + 80044e8: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80044ec: 4619 mov r1, r3 + 80044ee: 4610 mov r0, r2 + 80044f0: f7fe fabc bl 8002a6c + 80044f4: 62f8 str r0, [r7, #44] ; 0x2c } if (clst < 2) ABORT(fp->fs, FR_INT_ERR); - 800443e: 6afb ldr r3, [r7, #44] ; 0x2c - 8004440: 2b01 cmp r3, #1 - 8004442: d805 bhi.n 8004450 - 8004444: 68fb ldr r3, [r7, #12] - 8004446: 2202 movs r2, #2 - 8004448: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 800444c: 2302 movs r3, #2 - 800444e: e0e9 b.n 8004624 + 80044f6: 6afb ldr r3, [r7, #44] ; 0x2c + 80044f8: 2b01 cmp r3, #1 + 80044fa: d805 bhi.n 8004508 + 80044fc: 68fb ldr r3, [r7, #12] + 80044fe: 2202 movs r2, #2 + 8004500: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004504: 2302 movs r3, #2 + 8004506: e0e9 b.n 80046dc if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - 8004450: 6afb ldr r3, [r7, #44] ; 0x2c - 8004452: f1b3 3fff cmp.w r3, #4294967295 - 8004456: d105 bne.n 8004464 - 8004458: 68fb ldr r3, [r7, #12] - 800445a: 2201 movs r2, #1 - 800445c: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 8004460: 2301 movs r3, #1 - 8004462: e0df b.n 8004624 + 8004508: 6afb ldr r3, [r7, #44] ; 0x2c + 800450a: f1b3 3fff cmp.w r3, #4294967295 + 800450e: d105 bne.n 800451c + 8004510: 68fb ldr r3, [r7, #12] + 8004512: 2201 movs r2, #1 + 8004514: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004518: 2301 movs r3, #1 + 800451a: e0df b.n 80046dc fp->clust = clst; /* Update current cluster */ - 8004464: 68fb ldr r3, [r7, #12] - 8004466: 6afa ldr r2, [r7, #44] ; 0x2c - 8004468: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 800451c: 68fb ldr r3, [r7, #12] + 800451e: 6afa ldr r2, [r7, #44] ; 0x2c + 8004520: f8c3 2214 str.w r2, [r3, #532] ; 0x214 } sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ - 800446c: 68fb ldr r3, [r7, #12] - 800446e: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 8004472: 68fb ldr r3, [r7, #12] - 8004474: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8004478: 4619 mov r1, r3 - 800447a: 4610 mov r0, r2 - 800447c: f7fe fa79 bl 8002972 - 8004480: 6138 str r0, [r7, #16] + 8004524: 68fb ldr r3, [r7, #12] + 8004526: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 800452a: 68fb ldr r3, [r7, #12] + 800452c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8004530: 4619 mov r1, r3 + 8004532: 4610 mov r0, r2 + 8004534: f7fe fa79 bl 8002a2a + 8004538: 6138 str r0, [r7, #16] if (!sect) ABORT(fp->fs, FR_INT_ERR); - 8004482: 693b ldr r3, [r7, #16] - 8004484: 2b00 cmp r3, #0 - 8004486: d105 bne.n 8004494 - 8004488: 68fb ldr r3, [r7, #12] - 800448a: 2202 movs r2, #2 - 800448c: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 8004490: 2302 movs r3, #2 - 8004492: e0c7 b.n 8004624 + 800453a: 693b ldr r3, [r7, #16] + 800453c: 2b00 cmp r3, #0 + 800453e: d105 bne.n 800454c + 8004540: 68fb ldr r3, [r7, #12] + 8004542: 2202 movs r2, #2 + 8004544: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004548: 2302 movs r3, #2 + 800454a: e0c7 b.n 80046dc sect += csect; - 8004494: 7dfb ldrb r3, [r7, #23] - 8004496: 693a ldr r2, [r7, #16] - 8004498: 4413 add r3, r2 - 800449a: 613b str r3, [r7, #16] + 800454c: 7dfb ldrb r3, [r7, #23] + 800454e: 693a ldr r2, [r7, #16] + 8004550: 4413 add r3, r2 + 8004552: 613b str r3, [r7, #16] cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ - 800449c: 687b ldr r3, [r7, #4] - 800449e: 0a5b lsrs r3, r3, #9 - 80044a0: 627b str r3, [r7, #36] ; 0x24 + 8004554: 687b ldr r3, [r7, #4] + 8004556: 0a5b lsrs r3, r3, #9 + 8004558: 627b str r3, [r7, #36] ; 0x24 if (cc) { /* Read maximum contiguous sectors directly */ - 80044a2: 6a7b ldr r3, [r7, #36] ; 0x24 - 80044a4: 2b00 cmp r3, #0 - 80044a6: d046 beq.n 8004536 + 800455a: 6a7b ldr r3, [r7, #36] ; 0x24 + 800455c: 2b00 cmp r3, #0 + 800455e: d046 beq.n 80045ee if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ - 80044a8: 7dfa ldrb r2, [r7, #23] - 80044aa: 6a7b ldr r3, [r7, #36] ; 0x24 - 80044ac: 4413 add r3, r2 - 80044ae: 68fa ldr r2, [r7, #12] - 80044b0: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 - 80044b4: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 80044b8: 4293 cmp r3, r2 - 80044ba: d908 bls.n 80044ce + 8004560: 7dfa ldrb r2, [r7, #23] + 8004562: 6a7b ldr r3, [r7, #36] ; 0x24 + 8004564: 4413 add r3, r2 + 8004566: 68fa ldr r2, [r7, #12] + 8004568: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 + 800456c: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 8004570: 4293 cmp r3, r2 + 8004572: d908 bls.n 8004586 cc = fp->fs->csize - csect; - 80044bc: 68fb ldr r3, [r7, #12] - 80044be: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80044c2: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 80044c6: 461a mov r2, r3 - 80044c8: 7dfb ldrb r3, [r7, #23] - 80044ca: 1ad3 subs r3, r2, r3 - 80044cc: 627b str r3, [r7, #36] ; 0x24 + 8004574: 68fb ldr r3, [r7, #12] + 8004576: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800457a: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 800457e: 461a mov r2, r3 + 8004580: 7dfb ldrb r3, [r7, #23] + 8004582: 1ad3 subs r3, r2, r3 + 8004584: 627b str r3, [r7, #36] ; 0x24 if (disk_read(fp->fs->drv, rbuff, sect, cc) != RES_OK) - 80044ce: 68fb ldr r3, [r7, #12] - 80044d0: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80044d4: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 80044d8: 6a7b ldr r3, [r7, #36] ; 0x24 - 80044da: 693a ldr r2, [r7, #16] - 80044dc: 6a39 ldr r1, [r7, #32] - 80044de: f7fd ffa9 bl 8002434 - 80044e2: 4603 mov r3, r0 - 80044e4: 2b00 cmp r3, #0 - 80044e6: d005 beq.n 80044f4 + 8004586: 68fb ldr r3, [r7, #12] + 8004588: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800458c: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 8004590: 6a7b ldr r3, [r7, #36] ; 0x24 + 8004592: 693a ldr r2, [r7, #16] + 8004594: 6a39 ldr r1, [r7, #32] + 8004596: f7fd ffa9 bl 80024ec + 800459a: 4603 mov r3, r0 + 800459c: 2b00 cmp r3, #0 + 800459e: d005 beq.n 80045ac ABORT(fp->fs, FR_DISK_ERR); - 80044e8: 68fb ldr r3, [r7, #12] - 80044ea: 2201 movs r2, #1 - 80044ec: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 80044f0: 2301 movs r3, #1 - 80044f2: e097 b.n 8004624 + 80045a0: 68fb ldr r3, [r7, #12] + 80045a2: 2201 movs r2, #1 + 80045a4: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 80045a8: 2301 movs r3, #1 + 80045aa: e097 b.n 80046dc #if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ #if _FS_TINY if (fp->fs->wflag && fp->fs->winsect - sect < cc) mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win.d8, SS(fp->fs)); #else if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) - 80044f4: 68fb ldr r3, [r7, #12] - 80044f6: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 80044fa: f003 0340 and.w r3, r3, #64 ; 0x40 - 80044fe: 2b00 cmp r3, #0 - 8004500: d015 beq.n 800452e - 8004502: 68fb ldr r3, [r7, #12] - 8004504: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 8004508: 693b ldr r3, [r7, #16] - 800450a: 1ad3 subs r3, r2, r3 - 800450c: 6a7a ldr r2, [r7, #36] ; 0x24 - 800450e: 429a cmp r2, r3 - 8004510: d90d bls.n 800452e + 80045ac: 68fb ldr r3, [r7, #12] + 80045ae: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 80045b2: f003 0340 and.w r3, r3, #64 ; 0x40 + 80045b6: 2b00 cmp r3, #0 + 80045b8: d015 beq.n 80045e6 + 80045ba: 68fb ldr r3, [r7, #12] + 80045bc: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 80045c0: 693b ldr r3, [r7, #16] + 80045c2: 1ad3 subs r3, r2, r3 + 80045c4: 6a7a ldr r2, [r7, #36] ; 0x24 + 80045c6: 429a cmp r2, r3 + 80045c8: d90d bls.n 80045e6 mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf.d8, SS(fp->fs)); - 8004512: 68fb ldr r3, [r7, #12] - 8004514: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 8004518: 693b ldr r3, [r7, #16] - 800451a: 1ad3 subs r3, r2, r3 - 800451c: 025b lsls r3, r3, #9 - 800451e: 6a3a ldr r2, [r7, #32] - 8004520: 4413 add r3, r2 - 8004522: 68f9 ldr r1, [r7, #12] - 8004524: f44f 7200 mov.w r2, #512 ; 0x200 - 8004528: 4618 mov r0, r3 - 800452a: f7fd ffc3 bl 80024b4 + 80045ca: 68fb ldr r3, [r7, #12] + 80045cc: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 80045d0: 693b ldr r3, [r7, #16] + 80045d2: 1ad3 subs r3, r2, r3 + 80045d4: 025b lsls r3, r3, #9 + 80045d6: 6a3a ldr r2, [r7, #32] + 80045d8: 4413 add r3, r2 + 80045da: 68f9 ldr r1, [r7, #12] + 80045dc: f44f 7200 mov.w r2, #512 ; 0x200 + 80045e0: 4618 mov r0, r3 + 80045e2: f7fd ffc3 bl 800256c #endif #endif rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ - 800452e: 6a7b ldr r3, [r7, #36] ; 0x24 - 8004530: 025b lsls r3, r3, #9 - 8004532: 62bb str r3, [r7, #40] ; 0x28 + 80045e6: 6a7b ldr r3, [r7, #36] ; 0x24 + 80045e8: 025b lsls r3, r3, #9 + 80045ea: 62bb str r3, [r7, #40] ; 0x28 continue; - 8004534: e05b b.n 80045ee + 80045ec: e05b b.n 80046a6 } #if !_FS_TINY if (fp->dsect != sect) { /* Load data sector if not in cache */ - 8004536: 68fb ldr r3, [r7, #12] - 8004538: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 800453c: 693a ldr r2, [r7, #16] - 800453e: 429a cmp r2, r3 - 8004540: d037 beq.n 80045b2 + 80045ee: 68fb ldr r3, [r7, #12] + 80045f0: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 80045f4: 693a ldr r2, [r7, #16] + 80045f6: 429a cmp r2, r3 + 80045f8: d037 beq.n 800466a #if !_FS_READONLY if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - 8004542: 68fb ldr r3, [r7, #12] - 8004544: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 8004548: f003 0340 and.w r3, r3, #64 ; 0x40 - 800454c: 2b00 cmp r3, #0 - 800454e: d01d beq.n 800458c + 80045fa: 68fb ldr r3, [r7, #12] + 80045fc: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 8004600: f003 0340 and.w r3, r3, #64 ; 0x40 + 8004604: 2b00 cmp r3, #0 + 8004606: d01d beq.n 8004644 if (disk_write(fp->fs->drv, fp->buf.d8, fp->dsect, 1) != RES_OK) - 8004550: 68fb ldr r3, [r7, #12] - 8004552: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004556: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 800455a: 68f9 ldr r1, [r7, #12] - 800455c: 68fb ldr r3, [r7, #12] - 800455e: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 8004562: 2301 movs r3, #1 - 8004564: f7fd ff86 bl 8002474 - 8004568: 4603 mov r3, r0 - 800456a: 2b00 cmp r3, #0 - 800456c: d005 beq.n 800457a + 8004608: 68fb ldr r3, [r7, #12] + 800460a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800460e: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 8004612: 68f9 ldr r1, [r7, #12] + 8004614: 68fb ldr r3, [r7, #12] + 8004616: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 800461a: 2301 movs r3, #1 + 800461c: f7fd ff86 bl 800252c + 8004620: 4603 mov r3, r0 + 8004622: 2b00 cmp r3, #0 + 8004624: d005 beq.n 8004632 ABORT(fp->fs, FR_DISK_ERR); - 800456e: 68fb ldr r3, [r7, #12] - 8004570: 2201 movs r2, #1 - 8004572: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 8004576: 2301 movs r3, #1 - 8004578: e054 b.n 8004624 + 8004626: 68fb ldr r3, [r7, #12] + 8004628: 2201 movs r2, #1 + 800462a: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 800462e: 2301 movs r3, #1 + 8004630: e054 b.n 80046dc fp->flag &= ~FA__DIRTY; - 800457a: 68fb ldr r3, [r7, #12] - 800457c: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 8004580: f023 0340 bic.w r3, r3, #64 ; 0x40 - 8004584: b2da uxtb r2, r3 - 8004586: 68fb ldr r3, [r7, #12] - 8004588: f883 2206 strb.w r2, [r3, #518] ; 0x206 + 8004632: 68fb ldr r3, [r7, #12] + 8004634: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 8004638: f023 0340 bic.w r3, r3, #64 ; 0x40 + 800463c: b2da uxtb r2, r3 + 800463e: 68fb ldr r3, [r7, #12] + 8004640: f883 2206 strb.w r2, [r3, #518] ; 0x206 } #endif if (disk_read(fp->fs->drv, fp->buf.d8, sect, 1) != RES_OK) /* Fill sector cache */ - 800458c: 68fb ldr r3, [r7, #12] - 800458e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004592: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 8004596: 68f9 ldr r1, [r7, #12] - 8004598: 2301 movs r3, #1 - 800459a: 693a ldr r2, [r7, #16] - 800459c: f7fd ff4a bl 8002434 - 80045a0: 4603 mov r3, r0 - 80045a2: 2b00 cmp r3, #0 - 80045a4: d005 beq.n 80045b2 + 8004644: 68fb ldr r3, [r7, #12] + 8004646: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800464a: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 800464e: 68f9 ldr r1, [r7, #12] + 8004650: 2301 movs r3, #1 + 8004652: 693a ldr r2, [r7, #16] + 8004654: f7fd ff4a bl 80024ec + 8004658: 4603 mov r3, r0 + 800465a: 2b00 cmp r3, #0 + 800465c: d005 beq.n 800466a ABORT(fp->fs, FR_DISK_ERR); - 80045a6: 68fb ldr r3, [r7, #12] - 80045a8: 2201 movs r2, #1 - 80045aa: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 80045ae: 2301 movs r3, #1 - 80045b0: e038 b.n 8004624 + 800465e: 68fb ldr r3, [r7, #12] + 8004660: 2201 movs r2, #1 + 8004662: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004666: 2301 movs r3, #1 + 8004668: e038 b.n 80046dc } #endif fp->dsect = sect; - 80045b2: 68fb ldr r3, [r7, #12] - 80045b4: 693a ldr r2, [r7, #16] - 80045b6: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 800466a: 68fb ldr r3, [r7, #12] + 800466c: 693a ldr r2, [r7, #16] + 800466e: f8c3 2218 str.w r2, [r3, #536] ; 0x218 } rcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ - 80045ba: 68fb ldr r3, [r7, #12] - 80045bc: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 80045c0: f3c3 0308 ubfx r3, r3, #0, #9 - 80045c4: f5c3 7300 rsb r3, r3, #512 ; 0x200 - 80045c8: 62bb str r3, [r7, #40] ; 0x28 + 8004672: 68fb ldr r3, [r7, #12] + 8004674: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 8004678: f3c3 0308 ubfx r3, r3, #0, #9 + 800467c: f5c3 7300 rsb r3, r3, #512 ; 0x200 + 8004680: 62bb str r3, [r7, #40] ; 0x28 if (rcnt > btr) rcnt = btr; - 80045ca: 6aba ldr r2, [r7, #40] ; 0x28 - 80045cc: 687b ldr r3, [r7, #4] - 80045ce: 429a cmp r2, r3 - 80045d0: d901 bls.n 80045d6 - 80045d2: 687b ldr r3, [r7, #4] - 80045d4: 62bb str r3, [r7, #40] ; 0x28 + 8004682: 6aba ldr r2, [r7, #40] ; 0x28 + 8004684: 687b ldr r3, [r7, #4] + 8004686: 429a cmp r2, r3 + 8004688: d901 bls.n 800468e + 800468a: 687b ldr r3, [r7, #4] + 800468c: 62bb str r3, [r7, #40] ; 0x28 #if _FS_TINY if (move_window(fp->fs, fp->dsect) != FR_OK) /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); mem_cpy(rbuff, &fp->fs->win.d8[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ #else mem_cpy(rbuff, &fp->buf.d8[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ - 80045d6: 68fb ldr r3, [r7, #12] - 80045d8: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 80045dc: f3c3 0308 ubfx r3, r3, #0, #9 - 80045e0: 68fa ldr r2, [r7, #12] - 80045e2: 4413 add r3, r2 - 80045e4: 6aba ldr r2, [r7, #40] ; 0x28 - 80045e6: 4619 mov r1, r3 - 80045e8: 6a38 ldr r0, [r7, #32] - 80045ea: f7fd ff63 bl 80024b4 + 800468e: 68fb ldr r3, [r7, #12] + 8004690: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 8004694: f3c3 0308 ubfx r3, r3, #0, #9 + 8004698: 68fa ldr r2, [r7, #12] + 800469a: 4413 add r3, r2 + 800469c: 6aba ldr r2, [r7, #40] ; 0x28 + 800469e: 4619 mov r1, r3 + 80046a0: 6a38 ldr r0, [r7, #32] + 80046a2: f7fd ff63 bl 800256c rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { - 80045ee: 6a3a ldr r2, [r7, #32] - 80045f0: 6abb ldr r3, [r7, #40] ; 0x28 - 80045f2: 4413 add r3, r2 - 80045f4: 623b str r3, [r7, #32] - 80045f6: 68fb ldr r3, [r7, #12] - 80045f8: f8d3 2208 ldr.w r2, [r3, #520] ; 0x208 - 80045fc: 6abb ldr r3, [r7, #40] ; 0x28 - 80045fe: 441a add r2, r3 - 8004600: 68fb ldr r3, [r7, #12] - 8004602: f8c3 2208 str.w r2, [r3, #520] ; 0x208 - 8004606: 683b ldr r3, [r7, #0] - 8004608: 681a ldr r2, [r3, #0] - 800460a: 6abb ldr r3, [r7, #40] ; 0x28 - 800460c: 441a add r2, r3 - 800460e: 683b ldr r3, [r7, #0] - 8004610: 601a str r2, [r3, #0] - 8004612: 687a ldr r2, [r7, #4] - 8004614: 6abb ldr r3, [r7, #40] ; 0x28 - 8004616: 1ad3 subs r3, r2, r3 - 8004618: 607b str r3, [r7, #4] + 80046a6: 6a3a ldr r2, [r7, #32] + 80046a8: 6abb ldr r3, [r7, #40] ; 0x28 + 80046aa: 4413 add r3, r2 + 80046ac: 623b str r3, [r7, #32] + 80046ae: 68fb ldr r3, [r7, #12] + 80046b0: f8d3 2208 ldr.w r2, [r3, #520] ; 0x208 + 80046b4: 6abb ldr r3, [r7, #40] ; 0x28 + 80046b6: 441a add r2, r3 + 80046b8: 68fb ldr r3, [r7, #12] + 80046ba: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + 80046be: 683b ldr r3, [r7, #0] + 80046c0: 681a ldr r2, [r3, #0] + 80046c2: 6abb ldr r3, [r7, #40] ; 0x28 + 80046c4: 441a add r2, r3 + 80046c6: 683b ldr r3, [r7, #0] + 80046c8: 601a str r2, [r3, #0] + 80046ca: 687a ldr r2, [r7, #4] + 80046cc: 6abb ldr r3, [r7, #40] ; 0x28 + 80046ce: 1ad3 subs r3, r2, r3 + 80046d0: 607b str r3, [r7, #4] for ( ; btr; /* Repeat until all data read */ - 800461a: 687b ldr r3, [r7, #4] - 800461c: 2b00 cmp r3, #0 - 800461e: f47f aed2 bne.w 80043c6 + 80046d2: 687b ldr r3, [r7, #4] + 80046d4: 2b00 cmp r3, #0 + 80046d6: f47f aed2 bne.w 800447e #endif } LEAVE_FF(fp->fs, FR_OK); - 8004622: 2300 movs r3, #0 + 80046da: 2300 movs r3, #0 } - 8004624: 4618 mov r0, r3 - 8004626: 3730 adds r7, #48 ; 0x30 - 8004628: 46bd mov sp, r7 - 800462a: bd80 pop {r7, pc} + 80046dc: 4618 mov r0, r3 + 80046de: 3730 adds r7, #48 ; 0x30 + 80046e0: 46bd mov sp, r7 + 80046e2: bd80 pop {r7, pc} -0800462c : +080046e4 : * @param lun : only used for USB Key Disk to add multi-lun management else the paramter must be equal to 0 * @retval Returns 0 in case of success, otherwise 1. */ uint8_t FATFS_LinkDriverEx(Diskio_drvTypeDef *drv, char *path, uint8_t lun) { - 800462c: b480 push {r7} - 800462e: b087 sub sp, #28 - 8004630: af00 add r7, sp, #0 - 8004632: 60f8 str r0, [r7, #12] - 8004634: 60b9 str r1, [r7, #8] - 8004636: 4613 mov r3, r2 - 8004638: 71fb strb r3, [r7, #7] + 80046e4: b480 push {r7} + 80046e6: b087 sub sp, #28 + 80046e8: af00 add r7, sp, #0 + 80046ea: 60f8 str r0, [r7, #12] + 80046ec: 60b9 str r1, [r7, #8] + 80046ee: 4613 mov r3, r2 + 80046f0: 71fb strb r3, [r7, #7] uint8_t ret = 1; - 800463a: 2301 movs r3, #1 - 800463c: 75fb strb r3, [r7, #23] + 80046f2: 2301 movs r3, #1 + 80046f4: 75fb strb r3, [r7, #23] uint8_t DiskNum = 0; - 800463e: 2300 movs r3, #0 - 8004640: 75bb strb r3, [r7, #22] + 80046f6: 2300 movs r3, #0 + 80046f8: 75bb strb r3, [r7, #22] if(disk.nbr <= _VOLUMES) - 8004642: 4b1e ldr r3, [pc, #120] ; (80046bc ) - 8004644: 7a5b ldrb r3, [r3, #9] - 8004646: b2db uxtb r3, r3 - 8004648: 2b01 cmp r3, #1 - 800464a: d831 bhi.n 80046b0 + 80046fa: 4b1e ldr r3, [pc, #120] ; (8004774 ) + 80046fc: 7a5b ldrb r3, [r3, #9] + 80046fe: b2db uxtb r3, r3 + 8004700: 2b01 cmp r3, #1 + 8004702: d831 bhi.n 8004768 { disk.is_initialized[disk.nbr] = 0; - 800464c: 4b1b ldr r3, [pc, #108] ; (80046bc ) - 800464e: 7a5b ldrb r3, [r3, #9] - 8004650: b2db uxtb r3, r3 - 8004652: 461a mov r2, r3 - 8004654: 4b19 ldr r3, [pc, #100] ; (80046bc ) - 8004656: 2100 movs r1, #0 - 8004658: 5499 strb r1, [r3, r2] + 8004704: 4b1b ldr r3, [pc, #108] ; (8004774 ) + 8004706: 7a5b ldrb r3, [r3, #9] + 8004708: b2db uxtb r3, r3 + 800470a: 461a mov r2, r3 + 800470c: 4b19 ldr r3, [pc, #100] ; (8004774 ) + 800470e: 2100 movs r1, #0 + 8004710: 5499 strb r1, [r3, r2] disk.drv[disk.nbr] = drv; - 800465a: 4b18 ldr r3, [pc, #96] ; (80046bc ) - 800465c: 7a5b ldrb r3, [r3, #9] - 800465e: b2db uxtb r3, r3 - 8004660: 4a16 ldr r2, [pc, #88] ; (80046bc ) - 8004662: 009b lsls r3, r3, #2 - 8004664: 4413 add r3, r2 - 8004666: 68fa ldr r2, [r7, #12] - 8004668: 605a str r2, [r3, #4] + 8004712: 4b18 ldr r3, [pc, #96] ; (8004774 ) + 8004714: 7a5b ldrb r3, [r3, #9] + 8004716: b2db uxtb r3, r3 + 8004718: 4a16 ldr r2, [pc, #88] ; (8004774 ) + 800471a: 009b lsls r3, r3, #2 + 800471c: 4413 add r3, r2 + 800471e: 68fa ldr r2, [r7, #12] + 8004720: 605a str r2, [r3, #4] disk.lun[disk.nbr] = lun; - 800466a: 4b14 ldr r3, [pc, #80] ; (80046bc ) - 800466c: 7a5b ldrb r3, [r3, #9] - 800466e: b2db uxtb r3, r3 - 8004670: 461a mov r2, r3 - 8004672: 4b12 ldr r3, [pc, #72] ; (80046bc ) - 8004674: 4413 add r3, r2 - 8004676: 79fa ldrb r2, [r7, #7] - 8004678: 721a strb r2, [r3, #8] + 8004722: 4b14 ldr r3, [pc, #80] ; (8004774 ) + 8004724: 7a5b ldrb r3, [r3, #9] + 8004726: b2db uxtb r3, r3 + 8004728: 461a mov r2, r3 + 800472a: 4b12 ldr r3, [pc, #72] ; (8004774 ) + 800472c: 4413 add r3, r2 + 800472e: 79fa ldrb r2, [r7, #7] + 8004730: 721a strb r2, [r3, #8] DiskNum = disk.nbr++; - 800467a: 4b10 ldr r3, [pc, #64] ; (80046bc ) - 800467c: 7a5b ldrb r3, [r3, #9] - 800467e: b2db uxtb r3, r3 - 8004680: 1c5a adds r2, r3, #1 - 8004682: b2d1 uxtb r1, r2 - 8004684: 4a0d ldr r2, [pc, #52] ; (80046bc ) - 8004686: 7251 strb r1, [r2, #9] - 8004688: 75bb strb r3, [r7, #22] + 8004732: 4b10 ldr r3, [pc, #64] ; (8004774 ) + 8004734: 7a5b ldrb r3, [r3, #9] + 8004736: b2db uxtb r3, r3 + 8004738: 1c5a adds r2, r3, #1 + 800473a: b2d1 uxtb r1, r2 + 800473c: 4a0d ldr r2, [pc, #52] ; (8004774 ) + 800473e: 7251 strb r1, [r2, #9] + 8004740: 75bb strb r3, [r7, #22] path[0] = DiskNum + '0'; - 800468a: 7dbb ldrb r3, [r7, #22] - 800468c: 3330 adds r3, #48 ; 0x30 - 800468e: b2da uxtb r2, r3 - 8004690: 68bb ldr r3, [r7, #8] - 8004692: 701a strb r2, [r3, #0] + 8004742: 7dbb ldrb r3, [r7, #22] + 8004744: 3330 adds r3, #48 ; 0x30 + 8004746: b2da uxtb r2, r3 + 8004748: 68bb ldr r3, [r7, #8] + 800474a: 701a strb r2, [r3, #0] path[1] = ':'; - 8004694: 68bb ldr r3, [r7, #8] - 8004696: 3301 adds r3, #1 - 8004698: 223a movs r2, #58 ; 0x3a - 800469a: 701a strb r2, [r3, #0] + 800474c: 68bb ldr r3, [r7, #8] + 800474e: 3301 adds r3, #1 + 8004750: 223a movs r2, #58 ; 0x3a + 8004752: 701a strb r2, [r3, #0] path[2] = '/'; - 800469c: 68bb ldr r3, [r7, #8] - 800469e: 3302 adds r3, #2 - 80046a0: 222f movs r2, #47 ; 0x2f - 80046a2: 701a strb r2, [r3, #0] + 8004754: 68bb ldr r3, [r7, #8] + 8004756: 3302 adds r3, #2 + 8004758: 222f movs r2, #47 ; 0x2f + 800475a: 701a strb r2, [r3, #0] path[3] = 0; - 80046a4: 68bb ldr r3, [r7, #8] - 80046a6: 3303 adds r3, #3 - 80046a8: 2200 movs r2, #0 - 80046aa: 701a strb r2, [r3, #0] + 800475c: 68bb ldr r3, [r7, #8] + 800475e: 3303 adds r3, #3 + 8004760: 2200 movs r2, #0 + 8004762: 701a strb r2, [r3, #0] ret = 0; - 80046ac: 2300 movs r3, #0 - 80046ae: 75fb strb r3, [r7, #23] + 8004764: 2300 movs r3, #0 + 8004766: 75fb strb r3, [r7, #23] } return ret; - 80046b0: 7dfb ldrb r3, [r7, #23] + 8004768: 7dfb ldrb r3, [r7, #23] } - 80046b2: 4618 mov r0, r3 - 80046b4: 371c adds r7, #28 - 80046b6: 46bd mov sp, r7 - 80046b8: bc80 pop {r7} - 80046ba: 4770 bx lr - 80046bc: 20000064 .word 0x20000064 + 800476a: 4618 mov r0, r3 + 800476c: 371c adds r7, #28 + 800476e: 46bd mov sp, r7 + 8004770: bc80 pop {r7} + 8004772: 4770 bx lr + 8004774: 200000cc .word 0x200000cc -080046c0 : +08004778 : * @param drv: pointer to the disk IO Driver structure * @param path: pointer to the logical drive path * @retval Returns 0 in case of success, otherwise 1. */ uint8_t FATFS_LinkDriver(Diskio_drvTypeDef *drv, char *path) { - 80046c0: b580 push {r7, lr} - 80046c2: b082 sub sp, #8 - 80046c4: af00 add r7, sp, #0 - 80046c6: 6078 str r0, [r7, #4] - 80046c8: 6039 str r1, [r7, #0] + 8004778: b580 push {r7, lr} + 800477a: b082 sub sp, #8 + 800477c: af00 add r7, sp, #0 + 800477e: 6078 str r0, [r7, #4] + 8004780: 6039 str r1, [r7, #0] return FATFS_LinkDriverEx(drv, path, 0); - 80046ca: 2200 movs r2, #0 - 80046cc: 6839 ldr r1, [r7, #0] - 80046ce: 6878 ldr r0, [r7, #4] - 80046d0: f7ff ffac bl 800462c - 80046d4: 4603 mov r3, r0 + 8004782: 2200 movs r2, #0 + 8004784: 6839 ldr r1, [r7, #0] + 8004786: 6878 ldr r0, [r7, #4] + 8004788: f7ff ffac bl 80046e4 + 800478c: 4603 mov r3, r0 } - 80046d6: 4618 mov r0, r3 - 80046d8: 3708 adds r7, #8 - 80046da: 46bd mov sp, r7 - 80046dc: bd80 pop {r7, pc} + 800478e: 4618 mov r0, r3 + 8004790: 3708 adds r7, #8 + 8004792: 46bd mov sp, r7 + 8004794: bd80 pop {r7, pc} ... -080046e0 : -#include "fatfs.h" -#include "fatfs_sd.h" +08004798 : FATFS SD; +#define fuck 256 + int my_main() { - 80046e0: b580 push {r7, lr} - 80046e2: f5ad 7d36 sub.w sp, sp, #728 ; 0x2d8 - 80046e6: af04 add r7, sp, #16 + 8004798: b580 push {r7, lr} + 800479a: f5ad 6d8b sub.w sp, sp, #1112 ; 0x458 + 800479e: af04 add r7, sp, #16 uint8_t res; FIL fil; - char fil_buff[128]; - uint16_t br=128; - 80046e8: f107 0316 add.w r3, r7, #22 - 80046ec: 2280 movs r2, #128 ; 0x80 - 80046ee: 801a strh r2, [r3, #0] - char str[16]; + char fil_buff[fuck+1]={0}; + 80047a0: f507 7384 add.w r3, r7, #264 ; 0x108 + 80047a4: 2200 movs r2, #0 + 80047a6: 601a str r2, [r3, #0] + 80047a8: 3304 adds r3, #4 + 80047aa: 22fd movs r2, #253 ; 0xfd + 80047ac: 2100 movs r1, #0 + 80047ae: 4618 mov r0, r3 + 80047b0: f001 fcd4 bl 800615c + char fuck_flag=0; + 80047b4: 2300 movs r3, #0 + 80047b6: f887 3447 strb.w r3, [r7, #1095] ; 0x447 + char fuck_buff; + uint16_t br=0; + 80047ba: f507 7383 add.w r3, r7, #262 ; 0x106 + 80047be: 2200 movs r2, #0 + 80047c0: 801a strh r2, [r3, #0] + char str[fuck+1]={0}; + 80047c2: 1d3b adds r3, r7, #4 + 80047c4: 2200 movs r2, #0 + 80047c6: 601a str r2, [r3, #0] + 80047c8: 3304 adds r3, #4 + 80047ca: 22fd movs r2, #253 ; 0xfd + 80047cc: 2100 movs r1, #0 + 80047ce: 4618 mov r0, r3 + 80047d0: f001 fcc4 bl 800615c LCD_BL(0); - 80046f0: 2200 movs r2, #0 - 80046f2: 2101 movs r1, #1 - 80046f4: 4822 ldr r0, [pc, #136] ; (8004780 ) - 80046f6: f7fc fb3f bl 8000d78 + 80047d4: 2200 movs r2, #0 + 80047d6: 2101 movs r1, #1 + 80047d8: 4865 ldr r0, [pc, #404] ; (8004970 ) + 80047da: f7fc fb28 bl 8000e2e LCDx_Init(); - 80046fa: f000 ffd3 bl 80056a4 + 80047de: f001 f871 bl 80058c4 LCD_Clear(GRAY); - 80046fe: f248 4030 movw r0, #33840 ; 0x8430 - 8004702: f001 f975 bl 80059f0 + 80047e2: f248 4030 movw r0, #33840 ; 0x8430 + 80047e6: f001 fa13 bl 8005c10 if(font_init()) - 8004706: f001 f9c5 bl 8005a94 - 800470a: 4603 mov r3, r0 - 800470c: 2b00 cmp r3, #0 - 800470e: d00c beq.n 800472a + 80047ea: f001 fa63 bl 8005cb4 + 80047ee: 4603 mov r3, r0 + 80047f0: 2b00 cmp r3, #0 + 80047f2: d00c beq.n 800480e { LCD_ShowString(0,16,(uint8_t *)"erro",16,RED,BLUE,64); - 8004710: 2340 movs r3, #64 ; 0x40 - 8004712: 9302 str r3, [sp, #8] - 8004714: 231f movs r3, #31 - 8004716: 9301 str r3, [sp, #4] - 8004718: f44f 4378 mov.w r3, #63488 ; 0xf800 - 800471c: 9300 str r3, [sp, #0] - 800471e: 2310 movs r3, #16 - 8004720: 4a18 ldr r2, [pc, #96] ; (8004784 ) - 8004722: 2110 movs r1, #16 - 8004724: 2000 movs r0, #0 - 8004726: f001 fb6d bl 8005e04 + 80047f4: 2340 movs r3, #64 ; 0x40 + 80047f6: 9302 str r3, [sp, #8] + 80047f8: 231f movs r3, #31 + 80047fa: 9301 str r3, [sp, #4] + 80047fc: f44f 4378 mov.w r3, #63488 ; 0xf800 + 8004800: 9300 str r3, [sp, #0] + 8004802: 2310 movs r3, #16 + 8004804: 4a5b ldr r2, [pc, #364] ; (8004974 ) + 8004806: 2110 movs r1, #16 + 8004808: 2000 movs r0, #0 + 800480a: f001 fc0b bl 8006024 } f_mount(&SD,"0:",1); - 800472a: 2201 movs r2, #1 - 800472c: 4916 ldr r1, [pc, #88] ; (8004788 ) - 800472e: 4817 ldr r0, [pc, #92] ; (800478c ) - 8004730: f7ff fbbe bl 8003eb0 + 800480e: 2201 movs r2, #1 + 8004810: 4959 ldr r1, [pc, #356] ; (8004978 ) + 8004812: 485a ldr r0, [pc, #360] ; (800497c ) + 8004814: f7ff fba8 bl 8003f68 res=f_open(&fil,"0:/demo.txt",FA_READ); - 8004734: f107 0398 add.w r3, r7, #152 ; 0x98 - 8004738: 2201 movs r2, #1 - 800473a: 4915 ldr r1, [pc, #84] ; (8004790 ) - 800473c: 4618 mov r0, r3 - 800473e: f7ff fbff bl 8003f40 - 8004742: 4603 mov r3, r0 - 8004744: f887 32c7 strb.w r3, [r7, #711] ; 0x2c7 - res=f_read(&fil,fil_buff,64,(UINT*)&br); - 8004748: f107 0316 add.w r3, r7, #22 - 800474c: f107 0118 add.w r1, r7, #24 - 8004750: f107 0098 add.w r0, r7, #152 ; 0x98 - 8004754: 2240 movs r2, #64 ; 0x40 - 8004756: f7ff fdfe bl 8004356 - 800475a: 4603 mov r3, r0 - 800475c: f887 32c7 strb.w r3, [r7, #711] ; 0x2c7 - LCD_ShowString(0,0,fil_buff,16,RED,BLUE,64); - 8004760: f107 0218 add.w r2, r7, #24 - 8004764: 2340 movs r3, #64 ; 0x40 - 8004766: 9302 str r3, [sp, #8] - 8004768: 231f movs r3, #31 - 800476a: 9301 str r3, [sp, #4] - 800476c: f44f 4378 mov.w r3, #63488 ; 0xf800 - 8004770: 9300 str r3, [sp, #0] - 8004772: 2310 movs r3, #16 - 8004774: 2100 movs r1, #0 - 8004776: 2000 movs r0, #0 - 8004778: f001 fb44 bl 8005e04 - sprintf(str,"%02x\n%02x\n%02x\n%02x\n%02x",ftinfo.fontok,ftinfo.ugbkaddr,ftinfo.ugbksize,ftinfo.f12addr,ftinfo.gbk12size); - LCD_ShowString(0,0,str,12,RED,BLUE); + 8004818: f507 7303 add.w r3, r7, #524 ; 0x20c + 800481c: 2201 movs r2, #1 + 800481e: 4958 ldr r1, [pc, #352] ; (8004980 ) + 8004820: 4618 mov r0, r3 + 8004822: f7ff fbe9 bl 8003ff8 + 8004826: 4603 mov r3, r0 + 8004828: f887 343b strb.w r3, [r7, #1083] ; 0x43b LCD_ShowString(0,100,"163165sdf°¢¶û·¨",12,RED,BLUE); */ while(1) - 800477c: e7fe b.n 800477c - 800477e: bf00 nop - 8004780: 40010c00 .word 0x40010c00 - 8004784: 08005fa0 .word 0x08005fa0 - 8004788: 08005fa8 .word 0x08005fa8 - 800478c: 2000057c .word 0x2000057c - 8004790: 08005fac .word 0x08005fac + { + if(KEY_UP==0) + 800482c: 2104 movs r1, #4 + 800482e: 4855 ldr r0, [pc, #340] ; (8004984 ) + 8004830: f7fc fae6 bl 8000e00 + 8004834: 4603 mov r3, r0 + 8004836: 2b00 cmp r3, #0 + 8004838: d1f8 bne.n 800482c + { + HAL_Delay(10); + 800483a: 200a movs r0, #10 + 800483c: f7fc f844 bl 80008c8 + while(KEY_UP==0); + 8004840: bf00 nop + 8004842: 2104 movs r1, #4 + 8004844: 484f ldr r0, [pc, #316] ; (8004984 ) + 8004846: f7fc fadb bl 8000e00 + 800484a: 4603 mov r3, r0 + 800484c: 2b00 cmp r3, #0 + 800484e: d0f8 beq.n 8004842 + LCD_Clear(WHITE); + 8004850: f64f 70ff movw r0, #65535 ; 0xffff + 8004854: f001 f9dc bl 8005c10 + for(int a=0;a + { + fil_buff[a]=0; + 8004860: f507 7284 add.w r2, r7, #264 ; 0x108 + 8004864: f8d7 3440 ldr.w r3, [r7, #1088] ; 0x440 + 8004868: 4413 add r3, r2 + 800486a: 2200 movs r2, #0 + 800486c: 701a strb r2, [r3, #0] + str[a]=0; + 800486e: 1d3a adds r2, r7, #4 + 8004870: f8d7 3440 ldr.w r3, [r7, #1088] ; 0x440 + 8004874: 4413 add r3, r2 + 8004876: 2200 movs r2, #0 + 8004878: 701a strb r2, [r3, #0] + for(int a=0;a + } -08004794 : + if(fuck_flag==1) + 800488e: f897 3447 ldrb.w r3, [r7, #1095] ; 0x447 + 8004892: 2b01 cmp r3, #1 + 8004894: d12d bne.n 80048f2 + { + fuck_flag=0; + 8004896: 2300 movs r3, #0 + 8004898: f887 3447 strb.w r3, [r7, #1095] ; 0x447 + res=f_read(&fil,fil_buff,fuck-1,(UINT*)&br); + 800489c: f507 7383 add.w r3, r7, #262 ; 0x106 + 80048a0: f507 7184 add.w r1, r7, #264 ; 0x108 + 80048a4: f507 7003 add.w r0, r7, #524 ; 0x20c + 80048a8: 22ff movs r2, #255 ; 0xff + 80048aa: f7ff fdb0 bl 800440e + 80048ae: 4603 mov r3, r0 + 80048b0: f887 343b strb.w r3, [r7, #1083] ; 0x43b + for(int a=fuck-2;a>0;a--) + 80048b4: 23fe movs r3, #254 ; 0xfe + 80048b6: f8c7 343c str.w r3, [r7, #1084] ; 0x43c + 80048ba: e010 b.n 80048de + { + fil_buff[a+1]=fil_buff[a]; + 80048bc: f8d7 343c ldr.w r3, [r7, #1084] ; 0x43c + 80048c0: 3301 adds r3, #1 + 80048c2: f507 7184 add.w r1, r7, #264 ; 0x108 + 80048c6: f8d7 243c ldr.w r2, [r7, #1084] ; 0x43c + 80048ca: 440a add r2, r1 + 80048cc: 7811 ldrb r1, [r2, #0] + 80048ce: f507 7284 add.w r2, r7, #264 ; 0x108 + 80048d2: 54d1 strb r1, [r2, r3] + for(int a=fuck-2;a>0;a--) + 80048d4: f8d7 343c ldr.w r3, [r7, #1084] ; 0x43c + 80048d8: 3b01 subs r3, #1 + 80048da: f8c7 343c str.w r3, [r7, #1084] ; 0x43c + 80048de: f8d7 343c ldr.w r3, [r7, #1084] ; 0x43c + 80048e2: 2b00 cmp r3, #0 + 80048e4: dcea bgt.n 80048bc + } + fil_buff[0]=fuck_buff; + 80048e6: f507 7384 add.w r3, r7, #264 ; 0x108 + 80048ea: f897 2446 ldrb.w r2, [r7, #1094] ; 0x446 + 80048ee: 701a strb r2, [r3, #0] + 80048f0: e00c b.n 800490c + + }else + { + res=f_read(&fil,fil_buff,fuck,(UINT*)&br); + 80048f2: f507 7383 add.w r3, r7, #262 ; 0x106 + 80048f6: f507 7184 add.w r1, r7, #264 ; 0x108 + 80048fa: f507 7003 add.w r0, r7, #524 ; 0x20c + 80048fe: f44f 7280 mov.w r2, #256 ; 0x100 + 8004902: f7ff fd84 bl 800440e + 8004906: 4603 mov r3, r0 + 8004908: f887 343b strb.w r3, [r7, #1083] ; 0x43b + } + + if((fil_buff[fuck-1]>127)&&(fil_buff[fuck-2]<128)) + 800490c: f507 7384 add.w r3, r7, #264 ; 0x108 + 8004910: f893 30ff ldrb.w r3, [r3, #255] ; 0xff + 8004914: b25b sxtb r3, r3 + 8004916: 2b00 cmp r3, #0 + 8004918: da14 bge.n 8004944 + 800491a: f507 7384 add.w r3, r7, #264 ; 0x108 + 800491e: f893 30fe ldrb.w r3, [r3, #254] ; 0xfe + 8004922: b25b sxtb r3, r3 + 8004924: 2b00 cmp r3, #0 + 8004926: db0d blt.n 8004944 + { + fuck_buff=fil_buff[fuck-1]; + 8004928: f507 7384 add.w r3, r7, #264 ; 0x108 + 800492c: f893 30ff ldrb.w r3, [r3, #255] ; 0xff + 8004930: f887 3446 strb.w r3, [r7, #1094] ; 0x446 + fil_buff[fuck-1]='\0'; + 8004934: f507 7384 add.w r3, r7, #264 ; 0x108 + 8004938: 2200 movs r2, #0 + 800493a: f883 20ff strb.w r2, [r3, #255] ; 0xff + fuck_flag=1; + 800493e: 2301 movs r3, #1 + 8004940: f887 3447 strb.w r3, [r7, #1095] ; 0x447 + + } + + sprintf(str,"%s\0",fil_buff); + 8004944: f507 7284 add.w r2, r7, #264 ; 0x108 + 8004948: 1d3b adds r3, r7, #4 + 800494a: 490f ldr r1, [pc, #60] ; (8004988 ) + 800494c: 4618 mov r0, r3 + 800494e: f001 fc0d bl 800616c + LCD_ShowString(0,0,str,16,WHITE,BLACK,fuck); + 8004952: 1d3a adds r2, r7, #4 + 8004954: f44f 7380 mov.w r3, #256 ; 0x100 + 8004958: 9302 str r3, [sp, #8] + 800495a: 2300 movs r3, #0 + 800495c: 9301 str r3, [sp, #4] + 800495e: f64f 73ff movw r3, #65535 ; 0xffff + 8004962: 9300 str r3, [sp, #0] + 8004964: 2310 movs r3, #16 + 8004966: 2100 movs r1, #0 + 8004968: 2000 movs r0, #0 + 800496a: f001 fb5b bl 8006024 + if(KEY_UP==0) + 800496e: e75d b.n 800482c + 8004970: 40010c00 .word 0x40010c00 + 8004974: 08006a4c .word 0x08006a4c + 8004978: 08006a54 .word 0x08006a54 + 800497c: 200005ec .word 0x200005ec + 8004980: 08006a58 .word 0x08006a58 + 8004984: 40011800 .word 0x40011800 + 8004988: 08006a64 .word 0x08006a64 + +0800498c : //ReadAddr:¿ªÊ¼¶ÁÈ¡µÄµØÖ·(24bit) //NumByteToRead:Òª¶ÁÈ¡µÄ×Ö½ÚÊý(×î´ó65535) void W25QXX_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead) { - 8004794: b580 push {r7, lr} - 8004796: b086 sub sp, #24 - 8004798: af00 add r7, sp, #0 - 800479a: 60f8 str r0, [r7, #12] - 800479c: 60b9 str r1, [r7, #8] - 800479e: 4613 mov r3, r2 - 80047a0: 80fb strh r3, [r7, #6] + 800498c: b580 push {r7, lr} + 800498e: b086 sub sp, #24 + 8004990: af00 add r7, sp, #0 + 8004992: 60f8 str r0, [r7, #12] + 8004994: 60b9 str r1, [r7, #8] + 8004996: 4613 mov r3, r2 + 8004998: 80fb strh r3, [r7, #6] unsigned char buff[4]; HAL_GPIO_WritePin(FLASH_E_GPIO_Port,FLASH_E_Pin,0); - 80047a2: 2200 movs r2, #0 - 80047a4: f44f 5180 mov.w r1, #4096 ; 0x1000 - 80047a8: 4813 ldr r0, [pc, #76] ; (80047f8 ) - 80047aa: f7fc fae5 bl 8000d78 + 800499a: 2200 movs r2, #0 + 800499c: f44f 5180 mov.w r1, #4096 ; 0x1000 + 80049a0: 4813 ldr r0, [pc, #76] ; (80049f0 ) + 80049a2: f7fc fa44 bl 8000e2e buff[0]=W25X_ReadData; - 80047ae: 2303 movs r3, #3 - 80047b0: 753b strb r3, [r7, #20] + 80049a6: 2303 movs r3, #3 + 80049a8: 753b strb r3, [r7, #20] buff[1]=(uint8_t)((ReadAddr)>>16); - 80047b2: 68bb ldr r3, [r7, #8] - 80047b4: 0c1b lsrs r3, r3, #16 - 80047b6: b2db uxtb r3, r3 - 80047b8: 757b strb r3, [r7, #21] + 80049aa: 68bb ldr r3, [r7, #8] + 80049ac: 0c1b lsrs r3, r3, #16 + 80049ae: b2db uxtb r3, r3 + 80049b0: 757b strb r3, [r7, #21] buff[2]=(uint8_t)((ReadAddr)>>8); - 80047ba: 68bb ldr r3, [r7, #8] - 80047bc: 0a1b lsrs r3, r3, #8 - 80047be: b2db uxtb r3, r3 - 80047c0: 75bb strb r3, [r7, #22] + 80049b2: 68bb ldr r3, [r7, #8] + 80049b4: 0a1b lsrs r3, r3, #8 + 80049b6: b2db uxtb r3, r3 + 80049b8: 75bb strb r3, [r7, #22] buff[3]=(uint8_t)ReadAddr; - 80047c2: 68bb ldr r3, [r7, #8] - 80047c4: b2db uxtb r3, r3 - 80047c6: 75fb strb r3, [r7, #23] + 80049ba: 68bb ldr r3, [r7, #8] + 80049bc: b2db uxtb r3, r3 + 80049be: 75fb strb r3, [r7, #23] HAL_SPI_Transmit(&hspi2,buff,4,100); //·¢ËͶÁÈ¡ÃüÁî - 80047c8: f107 0114 add.w r1, r7, #20 - 80047cc: 2364 movs r3, #100 ; 0x64 - 80047ce: 2204 movs r2, #4 - 80047d0: 480a ldr r0, [pc, #40] ; (80047fc ) - 80047d2: f7fc ff55 bl 8001680 + 80049c0: f107 0114 add.w r1, r7, #20 + 80049c4: 2364 movs r3, #100 ; 0x64 + 80049c6: 2204 movs r2, #4 + 80049c8: 480a ldr r0, [pc, #40] ; (80049f4 ) + 80049ca: f7fc feb5 bl 8001738 HAL_SPI_Receive(&hspi2,pBuffer,NumByteToRead,100); - 80047d6: 88fa ldrh r2, [r7, #6] - 80047d8: 2364 movs r3, #100 ; 0x64 - 80047da: 68f9 ldr r1, [r7, #12] - 80047dc: 4807 ldr r0, [pc, #28] ; (80047fc ) - 80047de: f7fd f88b bl 80018f8 + 80049ce: 88fa ldrh r2, [r7, #6] + 80049d0: 2364 movs r3, #100 ; 0x64 + 80049d2: 68f9 ldr r1, [r7, #12] + 80049d4: 4807 ldr r0, [pc, #28] ; (80049f4 ) + 80049d6: f7fc ffeb bl 80019b0 HAL_GPIO_WritePin(FLASH_E_GPIO_Port,FLASH_E_Pin,1); - 80047e2: 2201 movs r2, #1 - 80047e4: f44f 5180 mov.w r1, #4096 ; 0x1000 - 80047e8: 4803 ldr r0, [pc, #12] ; (80047f8 ) - 80047ea: f7fc fac5 bl 8000d78 + 80049da: 2201 movs r2, #1 + 80049dc: f44f 5180 mov.w r1, #4096 ; 0x1000 + 80049e0: 4803 ldr r0, [pc, #12] ; (80049f0 ) + 80049e2: f7fc fa24 bl 8000e2e } - 80047ee: bf00 nop - 80047f0: 3718 adds r7, #24 - 80047f2: 46bd mov sp, r7 - 80047f4: bd80 pop {r7, pc} - 80047f6: bf00 nop - 80047f8: 40010c00 .word 0x40010c00 - 80047fc: 20000074 .word 0x20000074 + 80049e6: bf00 nop + 80049e8: 3718 adds r7, #24 + 80049ea: 46bd mov sp, r7 + 80049ec: bd80 pop {r7, pc} + 80049ee: bf00 nop + 80049f0: 40010c00 .word 0x40010c00 + 80049f4: 200000e4 .word 0x200000e4 + +080049f8 : - Timer2--; } /* SPI Chip Select */ static void SELECT(void) { - 8004800: b580 push {r7, lr} - 8004802: af00 add r7, sp, #0 + 80049f8: b580 push {r7, lr} + 80049fa: af00 add r7, sp, #0 HAL_GPIO_WritePin(SD_CS_GPIO_Port, SD_CS_Pin, GPIO_PIN_RESET); - 8004804: 2200 movs r2, #0 - 8004806: 2104 movs r1, #4 - 8004808: 4802 ldr r0, [pc, #8] ; (8004814 ) - 800480a: f7fc fab5 bl 8000d78 + 80049fc: 2200 movs r2, #0 + 80049fe: 2104 movs r1, #4 + 8004a00: 4802 ldr r0, [pc, #8] ; (8004a0c ) + 8004a02: f7fc fa14 bl 8000e2e } - 800480e: bf00 nop - 8004810: bd80 pop {r7, pc} - 8004812: bf00 nop - 8004814: 40011400 .word 0x40011400 + 8004a06: bf00 nop + 8004a08: bd80 pop {r7, pc} + 8004a0a: bf00 nop + 8004a0c: 40011400 .word 0x40011400 -08004818 : +08004a10 : /* SPI Chip Deselect */ static void DESELECT(void) { - 8004818: b580 push {r7, lr} - 800481a: af00 add r7, sp, #0 + 8004a10: b580 push {r7, lr} + 8004a12: af00 add r7, sp, #0 HAL_GPIO_WritePin(SD_CS_GPIO_Port, SD_CS_Pin, GPIO_PIN_SET); - 800481c: 2201 movs r2, #1 - 800481e: 2104 movs r1, #4 - 8004820: 4802 ldr r0, [pc, #8] ; (800482c ) - 8004822: f7fc faa9 bl 8000d78 + 8004a14: 2201 movs r2, #1 + 8004a16: 2104 movs r1, #4 + 8004a18: 4802 ldr r0, [pc, #8] ; (8004a24 ) + 8004a1a: f7fc fa08 bl 8000e2e } - 8004826: bf00 nop - 8004828: bd80 pop {r7, pc} - 800482a: bf00 nop - 800482c: 40011400 .word 0x40011400 + 8004a1e: bf00 nop + 8004a20: bd80 pop {r7, pc} + 8004a22: bf00 nop + 8004a24: 40011400 .word 0x40011400 -08004830 : +08004a28 : static void SPI_TxByte(BYTE data) { - 8004830: b580 push {r7, lr} - 8004832: b082 sub sp, #8 - 8004834: af00 add r7, sp, #0 - 8004836: 4603 mov r3, r0 - 8004838: 71fb strb r3, [r7, #7] + 8004a28: b580 push {r7, lr} + 8004a2a: b082 sub sp, #8 + 8004a2c: af00 add r7, sp, #0 + 8004a2e: 4603 mov r3, r0 + 8004a30: 71fb strb r3, [r7, #7] while (HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY); - 800483a: bf00 nop - 800483c: 4808 ldr r0, [pc, #32] ; (8004860 ) - 800483e: f7fd fb0e bl 8001e5e - 8004842: 4603 mov r3, r0 - 8004844: 2b01 cmp r3, #1 - 8004846: d1f9 bne.n 800483c + 8004a32: bf00 nop + 8004a34: 4808 ldr r0, [pc, #32] ; (8004a58 ) + 8004a36: f7fd fa6e bl 8001f16 + 8004a3a: 4603 mov r3, r0 + 8004a3c: 2b01 cmp r3, #1 + 8004a3e: d1f9 bne.n 8004a34 HAL_SPI_Transmit(&hspi2, &data, 1, SPI_TIMEOUT); - 8004848: 1df9 adds r1, r7, #7 - 800484a: f44f 737a mov.w r3, #1000 ; 0x3e8 - 800484e: 2201 movs r2, #1 - 8004850: 4803 ldr r0, [pc, #12] ; (8004860 ) - 8004852: f7fc ff15 bl 8001680 + 8004a40: 1df9 adds r1, r7, #7 + 8004a42: f44f 737a mov.w r3, #1000 ; 0x3e8 + 8004a46: 2201 movs r2, #1 + 8004a48: 4803 ldr r0, [pc, #12] ; (8004a58 ) + 8004a4a: f7fc fe75 bl 8001738 } - 8004856: bf00 nop - 8004858: 3708 adds r7, #8 - 800485a: 46bd mov sp, r7 - 800485c: bd80 pop {r7, pc} - 800485e: bf00 nop - 8004860: 20000074 .word 0x20000074 + 8004a4e: bf00 nop + 8004a50: 3708 adds r7, #8 + 8004a52: 46bd mov sp, r7 + 8004a54: bd80 pop {r7, pc} + 8004a56: bf00 nop + 8004a58: 200000e4 .word 0x200000e4 -08004864 : +08004a5c : static uint8_t SPI_RxByte(void) { - 8004864: b580 push {r7, lr} - 8004866: b084 sub sp, #16 - 8004868: af02 add r7, sp, #8 + 8004a5c: b580 push {r7, lr} + 8004a5e: b084 sub sp, #16 + 8004a60: af02 add r7, sp, #8 uint8_t dummy, data; dummy = 0xFF; - 800486a: 23ff movs r3, #255 ; 0xff - 800486c: 71fb strb r3, [r7, #7] + 8004a62: 23ff movs r3, #255 ; 0xff + 8004a64: 71fb strb r3, [r7, #7] data = 0; - 800486e: 2300 movs r3, #0 - 8004870: 71bb strb r3, [r7, #6] + 8004a66: 2300 movs r3, #0 + 8004a68: 71bb strb r3, [r7, #6] while ((HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY)); - 8004872: bf00 nop - 8004874: 4809 ldr r0, [pc, #36] ; (800489c ) - 8004876: f7fd faf2 bl 8001e5e - 800487a: 4603 mov r3, r0 - 800487c: 2b01 cmp r3, #1 - 800487e: d1f9 bne.n 8004874 + 8004a6a: bf00 nop + 8004a6c: 4809 ldr r0, [pc, #36] ; (8004a94 ) + 8004a6e: f7fd fa52 bl 8001f16 + 8004a72: 4603 mov r3, r0 + 8004a74: 2b01 cmp r3, #1 + 8004a76: d1f9 bne.n 8004a6c HAL_SPI_TransmitReceive(&hspi2, &dummy, &data, 1, SPI_TIMEOUT); - 8004880: 1dba adds r2, r7, #6 - 8004882: 1df9 adds r1, r7, #7 - 8004884: f44f 737a mov.w r3, #1000 ; 0x3e8 - 8004888: 9300 str r3, [sp, #0] - 800488a: 2301 movs r3, #1 - 800488c: 4803 ldr r0, [pc, #12] ; (800489c ) - 800488e: f7fd f944 bl 8001b1a + 8004a78: 1dba adds r2, r7, #6 + 8004a7a: 1df9 adds r1, r7, #7 + 8004a7c: f44f 737a mov.w r3, #1000 ; 0x3e8 + 8004a80: 9300 str r3, [sp, #0] + 8004a82: 2301 movs r3, #1 + 8004a84: 4803 ldr r0, [pc, #12] ; (8004a94 ) + 8004a86: f7fd f8a4 bl 8001bd2 return data; - 8004892: 79bb ldrb r3, [r7, #6] + 8004a8a: 79bb ldrb r3, [r7, #6] } - 8004894: 4618 mov r0, r3 - 8004896: 3708 adds r7, #8 - 8004898: 46bd mov sp, r7 - 800489a: bd80 pop {r7, pc} - 800489c: 20000074 .word 0x20000074 + 8004a8c: 4618 mov r0, r3 + 8004a8e: 3708 adds r7, #8 + 8004a90: 46bd mov sp, r7 + 8004a92: bd80 pop {r7, pc} + 8004a94: 200000e4 .word 0x200000e4 -080048a0 : +08004a98 : static void SPI_RxBytePtr(uint8_t *buff) { - 80048a0: b580 push {r7, lr} - 80048a2: b082 sub sp, #8 - 80048a4: af00 add r7, sp, #0 - 80048a6: 6078 str r0, [r7, #4] + 8004a98: b580 push {r7, lr} + 8004a9a: b082 sub sp, #8 + 8004a9c: af00 add r7, sp, #0 + 8004a9e: 6078 str r0, [r7, #4] *buff = SPI_RxByte(); - 80048a8: f7ff ffdc bl 8004864 - 80048ac: 4603 mov r3, r0 - 80048ae: 461a mov r2, r3 - 80048b0: 687b ldr r3, [r7, #4] - 80048b2: 701a strb r2, [r3, #0] + 8004aa0: f7ff ffdc bl 8004a5c + 8004aa4: 4603 mov r3, r0 + 8004aa6: 461a mov r2, r3 + 8004aa8: 687b ldr r3, [r7, #4] + 8004aaa: 701a strb r2, [r3, #0] } - 80048b4: bf00 nop - 80048b6: 3708 adds r7, #8 - 80048b8: 46bd mov sp, r7 - 80048ba: bd80 pop {r7, pc} + 8004aac: bf00 nop + 8004aae: 3708 adds r7, #8 + 8004ab0: 46bd mov sp, r7 + 8004ab2: bd80 pop {r7, pc} -080048bc : +08004ab4 : static uint8_t SD_ReadyWait(void) { - 80048bc: b580 push {r7, lr} - 80048be: b082 sub sp, #8 - 80048c0: af00 add r7, sp, #0 + 8004ab4: b580 push {r7, lr} + 8004ab6: b082 sub sp, #8 + 8004ab8: af00 add r7, sp, #0 uint8_t res; - Timer2 = 50; - 80048c2: 4b0b ldr r3, [pc, #44] ; (80048f0 ) - 80048c4: 2232 movs r2, #50 ; 0x32 - 80048c6: 701a strb r2, [r3, #0] + Timer2 = 50000; + 8004aba: 4b0d ldr r3, [pc, #52] ; (8004af0 ) + 8004abc: f24c 3250 movw r2, #50000 ; 0xc350 + 8004ac0: 601a str r2, [r3, #0] SPI_RxByte(); - 80048c8: f7ff ffcc bl 8004864 + 8004ac2: f7ff ffcb bl 8004a5c do { res = SPI_RxByte(); - 80048cc: f7ff ffca bl 8004864 - 80048d0: 4603 mov r3, r0 - 80048d2: 71fb strb r3, [r7, #7] + 8004ac6: f7ff ffc9 bl 8004a5c + 8004aca: 4603 mov r3, r0 + 8004acc: 71fb strb r3, [r7, #7] + Timer2--; + 8004ace: 4b08 ldr r3, [pc, #32] ; (8004af0 ) + 8004ad0: 681b ldr r3, [r3, #0] + 8004ad2: 3b01 subs r3, #1 + 8004ad4: 4a06 ldr r2, [pc, #24] ; (8004af0 ) + 8004ad6: 6013 str r3, [r2, #0] } while ((res != 0xFF) && Timer2); - 80048d4: 79fb ldrb r3, [r7, #7] - 80048d6: 2bff cmp r3, #255 ; 0xff - 80048d8: d004 beq.n 80048e4 - 80048da: 4b05 ldr r3, [pc, #20] ; (80048f0 ) - 80048dc: 781b ldrb r3, [r3, #0] - 80048de: b2db uxtb r3, r3 - 80048e0: 2b00 cmp r3, #0 - 80048e2: d1f3 bne.n 80048cc + 8004ad8: 79fb ldrb r3, [r7, #7] + 8004ada: 2bff cmp r3, #255 ; 0xff + 8004adc: d003 beq.n 8004ae6 + 8004ade: 4b04 ldr r3, [pc, #16] ; (8004af0 ) + 8004ae0: 681b ldr r3, [r3, #0] + 8004ae2: 2b00 cmp r3, #0 + 8004ae4: d1ef bne.n 8004ac6 return res; - 80048e4: 79fb ldrb r3, [r7, #7] + 8004ae6: 79fb ldrb r3, [r7, #7] } - 80048e6: 4618 mov r0, r3 - 80048e8: 3708 adds r7, #8 - 80048ea: 46bd mov sp, r7 - 80048ec: bd80 pop {r7, pc} - 80048ee: bf00 nop - 80048f0: 200007ac .word 0x200007ac + 8004ae8: 4618 mov r0, r3 + 8004aea: 3708 adds r7, #8 + 8004aec: 46bd mov sp, r7 + 8004aee: bd80 pop {r7, pc} + 8004af0: 2000081c .word 0x2000081c -080048f4 : +08004af4 : static void SD_PowerOn(void) { - 80048f4: b580 push {r7, lr} - 80048f6: b086 sub sp, #24 - 80048f8: af00 add r7, sp, #0 + 8004af4: b580 push {r7, lr} + 8004af6: b086 sub sp, #24 + 8004af8: af00 add r7, sp, #0 uint8_t cmd_arg[6]; uint32_t Count = 0x1FFF; - 80048fa: f641 73ff movw r3, #8191 ; 0x1fff - 80048fe: 617b str r3, [r7, #20] + 8004afa: f641 73ff movw r3, #8191 ; 0x1fff + 8004afe: 617b str r3, [r7, #20] DESELECT(); - 8004900: f7ff ff8a bl 8004818 + 8004b00: f7ff ff86 bl 8004a10 for(int i = 0; i < 10; i++) - 8004904: 2300 movs r3, #0 - 8004906: 613b str r3, [r7, #16] - 8004908: e005 b.n 8004916 + 8004b04: 2300 movs r3, #0 + 8004b06: 613b str r3, [r7, #16] + 8004b08: e005 b.n 8004b16 { SPI_TxByte(0xFF); - 800490a: 20ff movs r0, #255 ; 0xff - 800490c: f7ff ff90 bl 8004830 + 8004b0a: 20ff movs r0, #255 ; 0xff + 8004b0c: f7ff ff8c bl 8004a28 for(int i = 0; i < 10; i++) - 8004910: 693b ldr r3, [r7, #16] - 8004912: 3301 adds r3, #1 - 8004914: 613b str r3, [r7, #16] - 8004916: 693b ldr r3, [r7, #16] - 8004918: 2b09 cmp r3, #9 - 800491a: ddf6 ble.n 800490a + 8004b10: 693b ldr r3, [r7, #16] + 8004b12: 3301 adds r3, #1 + 8004b14: 613b str r3, [r7, #16] + 8004b16: 693b ldr r3, [r7, #16] + 8004b18: 2b09 cmp r3, #9 + 8004b1a: ddf6 ble.n 8004b0a } /* SPI Chips Select */ SELECT(); - 800491c: f7ff ff70 bl 8004800 cmd_arg[0] = (CMD0 | 0x40); - 8004920: 2340 movs r3, #64 ; 0x40 - 8004922: 713b strb r3, [r7, #4] + 8004b20: 2340 movs r3, #64 ; 0x40 + 8004b22: 713b strb r3, [r7, #4] cmd_arg[1] = 0; - 8004924: 2300 movs r3, #0 - 8004926: 717b strb r3, [r7, #5] + 8004b24: 2300 movs r3, #0 + 8004b26: 717b strb r3, [r7, #5] cmd_arg[2] = 0; - 8004928: 2300 movs r3, #0 - 800492a: 71bb strb r3, [r7, #6] + 8004b28: 2300 movs r3, #0 + 8004b2a: 71bb strb r3, [r7, #6] cmd_arg[3] = 0; - 800492c: 2300 movs r3, #0 - 800492e: 71fb strb r3, [r7, #7] + 8004b2c: 2300 movs r3, #0 + 8004b2e: 71fb strb r3, [r7, #7] cmd_arg[4] = 0; - 8004930: 2300 movs r3, #0 - 8004932: 723b strb r3, [r7, #8] + 8004b30: 2300 movs r3, #0 + 8004b32: 723b strb r3, [r7, #8] cmd_arg[5] = 0x95; - 8004934: 2395 movs r3, #149 ; 0x95 - 8004936: 727b strb r3, [r7, #9] + 8004b34: 2395 movs r3, #149 ; 0x95 + 8004b36: 727b strb r3, [r7, #9] for (int i = 0; i < 6; i++) - 8004938: 2300 movs r3, #0 - 800493a: 60fb str r3, [r7, #12] - 800493c: e009 b.n 8004952 + 8004b38: 2300 movs r3, #0 + 8004b3a: 60fb str r3, [r7, #12] + 8004b3c: e009 b.n 8004b52 { SPI_TxByte(cmd_arg[i]); - 800493e: 1d3a adds r2, r7, #4 - 8004940: 68fb ldr r3, [r7, #12] - 8004942: 4413 add r3, r2 - 8004944: 781b ldrb r3, [r3, #0] - 8004946: 4618 mov r0, r3 - 8004948: f7ff ff72 bl 8004830 + 8004b3e: 1d3a adds r2, r7, #4 + 8004b40: 68fb ldr r3, [r7, #12] + 8004b42: 4413 add r3, r2 + 8004b44: 781b ldrb r3, [r3, #0] + 8004b46: 4618 mov r0, r3 + 8004b48: f7ff ff6e bl 8004a28 for (int i = 0; i < 6; i++) - 800494c: 68fb ldr r3, [r7, #12] - 800494e: 3301 adds r3, #1 - 8004950: 60fb str r3, [r7, #12] - 8004952: 68fb ldr r3, [r7, #12] - 8004954: 2b05 cmp r3, #5 - 8004956: ddf2 ble.n 800493e + 8004b4c: 68fb ldr r3, [r7, #12] + 8004b4e: 3301 adds r3, #1 + 8004b50: 60fb str r3, [r7, #12] + 8004b52: 68fb ldr r3, [r7, #12] + 8004b54: 2b05 cmp r3, #5 + 8004b56: ddf2 ble.n 8004b3e } while ((SPI_RxByte() != 0x01) && Count) - 8004958: e002 b.n 8004960 + 8004b58: e002 b.n 8004b60 { Count--; - 800495a: 697b ldr r3, [r7, #20] - 800495c: 3b01 subs r3, #1 - 800495e: 617b str r3, [r7, #20] + 8004b5a: 697b ldr r3, [r7, #20] + 8004b5c: 3b01 subs r3, #1 + 8004b5e: 617b str r3, [r7, #20] while ((SPI_RxByte() != 0x01) && Count) - 8004960: f7ff ff80 bl 8004864 - 8004964: 4603 mov r3, r0 - 8004966: 2b01 cmp r3, #1 - 8004968: d002 beq.n 8004970 - 800496a: 697b ldr r3, [r7, #20] - 800496c: 2b00 cmp r3, #0 - 800496e: d1f4 bne.n 800495a + 8004b60: f7ff ff7c bl 8004a5c + 8004b64: 4603 mov r3, r0 + 8004b66: 2b01 cmp r3, #1 + 8004b68: d002 beq.n 8004b70 + 8004b6a: 697b ldr r3, [r7, #20] + 8004b6c: 2b00 cmp r3, #0 + 8004b6e: d1f4 bne.n 8004b5a } DESELECT(); - 8004970: f7ff ff52 bl 8004818 + 8004b70: f7ff ff4e bl 8004a10 SPI_TxByte(0XFF); - 8004974: 20ff movs r0, #255 ; 0xff - 8004976: f7ff ff5b bl 8004830 + 8004b74: 20ff movs r0, #255 ; 0xff + 8004b76: f7ff ff57 bl 8004a28 PowerFlag = 1; - 800497a: 4b03 ldr r3, [pc, #12] ; (8004988 ) - 800497c: 2201 movs r2, #1 - 800497e: 701a strb r2, [r3, #0] + 8004b7a: 4b03 ldr r3, [pc, #12] ; (8004b88 ) + 8004b7c: 2201 movs r2, #1 + 8004b7e: 701a strb r2, [r3, #0] } - 8004980: bf00 nop - 8004982: 3718 adds r7, #24 - 8004984: 46bd mov sp, r7 - 8004986: bd80 pop {r7, pc} - 8004988: 20000071 .word 0x20000071 + 8004b80: bf00 nop + 8004b82: 3718 adds r7, #24 + 8004b84: 46bd mov sp, r7 + 8004b86: bd80 pop {r7, pc} + 8004b88: 200000d9 .word 0x200000d9 -0800498c : +08004b8c : static void SD_PowerOff(void) { - 800498c: b480 push {r7} - 800498e: af00 add r7, sp, #0 + 8004b8c: b480 push {r7} + 8004b8e: af00 add r7, sp, #0 PowerFlag = 0; - 8004990: 4b03 ldr r3, [pc, #12] ; (80049a0 ) - 8004992: 2200 movs r2, #0 - 8004994: 701a strb r2, [r3, #0] + 8004b90: 4b03 ldr r3, [pc, #12] ; (8004ba0 ) + 8004b92: 2200 movs r2, #0 + 8004b94: 701a strb r2, [r3, #0] } - 8004996: bf00 nop - 8004998: 46bd mov sp, r7 - 800499a: bc80 pop {r7} - 800499c: 4770 bx lr - 800499e: bf00 nop - 80049a0: 20000071 .word 0x20000071 + 8004b96: bf00 nop + 8004b98: 46bd mov sp, r7 + 8004b9a: bc80 pop {r7} + 8004b9c: 4770 bx lr + 8004b9e: bf00 nop + 8004ba0: 200000d9 .word 0x200000d9 -080049a4 : +08004ba4 : static uint8_t SD_CheckPower(void) { - 80049a4: b480 push {r7} - 80049a6: af00 add r7, sp, #0 + 8004ba4: b480 push {r7} + 8004ba6: af00 add r7, sp, #0 /* 0=off, 1=on */ return PowerFlag; - 80049a8: 4b02 ldr r3, [pc, #8] ; (80049b4 ) - 80049aa: 781b ldrb r3, [r3, #0] + 8004ba8: 4b02 ldr r3, [pc, #8] ; (8004bb4 ) + 8004baa: 781b ldrb r3, [r3, #0] } - 80049ac: 4618 mov r0, r3 - 80049ae: 46bd mov sp, r7 - 80049b0: bc80 pop {r7} - 80049b2: 4770 bx lr - 80049b4: 20000071 .word 0x20000071 + 8004bac: 4618 mov r0, r3 + 8004bae: 46bd mov sp, r7 + 8004bb0: bc80 pop {r7} + 8004bb2: 4770 bx lr + 8004bb4: 200000d9 .word 0x200000d9 -080049b8 : +08004bb8 : static bool SD_RxDataBlock(BYTE *buff, UINT btr) { - 80049b8: b580 push {r7, lr} - 80049ba: b084 sub sp, #16 - 80049bc: af00 add r7, sp, #0 - 80049be: 6078 str r0, [r7, #4] - 80049c0: 6039 str r1, [r7, #0] + 8004bb8: b580 push {r7, lr} + 8004bba: b084 sub sp, #16 + 8004bbc: af00 add r7, sp, #0 + 8004bbe: 6078 str r0, [r7, #4] + 8004bc0: 6039 str r1, [r7, #0] uint8_t token; - - Timer1 = 10; - 80049c2: 4b17 ldr r3, [pc, #92] ; (8004a20 ) - 80049c4: 220a movs r2, #10 - 80049c6: 701a strb r2, [r3, #0] - - + Timer1 = 10000; + 8004bc2: 4b1a ldr r3, [pc, #104] ; (8004c2c ) + 8004bc4: f242 7210 movw r2, #10000 ; 0x2710 + 8004bc8: 601a str r2, [r3, #0] do { token = SPI_RxByte(); - 80049c8: f7ff ff4c bl 8004864 - 80049cc: 4603 mov r3, r0 - 80049ce: 73fb strb r3, [r7, #15] + 8004bca: f7ff ff47 bl 8004a5c + 8004bce: 4603 mov r3, r0 + 8004bd0: 73fb strb r3, [r7, #15] + Timer1--; + 8004bd2: 4b16 ldr r3, [pc, #88] ; (8004c2c ) + 8004bd4: 681b ldr r3, [r3, #0] + 8004bd6: 3b01 subs r3, #1 + 8004bd8: 4a14 ldr r2, [pc, #80] ; (8004c2c ) + 8004bda: 6013 str r3, [r2, #0] } while((token == 0xFF) && Timer1); - 80049d0: 7bfb ldrb r3, [r7, #15] - 80049d2: 2bff cmp r3, #255 ; 0xff - 80049d4: d104 bne.n 80049e0 - 80049d6: 4b12 ldr r3, [pc, #72] ; (8004a20 ) - 80049d8: 781b ldrb r3, [r3, #0] - 80049da: b2db uxtb r3, r3 - 80049dc: 2b00 cmp r3, #0 - 80049de: d1f3 bne.n 80049c8 + 8004bdc: 7bfb ldrb r3, [r7, #15] + 8004bde: 2bff cmp r3, #255 ; 0xff + 8004be0: d103 bne.n 8004bea + 8004be2: 4b12 ldr r3, [pc, #72] ; (8004c2c ) + 8004be4: 681b ldr r3, [r3, #0] + 8004be6: 2b00 cmp r3, #0 + 8004be8: d1ef bne.n 8004bca if(token != 0xFE) - 80049e0: 7bfb ldrb r3, [r7, #15] - 80049e2: 2bfe cmp r3, #254 ; 0xfe - 80049e4: d001 beq.n 80049ea + 8004bea: 7bfb ldrb r3, [r7, #15] + 8004bec: 2bfe cmp r3, #254 ; 0xfe + 8004bee: d001 beq.n 8004bf4 return FALSE; - 80049e6: 2300 movs r3, #0 - 80049e8: e016 b.n 8004a18 + 8004bf0: 2300 movs r3, #0 + 8004bf2: e016 b.n 8004c22 do { SPI_RxBytePtr(buff++); - 80049ea: 687b ldr r3, [r7, #4] - 80049ec: 1c5a adds r2, r3, #1 - 80049ee: 607a str r2, [r7, #4] - 80049f0: 4618 mov r0, r3 - 80049f2: f7ff ff55 bl 80048a0 + 8004bf4: 687b ldr r3, [r7, #4] + 8004bf6: 1c5a adds r2, r3, #1 + 8004bf8: 607a str r2, [r7, #4] + 8004bfa: 4618 mov r0, r3 + 8004bfc: f7ff ff4c bl 8004a98 SPI_RxBytePtr(buff++); - 80049f6: 687b ldr r3, [r7, #4] - 80049f8: 1c5a adds r2, r3, #1 - 80049fa: 607a str r2, [r7, #4] - 80049fc: 4618 mov r0, r3 - 80049fe: f7ff ff4f bl 80048a0 + 8004c00: 687b ldr r3, [r7, #4] + 8004c02: 1c5a adds r2, r3, #1 + 8004c04: 607a str r2, [r7, #4] + 8004c06: 4618 mov r0, r3 + 8004c08: f7ff ff46 bl 8004a98 } while(btr -= 2); - 8004a02: 683b ldr r3, [r7, #0] - 8004a04: 3b02 subs r3, #2 - 8004a06: 603b str r3, [r7, #0] - 8004a08: 683b ldr r3, [r7, #0] - 8004a0a: 2b00 cmp r3, #0 - 8004a0c: d1ed bne.n 80049ea + 8004c0c: 683b ldr r3, [r7, #0] + 8004c0e: 3b02 subs r3, #2 + 8004c10: 603b str r3, [r7, #0] + 8004c12: 683b ldr r3, [r7, #0] + 8004c14: 2b00 cmp r3, #0 + 8004c16: d1ed bne.n 8004bf4 SPI_RxByte(); - 8004a0e: f7ff ff29 bl 8004864 + 8004c18: f7ff ff20 bl 8004a5c SPI_RxByte(); - 8004a12: f7ff ff27 bl 8004864 + 8004c1c: f7ff ff1e bl 8004a5c return TRUE; - 8004a16: 2301 movs r3, #1 + 8004c20: 2301 movs r3, #1 } - 8004a18: 4618 mov r0, r3 - 8004a1a: 3710 adds r7, #16 - 8004a1c: 46bd mov sp, r7 - 8004a1e: bd80 pop {r7, pc} - 8004a20: 200007ad .word 0x200007ad + 8004c22: 4618 mov r0, r3 + 8004c24: 3710 adds r7, #16 + 8004c26: 46bd mov sp, r7 + 8004c28: bd80 pop {r7, pc} + 8004c2a: bf00 nop + 8004c2c: 20000820 .word 0x20000820 -08004a24 : +08004c30 : #if _READONLY == 0 static bool SD_TxDataBlock(const BYTE *buff, BYTE token) { - 8004a24: b580 push {r7, lr} - 8004a26: b084 sub sp, #16 - 8004a28: af00 add r7, sp, #0 - 8004a2a: 6078 str r0, [r7, #4] - 8004a2c: 460b mov r3, r1 - 8004a2e: 70fb strb r3, [r7, #3] + 8004c30: b580 push {r7, lr} + 8004c32: b084 sub sp, #16 + 8004c34: af00 add r7, sp, #0 + 8004c36: 6078 str r0, [r7, #4] + 8004c38: 460b mov r3, r1 + 8004c3a: 70fb strb r3, [r7, #3] uint8_t resp, wc; uint8_t i = 0; - 8004a30: 2300 movs r3, #0 - 8004a32: 737b strb r3, [r7, #13] + 8004c3c: 2300 movs r3, #0 + 8004c3e: 737b strb r3, [r7, #13] if (SD_ReadyWait() != 0xFF) - 8004a34: f7ff ff42 bl 80048bc - 8004a38: 4603 mov r3, r0 - 8004a3a: 2bff cmp r3, #255 ; 0xff - 8004a3c: d001 beq.n 8004a42 + 8004c40: f7ff ff38 bl 8004ab4 + 8004c44: 4603 mov r3, r0 + 8004c46: 2bff cmp r3, #255 ; 0xff + 8004c48: d001 beq.n 8004c4e return FALSE; - 8004a3e: 2300 movs r3, #0 - 8004a40: e040 b.n 8004ac4 + 8004c4a: 2300 movs r3, #0 + 8004c4c: e040 b.n 8004cd0 SPI_TxByte(token); - 8004a42: 78fb ldrb r3, [r7, #3] - 8004a44: 4618 mov r0, r3 - 8004a46: f7ff fef3 bl 8004830 + 8004c4e: 78fb ldrb r3, [r7, #3] + 8004c50: 4618 mov r0, r3 + 8004c52: f7ff fee9 bl 8004a28 if (token != 0xFD) - 8004a4a: 78fb ldrb r3, [r7, #3] - 8004a4c: 2bfd cmp r3, #253 ; 0xfd - 8004a4e: d031 beq.n 8004ab4 + 8004c56: 78fb ldrb r3, [r7, #3] + 8004c58: 2bfd cmp r3, #253 ; 0xfd + 8004c5a: d031 beq.n 8004cc0 { wc = 0; - 8004a50: 2300 movs r3, #0 - 8004a52: 73bb strb r3, [r7, #14] + 8004c5c: 2300 movs r3, #0 + 8004c5e: 73bb strb r3, [r7, #14] do { SPI_TxByte(*buff++); - 8004a54: 687b ldr r3, [r7, #4] - 8004a56: 1c5a adds r2, r3, #1 - 8004a58: 607a str r2, [r7, #4] - 8004a5a: 781b ldrb r3, [r3, #0] - 8004a5c: 4618 mov r0, r3 - 8004a5e: f7ff fee7 bl 8004830 + 8004c60: 687b ldr r3, [r7, #4] + 8004c62: 1c5a adds r2, r3, #1 + 8004c64: 607a str r2, [r7, #4] + 8004c66: 781b ldrb r3, [r3, #0] + 8004c68: 4618 mov r0, r3 + 8004c6a: f7ff fedd bl 8004a28 SPI_TxByte(*buff++); - 8004a62: 687b ldr r3, [r7, #4] - 8004a64: 1c5a adds r2, r3, #1 - 8004a66: 607a str r2, [r7, #4] - 8004a68: 781b ldrb r3, [r3, #0] - 8004a6a: 4618 mov r0, r3 - 8004a6c: f7ff fee0 bl 8004830 + 8004c6e: 687b ldr r3, [r7, #4] + 8004c70: 1c5a adds r2, r3, #1 + 8004c72: 607a str r2, [r7, #4] + 8004c74: 781b ldrb r3, [r3, #0] + 8004c76: 4618 mov r0, r3 + 8004c78: f7ff fed6 bl 8004a28 } while (--wc); - 8004a70: 7bbb ldrb r3, [r7, #14] - 8004a72: 3b01 subs r3, #1 - 8004a74: 73bb strb r3, [r7, #14] - 8004a76: 7bbb ldrb r3, [r7, #14] - 8004a78: 2b00 cmp r3, #0 - 8004a7a: d1eb bne.n 8004a54 + 8004c7c: 7bbb ldrb r3, [r7, #14] + 8004c7e: 3b01 subs r3, #1 + 8004c80: 73bb strb r3, [r7, #14] + 8004c82: 7bbb ldrb r3, [r7, #14] + 8004c84: 2b00 cmp r3, #0 + 8004c86: d1eb bne.n 8004c60 SPI_RxByte(); - 8004a7c: f7ff fef2 bl 8004864 + 8004c88: f7ff fee8 bl 8004a5c SPI_RxByte(); - 8004a80: f7ff fef0 bl 8004864 + 8004c8c: f7ff fee6 bl 8004a5c while (i <= 64) - 8004a84: e00b b.n 8004a9e + 8004c90: e00b b.n 8004caa { resp = SPI_RxByte(); - 8004a86: f7ff feed bl 8004864 - 8004a8a: 4603 mov r3, r0 - 8004a8c: 73fb strb r3, [r7, #15] + 8004c92: f7ff fee3 bl 8004a5c + 8004c96: 4603 mov r3, r0 + 8004c98: 73fb strb r3, [r7, #15] if ((resp & 0x1F) == 0x05) - 8004a8e: 7bfb ldrb r3, [r7, #15] - 8004a90: f003 031f and.w r3, r3, #31 - 8004a94: 2b05 cmp r3, #5 - 8004a96: d006 beq.n 8004aa6 + 8004c9a: 7bfb ldrb r3, [r7, #15] + 8004c9c: f003 031f and.w r3, r3, #31 + 8004ca0: 2b05 cmp r3, #5 + 8004ca2: d006 beq.n 8004cb2 break; i++; - 8004a98: 7b7b ldrb r3, [r7, #13] - 8004a9a: 3301 adds r3, #1 - 8004a9c: 737b strb r3, [r7, #13] + 8004ca4: 7b7b ldrb r3, [r7, #13] + 8004ca6: 3301 adds r3, #1 + 8004ca8: 737b strb r3, [r7, #13] while (i <= 64) - 8004a9e: 7b7b ldrb r3, [r7, #13] - 8004aa0: 2b40 cmp r3, #64 ; 0x40 - 8004aa2: d9f0 bls.n 8004a86 - 8004aa4: e000 b.n 8004aa8 + 8004caa: 7b7b ldrb r3, [r7, #13] + 8004cac: 2b40 cmp r3, #64 ; 0x40 + 8004cae: d9f0 bls.n 8004c92 + 8004cb0: e000 b.n 8004cb4 break; - 8004aa6: bf00 nop + 8004cb2: bf00 nop } while (SPI_RxByte() == 0); - 8004aa8: bf00 nop - 8004aaa: f7ff fedb bl 8004864 - 8004aae: 4603 mov r3, r0 - 8004ab0: 2b00 cmp r3, #0 - 8004ab2: d0fa beq.n 8004aaa + 8004cb4: bf00 nop + 8004cb6: f7ff fed1 bl 8004a5c + 8004cba: 4603 mov r3, r0 + 8004cbc: 2b00 cmp r3, #0 + 8004cbe: d0fa beq.n 8004cb6 } if ((resp & 0x1F) == 0x05) - 8004ab4: 7bfb ldrb r3, [r7, #15] - 8004ab6: f003 031f and.w r3, r3, #31 - 8004aba: 2b05 cmp r3, #5 - 8004abc: d101 bne.n 8004ac2 + 8004cc0: 7bfb ldrb r3, [r7, #15] + 8004cc2: f003 031f and.w r3, r3, #31 + 8004cc6: 2b05 cmp r3, #5 + 8004cc8: d101 bne.n 8004cce return TRUE; - 8004abe: 2301 movs r3, #1 - 8004ac0: e000 b.n 8004ac4 + 8004cca: 2301 movs r3, #1 + 8004ccc: e000 b.n 8004cd0 else return FALSE; - 8004ac2: 2300 movs r3, #0 + 8004cce: 2300 movs r3, #0 } - 8004ac4: 4618 mov r0, r3 - 8004ac6: 3710 adds r7, #16 - 8004ac8: 46bd mov sp, r7 - 8004aca: bd80 pop {r7, pc} + 8004cd0: 4618 mov r0, r3 + 8004cd2: 3710 adds r7, #16 + 8004cd4: 46bd mov sp, r7 + 8004cd6: bd80 pop {r7, pc} -08004acc : +08004cd8 : #endif /* _READONLY */ static BYTE SD_SendCmd(BYTE cmd, DWORD arg) { - 8004acc: b580 push {r7, lr} - 8004ace: b084 sub sp, #16 - 8004ad0: af00 add r7, sp, #0 - 8004ad2: 4603 mov r3, r0 - 8004ad4: 6039 str r1, [r7, #0] - 8004ad6: 71fb strb r3, [r7, #7] + 8004cd8: b580 push {r7, lr} + 8004cda: b084 sub sp, #16 + 8004cdc: af00 add r7, sp, #0 + 8004cde: 4603 mov r3, r0 + 8004ce0: 6039 str r1, [r7, #0] + 8004ce2: 71fb strb r3, [r7, #7] uint8_t crc, res; if (SD_ReadyWait() != 0xFF) - 8004ad8: f7ff fef0 bl 80048bc - 8004adc: 4603 mov r3, r0 - 8004ade: 2bff cmp r3, #255 ; 0xff - 8004ae0: d001 beq.n 8004ae6 + 8004ce4: f7ff fee6 bl 8004ab4 + 8004ce8: 4603 mov r3, r0 + 8004cea: 2bff cmp r3, #255 ; 0xff + 8004cec: d001 beq.n 8004cf2 return 0xFF; - 8004ae2: 23ff movs r3, #255 ; 0xff - 8004ae4: e040 b.n 8004b68 + 8004cee: 23ff movs r3, #255 ; 0xff + 8004cf0: e040 b.n 8004d74 SPI_TxByte(cmd); /* Command */ - 8004ae6: 79fb ldrb r3, [r7, #7] - 8004ae8: 4618 mov r0, r3 - 8004aea: f7ff fea1 bl 8004830 + 8004cf2: 79fb ldrb r3, [r7, #7] + 8004cf4: 4618 mov r0, r3 + 8004cf6: f7ff fe97 bl 8004a28 SPI_TxByte((BYTE) (arg >> 24)); /* Argument[31..24] */ - 8004aee: 683b ldr r3, [r7, #0] - 8004af0: 0e1b lsrs r3, r3, #24 - 8004af2: b2db uxtb r3, r3 - 8004af4: 4618 mov r0, r3 - 8004af6: f7ff fe9b bl 8004830 + 8004cfa: 683b ldr r3, [r7, #0] + 8004cfc: 0e1b lsrs r3, r3, #24 + 8004cfe: b2db uxtb r3, r3 + 8004d00: 4618 mov r0, r3 + 8004d02: f7ff fe91 bl 8004a28 SPI_TxByte((BYTE) (arg >> 16)); /* Argument[23..16] */ - 8004afa: 683b ldr r3, [r7, #0] - 8004afc: 0c1b lsrs r3, r3, #16 - 8004afe: b2db uxtb r3, r3 - 8004b00: 4618 mov r0, r3 - 8004b02: f7ff fe95 bl 8004830 + 8004d06: 683b ldr r3, [r7, #0] + 8004d08: 0c1b lsrs r3, r3, #16 + 8004d0a: b2db uxtb r3, r3 + 8004d0c: 4618 mov r0, r3 + 8004d0e: f7ff fe8b bl 8004a28 SPI_TxByte((BYTE) (arg >> 8)); /* Argument[15..8] */ - 8004b06: 683b ldr r3, [r7, #0] - 8004b08: 0a1b lsrs r3, r3, #8 - 8004b0a: b2db uxtb r3, r3 - 8004b0c: 4618 mov r0, r3 - 8004b0e: f7ff fe8f bl 8004830 + 8004d12: 683b ldr r3, [r7, #0] + 8004d14: 0a1b lsrs r3, r3, #8 + 8004d16: b2db uxtb r3, r3 + 8004d18: 4618 mov r0, r3 + 8004d1a: f7ff fe85 bl 8004a28 SPI_TxByte((BYTE) arg); /* Argument[7..0] */ - 8004b12: 683b ldr r3, [r7, #0] - 8004b14: b2db uxtb r3, r3 - 8004b16: 4618 mov r0, r3 - 8004b18: f7ff fe8a bl 8004830 + 8004d1e: 683b ldr r3, [r7, #0] + 8004d20: b2db uxtb r3, r3 + 8004d22: 4618 mov r0, r3 + 8004d24: f7ff fe80 bl 8004a28 crc = 0; - 8004b1c: 2300 movs r3, #0 - 8004b1e: 73fb strb r3, [r7, #15] + 8004d28: 2300 movs r3, #0 + 8004d2a: 73fb strb r3, [r7, #15] if (cmd == CMD0) - 8004b20: 79fb ldrb r3, [r7, #7] - 8004b22: 2b40 cmp r3, #64 ; 0x40 - 8004b24: d101 bne.n 8004b2a + 8004d2c: 79fb ldrb r3, [r7, #7] + 8004d2e: 2b40 cmp r3, #64 ; 0x40 + 8004d30: d101 bne.n 8004d36 crc = 0x95; /* CRC for CMD0(0) */ - 8004b26: 2395 movs r3, #149 ; 0x95 - 8004b28: 73fb strb r3, [r7, #15] + 8004d32: 2395 movs r3, #149 ; 0x95 + 8004d34: 73fb strb r3, [r7, #15] if (cmd == CMD8) - 8004b2a: 79fb ldrb r3, [r7, #7] - 8004b2c: 2b48 cmp r3, #72 ; 0x48 - 8004b2e: d101 bne.n 8004b34 + 8004d36: 79fb ldrb r3, [r7, #7] + 8004d38: 2b48 cmp r3, #72 ; 0x48 + 8004d3a: d101 bne.n 8004d40 crc = 0x87; /* CRC for CMD8(0x1AA) */ - 8004b30: 2387 movs r3, #135 ; 0x87 - 8004b32: 73fb strb r3, [r7, #15] + 8004d3c: 2387 movs r3, #135 ; 0x87 + 8004d3e: 73fb strb r3, [r7, #15] SPI_TxByte(crc); - 8004b34: 7bfb ldrb r3, [r7, #15] - 8004b36: 4618 mov r0, r3 - 8004b38: f7ff fe7a bl 8004830 + 8004d40: 7bfb ldrb r3, [r7, #15] + 8004d42: 4618 mov r0, r3 + 8004d44: f7ff fe70 bl 8004a28 if (cmd == CMD12) - 8004b3c: 79fb ldrb r3, [r7, #7] - 8004b3e: 2b4c cmp r3, #76 ; 0x4c - 8004b40: d101 bne.n 8004b46 + 8004d48: 79fb ldrb r3, [r7, #7] + 8004d4a: 2b4c cmp r3, #76 ; 0x4c + 8004d4c: d101 bne.n 8004d52 SPI_RxByte(); - 8004b42: f7ff fe8f bl 8004864 + 8004d4e: f7ff fe85 bl 8004a5c uint8_t n = 10; - 8004b46: 230a movs r3, #10 - 8004b48: 73bb strb r3, [r7, #14] + 8004d52: 230a movs r3, #10 + 8004d54: 73bb strb r3, [r7, #14] do { res = SPI_RxByte(); - 8004b4a: f7ff fe8b bl 8004864 - 8004b4e: 4603 mov r3, r0 - 8004b50: 737b strb r3, [r7, #13] + 8004d56: f7ff fe81 bl 8004a5c + 8004d5a: 4603 mov r3, r0 + 8004d5c: 737b strb r3, [r7, #13] } while ((res & 0x80) && --n); - 8004b52: f997 300d ldrsb.w r3, [r7, #13] - 8004b56: 2b00 cmp r3, #0 - 8004b58: da05 bge.n 8004b66 - 8004b5a: 7bbb ldrb r3, [r7, #14] - 8004b5c: 3b01 subs r3, #1 - 8004b5e: 73bb strb r3, [r7, #14] - 8004b60: 7bbb ldrb r3, [r7, #14] - 8004b62: 2b00 cmp r3, #0 - 8004b64: d1f1 bne.n 8004b4a + 8004d5e: f997 300d ldrsb.w r3, [r7, #13] + 8004d62: 2b00 cmp r3, #0 + 8004d64: da05 bge.n 8004d72 + 8004d66: 7bbb ldrb r3, [r7, #14] + 8004d68: 3b01 subs r3, #1 + 8004d6a: 73bb strb r3, [r7, #14] + 8004d6c: 7bbb ldrb r3, [r7, #14] + 8004d6e: 2b00 cmp r3, #0 + 8004d70: d1f1 bne.n 8004d56 return res; - 8004b66: 7b7b ldrb r3, [r7, #13] + 8004d72: 7b7b ldrb r3, [r7, #13] } - 8004b68: 4618 mov r0, r3 - 8004b6a: 3710 adds r7, #16 - 8004b6c: 46bd mov sp, r7 - 8004b6e: bd80 pop {r7, pc} + 8004d74: 4618 mov r0, r3 + 8004d76: 3710 adds r7, #16 + 8004d78: 46bd mov sp, r7 + 8004d7a: bd80 pop {r7, pc} -08004b70 : +08004d7c : -----------------------------------------------------------------------*/ DSTATUS SD_disk_initialize(BYTE drv) { - 8004b70: b590 push {r4, r7, lr} - 8004b72: b085 sub sp, #20 - 8004b74: af00 add r7, sp, #0 - 8004b76: 4603 mov r3, r0 - 8004b78: 71fb strb r3, [r7, #7] + 8004d7c: b590 push {r4, r7, lr} + 8004d7e: b085 sub sp, #20 + 8004d80: af00 add r7, sp, #0 + 8004d82: 4603 mov r3, r0 + 8004d84: 71fb strb r3, [r7, #7] uint8_t n, type, ocr[4]; if(drv) - 8004b7a: 79fb ldrb r3, [r7, #7] - 8004b7c: 2b00 cmp r3, #0 - 8004b7e: d001 beq.n 8004b84 + 8004d86: 79fb ldrb r3, [r7, #7] + 8004d88: 2b00 cmp r3, #0 + 8004d8a: d001 beq.n 8004d90 return STA_NOINIT; - 8004b80: 2301 movs r3, #1 - 8004b82: e0d5 b.n 8004d30 + 8004d8c: 2301 movs r3, #1 + 8004d8e: e0dc b.n 8004f4a if(Stat & STA_NODISK) - 8004b84: 4b6c ldr r3, [pc, #432] ; (8004d38 ) - 8004b86: 781b ldrb r3, [r3, #0] - 8004b88: b2db uxtb r3, r3 - 8004b8a: f003 0302 and.w r3, r3, #2 - 8004b8e: 2b00 cmp r3, #0 - 8004b90: d003 beq.n 8004b9a + 8004d90: 4b70 ldr r3, [pc, #448] ; (8004f54 ) + 8004d92: 781b ldrb r3, [r3, #0] + 8004d94: b2db uxtb r3, r3 + 8004d96: f003 0302 and.w r3, r3, #2 + 8004d9a: 2b00 cmp r3, #0 + 8004d9c: d003 beq.n 8004da6 return Stat; - 8004b92: 4b69 ldr r3, [pc, #420] ; (8004d38 ) - 8004b94: 781b ldrb r3, [r3, #0] - 8004b96: b2db uxtb r3, r3 - 8004b98: e0ca b.n 8004d30 + 8004d9e: 4b6d ldr r3, [pc, #436] ; (8004f54 ) + 8004da0: 781b ldrb r3, [r3, #0] + 8004da2: b2db uxtb r3, r3 + 8004da4: e0d1 b.n 8004f4a SD_PowerOn(); - 8004b9a: f7ff feab bl 80048f4 + 8004da6: f7ff fea5 bl 8004af4 SELECT(); - 8004b9e: f7ff fe2f bl 8004800 type = 0; - 8004ba2: 2300 movs r3, #0 - 8004ba4: 73bb strb r3, [r7, #14] + 8004dae: 2300 movs r3, #0 + 8004db0: 73bb strb r3, [r7, #14] if (SD_SendCmd(CMD0, 0) == 1) - 8004ba6: 2100 movs r1, #0 - 8004ba8: 2040 movs r0, #64 ; 0x40 - 8004baa: f7ff ff8f bl 8004acc - 8004bae: 4603 mov r3, r0 - 8004bb0: 2b01 cmp r3, #1 - 8004bb2: f040 80a5 bne.w 8004d00 + 8004db2: 2100 movs r1, #0 + 8004db4: 2040 movs r0, #64 ; 0x40 + 8004db6: f7ff ff8f bl 8004cd8 + 8004dba: 4603 mov r3, r0 + 8004dbc: 2b01 cmp r3, #1 + 8004dbe: f040 80ac bne.w 8004f1a { - Timer1 = 100; - 8004bb6: 4b61 ldr r3, [pc, #388] ; (8004d3c ) - 8004bb8: 2264 movs r2, #100 ; 0x64 - 8004bba: 701a strb r2, [r3, #0] + Timer1 = 100000; + 8004dc2: 4b65 ldr r3, [pc, #404] ; (8004f58 ) + 8004dc4: 4a65 ldr r2, [pc, #404] ; (8004f5c ) + 8004dc6: 601a str r2, [r3, #0] if (SD_SendCmd(CMD8, 0x1AA) == 1) - 8004bbc: f44f 71d5 mov.w r1, #426 ; 0x1aa - 8004bc0: 2048 movs r0, #72 ; 0x48 - 8004bc2: f7ff ff83 bl 8004acc - 8004bc6: 4603 mov r3, r0 - 8004bc8: 2b01 cmp r3, #1 - 8004bca: d158 bne.n 8004c7e + 8004dc8: f44f 71d5 mov.w r1, #426 ; 0x1aa + 8004dcc: 2048 movs r0, #72 ; 0x48 + 8004dce: f7ff ff83 bl 8004cd8 + 8004dd2: 4603 mov r3, r0 + 8004dd4: 2b01 cmp r3, #1 + 8004dd6: d15c bne.n 8004e92 { /* SDC Ver2+ */ for (n = 0; n < 4; n++) - 8004bcc: 2300 movs r3, #0 - 8004bce: 73fb strb r3, [r7, #15] - 8004bd0: e00c b.n 8004bec + 8004dd8: 2300 movs r3, #0 + 8004dda: 73fb strb r3, [r7, #15] + 8004ddc: e00c b.n 8004df8 { ocr[n] = SPI_RxByte(); - 8004bd2: 7bfc ldrb r4, [r7, #15] - 8004bd4: f7ff fe46 bl 8004864 - 8004bd8: 4603 mov r3, r0 - 8004bda: 461a mov r2, r3 - 8004bdc: f107 0310 add.w r3, r7, #16 - 8004be0: 4423 add r3, r4 - 8004be2: f803 2c08 strb.w r2, [r3, #-8] + 8004dde: 7bfc ldrb r4, [r7, #15] + 8004de0: f7ff fe3c bl 8004a5c + 8004de4: 4603 mov r3, r0 + 8004de6: 461a mov r2, r3 + 8004de8: f107 0310 add.w r3, r7, #16 + 8004dec: 4423 add r3, r4 + 8004dee: f803 2c08 strb.w r2, [r3, #-8] for (n = 0; n < 4; n++) - 8004be6: 7bfb ldrb r3, [r7, #15] - 8004be8: 3301 adds r3, #1 - 8004bea: 73fb strb r3, [r7, #15] - 8004bec: 7bfb ldrb r3, [r7, #15] - 8004bee: 2b03 cmp r3, #3 - 8004bf0: d9ef bls.n 8004bd2 + 8004df2: 7bfb ldrb r3, [r7, #15] + 8004df4: 3301 adds r3, #1 + 8004df6: 73fb strb r3, [r7, #15] + 8004df8: 7bfb ldrb r3, [r7, #15] + 8004dfa: 2b03 cmp r3, #3 + 8004dfc: d9ef bls.n 8004dde } if (ocr[2] == 0x01 && ocr[3] == 0xAA) - 8004bf2: 7abb ldrb r3, [r7, #10] - 8004bf4: 2b01 cmp r3, #1 - 8004bf6: f040 8083 bne.w 8004d00 - 8004bfa: 7afb ldrb r3, [r7, #11] - 8004bfc: 2baa cmp r3, #170 ; 0xaa - 8004bfe: d17f bne.n 8004d00 + 8004dfe: 7abb ldrb r3, [r7, #10] + 8004e00: 2b01 cmp r3, #1 + 8004e02: f040 808a bne.w 8004f1a + 8004e06: 7afb ldrb r3, [r7, #11] + 8004e08: 2baa cmp r3, #170 ; 0xaa + 8004e0a: f040 8086 bne.w 8004f1a { do { if (SD_SendCmd(CMD55, 0) <= 1 && SD_SendCmd(CMD41, 1UL << 30) == 0) - 8004c00: 2100 movs r1, #0 - 8004c02: 2077 movs r0, #119 ; 0x77 - 8004c04: f7ff ff62 bl 8004acc - 8004c08: 4603 mov r3, r0 - 8004c0a: 2b01 cmp r3, #1 - 8004c0c: d807 bhi.n 8004c1e - 8004c0e: f04f 4180 mov.w r1, #1073741824 ; 0x40000000 - 8004c12: 2069 movs r0, #105 ; 0x69 - 8004c14: f7ff ff5a bl 8004acc - 8004c18: 4603 mov r3, r0 - 8004c1a: 2b00 cmp r3, #0 - 8004c1c: d005 beq.n 8004c2a + 8004e0e: 2100 movs r1, #0 + 8004e10: 2077 movs r0, #119 ; 0x77 + 8004e12: f7ff ff61 bl 8004cd8 + 8004e16: 4603 mov r3, r0 + 8004e18: 2b01 cmp r3, #1 + 8004e1a: d807 bhi.n 8004e2c + 8004e1c: f04f 4180 mov.w r1, #1073741824 ; 0x40000000 + 8004e20: 2069 movs r0, #105 ; 0x69 + 8004e22: f7ff ff59 bl 8004cd8 + 8004e26: 4603 mov r3, r0 + 8004e28: 2b00 cmp r3, #0 + 8004e2a: d009 beq.n 8004e40 break; /* ACMD41 with HCS bit */ + Timer1--; + 8004e2c: 4b4a ldr r3, [pc, #296] ; (8004f58 ) + 8004e2e: 681b ldr r3, [r3, #0] + 8004e30: 3b01 subs r3, #1 + 8004e32: 4a49 ldr r2, [pc, #292] ; (8004f58 ) + 8004e34: 6013 str r3, [r2, #0] } while (Timer1); - 8004c1e: 4b47 ldr r3, [pc, #284] ; (8004d3c ) - 8004c20: 781b ldrb r3, [r3, #0] - 8004c22: b2db uxtb r3, r3 - 8004c24: 2b00 cmp r3, #0 - 8004c26: d1eb bne.n 8004c00 - 8004c28: e000 b.n 8004c2c + 8004e36: 4b48 ldr r3, [pc, #288] ; (8004f58 ) + 8004e38: 681b ldr r3, [r3, #0] + 8004e3a: 2b00 cmp r3, #0 + 8004e3c: d1e7 bne.n 8004e0e + 8004e3e: e000 b.n 8004e42 break; /* ACMD41 with HCS bit */ - 8004c2a: bf00 nop + 8004e40: bf00 nop if (Timer1 && SD_SendCmd(CMD58, 0) == 0) - 8004c2c: 4b43 ldr r3, [pc, #268] ; (8004d3c ) - 8004c2e: 781b ldrb r3, [r3, #0] - 8004c30: b2db uxtb r3, r3 - 8004c32: 2b00 cmp r3, #0 - 8004c34: d064 beq.n 8004d00 - 8004c36: 2100 movs r1, #0 - 8004c38: 207a movs r0, #122 ; 0x7a - 8004c3a: f7ff ff47 bl 8004acc - 8004c3e: 4603 mov r3, r0 - 8004c40: 2b00 cmp r3, #0 - 8004c42: d15d bne.n 8004d00 + 8004e42: 4b45 ldr r3, [pc, #276] ; (8004f58 ) + 8004e44: 681b ldr r3, [r3, #0] + 8004e46: 2b00 cmp r3, #0 + 8004e48: d067 beq.n 8004f1a + 8004e4a: 2100 movs r1, #0 + 8004e4c: 207a movs r0, #122 ; 0x7a + 8004e4e: f7ff ff43 bl 8004cd8 + 8004e52: 4603 mov r3, r0 + 8004e54: 2b00 cmp r3, #0 + 8004e56: d160 bne.n 8004f1a { /* Check CCS bit */ for (n = 0; n < 4; n++) - 8004c44: 2300 movs r3, #0 - 8004c46: 73fb strb r3, [r7, #15] - 8004c48: e00c b.n 8004c64 + 8004e58: 2300 movs r3, #0 + 8004e5a: 73fb strb r3, [r7, #15] + 8004e5c: e00c b.n 8004e78 { ocr[n] = SPI_RxByte(); - 8004c4a: 7bfc ldrb r4, [r7, #15] - 8004c4c: f7ff fe0a bl 8004864 - 8004c50: 4603 mov r3, r0 - 8004c52: 461a mov r2, r3 - 8004c54: f107 0310 add.w r3, r7, #16 - 8004c58: 4423 add r3, r4 - 8004c5a: f803 2c08 strb.w r2, [r3, #-8] + 8004e5e: 7bfc ldrb r4, [r7, #15] + 8004e60: f7ff fdfc bl 8004a5c + 8004e64: 4603 mov r3, r0 + 8004e66: 461a mov r2, r3 + 8004e68: f107 0310 add.w r3, r7, #16 + 8004e6c: 4423 add r3, r4 + 8004e6e: f803 2c08 strb.w r2, [r3, #-8] for (n = 0; n < 4; n++) - 8004c5e: 7bfb ldrb r3, [r7, #15] - 8004c60: 3301 adds r3, #1 - 8004c62: 73fb strb r3, [r7, #15] - 8004c64: 7bfb ldrb r3, [r7, #15] - 8004c66: 2b03 cmp r3, #3 - 8004c68: d9ef bls.n 8004c4a + 8004e72: 7bfb ldrb r3, [r7, #15] + 8004e74: 3301 adds r3, #1 + 8004e76: 73fb strb r3, [r7, #15] + 8004e78: 7bfb ldrb r3, [r7, #15] + 8004e7a: 2b03 cmp r3, #3 + 8004e7c: d9ef bls.n 8004e5e } type = (ocr[0] & 0x40) ? 6 : 2; - 8004c6a: 7a3b ldrb r3, [r7, #8] - 8004c6c: f003 0340 and.w r3, r3, #64 ; 0x40 - 8004c70: 2b00 cmp r3, #0 - 8004c72: d001 beq.n 8004c78 - 8004c74: 2306 movs r3, #6 - 8004c76: e000 b.n 8004c7a - 8004c78: 2302 movs r3, #2 - 8004c7a: 73bb strb r3, [r7, #14] - 8004c7c: e040 b.n 8004d00 + 8004e7e: 7a3b ldrb r3, [r7, #8] + 8004e80: f003 0340 and.w r3, r3, #64 ; 0x40 + 8004e84: 2b00 cmp r3, #0 + 8004e86: d001 beq.n 8004e8c + 8004e88: 2306 movs r3, #6 + 8004e8a: e000 b.n 8004e8e + 8004e8c: 2302 movs r3, #2 + 8004e8e: 73bb strb r3, [r7, #14] + 8004e90: e043 b.n 8004f1a } } else { /* SDC Ver1 or MMC */ type = (SD_SendCmd(CMD55, 0) <= 1 && SD_SendCmd(CMD41, 0) <= 1) ? 2 : 1; /* SDC : MMC */ - 8004c7e: 2100 movs r1, #0 - 8004c80: 2077 movs r0, #119 ; 0x77 - 8004c82: f7ff ff23 bl 8004acc - 8004c86: 4603 mov r3, r0 - 8004c88: 2b01 cmp r3, #1 - 8004c8a: d808 bhi.n 8004c9e - 8004c8c: 2100 movs r1, #0 - 8004c8e: 2069 movs r0, #105 ; 0x69 - 8004c90: f7ff ff1c bl 8004acc - 8004c94: 4603 mov r3, r0 - 8004c96: 2b01 cmp r3, #1 - 8004c98: d801 bhi.n 8004c9e - 8004c9a: 2302 movs r3, #2 - 8004c9c: e000 b.n 8004ca0 - 8004c9e: 2301 movs r3, #1 - 8004ca0: 73bb strb r3, [r7, #14] + 8004e92: 2100 movs r1, #0 + 8004e94: 2077 movs r0, #119 ; 0x77 + 8004e96: f7ff ff1f bl 8004cd8 + 8004e9a: 4603 mov r3, r0 + 8004e9c: 2b01 cmp r3, #1 + 8004e9e: d808 bhi.n 8004eb2 + 8004ea0: 2100 movs r1, #0 + 8004ea2: 2069 movs r0, #105 ; 0x69 + 8004ea4: f7ff ff18 bl 8004cd8 + 8004ea8: 4603 mov r3, r0 + 8004eaa: 2b01 cmp r3, #1 + 8004eac: d801 bhi.n 8004eb2 + 8004eae: 2302 movs r3, #2 + 8004eb0: e000 b.n 8004eb4 + 8004eb2: 2301 movs r3, #1 + 8004eb4: 73bb strb r3, [r7, #14] do { if (type == 2) - 8004ca2: 7bbb ldrb r3, [r7, #14] - 8004ca4: 2b02 cmp r3, #2 - 8004ca6: d10e bne.n 8004cc6 + 8004eb6: 7bbb ldrb r3, [r7, #14] + 8004eb8: 2b02 cmp r3, #2 + 8004eba: d10e bne.n 8004eda { if (SD_SendCmd(CMD55, 0) <= 1 && SD_SendCmd(CMD41, 0) == 0) - 8004ca8: 2100 movs r1, #0 - 8004caa: 2077 movs r0, #119 ; 0x77 - 8004cac: f7ff ff0e bl 8004acc - 8004cb0: 4603 mov r3, r0 - 8004cb2: 2b01 cmp r3, #1 - 8004cb4: d80e bhi.n 8004cd4 - 8004cb6: 2100 movs r1, #0 - 8004cb8: 2069 movs r0, #105 ; 0x69 - 8004cba: f7ff ff07 bl 8004acc - 8004cbe: 4603 mov r3, r0 - 8004cc0: 2b00 cmp r3, #0 - 8004cc2: d107 bne.n 8004cd4 + 8004ebc: 2100 movs r1, #0 + 8004ebe: 2077 movs r0, #119 ; 0x77 + 8004ec0: f7ff ff0a bl 8004cd8 + 8004ec4: 4603 mov r3, r0 + 8004ec6: 2b01 cmp r3, #1 + 8004ec8: d80e bhi.n 8004ee8 + 8004eca: 2100 movs r1, #0 + 8004ecc: 2069 movs r0, #105 ; 0x69 + 8004ece: f7ff ff03 bl 8004cd8 + 8004ed2: 4603 mov r3, r0 + 8004ed4: 2b00 cmp r3, #0 + 8004ed6: d107 bne.n 8004ee8 break; /* ACMD41 */ - 8004cc4: e00d b.n 8004ce2 + 8004ed8: e011 b.n 8004efe } else { if (SD_SendCmd(CMD1, 0) == 0) - 8004cc6: 2100 movs r1, #0 - 8004cc8: 2041 movs r0, #65 ; 0x41 - 8004cca: f7ff feff bl 8004acc - 8004cce: 4603 mov r3, r0 - 8004cd0: 2b00 cmp r3, #0 - 8004cd2: d005 beq.n 8004ce0 + 8004eda: 2100 movs r1, #0 + 8004edc: 2041 movs r0, #65 ; 0x41 + 8004ede: f7ff fefb bl 8004cd8 + 8004ee2: 4603 mov r3, r0 + 8004ee4: 2b00 cmp r3, #0 + 8004ee6: d009 beq.n 8004efc break; /* CMD1 */ } + Timer1--; + 8004ee8: 4b1b ldr r3, [pc, #108] ; (8004f58 ) + 8004eea: 681b ldr r3, [r3, #0] + 8004eec: 3b01 subs r3, #1 + 8004eee: 4a1a ldr r2, [pc, #104] ; (8004f58 ) + 8004ef0: 6013 str r3, [r2, #0] } while (Timer1); - 8004cd4: 4b19 ldr r3, [pc, #100] ; (8004d3c ) - 8004cd6: 781b ldrb r3, [r3, #0] - 8004cd8: b2db uxtb r3, r3 - 8004cda: 2b00 cmp r3, #0 - 8004cdc: d1e1 bne.n 8004ca2 - 8004cde: e000 b.n 8004ce2 + 8004ef2: 4b19 ldr r3, [pc, #100] ; (8004f58 ) + 8004ef4: 681b ldr r3, [r3, #0] + 8004ef6: 2b00 cmp r3, #0 + 8004ef8: d1dd bne.n 8004eb6 + 8004efa: e000 b.n 8004efe break; /* CMD1 */ - 8004ce0: bf00 nop + 8004efc: bf00 nop if (!Timer1 || SD_SendCmd(CMD16, 512) != 0) - 8004ce2: 4b16 ldr r3, [pc, #88] ; (8004d3c ) - 8004ce4: 781b ldrb r3, [r3, #0] - 8004ce6: b2db uxtb r3, r3 - 8004ce8: 2b00 cmp r3, #0 - 8004cea: d007 beq.n 8004cfc - 8004cec: f44f 7100 mov.w r1, #512 ; 0x200 - 8004cf0: 2050 movs r0, #80 ; 0x50 - 8004cf2: f7ff feeb bl 8004acc - 8004cf6: 4603 mov r3, r0 - 8004cf8: 2b00 cmp r3, #0 - 8004cfa: d001 beq.n 8004d00 + 8004efe: 4b16 ldr r3, [pc, #88] ; (8004f58 ) + 8004f00: 681b ldr r3, [r3, #0] + 8004f02: 2b00 cmp r3, #0 + 8004f04: d007 beq.n 8004f16 + 8004f06: f44f 7100 mov.w r1, #512 ; 0x200 + 8004f0a: 2050 movs r0, #80 ; 0x50 + 8004f0c: f7ff fee4 bl 8004cd8 + 8004f10: 4603 mov r3, r0 + 8004f12: 2b00 cmp r3, #0 + 8004f14: d001 beq.n 8004f1a { type = 0; - 8004cfc: 2300 movs r3, #0 - 8004cfe: 73bb strb r3, [r7, #14] + 8004f16: 2300 movs r3, #0 + 8004f18: 73bb strb r3, [r7, #14] } } } CardType = type; - 8004d00: 4a0f ldr r2, [pc, #60] ; (8004d40 ) - 8004d02: 7bbb ldrb r3, [r7, #14] - 8004d04: 7013 strb r3, [r2, #0] + 8004f1a: 4a11 ldr r2, [pc, #68] ; (8004f60 ) + 8004f1c: 7bbb ldrb r3, [r7, #14] + 8004f1e: 7013 strb r3, [r2, #0] DESELECT(); - 8004d06: f7ff fd87 bl 8004818 + 8004f20: f7ff fd76 bl 8004a10 SPI_RxByte(); - 8004d0a: f7ff fdab bl 8004864 + 8004f24: f7ff fd9a bl 8004a5c if (type) - 8004d0e: 7bbb ldrb r3, [r7, #14] - 8004d10: 2b00 cmp r3, #0 - 8004d12: d008 beq.n 8004d26 + 8004f28: 7bbb ldrb r3, [r7, #14] + 8004f2a: 2b00 cmp r3, #0 + 8004f2c: d008 beq.n 8004f40 { /* Clear STA_NOINIT */ Stat &= ~STA_NOINIT; - 8004d14: 4b08 ldr r3, [pc, #32] ; (8004d38 ) - 8004d16: 781b ldrb r3, [r3, #0] - 8004d18: b2db uxtb r3, r3 - 8004d1a: f023 0301 bic.w r3, r3, #1 - 8004d1e: b2da uxtb r2, r3 - 8004d20: 4b05 ldr r3, [pc, #20] ; (8004d38 ) - 8004d22: 701a strb r2, [r3, #0] - 8004d24: e001 b.n 8004d2a + 8004f2e: 4b09 ldr r3, [pc, #36] ; (8004f54 ) + 8004f30: 781b ldrb r3, [r3, #0] + 8004f32: b2db uxtb r3, r3 + 8004f34: f023 0301 bic.w r3, r3, #1 + 8004f38: b2da uxtb r2, r3 + 8004f3a: 4b06 ldr r3, [pc, #24] ; (8004f54 ) + 8004f3c: 701a strb r2, [r3, #0] + 8004f3e: e001 b.n 8004f44 } else { /* Initialization failed */ SD_PowerOff(); - 8004d26: f7ff fe31 bl 800498c + 8004f40: f7ff fe24 bl 8004b8c } return Stat; - 8004d2a: 4b03 ldr r3, [pc, #12] ; (8004d38 ) - 8004d2c: 781b ldrb r3, [r3, #0] - 8004d2e: b2db uxtb r3, r3 + 8004f44: 4b03 ldr r3, [pc, #12] ; (8004f54 ) + 8004f46: 781b ldrb r3, [r3, #0] + 8004f48: b2db uxtb r3, r3 } - 8004d30: 4618 mov r0, r3 - 8004d32: 3714 adds r7, #20 - 8004d34: 46bd mov sp, r7 - 8004d36: bd90 pop {r4, r7, pc} - 8004d38: 20000020 .word 0x20000020 - 8004d3c: 200007ad .word 0x200007ad - 8004d40: 20000070 .word 0x20000070 + 8004f4a: 4618 mov r0, r3 + 8004f4c: 3714 adds r7, #20 + 8004f4e: 46bd mov sp, r7 + 8004f50: bd90 pop {r4, r7, pc} + 8004f52: bf00 nop + 8004f54: 20000020 .word 0x20000020 + 8004f58: 20000820 .word 0x20000820 + 8004f5c: 000186a0 .word 0x000186a0 + 8004f60: 200000d8 .word 0x200000d8 -08004d44 : +08004f64 : DSTATUS SD_disk_status(BYTE drv) { - 8004d44: b480 push {r7} - 8004d46: b083 sub sp, #12 - 8004d48: af00 add r7, sp, #0 - 8004d4a: 4603 mov r3, r0 - 8004d4c: 71fb strb r3, [r7, #7] + 8004f64: b480 push {r7} + 8004f66: b083 sub sp, #12 + 8004f68: af00 add r7, sp, #0 + 8004f6a: 4603 mov r3, r0 + 8004f6c: 71fb strb r3, [r7, #7] if (drv) - 8004d4e: 79fb ldrb r3, [r7, #7] - 8004d50: 2b00 cmp r3, #0 - 8004d52: d001 beq.n 8004d58 + 8004f6e: 79fb ldrb r3, [r7, #7] + 8004f70: 2b00 cmp r3, #0 + 8004f72: d001 beq.n 8004f78 return STA_NOINIT; - 8004d54: 2301 movs r3, #1 - 8004d56: e002 b.n 8004d5e + 8004f74: 2301 movs r3, #1 + 8004f76: e002 b.n 8004f7e return Stat; - 8004d58: 4b03 ldr r3, [pc, #12] ; (8004d68 ) - 8004d5a: 781b ldrb r3, [r3, #0] - 8004d5c: b2db uxtb r3, r3 + 8004f78: 4b03 ldr r3, [pc, #12] ; (8004f88 ) + 8004f7a: 781b ldrb r3, [r3, #0] + 8004f7c: b2db uxtb r3, r3 } - 8004d5e: 4618 mov r0, r3 - 8004d60: 370c adds r7, #12 - 8004d62: 46bd mov sp, r7 - 8004d64: bc80 pop {r7} - 8004d66: 4770 bx lr - 8004d68: 20000020 .word 0x20000020 + 8004f7e: 4618 mov r0, r3 + 8004f80: 370c adds r7, #12 + 8004f82: 46bd mov sp, r7 + 8004f84: bc80 pop {r7} + 8004f86: 4770 bx lr + 8004f88: 20000020 .word 0x20000020 -08004d6c : +08004f8c : DRESULT SD_disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { - 8004d6c: b580 push {r7, lr} - 8004d6e: b084 sub sp, #16 - 8004d70: af00 add r7, sp, #0 - 8004d72: 60b9 str r1, [r7, #8] - 8004d74: 607a str r2, [r7, #4] - 8004d76: 603b str r3, [r7, #0] - 8004d78: 4603 mov r3, r0 - 8004d7a: 73fb strb r3, [r7, #15] + 8004f8c: b580 push {r7, lr} + 8004f8e: b084 sub sp, #16 + 8004f90: af00 add r7, sp, #0 + 8004f92: 60b9 str r1, [r7, #8] + 8004f94: 607a str r2, [r7, #4] + 8004f96: 603b str r3, [r7, #0] + 8004f98: 4603 mov r3, r0 + 8004f9a: 73fb strb r3, [r7, #15] if (pdrv || !count) - 8004d7c: 7bfb ldrb r3, [r7, #15] - 8004d7e: 2b00 cmp r3, #0 - 8004d80: d102 bne.n 8004d88 - 8004d82: 683b ldr r3, [r7, #0] - 8004d84: 2b00 cmp r3, #0 - 8004d86: d101 bne.n 8004d8c + 8004f9c: 7bfb ldrb r3, [r7, #15] + 8004f9e: 2b00 cmp r3, #0 + 8004fa0: d102 bne.n 8004fa8 + 8004fa2: 683b ldr r3, [r7, #0] + 8004fa4: 2b00 cmp r3, #0 + 8004fa6: d101 bne.n 8004fac return RES_PARERR; - 8004d88: 2304 movs r3, #4 - 8004d8a: e051 b.n 8004e30 + 8004fa8: 2304 movs r3, #4 + 8004faa: e051 b.n 8005050 if (Stat & STA_NOINIT) - 8004d8c: 4b2a ldr r3, [pc, #168] ; (8004e38 ) - 8004d8e: 781b ldrb r3, [r3, #0] - 8004d90: b2db uxtb r3, r3 - 8004d92: f003 0301 and.w r3, r3, #1 - 8004d96: 2b00 cmp r3, #0 - 8004d98: d001 beq.n 8004d9e + 8004fac: 4b2a ldr r3, [pc, #168] ; (8005058 ) + 8004fae: 781b ldrb r3, [r3, #0] + 8004fb0: b2db uxtb r3, r3 + 8004fb2: f003 0301 and.w r3, r3, #1 + 8004fb6: 2b00 cmp r3, #0 + 8004fb8: d001 beq.n 8004fbe return RES_NOTRDY; - 8004d9a: 2303 movs r3, #3 - 8004d9c: e048 b.n 8004e30 + 8004fba: 2303 movs r3, #3 + 8004fbc: e048 b.n 8005050 if (!(CardType & 4)) - 8004d9e: 4b27 ldr r3, [pc, #156] ; (8004e3c ) - 8004da0: 781b ldrb r3, [r3, #0] - 8004da2: f003 0304 and.w r3, r3, #4 - 8004da6: 2b00 cmp r3, #0 - 8004da8: d102 bne.n 8004db0 + 8004fbe: 4b27 ldr r3, [pc, #156] ; (800505c ) + 8004fc0: 781b ldrb r3, [r3, #0] + 8004fc2: f003 0304 and.w r3, r3, #4 + 8004fc6: 2b00 cmp r3, #0 + 8004fc8: d102 bne.n 8004fd0 sector *= 512; - 8004daa: 687b ldr r3, [r7, #4] - 8004dac: 025b lsls r3, r3, #9 - 8004dae: 607b str r3, [r7, #4] + 8004fca: 687b ldr r3, [r7, #4] + 8004fcc: 025b lsls r3, r3, #9 + 8004fce: 607b str r3, [r7, #4] SELECT(); - 8004db0: f7ff fd26 bl 8004800 if (count == 1) - 8004db4: 683b ldr r3, [r7, #0] - 8004db6: 2b01 cmp r3, #1 - 8004db8: d111 bne.n 8004dde + 8004fd4: 683b ldr r3, [r7, #0] + 8004fd6: 2b01 cmp r3, #1 + 8004fd8: d111 bne.n 8004ffe { if ((SD_SendCmd(CMD17, sector) == 0) && SD_RxDataBlock(buff, 512)) - 8004dba: 6879 ldr r1, [r7, #4] - 8004dbc: 2051 movs r0, #81 ; 0x51 - 8004dbe: f7ff fe85 bl 8004acc - 8004dc2: 4603 mov r3, r0 - 8004dc4: 2b00 cmp r3, #0 - 8004dc6: d129 bne.n 8004e1c - 8004dc8: f44f 7100 mov.w r1, #512 ; 0x200 - 8004dcc: 68b8 ldr r0, [r7, #8] - 8004dce: f7ff fdf3 bl 80049b8 - 8004dd2: 4603 mov r3, r0 - 8004dd4: 2b00 cmp r3, #0 - 8004dd6: d021 beq.n 8004e1c + 8004fda: 6879 ldr r1, [r7, #4] + 8004fdc: 2051 movs r0, #81 ; 0x51 + 8004fde: f7ff fe7b bl 8004cd8 + 8004fe2: 4603 mov r3, r0 + 8004fe4: 2b00 cmp r3, #0 + 8004fe6: d129 bne.n 800503c + 8004fe8: f44f 7100 mov.w r1, #512 ; 0x200 + 8004fec: 68b8 ldr r0, [r7, #8] + 8004fee: f7ff fde3 bl 8004bb8 + 8004ff2: 4603 mov r3, r0 + 8004ff4: 2b00 cmp r3, #0 + 8004ff6: d021 beq.n 800503c count = 0; - 8004dd8: 2300 movs r3, #0 - 8004dda: 603b str r3, [r7, #0] - 8004ddc: e01e b.n 8004e1c + 8004ff8: 2300 movs r3, #0 + 8004ffa: 603b str r3, [r7, #0] + 8004ffc: e01e b.n 800503c } else { if (SD_SendCmd(CMD18, sector) == 0) - 8004dde: 6879 ldr r1, [r7, #4] - 8004de0: 2052 movs r0, #82 ; 0x52 - 8004de2: f7ff fe73 bl 8004acc - 8004de6: 4603 mov r3, r0 - 8004de8: 2b00 cmp r3, #0 - 8004dea: d117 bne.n 8004e1c + 8004ffe: 6879 ldr r1, [r7, #4] + 8005000: 2052 movs r0, #82 ; 0x52 + 8005002: f7ff fe69 bl 8004cd8 + 8005006: 4603 mov r3, r0 + 8005008: 2b00 cmp r3, #0 + 800500a: d117 bne.n 800503c { do { if (!SD_RxDataBlock(buff, 512)) - 8004dec: f44f 7100 mov.w r1, #512 ; 0x200 - 8004df0: 68b8 ldr r0, [r7, #8] - 8004df2: f7ff fde1 bl 80049b8 - 8004df6: 4603 mov r3, r0 - 8004df8: 2b00 cmp r3, #0 - 8004dfa: d00a beq.n 8004e12 + 800500c: f44f 7100 mov.w r1, #512 ; 0x200 + 8005010: 68b8 ldr r0, [r7, #8] + 8005012: f7ff fdd1 bl 8004bb8 + 8005016: 4603 mov r3, r0 + 8005018: 2b00 cmp r3, #0 + 800501a: d00a beq.n 8005032 break; buff += 512; - 8004dfc: 68bb ldr r3, [r7, #8] - 8004dfe: f503 7300 add.w r3, r3, #512 ; 0x200 - 8004e02: 60bb str r3, [r7, #8] + 800501c: 68bb ldr r3, [r7, #8] + 800501e: f503 7300 add.w r3, r3, #512 ; 0x200 + 8005022: 60bb str r3, [r7, #8] } while (--count); - 8004e04: 683b ldr r3, [r7, #0] - 8004e06: 3b01 subs r3, #1 - 8004e08: 603b str r3, [r7, #0] - 8004e0a: 683b ldr r3, [r7, #0] - 8004e0c: 2b00 cmp r3, #0 - 8004e0e: d1ed bne.n 8004dec - 8004e10: e000 b.n 8004e14 + 8005024: 683b ldr r3, [r7, #0] + 8005026: 3b01 subs r3, #1 + 8005028: 603b str r3, [r7, #0] + 800502a: 683b ldr r3, [r7, #0] + 800502c: 2b00 cmp r3, #0 + 800502e: d1ed bne.n 800500c + 8005030: e000 b.n 8005034 break; - 8004e12: bf00 nop + 8005032: bf00 nop SD_SendCmd(CMD12, 0); - 8004e14: 2100 movs r1, #0 - 8004e16: 204c movs r0, #76 ; 0x4c - 8004e18: f7ff fe58 bl 8004acc + 8005034: 2100 movs r1, #0 + 8005036: 204c movs r0, #76 ; 0x4c + 8005038: f7ff fe4e bl 8004cd8 } } DESELECT(); - 8004e1c: f7ff fcfc bl 8004818 + 800503c: f7ff fce8 bl 8004a10 SPI_RxByte(); - 8004e20: f7ff fd20 bl 8004864 + 8005040: f7ff fd0c bl 8004a5c return count ? RES_ERROR : RES_OK; - 8004e24: 683b ldr r3, [r7, #0] - 8004e26: 2b00 cmp r3, #0 - 8004e28: bf14 ite ne - 8004e2a: 2301 movne r3, #1 - 8004e2c: 2300 moveq r3, #0 - 8004e2e: b2db uxtb r3, r3 + 8005044: 683b ldr r3, [r7, #0] + 8005046: 2b00 cmp r3, #0 + 8005048: bf14 ite ne + 800504a: 2301 movne r3, #1 + 800504c: 2300 moveq r3, #0 + 800504e: b2db uxtb r3, r3 } - 8004e30: 4618 mov r0, r3 - 8004e32: 3710 adds r7, #16 - 8004e34: 46bd mov sp, r7 - 8004e36: bd80 pop {r7, pc} - 8004e38: 20000020 .word 0x20000020 - 8004e3c: 20000070 .word 0x20000070 + 8005050: 4618 mov r0, r3 + 8005052: 3710 adds r7, #16 + 8005054: 46bd mov sp, r7 + 8005056: bd80 pop {r7, pc} + 8005058: 20000020 .word 0x20000020 + 800505c: 200000d8 .word 0x200000d8 -08004e40 : +08005060 : #if _READONLY == 0 DRESULT SD_disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { - 8004e40: b580 push {r7, lr} - 8004e42: b084 sub sp, #16 - 8004e44: af00 add r7, sp, #0 - 8004e46: 60b9 str r1, [r7, #8] - 8004e48: 607a str r2, [r7, #4] - 8004e4a: 603b str r3, [r7, #0] - 8004e4c: 4603 mov r3, r0 - 8004e4e: 73fb strb r3, [r7, #15] + 8005060: b580 push {r7, lr} + 8005062: b084 sub sp, #16 + 8005064: af00 add r7, sp, #0 + 8005066: 60b9 str r1, [r7, #8] + 8005068: 607a str r2, [r7, #4] + 800506a: 603b str r3, [r7, #0] + 800506c: 4603 mov r3, r0 + 800506e: 73fb strb r3, [r7, #15] if (pdrv || !count) - 8004e50: 7bfb ldrb r3, [r7, #15] - 8004e52: 2b00 cmp r3, #0 - 8004e54: d102 bne.n 8004e5c - 8004e56: 683b ldr r3, [r7, #0] - 8004e58: 2b00 cmp r3, #0 - 8004e5a: d101 bne.n 8004e60 + 8005070: 7bfb ldrb r3, [r7, #15] + 8005072: 2b00 cmp r3, #0 + 8005074: d102 bne.n 800507c + 8005076: 683b ldr r3, [r7, #0] + 8005078: 2b00 cmp r3, #0 + 800507a: d101 bne.n 8005080 return RES_PARERR; - 8004e5c: 2304 movs r3, #4 - 8004e5e: e06b b.n 8004f38 + 800507c: 2304 movs r3, #4 + 800507e: e06b b.n 8005158 if (Stat & STA_NOINIT) - 8004e60: 4b37 ldr r3, [pc, #220] ; (8004f40 ) - 8004e62: 781b ldrb r3, [r3, #0] - 8004e64: b2db uxtb r3, r3 - 8004e66: f003 0301 and.w r3, r3, #1 - 8004e6a: 2b00 cmp r3, #0 - 8004e6c: d001 beq.n 8004e72 + 8005080: 4b37 ldr r3, [pc, #220] ; (8005160 ) + 8005082: 781b ldrb r3, [r3, #0] + 8005084: b2db uxtb r3, r3 + 8005086: f003 0301 and.w r3, r3, #1 + 800508a: 2b00 cmp r3, #0 + 800508c: d001 beq.n 8005092 return RES_NOTRDY; - 8004e6e: 2303 movs r3, #3 - 8004e70: e062 b.n 8004f38 + 800508e: 2303 movs r3, #3 + 8005090: e062 b.n 8005158 if (Stat & STA_PROTECT) - 8004e72: 4b33 ldr r3, [pc, #204] ; (8004f40 ) - 8004e74: 781b ldrb r3, [r3, #0] - 8004e76: b2db uxtb r3, r3 - 8004e78: f003 0304 and.w r3, r3, #4 - 8004e7c: 2b00 cmp r3, #0 - 8004e7e: d001 beq.n 8004e84 + 8005092: 4b33 ldr r3, [pc, #204] ; (8005160 ) + 8005094: 781b ldrb r3, [r3, #0] + 8005096: b2db uxtb r3, r3 + 8005098: f003 0304 and.w r3, r3, #4 + 800509c: 2b00 cmp r3, #0 + 800509e: d001 beq.n 80050a4 return RES_WRPRT; - 8004e80: 2302 movs r3, #2 - 8004e82: e059 b.n 8004f38 + 80050a0: 2302 movs r3, #2 + 80050a2: e059 b.n 8005158 if (!(CardType & 4)) - 8004e84: 4b2f ldr r3, [pc, #188] ; (8004f44 ) - 8004e86: 781b ldrb r3, [r3, #0] - 8004e88: f003 0304 and.w r3, r3, #4 - 8004e8c: 2b00 cmp r3, #0 - 8004e8e: d102 bne.n 8004e96 + 80050a4: 4b2f ldr r3, [pc, #188] ; (8005164 ) + 80050a6: 781b ldrb r3, [r3, #0] + 80050a8: f003 0304 and.w r3, r3, #4 + 80050ac: 2b00 cmp r3, #0 + 80050ae: d102 bne.n 80050b6 sector *= 512; - 8004e90: 687b ldr r3, [r7, #4] - 8004e92: 025b lsls r3, r3, #9 - 8004e94: 607b str r3, [r7, #4] + 80050b0: 687b ldr r3, [r7, #4] + 80050b2: 025b lsls r3, r3, #9 + 80050b4: 607b str r3, [r7, #4] SELECT(); - 8004e96: f7ff fcb3 bl 8004800 if (count == 1) - 8004e9a: 683b ldr r3, [r7, #0] - 8004e9c: 2b01 cmp r3, #1 - 8004e9e: d110 bne.n 8004ec2 + 80050ba: 683b ldr r3, [r7, #0] + 80050bc: 2b01 cmp r3, #1 + 80050be: d110 bne.n 80050e2 { if ((SD_SendCmd(CMD24, sector) == 0) && SD_TxDataBlock(buff, 0xFE)) - 8004ea0: 6879 ldr r1, [r7, #4] - 8004ea2: 2058 movs r0, #88 ; 0x58 - 8004ea4: f7ff fe12 bl 8004acc - 8004ea8: 4603 mov r3, r0 - 8004eaa: 2b00 cmp r3, #0 - 8004eac: d13a bne.n 8004f24 - 8004eae: 21fe movs r1, #254 ; 0xfe - 8004eb0: 68b8 ldr r0, [r7, #8] - 8004eb2: f7ff fdb7 bl 8004a24 - 8004eb6: 4603 mov r3, r0 - 8004eb8: 2b00 cmp r3, #0 - 8004eba: d033 beq.n 8004f24 + 80050c0: 6879 ldr r1, [r7, #4] + 80050c2: 2058 movs r0, #88 ; 0x58 + 80050c4: f7ff fe08 bl 8004cd8 + 80050c8: 4603 mov r3, r0 + 80050ca: 2b00 cmp r3, #0 + 80050cc: d13a bne.n 8005144 + 80050ce: 21fe movs r1, #254 ; 0xfe + 80050d0: 68b8 ldr r0, [r7, #8] + 80050d2: f7ff fdad bl 8004c30 + 80050d6: 4603 mov r3, r0 + 80050d8: 2b00 cmp r3, #0 + 80050da: d033 beq.n 8005144 count = 0; - 8004ebc: 2300 movs r3, #0 - 8004ebe: 603b str r3, [r7, #0] - 8004ec0: e030 b.n 8004f24 + 80050dc: 2300 movs r3, #0 + 80050de: 603b str r3, [r7, #0] + 80050e0: e030 b.n 8005144 } else { if (CardType & 2) - 8004ec2: 4b20 ldr r3, [pc, #128] ; (8004f44 ) - 8004ec4: 781b ldrb r3, [r3, #0] - 8004ec6: f003 0302 and.w r3, r3, #2 - 8004eca: 2b00 cmp r3, #0 - 8004ecc: d007 beq.n 8004ede + 80050e2: 4b20 ldr r3, [pc, #128] ; (8005164 ) + 80050e4: 781b ldrb r3, [r3, #0] + 80050e6: f003 0302 and.w r3, r3, #2 + 80050ea: 2b00 cmp r3, #0 + 80050ec: d007 beq.n 80050fe { SD_SendCmd(CMD55, 0); - 8004ece: 2100 movs r1, #0 - 8004ed0: 2077 movs r0, #119 ; 0x77 - 8004ed2: f7ff fdfb bl 8004acc + 80050ee: 2100 movs r1, #0 + 80050f0: 2077 movs r0, #119 ; 0x77 + 80050f2: f7ff fdf1 bl 8004cd8 SD_SendCmd(CMD23, count); /* ACMD23 */ - 8004ed6: 6839 ldr r1, [r7, #0] - 8004ed8: 2057 movs r0, #87 ; 0x57 - 8004eda: f7ff fdf7 bl 8004acc + 80050f6: 6839 ldr r1, [r7, #0] + 80050f8: 2057 movs r0, #87 ; 0x57 + 80050fa: f7ff fded bl 8004cd8 } if (SD_SendCmd(CMD25, sector) == 0) - 8004ede: 6879 ldr r1, [r7, #4] - 8004ee0: 2059 movs r0, #89 ; 0x59 - 8004ee2: f7ff fdf3 bl 8004acc - 8004ee6: 4603 mov r3, r0 - 8004ee8: 2b00 cmp r3, #0 - 8004eea: d11b bne.n 8004f24 + 80050fe: 6879 ldr r1, [r7, #4] + 8005100: 2059 movs r0, #89 ; 0x59 + 8005102: f7ff fde9 bl 8004cd8 + 8005106: 4603 mov r3, r0 + 8005108: 2b00 cmp r3, #0 + 800510a: d11b bne.n 8005144 { do { if(!SD_TxDataBlock(buff, 0xFC)) - 8004eec: 21fc movs r1, #252 ; 0xfc - 8004eee: 68b8 ldr r0, [r7, #8] - 8004ef0: f7ff fd98 bl 8004a24 - 8004ef4: 4603 mov r3, r0 - 8004ef6: 2b00 cmp r3, #0 - 8004ef8: d00a beq.n 8004f10 + 800510c: 21fc movs r1, #252 ; 0xfc + 800510e: 68b8 ldr r0, [r7, #8] + 8005110: f7ff fd8e bl 8004c30 + 8005114: 4603 mov r3, r0 + 8005116: 2b00 cmp r3, #0 + 8005118: d00a beq.n 8005130 break; buff += 512; - 8004efa: 68bb ldr r3, [r7, #8] - 8004efc: f503 7300 add.w r3, r3, #512 ; 0x200 - 8004f00: 60bb str r3, [r7, #8] + 800511a: 68bb ldr r3, [r7, #8] + 800511c: f503 7300 add.w r3, r3, #512 ; 0x200 + 8005120: 60bb str r3, [r7, #8] } while (--count); - 8004f02: 683b ldr r3, [r7, #0] - 8004f04: 3b01 subs r3, #1 - 8004f06: 603b str r3, [r7, #0] - 8004f08: 683b ldr r3, [r7, #0] - 8004f0a: 2b00 cmp r3, #0 - 8004f0c: d1ee bne.n 8004eec - 8004f0e: e000 b.n 8004f12 + 8005122: 683b ldr r3, [r7, #0] + 8005124: 3b01 subs r3, #1 + 8005126: 603b str r3, [r7, #0] + 8005128: 683b ldr r3, [r7, #0] + 800512a: 2b00 cmp r3, #0 + 800512c: d1ee bne.n 800510c + 800512e: e000 b.n 8005132 break; - 8004f10: bf00 nop + 8005130: bf00 nop if(!SD_TxDataBlock(0, 0xFD)) - 8004f12: 21fd movs r1, #253 ; 0xfd - 8004f14: 2000 movs r0, #0 - 8004f16: f7ff fd85 bl 8004a24 - 8004f1a: 4603 mov r3, r0 - 8004f1c: 2b00 cmp r3, #0 - 8004f1e: d101 bne.n 8004f24 + 8005132: 21fd movs r1, #253 ; 0xfd + 8005134: 2000 movs r0, #0 + 8005136: f7ff fd7b bl 8004c30 + 800513a: 4603 mov r3, r0 + 800513c: 2b00 cmp r3, #0 + 800513e: d101 bne.n 8005144 { count = 1; - 8004f20: 2301 movs r3, #1 - 8004f22: 603b str r3, [r7, #0] + 8005140: 2301 movs r3, #1 + 8005142: 603b str r3, [r7, #0] } } } DESELECT(); - 8004f24: f7ff fc78 bl 8004818 + 8005144: f7ff fc64 bl 8004a10 SPI_RxByte(); - 8004f28: f7ff fc9c bl 8004864 + 8005148: f7ff fc88 bl 8004a5c return count ? RES_ERROR : RES_OK; - 8004f2c: 683b ldr r3, [r7, #0] - 8004f2e: 2b00 cmp r3, #0 - 8004f30: bf14 ite ne - 8004f32: 2301 movne r3, #1 - 8004f34: 2300 moveq r3, #0 - 8004f36: b2db uxtb r3, r3 + 800514c: 683b ldr r3, [r7, #0] + 800514e: 2b00 cmp r3, #0 + 8005150: bf14 ite ne + 8005152: 2301 movne r3, #1 + 8005154: 2300 moveq r3, #0 + 8005156: b2db uxtb r3, r3 } - 8004f38: 4618 mov r0, r3 - 8004f3a: 3710 adds r7, #16 - 8004f3c: 46bd mov sp, r7 - 8004f3e: bd80 pop {r7, pc} - 8004f40: 20000020 .word 0x20000020 - 8004f44: 20000070 .word 0x20000070 + 8005158: 4618 mov r0, r3 + 800515a: 3710 adds r7, #16 + 800515c: 46bd mov sp, r7 + 800515e: bd80 pop {r7, pc} + 8005160: 20000020 .word 0x20000020 + 8005164: 200000d8 .word 0x200000d8 -08004f48 : +08005168 : #endif /* _READONLY */ DRESULT SD_disk_ioctl(BYTE drv, BYTE ctrl, void *buff) { - 8004f48: b590 push {r4, r7, lr} - 8004f4a: b08b sub sp, #44 ; 0x2c - 8004f4c: af00 add r7, sp, #0 - 8004f4e: 4603 mov r3, r0 - 8004f50: 603a str r2, [r7, #0] - 8004f52: 71fb strb r3, [r7, #7] - 8004f54: 460b mov r3, r1 - 8004f56: 71bb strb r3, [r7, #6] + 8005168: b590 push {r4, r7, lr} + 800516a: b08b sub sp, #44 ; 0x2c + 800516c: af00 add r7, sp, #0 + 800516e: 4603 mov r3, r0 + 8005170: 603a str r2, [r7, #0] + 8005172: 71fb strb r3, [r7, #7] + 8005174: 460b mov r3, r1 + 8005176: 71bb strb r3, [r7, #6] DRESULT res; BYTE n, csd[16], *ptr = buff; - 8004f58: 683b ldr r3, [r7, #0] - 8004f5a: 623b str r3, [r7, #32] + 8005178: 683b ldr r3, [r7, #0] + 800517a: 623b str r3, [r7, #32] WORD csize; if (drv) - 8004f5c: 79fb ldrb r3, [r7, #7] - 8004f5e: 2b00 cmp r3, #0 - 8004f60: d001 beq.n 8004f66 + 800517c: 79fb ldrb r3, [r7, #7] + 800517e: 2b00 cmp r3, #0 + 8005180: d001 beq.n 8005186 return RES_PARERR; - 8004f62: 2304 movs r3, #4 - 8004f64: e11b b.n 800519e + 8005182: 2304 movs r3, #4 + 8005184: e11b b.n 80053be res = RES_ERROR; - 8004f66: 2301 movs r3, #1 - 8004f68: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005186: 2301 movs r3, #1 + 8005188: f887 3027 strb.w r3, [r7, #39] ; 0x27 if (ctrl == CTRL_POWER) - 8004f6c: 79bb ldrb r3, [r7, #6] - 8004f6e: 2b05 cmp r3, #5 - 8004f70: d129 bne.n 8004fc6 + 800518c: 79bb ldrb r3, [r7, #6] + 800518e: 2b05 cmp r3, #5 + 8005190: d129 bne.n 80051e6 { switch (*ptr) - 8004f72: 6a3b ldr r3, [r7, #32] - 8004f74: 781b ldrb r3, [r3, #0] - 8004f76: 2b02 cmp r3, #2 - 8004f78: d017 beq.n 8004faa - 8004f7a: 2b02 cmp r3, #2 - 8004f7c: dc1f bgt.n 8004fbe - 8004f7e: 2b00 cmp r3, #0 - 8004f80: d002 beq.n 8004f88 - 8004f82: 2b01 cmp r3, #1 - 8004f84: d00b beq.n 8004f9e - 8004f86: e01a b.n 8004fbe + 8005192: 6a3b ldr r3, [r7, #32] + 8005194: 781b ldrb r3, [r3, #0] + 8005196: 2b02 cmp r3, #2 + 8005198: d017 beq.n 80051ca + 800519a: 2b02 cmp r3, #2 + 800519c: dc1f bgt.n 80051de + 800519e: 2b00 cmp r3, #0 + 80051a0: d002 beq.n 80051a8 + 80051a2: 2b01 cmp r3, #1 + 80051a4: d00b beq.n 80051be + 80051a6: e01a b.n 80051de { case 0: if (SD_CheckPower()) - 8004f88: f7ff fd0c bl 80049a4 - 8004f8c: 4603 mov r3, r0 - 8004f8e: 2b00 cmp r3, #0 - 8004f90: d001 beq.n 8004f96 + 80051a8: f7ff fcfc bl 8004ba4 + 80051ac: 4603 mov r3, r0 + 80051ae: 2b00 cmp r3, #0 + 80051b0: d001 beq.n 80051b6 SD_PowerOff(); /* Power Off */ - 8004f92: f7ff fcfb bl 800498c + 80051b2: f7ff fceb bl 8004b8c res = RES_OK; - 8004f96: 2300 movs r3, #0 - 8004f98: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80051b6: 2300 movs r3, #0 + 80051b8: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8004f9c: e0fd b.n 800519a + 80051bc: e0fd b.n 80053ba case 1: SD_PowerOn(); /* Power On */ - 8004f9e: f7ff fca9 bl 80048f4 + 80051be: f7ff fc99 bl 8004af4 res = RES_OK; - 8004fa2: 2300 movs r3, #0 - 8004fa4: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80051c2: 2300 movs r3, #0 + 80051c4: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8004fa8: e0f7 b.n 800519a + 80051c8: e0f7 b.n 80053ba case 2: *(ptr + 1) = (BYTE) SD_CheckPower(); - 8004faa: 6a3b ldr r3, [r7, #32] - 8004fac: 1c5c adds r4, r3, #1 - 8004fae: f7ff fcf9 bl 80049a4 - 8004fb2: 4603 mov r3, r0 - 8004fb4: 7023 strb r3, [r4, #0] + 80051ca: 6a3b ldr r3, [r7, #32] + 80051cc: 1c5c adds r4, r3, #1 + 80051ce: f7ff fce9 bl 8004ba4 + 80051d2: 4603 mov r3, r0 + 80051d4: 7023 strb r3, [r4, #0] res = RES_OK; /* Power Check */ - 8004fb6: 2300 movs r3, #0 - 8004fb8: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80051d6: 2300 movs r3, #0 + 80051d8: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8004fbc: e0ed b.n 800519a + 80051dc: e0ed b.n 80053ba default: res = RES_PARERR; - 8004fbe: 2304 movs r3, #4 - 8004fc0: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 8004fc4: e0e9 b.n 800519a + 80051de: 2304 movs r3, #4 + 80051e0: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80051e4: e0e9 b.n 80053ba } } else { if (Stat & STA_NOINIT) - 8004fc6: 4b78 ldr r3, [pc, #480] ; (80051a8 ) - 8004fc8: 781b ldrb r3, [r3, #0] - 8004fca: b2db uxtb r3, r3 - 8004fcc: f003 0301 and.w r3, r3, #1 - 8004fd0: 2b00 cmp r3, #0 - 8004fd2: d001 beq.n 8004fd8 + 80051e6: 4b78 ldr r3, [pc, #480] ; (80053c8 ) + 80051e8: 781b ldrb r3, [r3, #0] + 80051ea: b2db uxtb r3, r3 + 80051ec: f003 0301 and.w r3, r3, #1 + 80051f0: 2b00 cmp r3, #0 + 80051f2: d001 beq.n 80051f8 return RES_NOTRDY; - 8004fd4: 2303 movs r3, #3 - 8004fd6: e0e2 b.n 800519e + 80051f4: 2303 movs r3, #3 + 80051f6: e0e2 b.n 80053be SELECT(); - 8004fd8: f7ff fc12 bl 8004800 switch (ctrl) - 8004fdc: 79bb ldrb r3, [r7, #6] - 8004fde: 2b0d cmp r3, #13 - 8004fe0: f200 80cc bhi.w 800517c - 8004fe4: a201 add r2, pc, #4 ; (adr r2, 8004fec ) - 8004fe6: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8004fea: bf00 nop - 8004fec: 080050e7 .word 0x080050e7 - 8004ff0: 08005025 .word 0x08005025 - 8004ff4: 080050d7 .word 0x080050d7 - 8004ff8: 0800517d .word 0x0800517d - 8004ffc: 0800517d .word 0x0800517d - 8005000: 0800517d .word 0x0800517d - 8005004: 0800517d .word 0x0800517d - 8005008: 0800517d .word 0x0800517d - 800500c: 0800517d .word 0x0800517d - 8005010: 0800517d .word 0x0800517d - 8005014: 0800517d .word 0x0800517d - 8005018: 080050f9 .word 0x080050f9 - 800501c: 0800511d .word 0x0800511d - 8005020: 08005141 .word 0x08005141 + 80051fc: 79bb ldrb r3, [r7, #6] + 80051fe: 2b0d cmp r3, #13 + 8005200: f200 80cc bhi.w 800539c + 8005204: a201 add r2, pc, #4 ; (adr r2, 800520c ) + 8005206: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800520a: bf00 nop + 800520c: 08005307 .word 0x08005307 + 8005210: 08005245 .word 0x08005245 + 8005214: 080052f7 .word 0x080052f7 + 8005218: 0800539d .word 0x0800539d + 800521c: 0800539d .word 0x0800539d + 8005220: 0800539d .word 0x0800539d + 8005224: 0800539d .word 0x0800539d + 8005228: 0800539d .word 0x0800539d + 800522c: 0800539d .word 0x0800539d + 8005230: 0800539d .word 0x0800539d + 8005234: 0800539d .word 0x0800539d + 8005238: 08005319 .word 0x08005319 + 800523c: 0800533d .word 0x0800533d + 8005240: 08005361 .word 0x08005361 { case GET_SECTOR_COUNT: if ((SD_SendCmd(CMD9, 0) == 0) && SD_RxDataBlock(csd, 16)) - 8005024: 2100 movs r1, #0 - 8005026: 2049 movs r0, #73 ; 0x49 - 8005028: f7ff fd50 bl 8004acc - 800502c: 4603 mov r3, r0 - 800502e: 2b00 cmp r3, #0 - 8005030: f040 80a8 bne.w 8005184 - 8005034: f107 030c add.w r3, r7, #12 - 8005038: 2110 movs r1, #16 - 800503a: 4618 mov r0, r3 - 800503c: f7ff fcbc bl 80049b8 - 8005040: 4603 mov r3, r0 - 8005042: 2b00 cmp r3, #0 - 8005044: f000 809e beq.w 8005184 + 8005244: 2100 movs r1, #0 + 8005246: 2049 movs r0, #73 ; 0x49 + 8005248: f7ff fd46 bl 8004cd8 + 800524c: 4603 mov r3, r0 + 800524e: 2b00 cmp r3, #0 + 8005250: f040 80a8 bne.w 80053a4 + 8005254: f107 030c add.w r3, r7, #12 + 8005258: 2110 movs r1, #16 + 800525a: 4618 mov r0, r3 + 800525c: f7ff fcac bl 8004bb8 + 8005260: 4603 mov r3, r0 + 8005262: 2b00 cmp r3, #0 + 8005264: f000 809e beq.w 80053a4 { if ((csd[0] >> 6) == 1) - 8005048: 7b3b ldrb r3, [r7, #12] - 800504a: 099b lsrs r3, r3, #6 - 800504c: b2db uxtb r3, r3 - 800504e: 2b01 cmp r3, #1 - 8005050: d10e bne.n 8005070 + 8005268: 7b3b ldrb r3, [r7, #12] + 800526a: 099b lsrs r3, r3, #6 + 800526c: b2db uxtb r3, r3 + 800526e: 2b01 cmp r3, #1 + 8005270: d10e bne.n 8005290 { /* SDC ver 2.00 */ csize = csd[9] + ((WORD) csd[8] << 8) + 1; - 8005052: 7d7b ldrb r3, [r7, #21] - 8005054: b29a uxth r2, r3 - 8005056: 7d3b ldrb r3, [r7, #20] - 8005058: b29b uxth r3, r3 - 800505a: 021b lsls r3, r3, #8 - 800505c: b29b uxth r3, r3 - 800505e: 4413 add r3, r2 - 8005060: b29b uxth r3, r3 - 8005062: 3301 adds r3, #1 - 8005064: 83fb strh r3, [r7, #30] + 8005272: 7d7b ldrb r3, [r7, #21] + 8005274: b29a uxth r2, r3 + 8005276: 7d3b ldrb r3, [r7, #20] + 8005278: b29b uxth r3, r3 + 800527a: 021b lsls r3, r3, #8 + 800527c: b29b uxth r3, r3 + 800527e: 4413 add r3, r2 + 8005280: b29b uxth r3, r3 + 8005282: 3301 adds r3, #1 + 8005284: 83fb strh r3, [r7, #30] *(DWORD*) buff = (DWORD) csize << 10; - 8005066: 8bfb ldrh r3, [r7, #30] - 8005068: 029a lsls r2, r3, #10 - 800506a: 683b ldr r3, [r7, #0] - 800506c: 601a str r2, [r3, #0] - 800506e: e02e b.n 80050ce + 8005286: 8bfb ldrh r3, [r7, #30] + 8005288: 029a lsls r2, r3, #10 + 800528a: 683b ldr r3, [r7, #0] + 800528c: 601a str r2, [r3, #0] + 800528e: e02e b.n 80052ee } else { /* MMC or SDC ver 1.XX */ n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2; - 8005070: 7c7b ldrb r3, [r7, #17] - 8005072: f003 030f and.w r3, r3, #15 - 8005076: b2da uxtb r2, r3 - 8005078: 7dbb ldrb r3, [r7, #22] - 800507a: 09db lsrs r3, r3, #7 - 800507c: b2db uxtb r3, r3 - 800507e: 4413 add r3, r2 - 8005080: b2da uxtb r2, r3 - 8005082: 7d7b ldrb r3, [r7, #21] - 8005084: 005b lsls r3, r3, #1 - 8005086: b2db uxtb r3, r3 - 8005088: f003 0306 and.w r3, r3, #6 - 800508c: b2db uxtb r3, r3 - 800508e: 4413 add r3, r2 - 8005090: b2db uxtb r3, r3 - 8005092: 3302 adds r3, #2 - 8005094: f887 3026 strb.w r3, [r7, #38] ; 0x26 + 8005290: 7c7b ldrb r3, [r7, #17] + 8005292: f003 030f and.w r3, r3, #15 + 8005296: b2da uxtb r2, r3 + 8005298: 7dbb ldrb r3, [r7, #22] + 800529a: 09db lsrs r3, r3, #7 + 800529c: b2db uxtb r3, r3 + 800529e: 4413 add r3, r2 + 80052a0: b2da uxtb r2, r3 + 80052a2: 7d7b ldrb r3, [r7, #21] + 80052a4: 005b lsls r3, r3, #1 + 80052a6: b2db uxtb r3, r3 + 80052a8: f003 0306 and.w r3, r3, #6 + 80052ac: b2db uxtb r3, r3 + 80052ae: 4413 add r3, r2 + 80052b0: b2db uxtb r3, r3 + 80052b2: 3302 adds r3, #2 + 80052b4: f887 3026 strb.w r3, [r7, #38] ; 0x26 csize = (csd[8] >> 6) + ((WORD) csd[7] << 2) + ((WORD) (csd[6] & 3) << 10) + 1; - 8005098: 7d3b ldrb r3, [r7, #20] - 800509a: 099b lsrs r3, r3, #6 - 800509c: b2db uxtb r3, r3 - 800509e: b29a uxth r2, r3 - 80050a0: 7cfb ldrb r3, [r7, #19] - 80050a2: b29b uxth r3, r3 - 80050a4: 009b lsls r3, r3, #2 - 80050a6: b29b uxth r3, r3 - 80050a8: 4413 add r3, r2 - 80050aa: b29a uxth r2, r3 - 80050ac: 7cbb ldrb r3, [r7, #18] - 80050ae: 029b lsls r3, r3, #10 - 80050b0: b29b uxth r3, r3 - 80050b2: f403 6340 and.w r3, r3, #3072 ; 0xc00 - 80050b6: b29b uxth r3, r3 - 80050b8: 4413 add r3, r2 - 80050ba: b29b uxth r3, r3 - 80050bc: 3301 adds r3, #1 - 80050be: 83fb strh r3, [r7, #30] + 80052b8: 7d3b ldrb r3, [r7, #20] + 80052ba: 099b lsrs r3, r3, #6 + 80052bc: b2db uxtb r3, r3 + 80052be: b29a uxth r2, r3 + 80052c0: 7cfb ldrb r3, [r7, #19] + 80052c2: b29b uxth r3, r3 + 80052c4: 009b lsls r3, r3, #2 + 80052c6: b29b uxth r3, r3 + 80052c8: 4413 add r3, r2 + 80052ca: b29a uxth r2, r3 + 80052cc: 7cbb ldrb r3, [r7, #18] + 80052ce: 029b lsls r3, r3, #10 + 80052d0: b29b uxth r3, r3 + 80052d2: f403 6340 and.w r3, r3, #3072 ; 0xc00 + 80052d6: b29b uxth r3, r3 + 80052d8: 4413 add r3, r2 + 80052da: b29b uxth r3, r3 + 80052dc: 3301 adds r3, #1 + 80052de: 83fb strh r3, [r7, #30] *(DWORD*) buff = (DWORD) csize << (n - 9); - 80050c0: 8bfa ldrh r2, [r7, #30] - 80050c2: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 80050c6: 3b09 subs r3, #9 - 80050c8: 409a lsls r2, r3 - 80050ca: 683b ldr r3, [r7, #0] - 80050cc: 601a str r2, [r3, #0] + 80052e0: 8bfa ldrh r2, [r7, #30] + 80052e2: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 + 80052e6: 3b09 subs r3, #9 + 80052e8: 409a lsls r2, r3 + 80052ea: 683b ldr r3, [r7, #0] + 80052ec: 601a str r2, [r3, #0] } res = RES_OK; - 80050ce: 2300 movs r3, #0 - 80050d0: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80052ee: 2300 movs r3, #0 + 80052f0: f887 3027 strb.w r3, [r7, #39] ; 0x27 } break; - 80050d4: e056 b.n 8005184 + 80052f4: e056 b.n 80053a4 case GET_SECTOR_SIZE: *(WORD*) buff = 512; - 80050d6: 683b ldr r3, [r7, #0] - 80050d8: f44f 7200 mov.w r2, #512 ; 0x200 - 80050dc: 801a strh r2, [r3, #0] + 80052f6: 683b ldr r3, [r7, #0] + 80052f8: f44f 7200 mov.w r2, #512 ; 0x200 + 80052fc: 801a strh r2, [r3, #0] res = RES_OK; - 80050de: 2300 movs r3, #0 - 80050e0: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80052fe: 2300 movs r3, #0 + 8005300: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 80050e4: e055 b.n 8005192 + 8005304: e055 b.n 80053b2 case CTRL_SYNC: if (SD_ReadyWait() == 0xFF) - 80050e6: f7ff fbe9 bl 80048bc - 80050ea: 4603 mov r3, r0 - 80050ec: 2bff cmp r3, #255 ; 0xff - 80050ee: d14b bne.n 8005188 + 8005306: f7ff fbd5 bl 8004ab4 + 800530a: 4603 mov r3, r0 + 800530c: 2bff cmp r3, #255 ; 0xff + 800530e: d14b bne.n 80053a8 res = RES_OK; - 80050f0: 2300 movs r3, #0 - 80050f2: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005310: 2300 movs r3, #0 + 8005312: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 80050f6: e047 b.n 8005188 + 8005316: e047 b.n 80053a8 case MMC_GET_CSD: if (SD_SendCmd(CMD9, 0) == 0 && SD_RxDataBlock(ptr, 16)) - 80050f8: 2100 movs r1, #0 - 80050fa: 2049 movs r0, #73 ; 0x49 - 80050fc: f7ff fce6 bl 8004acc - 8005100: 4603 mov r3, r0 - 8005102: 2b00 cmp r3, #0 - 8005104: d142 bne.n 800518c - 8005106: 2110 movs r1, #16 - 8005108: 6a38 ldr r0, [r7, #32] - 800510a: f7ff fc55 bl 80049b8 - 800510e: 4603 mov r3, r0 - 8005110: 2b00 cmp r3, #0 - 8005112: d03b beq.n 800518c + 8005318: 2100 movs r1, #0 + 800531a: 2049 movs r0, #73 ; 0x49 + 800531c: f7ff fcdc bl 8004cd8 + 8005320: 4603 mov r3, r0 + 8005322: 2b00 cmp r3, #0 + 8005324: d142 bne.n 80053ac + 8005326: 2110 movs r1, #16 + 8005328: 6a38 ldr r0, [r7, #32] + 800532a: f7ff fc45 bl 8004bb8 + 800532e: 4603 mov r3, r0 + 8005330: 2b00 cmp r3, #0 + 8005332: d03b beq.n 80053ac res = RES_OK; - 8005114: 2300 movs r3, #0 - 8005116: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005334: 2300 movs r3, #0 + 8005336: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 800511a: e037 b.n 800518c + 800533a: e037 b.n 80053ac case MMC_GET_CID: if (SD_SendCmd(CMD10, 0) == 0 && SD_RxDataBlock(ptr, 16)) - 800511c: 2100 movs r1, #0 - 800511e: 204a movs r0, #74 ; 0x4a - 8005120: f7ff fcd4 bl 8004acc - 8005124: 4603 mov r3, r0 - 8005126: 2b00 cmp r3, #0 - 8005128: d132 bne.n 8005190 - 800512a: 2110 movs r1, #16 - 800512c: 6a38 ldr r0, [r7, #32] - 800512e: f7ff fc43 bl 80049b8 - 8005132: 4603 mov r3, r0 - 8005134: 2b00 cmp r3, #0 - 8005136: d02b beq.n 8005190 + 800533c: 2100 movs r1, #0 + 800533e: 204a movs r0, #74 ; 0x4a + 8005340: f7ff fcca bl 8004cd8 + 8005344: 4603 mov r3, r0 + 8005346: 2b00 cmp r3, #0 + 8005348: d132 bne.n 80053b0 + 800534a: 2110 movs r1, #16 + 800534c: 6a38 ldr r0, [r7, #32] + 800534e: f7ff fc33 bl 8004bb8 + 8005352: 4603 mov r3, r0 + 8005354: 2b00 cmp r3, #0 + 8005356: d02b beq.n 80053b0 res = RES_OK; - 8005138: 2300 movs r3, #0 - 800513a: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005358: 2300 movs r3, #0 + 800535a: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 800513e: e027 b.n 8005190 + 800535e: e027 b.n 80053b0 case MMC_GET_OCR: if (SD_SendCmd(CMD58, 0) == 0) - 8005140: 2100 movs r1, #0 - 8005142: 207a movs r0, #122 ; 0x7a - 8005144: f7ff fcc2 bl 8004acc - 8005148: 4603 mov r3, r0 - 800514a: 2b00 cmp r3, #0 - 800514c: d116 bne.n 800517c + 8005360: 2100 movs r1, #0 + 8005362: 207a movs r0, #122 ; 0x7a + 8005364: f7ff fcb8 bl 8004cd8 + 8005368: 4603 mov r3, r0 + 800536a: 2b00 cmp r3, #0 + 800536c: d116 bne.n 800539c { for (n = 0; n < 4; n++) - 800514e: 2300 movs r3, #0 - 8005150: f887 3026 strb.w r3, [r7, #38] ; 0x26 - 8005154: e00b b.n 800516e + 800536e: 2300 movs r3, #0 + 8005370: f887 3026 strb.w r3, [r7, #38] ; 0x26 + 8005374: e00b b.n 800538e { *ptr++ = SPI_RxByte(); - 8005156: 6a3c ldr r4, [r7, #32] - 8005158: 1c63 adds r3, r4, #1 - 800515a: 623b str r3, [r7, #32] - 800515c: f7ff fb82 bl 8004864 - 8005160: 4603 mov r3, r0 - 8005162: 7023 strb r3, [r4, #0] + 8005376: 6a3c ldr r4, [r7, #32] + 8005378: 1c63 adds r3, r4, #1 + 800537a: 623b str r3, [r7, #32] + 800537c: f7ff fb6e bl 8004a5c + 8005380: 4603 mov r3, r0 + 8005382: 7023 strb r3, [r4, #0] for (n = 0; n < 4; n++) - 8005164: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 8005168: 3301 adds r3, #1 - 800516a: f887 3026 strb.w r3, [r7, #38] ; 0x26 - 800516e: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 8005172: 2b03 cmp r3, #3 - 8005174: d9ef bls.n 8005156 + 8005384: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 + 8005388: 3301 adds r3, #1 + 800538a: f887 3026 strb.w r3, [r7, #38] ; 0x26 + 800538e: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 + 8005392: 2b03 cmp r3, #3 + 8005394: d9ef bls.n 8005376 } res = RES_OK; - 8005176: 2300 movs r3, #0 - 8005178: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005396: 2300 movs r3, #0 + 8005398: f887 3027 strb.w r3, [r7, #39] ; 0x27 } default: res = RES_PARERR; - 800517c: 2304 movs r3, #4 - 800517e: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 8005182: e006 b.n 8005192 + 800539c: 2304 movs r3, #4 + 800539e: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80053a2: e006 b.n 80053b2 break; - 8005184: bf00 nop - 8005186: e004 b.n 8005192 + 80053a4: bf00 nop + 80053a6: e004 b.n 80053b2 break; - 8005188: bf00 nop - 800518a: e002 b.n 8005192 + 80053a8: bf00 nop + 80053aa: e002 b.n 80053b2 break; - 800518c: bf00 nop - 800518e: e000 b.n 8005192 + 80053ac: bf00 nop + 80053ae: e000 b.n 80053b2 break; - 8005190: bf00 nop + 80053b0: bf00 nop } DESELECT(); - 8005192: f7ff fb41 bl 8004818 + 80053b2: f7ff fb2d bl 8004a10 SPI_RxByte(); - 8005196: f7ff fb65 bl 8004864 + 80053b6: f7ff fb51 bl 8004a5c } return res; - 800519a: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 + 80053ba: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 } - 800519e: 4618 mov r0, r3 - 80051a0: 372c adds r7, #44 ; 0x2c - 80051a2: 46bd mov sp, r7 - 80051a4: bd90 pop {r4, r7, pc} - 80051a6: bf00 nop - 80051a8: 20000020 .word 0x20000020 + 80053be: 4618 mov r0, r3 + 80053c0: 372c adds r7, #44 ; 0x2c + 80053c2: 46bd mov sp, r7 + 80053c4: bd90 pop {r4, r7, pc} + 80053c6: bf00 nop + 80053c8: 20000020 .word 0x20000020 -080051ac : +080053cc : _lcd_dev lcddev; //¹ÜÀíLCDÖØÒª²ÎÊý //**************************************************¼¸ÖÖ¿ìËÙ½Ó¿Ú //д¼Ä´æÆ÷º¯Êý //regval:¼Ä´æÆ÷Öµ void LCD_WR_REG(uint16_t regval) { - 80051ac: b480 push {r7} - 80051ae: b083 sub sp, #12 - 80051b0: af00 add r7, sp, #0 - 80051b2: 4603 mov r3, r0 - 80051b4: 80fb strh r3, [r7, #6] + 80053cc: b480 push {r7} + 80053ce: b083 sub sp, #12 + 80053d0: af00 add r7, sp, #0 + 80053d2: 4603 mov r3, r0 + 80053d4: 80fb strh r3, [r7, #6] LCD_REG_ADDRESS=regval;//дÈëҪдµÄ¼Ä´æÆ÷ÐòºÅ - 80051b6: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 - 80051ba: 88fb ldrh r3, [r7, #6] - 80051bc: 8013 strh r3, [r2, #0] + 80053d6: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 + 80053da: 88fb ldrh r3, [r7, #6] + 80053dc: 8013 strh r3, [r2, #0] } - 80051be: bf00 nop - 80051c0: 370c adds r7, #12 - 80051c2: 46bd mov sp, r7 - 80051c4: bc80 pop {r7} - 80051c6: 4770 bx lr + 80053de: bf00 nop + 80053e0: 370c adds r7, #12 + 80053e2: 46bd mov sp, r7 + 80053e4: bc80 pop {r7} + 80053e6: 4770 bx lr -080051c8 : +080053e8 : //дLCDÊý¾Ý //data:ҪдÈëµÄÖµ void LCD_WR_DATA(uint16_t data) { - 80051c8: b480 push {r7} - 80051ca: b083 sub sp, #12 - 80051cc: af00 add r7, sp, #0 - 80051ce: 4603 mov r3, r0 - 80051d0: 80fb strh r3, [r7, #6] + 80053e8: b480 push {r7} + 80053ea: b083 sub sp, #12 + 80053ec: af00 add r7, sp, #0 + 80053ee: 4603 mov r3, r0 + 80053f0: 80fb strh r3, [r7, #6] LCD_DATA_ADDRESS=data; - 80051d2: 4a04 ldr r2, [pc, #16] ; (80051e4 ) - 80051d4: 88fb ldrh r3, [r7, #6] - 80051d6: 8013 strh r3, [r2, #0] + 80053f2: 4a04 ldr r2, [pc, #16] ; (8005404 ) + 80053f4: 88fb ldrh r3, [r7, #6] + 80053f6: 8013 strh r3, [r2, #0] } - 80051d8: bf00 nop - 80051da: 370c adds r7, #12 - 80051dc: 46bd mov sp, r7 - 80051de: bc80 pop {r7} - 80051e0: 4770 bx lr - 80051e2: bf00 nop - 80051e4: 6c000800 .word 0x6c000800 + 80053f8: bf00 nop + 80053fa: 370c adds r7, #12 + 80053fc: 46bd mov sp, r7 + 80053fe: bc80 pop {r7} + 8005400: 4770 bx lr + 8005402: bf00 nop + 8005404: 6c000800 .word 0x6c000800 -080051e8 : +08005408 : } //д¼Ä´æÆ÷ //LCD_Reg:¼Ä´æÆ÷µØÖ· //LCD_RegValue:ҪдÈëµÄÊý¾Ý void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) { - 80051e8: b480 push {r7} - 80051ea: b083 sub sp, #12 - 80051ec: af00 add r7, sp, #0 - 80051ee: 4603 mov r3, r0 - 80051f0: 460a mov r2, r1 - 80051f2: 80fb strh r3, [r7, #6] - 80051f4: 4613 mov r3, r2 - 80051f6: 80bb strh r3, [r7, #4] + 8005408: b480 push {r7} + 800540a: b083 sub sp, #12 + 800540c: af00 add r7, sp, #0 + 800540e: 4603 mov r3, r0 + 8005410: 460a mov r2, r1 + 8005412: 80fb strh r3, [r7, #6] + 8005414: 4613 mov r3, r2 + 8005416: 80bb strh r3, [r7, #4] LCD_REG_ADDRESS = LCD_Reg; //дÈëҪдµÄ¼Ä´æÆ÷ÐòºÅ - 80051f8: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 - 80051fc: 88fb ldrh r3, [r7, #6] - 80051fe: 8013 strh r3, [r2, #0] + 8005418: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 + 800541c: 88fb ldrh r3, [r7, #6] + 800541e: 8013 strh r3, [r2, #0] LCD_DATA_ADDRESS = LCD_RegValue;//дÈëÊý¾Ý - 8005200: 4a03 ldr r2, [pc, #12] ; (8005210 ) - 8005202: 88bb ldrh r3, [r7, #4] - 8005204: 8013 strh r3, [r2, #0] + 8005420: 4a03 ldr r2, [pc, #12] ; (8005430 ) + 8005422: 88bb ldrh r3, [r7, #4] + 8005424: 8013 strh r3, [r2, #0] } - 8005206: bf00 nop - 8005208: 370c adds r7, #12 - 800520a: 46bd mov sp, r7 - 800520c: bc80 pop {r7} - 800520e: 4770 bx lr - 8005210: 6c000800 .word 0x6c000800 + 8005426: bf00 nop + 8005428: 370c adds r7, #12 + 800542a: 46bd mov sp, r7 + 800542c: bc80 pop {r7} + 800542e: 4770 bx lr + 8005430: 6c000800 .word 0x6c000800 -08005214 : +08005434 : //¶Á¼Ä´æÆ÷ //LCD_Reg:¼Ä´æÆ÷µØÖ· //·µ»ØÖµ:¶Áµ½µÄÊý¾Ý uint16_t LCD_ReadReg(uint16_t LCD_Reg) { - 8005214: b480 push {r7} - 8005216: b083 sub sp, #12 - 8005218: af00 add r7, sp, #0 - 800521a: 4603 mov r3, r0 - 800521c: 80fb strh r3, [r7, #6] + 8005434: b480 push {r7} + 8005436: b083 sub sp, #12 + 8005438: af00 add r7, sp, #0 + 800543a: 4603 mov r3, r0 + 800543c: 80fb strh r3, [r7, #6] LCD_REG_ADDRESS=LCD_Reg; //дÈëÒª¶ÁµÄ¼Ä´æÆ÷ÐòºÅ - 800521e: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 - 8005222: 88fb ldrh r3, [r7, #6] - 8005224: 8013 strh r3, [r2, #0] + 800543e: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 + 8005442: 88fb ldrh r3, [r7, #6] + 8005444: 8013 strh r3, [r2, #0] //delay_us(5); return LCD_DATA_ADDRESS; //·µ»Ø¶Áµ½µÄÖµ - 8005226: 4b04 ldr r3, [pc, #16] ; (8005238 ) - 8005228: 881b ldrh r3, [r3, #0] - 800522a: b29b uxth r3, r3 + 8005446: 4b04 ldr r3, [pc, #16] ; (8005458 ) + 8005448: 881b ldrh r3, [r3, #0] + 800544a: b29b uxth r3, r3 } - 800522c: 4618 mov r0, r3 - 800522e: 370c adds r7, #12 - 8005230: 46bd mov sp, r7 - 8005232: bc80 pop {r7} - 8005234: 4770 bx lr - 8005236: bf00 nop - 8005238: 6c000800 .word 0x6c000800 + 800544c: 4618 mov r0, r3 + 800544e: 370c adds r7, #12 + 8005450: 46bd mov sp, r7 + 8005452: bc80 pop {r7} + 8005454: 4770 bx lr + 8005456: bf00 nop + 8005458: 6c000800 .word 0x6c000800 -0800523c : +0800545c : //×¢Òâ:ÆäËûº¯Êý¿ÉÄÜ»áÊܵ½´Ëº¯ÊýÉèÖõÄÓ°Ïì(ÓÈÆäÊÇ9341/6804ÕâÁ½¸öÆæÝâ), //ËùÒÔ,Ò»°ãÉèÖÃΪL2R_U2D¼´¿É,Èç¹ûÉèÖÃΪÆäËûɨÃ跽ʽ,¿ÉÄܵ¼ÖÂÏÔʾ²»Õý³£. //dir:0~7,´ú±í8¸ö·½Ïò(¾ßÌ嶨Òå¼ûlcd.h) //9320/9325/9328/4531/4535/1505/b505/8989/5408/9341/5310µÈICÒѾ­Êµ¼Ê²âÊÔ void LCD_Scan_Dir(uint8_t dir) { - 800523c: b580 push {r7, lr} - 800523e: b084 sub sp, #16 - 8005240: af00 add r7, sp, #0 - 8005242: 4603 mov r3, r0 - 8005244: 71fb strb r3, [r7, #7] + 800545c: b580 push {r7, lr} + 800545e: b084 sub sp, #16 + 8005460: af00 add r7, sp, #0 + 8005462: 4603 mov r3, r0 + 8005464: 71fb strb r3, [r7, #7] uint16_t regval=0; - 8005246: 2300 movs r3, #0 - 8005248: 81fb strh r3, [r7, #14] + 8005466: 2300 movs r3, #0 + 8005468: 81fb strh r3, [r7, #14] uint8_t dirreg=0; - 800524a: 2300 movs r3, #0 - 800524c: 737b strb r3, [r7, #13] + 800546a: 2300 movs r3, #0 + 800546c: 737b strb r3, [r7, #13] uint16_t temp; if(lcddev.dir==1&&lcddev.id!=0X6804)//ºáÆÁʱ£¬¶Ô6804²»¸Ä±äɨÃè·½Ïò£¡ - 800524e: 4ba8 ldr r3, [pc, #672] ; (80054f0 ) - 8005250: 799b ldrb r3, [r3, #6] - 8005252: 2b01 cmp r3, #1 - 8005254: d134 bne.n 80052c0 - 8005256: 4ba6 ldr r3, [pc, #664] ; (80054f0 ) - 8005258: 889b ldrh r3, [r3, #4] - 800525a: f646 0204 movw r2, #26628 ; 0x6804 - 800525e: 4293 cmp r3, r2 - 8005260: d02e beq.n 80052c0 + 800546e: 4ba8 ldr r3, [pc, #672] ; (8005710 ) + 8005470: 799b ldrb r3, [r3, #6] + 8005472: 2b01 cmp r3, #1 + 8005474: d134 bne.n 80054e0 + 8005476: 4ba6 ldr r3, [pc, #664] ; (8005710 ) + 8005478: 889b ldrh r3, [r3, #4] + 800547a: f646 0204 movw r2, #26628 ; 0x6804 + 800547e: 4293 cmp r3, r2 + 8005480: d02e beq.n 80054e0 { switch(dir)//·½Ïòת»» - 8005262: 79fb ldrb r3, [r7, #7] - 8005264: 2b07 cmp r3, #7 - 8005266: d82c bhi.n 80052c2 - 8005268: a201 add r2, pc, #4 ; (adr r2, 8005270 ) - 800526a: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800526e: bf00 nop - 8005270: 08005291 .word 0x08005291 - 8005274: 08005297 .word 0x08005297 - 8005278: 0800529d .word 0x0800529d - 800527c: 080052a3 .word 0x080052a3 - 8005280: 080052a9 .word 0x080052a9 - 8005284: 080052af .word 0x080052af - 8005288: 080052b5 .word 0x080052b5 - 800528c: 080052bb .word 0x080052bb + 8005482: 79fb ldrb r3, [r7, #7] + 8005484: 2b07 cmp r3, #7 + 8005486: d82c bhi.n 80054e2 + 8005488: a201 add r2, pc, #4 ; (adr r2, 8005490 ) + 800548a: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800548e: bf00 nop + 8005490: 080054b1 .word 0x080054b1 + 8005494: 080054b7 .word 0x080054b7 + 8005498: 080054bd .word 0x080054bd + 800549c: 080054c3 .word 0x080054c3 + 80054a0: 080054c9 .word 0x080054c9 + 80054a4: 080054cf .word 0x080054cf + 80054a8: 080054d5 .word 0x080054d5 + 80054ac: 080054db .word 0x080054db { case 0:dir=6;break; - 8005290: 2306 movs r3, #6 - 8005292: 71fb strb r3, [r7, #7] - 8005294: e015 b.n 80052c2 + 80054b0: 2306 movs r3, #6 + 80054b2: 71fb strb r3, [r7, #7] + 80054b4: e015 b.n 80054e2 case 1:dir=7;break; - 8005296: 2307 movs r3, #7 - 8005298: 71fb strb r3, [r7, #7] - 800529a: e012 b.n 80052c2 + 80054b6: 2307 movs r3, #7 + 80054b8: 71fb strb r3, [r7, #7] + 80054ba: e012 b.n 80054e2 case 2:dir=4;break; - 800529c: 2304 movs r3, #4 - 800529e: 71fb strb r3, [r7, #7] - 80052a0: e00f b.n 80052c2 + 80054bc: 2304 movs r3, #4 + 80054be: 71fb strb r3, [r7, #7] + 80054c0: e00f b.n 80054e2 case 3:dir=5;break; - 80052a2: 2305 movs r3, #5 - 80052a4: 71fb strb r3, [r7, #7] - 80052a6: e00c b.n 80052c2 + 80054c2: 2305 movs r3, #5 + 80054c4: 71fb strb r3, [r7, #7] + 80054c6: e00c b.n 80054e2 case 4:dir=1;break; - 80052a8: 2301 movs r3, #1 - 80052aa: 71fb strb r3, [r7, #7] - 80052ac: e009 b.n 80052c2 + 80054c8: 2301 movs r3, #1 + 80054ca: 71fb strb r3, [r7, #7] + 80054cc: e009 b.n 80054e2 case 5:dir=0;break; - 80052ae: 2300 movs r3, #0 - 80052b0: 71fb strb r3, [r7, #7] - 80052b2: e006 b.n 80052c2 + 80054ce: 2300 movs r3, #0 + 80054d0: 71fb strb r3, [r7, #7] + 80054d2: e006 b.n 80054e2 case 6:dir=3;break; - 80052b4: 2303 movs r3, #3 - 80052b6: 71fb strb r3, [r7, #7] - 80052b8: e003 b.n 80052c2 + 80054d4: 2303 movs r3, #3 + 80054d6: 71fb strb r3, [r7, #7] + 80054d8: e003 b.n 80054e2 case 7:dir=2;break; - 80052ba: 2302 movs r3, #2 - 80052bc: 71fb strb r3, [r7, #7] - 80052be: e000 b.n 80052c2 + 80054da: 2302 movs r3, #2 + 80054dc: 71fb strb r3, [r7, #7] + 80054de: e000 b.n 80054e2 } } - 80052c0: bf00 nop + 80054e0: bf00 nop if(lcddev.id==0x9341||lcddev.id==0X6804||lcddev.id==0X5310)//9341/6804/5310,ºÜÌØÊâ - 80052c2: 4b8b ldr r3, [pc, #556] ; (80054f0 ) - 80052c4: 889b ldrh r3, [r3, #4] - 80052c6: f249 3241 movw r2, #37697 ; 0x9341 - 80052ca: 4293 cmp r3, r2 - 80052cc: d00c beq.n 80052e8 - 80052ce: 4b88 ldr r3, [pc, #544] ; (80054f0 ) - 80052d0: 889b ldrh r3, [r3, #4] - 80052d2: f646 0204 movw r2, #26628 ; 0x6804 - 80052d6: 4293 cmp r3, r2 - 80052d8: d006 beq.n 80052e8 - 80052da: 4b85 ldr r3, [pc, #532] ; (80054f0 ) - 80052dc: 889b ldrh r3, [r3, #4] - 80052de: f245 3210 movw r2, #21264 ; 0x5310 - 80052e2: 4293 cmp r3, r2 - 80052e4: f040 80bb bne.w 800545e + 80054e2: 4b8b ldr r3, [pc, #556] ; (8005710 ) + 80054e4: 889b ldrh r3, [r3, #4] + 80054e6: f249 3241 movw r2, #37697 ; 0x9341 + 80054ea: 4293 cmp r3, r2 + 80054ec: d00c beq.n 8005508 + 80054ee: 4b88 ldr r3, [pc, #544] ; (8005710 ) + 80054f0: 889b ldrh r3, [r3, #4] + 80054f2: f646 0204 movw r2, #26628 ; 0x6804 + 80054f6: 4293 cmp r3, r2 + 80054f8: d006 beq.n 8005508 + 80054fa: 4b85 ldr r3, [pc, #532] ; (8005710 ) + 80054fc: 889b ldrh r3, [r3, #4] + 80054fe: f245 3210 movw r2, #21264 ; 0x5310 + 8005502: 4293 cmp r3, r2 + 8005504: f040 80bb bne.w 800567e { switch(dir) - 80052e8: 79fb ldrb r3, [r7, #7] - 80052ea: 2b07 cmp r3, #7 - 80052ec: d835 bhi.n 800535a - 80052ee: a201 add r2, pc, #4 ; (adr r2, 80052f4 ) - 80052f0: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 80052f4: 0800535b .word 0x0800535b - 80052f8: 08005315 .word 0x08005315 - 80052fc: 0800531f .word 0x0800531f - 8005300: 08005329 .word 0x08005329 - 8005304: 08005333 .word 0x08005333 - 8005308: 0800533d .word 0x0800533d - 800530c: 08005347 .word 0x08005347 - 8005310: 08005351 .word 0x08005351 + 8005508: 79fb ldrb r3, [r7, #7] + 800550a: 2b07 cmp r3, #7 + 800550c: d835 bhi.n 800557a + 800550e: a201 add r2, pc, #4 ; (adr r2, 8005514 ) + 8005510: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8005514: 0800557b .word 0x0800557b + 8005518: 08005535 .word 0x08005535 + 800551c: 0800553f .word 0x0800553f + 8005520: 08005549 .word 0x08005549 + 8005524: 08005553 .word 0x08005553 + 8005528: 0800555d .word 0x0800555d + 800552c: 08005567 .word 0x08005567 + 8005530: 08005571 .word 0x08005571 { case L2R_U2D://´Ó×óµ½ÓÒ,´ÓÉϵ½Ï regval|=(0<<7)|(0<<6)|(0<<5); break; case L2R_D2U://´Ó×óµ½ÓÒ,´Óϵ½ÉÏ regval|=(1<<7)|(0<<6)|(0<<5); - 8005314: 89fb ldrh r3, [r7, #14] - 8005316: f043 0380 orr.w r3, r3, #128 ; 0x80 - 800531a: 81fb strh r3, [r7, #14] + 8005534: 89fb ldrh r3, [r7, #14] + 8005536: f043 0380 orr.w r3, r3, #128 ; 0x80 + 800553a: 81fb strh r3, [r7, #14] break; - 800531c: e01d b.n 800535a + 800553c: e01d b.n 800557a case R2L_U2D://´ÓÓÒµ½×ó,´ÓÉϵ½Ï regval|=(0<<7)|(1<<6)|(0<<5); - 800531e: 89fb ldrh r3, [r7, #14] - 8005320: f043 0340 orr.w r3, r3, #64 ; 0x40 - 8005324: 81fb strh r3, [r7, #14] + 800553e: 89fb ldrh r3, [r7, #14] + 8005540: f043 0340 orr.w r3, r3, #64 ; 0x40 + 8005544: 81fb strh r3, [r7, #14] break; - 8005326: e018 b.n 800535a + 8005546: e018 b.n 800557a case R2L_D2U://´ÓÓÒµ½×ó,´Óϵ½ÉÏ regval|=(1<<7)|(1<<6)|(0<<5); - 8005328: 89fb ldrh r3, [r7, #14] - 800532a: f043 03c0 orr.w r3, r3, #192 ; 0xc0 - 800532e: 81fb strh r3, [r7, #14] + 8005548: 89fb ldrh r3, [r7, #14] + 800554a: f043 03c0 orr.w r3, r3, #192 ; 0xc0 + 800554e: 81fb strh r3, [r7, #14] break; - 8005330: e013 b.n 800535a + 8005550: e013 b.n 800557a case U2D_L2R://´ÓÉϵ½ÏÂ,´Ó×óµ½ÓÒ regval|=(0<<7)|(0<<6)|(1<<5); - 8005332: 89fb ldrh r3, [r7, #14] - 8005334: f043 0320 orr.w r3, r3, #32 - 8005338: 81fb strh r3, [r7, #14] + 8005552: 89fb ldrh r3, [r7, #14] + 8005554: f043 0320 orr.w r3, r3, #32 + 8005558: 81fb strh r3, [r7, #14] break; - 800533a: e00e b.n 800535a + 800555a: e00e b.n 800557a case U2D_R2L://´ÓÉϵ½ÏÂ,´ÓÓÒµ½×ó regval|=(0<<7)|(1<<6)|(1<<5); - 800533c: 89fb ldrh r3, [r7, #14] - 800533e: f043 0360 orr.w r3, r3, #96 ; 0x60 - 8005342: 81fb strh r3, [r7, #14] + 800555c: 89fb ldrh r3, [r7, #14] + 800555e: f043 0360 orr.w r3, r3, #96 ; 0x60 + 8005562: 81fb strh r3, [r7, #14] break; - 8005344: e009 b.n 800535a + 8005564: e009 b.n 800557a case D2U_L2R://´Óϵ½ÉÏ,´Ó×óµ½ÓÒ regval|=(1<<7)|(0<<6)|(1<<5); - 8005346: 89fb ldrh r3, [r7, #14] - 8005348: f043 03a0 orr.w r3, r3, #160 ; 0xa0 - 800534c: 81fb strh r3, [r7, #14] + 8005566: 89fb ldrh r3, [r7, #14] + 8005568: f043 03a0 orr.w r3, r3, #160 ; 0xa0 + 800556c: 81fb strh r3, [r7, #14] break; - 800534e: e004 b.n 800535a + 800556e: e004 b.n 800557a case D2U_R2L://´Óϵ½ÉÏ,´ÓÓÒµ½×ó regval|=(1<<7)|(1<<6)|(1<<5); - 8005350: 89fb ldrh r3, [r7, #14] - 8005352: f043 03e0 orr.w r3, r3, #224 ; 0xe0 - 8005356: 81fb strh r3, [r7, #14] + 8005570: 89fb ldrh r3, [r7, #14] + 8005572: f043 03e0 orr.w r3, r3, #224 ; 0xe0 + 8005576: 81fb strh r3, [r7, #14] break; - 8005358: bf00 nop + 8005578: bf00 nop } dirreg=0X36; - 800535a: 2336 movs r3, #54 ; 0x36 - 800535c: 737b strb r3, [r7, #13] + 800557a: 2336 movs r3, #54 ; 0x36 + 800557c: 737b strb r3, [r7, #13] if(lcddev.id!=0X5310)regval|=0X08;//5310²»ÐèÒªBGR - 800535e: 4b64 ldr r3, [pc, #400] ; (80054f0 ) - 8005360: 889b ldrh r3, [r3, #4] - 8005362: f245 3210 movw r2, #21264 ; 0x5310 - 8005366: 4293 cmp r3, r2 - 8005368: d003 beq.n 8005372 - 800536a: 89fb ldrh r3, [r7, #14] - 800536c: f043 0308 orr.w r3, r3, #8 - 8005370: 81fb strh r3, [r7, #14] + 800557e: 4b64 ldr r3, [pc, #400] ; (8005710 ) + 8005580: 889b ldrh r3, [r3, #4] + 8005582: f245 3210 movw r2, #21264 ; 0x5310 + 8005586: 4293 cmp r3, r2 + 8005588: d003 beq.n 8005592 + 800558a: 89fb ldrh r3, [r7, #14] + 800558c: f043 0308 orr.w r3, r3, #8 + 8005590: 81fb strh r3, [r7, #14] if(lcddev.id==0X6804)regval|=0x02;//6804µÄBIT6ºÍ9341µÄ·´ÁË - 8005372: 4b5f ldr r3, [pc, #380] ; (80054f0 ) - 8005374: 889b ldrh r3, [r3, #4] - 8005376: f646 0204 movw r2, #26628 ; 0x6804 - 800537a: 4293 cmp r3, r2 - 800537c: d103 bne.n 8005386 - 800537e: 89fb ldrh r3, [r7, #14] - 8005380: f043 0302 orr.w r3, r3, #2 - 8005384: 81fb strh r3, [r7, #14] + 8005592: 4b5f ldr r3, [pc, #380] ; (8005710 ) + 8005594: 889b ldrh r3, [r3, #4] + 8005596: f646 0204 movw r2, #26628 ; 0x6804 + 800559a: 4293 cmp r3, r2 + 800559c: d103 bne.n 80055a6 + 800559e: 89fb ldrh r3, [r7, #14] + 80055a0: f043 0302 orr.w r3, r3, #2 + 80055a4: 81fb strh r3, [r7, #14] LCD_WriteReg(dirreg,regval); - 8005386: 7b7b ldrb r3, [r7, #13] - 8005388: b29b uxth r3, r3 - 800538a: 89fa ldrh r2, [r7, #14] - 800538c: 4611 mov r1, r2 - 800538e: 4618 mov r0, r3 - 8005390: f7ff ff2a bl 80051e8 + 80055a6: 7b7b ldrb r3, [r7, #13] + 80055a8: b29b uxth r3, r3 + 80055aa: 89fa ldrh r2, [r7, #14] + 80055ac: 4611 mov r1, r2 + 80055ae: 4618 mov r0, r3 + 80055b0: f7ff ff2a bl 8005408 if((regval&0X20)||lcddev.dir==1) - 8005394: 89fb ldrh r3, [r7, #14] - 8005396: f003 0320 and.w r3, r3, #32 - 800539a: 2b00 cmp r3, #0 - 800539c: d103 bne.n 80053a6 - 800539e: 4b54 ldr r3, [pc, #336] ; (80054f0 ) - 80053a0: 799b ldrb r3, [r3, #6] - 80053a2: 2b01 cmp r3, #1 - 80053a4: d110 bne.n 80053c8 + 80055b4: 89fb ldrh r3, [r7, #14] + 80055b6: f003 0320 and.w r3, r3, #32 + 80055ba: 2b00 cmp r3, #0 + 80055bc: d103 bne.n 80055c6 + 80055be: 4b54 ldr r3, [pc, #336] ; (8005710 ) + 80055c0: 799b ldrb r3, [r3, #6] + 80055c2: 2b01 cmp r3, #1 + 80055c4: d110 bne.n 80055e8 { if(lcddev.width) - 80053a8: 881a ldrh r2, [r3, #0] - 80053aa: 4b51 ldr r3, [pc, #324] ; (80054f0 ) - 80053ac: 885b ldrh r3, [r3, #2] - 80053ae: 429a cmp r2, r3 - 80053b0: d21a bcs.n 80053e8 + 80055c6: 4b52 ldr r3, [pc, #328] ; (8005710 ) + 80055c8: 881a ldrh r2, [r3, #0] + 80055ca: 4b51 ldr r3, [pc, #324] ; (8005710 ) + 80055cc: 885b ldrh r3, [r3, #2] + 80055ce: 429a cmp r2, r3 + 80055d0: d21a bcs.n 8005608 { temp=lcddev.width; - 80053b2: 4b4f ldr r3, [pc, #316] ; (80054f0 ) - 80053b4: 881b ldrh r3, [r3, #0] - 80053b6: 817b strh r3, [r7, #10] + 80055d2: 4b4f ldr r3, [pc, #316] ; (8005710 ) + 80055d4: 881b ldrh r3, [r3, #0] + 80055d6: 817b strh r3, [r7, #10] lcddev.width=lcddev.height; - 80053b8: 4b4d ldr r3, [pc, #308] ; (80054f0 ) - 80053ba: 885a ldrh r2, [r3, #2] - 80053bc: 4b4c ldr r3, [pc, #304] ; (80054f0 ) - 80053be: 801a strh r2, [r3, #0] + 80055d8: 4b4d ldr r3, [pc, #308] ; (8005710 ) + 80055da: 885a ldrh r2, [r3, #2] + 80055dc: 4b4c ldr r3, [pc, #304] ; (8005710 ) + 80055de: 801a strh r2, [r3, #0] lcddev.height=temp; - 80053c0: 4a4b ldr r2, [pc, #300] ; (80054f0 ) - 80053c2: 897b ldrh r3, [r7, #10] - 80053c4: 8053 strh r3, [r2, #2] + 80055e0: 4a4b ldr r2, [pc, #300] ; (8005710 ) + 80055e2: 897b ldrh r3, [r7, #10] + 80055e4: 8053 strh r3, [r2, #2] if(lcddev.width + 80055e6: e00f b.n 8005608 } }else { if(lcddev.width>lcddev.height)//½»»»X,Y - 80053c8: 4b49 ldr r3, [pc, #292] ; (80054f0 ) - 80053ca: 881a ldrh r2, [r3, #0] - 80053cc: 4b48 ldr r3, [pc, #288] ; (80054f0 ) - 80053ce: 885b ldrh r3, [r3, #2] - 80053d0: 429a cmp r2, r3 - 80053d2: d909 bls.n 80053e8 + 80055e8: 4b49 ldr r3, [pc, #292] ; (8005710 ) + 80055ea: 881a ldrh r2, [r3, #0] + 80055ec: 4b48 ldr r3, [pc, #288] ; (8005710 ) + 80055ee: 885b ldrh r3, [r3, #2] + 80055f0: 429a cmp r2, r3 + 80055f2: d909 bls.n 8005608 { temp=lcddev.width; - 80053d4: 4b46 ldr r3, [pc, #280] ; (80054f0 ) - 80053d6: 881b ldrh r3, [r3, #0] - 80053d8: 817b strh r3, [r7, #10] + 80055f4: 4b46 ldr r3, [pc, #280] ; (8005710 ) + 80055f6: 881b ldrh r3, [r3, #0] + 80055f8: 817b strh r3, [r7, #10] lcddev.width=lcddev.height; - 80053da: 4b45 ldr r3, [pc, #276] ; (80054f0 ) - 80053dc: 885a ldrh r2, [r3, #2] - 80053de: 4b44 ldr r3, [pc, #272] ; (80054f0 ) - 80053e0: 801a strh r2, [r3, #0] + 80055fa: 4b45 ldr r3, [pc, #276] ; (8005710 ) + 80055fc: 885a ldrh r2, [r3, #2] + 80055fe: 4b44 ldr r3, [pc, #272] ; (8005710 ) + 8005600: 801a strh r2, [r3, #0] lcddev.height=temp; - 80053e2: 4a43 ldr r2, [pc, #268] ; (80054f0 ) - 80053e4: 897b ldrh r3, [r7, #10] - 80053e6: 8053 strh r3, [r2, #2] + 8005602: 4a43 ldr r2, [pc, #268] ; (8005710 ) + 8005604: 897b ldrh r3, [r7, #10] + 8005606: 8053 strh r3, [r2, #2] } } LCD_WR_REG(lcddev.setxcmd); - 80053e8: 4b41 ldr r3, [pc, #260] ; (80054f0 ) - 80053ea: 7a1b ldrb r3, [r3, #8] - 80053ec: b29b uxth r3, r3 - 80053ee: 4618 mov r0, r3 - 80053f0: f7ff fedc bl 80051ac + 8005608: 4b41 ldr r3, [pc, #260] ; (8005710 ) + 800560a: 7a1b ldrb r3, [r3, #8] + 800560c: b29b uxth r3, r3 + 800560e: 4618 mov r0, r3 + 8005610: f7ff fedc bl 80053cc LCD_WR_DATA(0);LCD_WR_DATA(0); - 80053f4: 2000 movs r0, #0 - 80053f6: f7ff fee7 bl 80051c8 - 80053fa: 2000 movs r0, #0 - 80053fc: f7ff fee4 bl 80051c8 + 8005614: 2000 movs r0, #0 + 8005616: f7ff fee7 bl 80053e8 + 800561a: 2000 movs r0, #0 + 800561c: f7ff fee4 bl 80053e8 LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF); - 8005400: 4b3b ldr r3, [pc, #236] ; (80054f0 ) - 8005402: 881b ldrh r3, [r3, #0] - 8005404: 3b01 subs r3, #1 - 8005406: 121b asrs r3, r3, #8 - 8005408: b29b uxth r3, r3 - 800540a: 4618 mov r0, r3 - 800540c: f7ff fedc bl 80051c8 - 8005410: 4b37 ldr r3, [pc, #220] ; (80054f0 ) - 8005412: 881b ldrh r3, [r3, #0] - 8005414: 3b01 subs r3, #1 - 8005416: b29b uxth r3, r3 - 8005418: b2db uxtb r3, r3 - 800541a: b29b uxth r3, r3 - 800541c: 4618 mov r0, r3 - 800541e: f7ff fed3 bl 80051c8 + 8005620: 4b3b ldr r3, [pc, #236] ; (8005710 ) + 8005622: 881b ldrh r3, [r3, #0] + 8005624: 3b01 subs r3, #1 + 8005626: 121b asrs r3, r3, #8 + 8005628: b29b uxth r3, r3 + 800562a: 4618 mov r0, r3 + 800562c: f7ff fedc bl 80053e8 + 8005630: 4b37 ldr r3, [pc, #220] ; (8005710 ) + 8005632: 881b ldrh r3, [r3, #0] + 8005634: 3b01 subs r3, #1 + 8005636: b29b uxth r3, r3 + 8005638: b2db uxtb r3, r3 + 800563a: b29b uxth r3, r3 + 800563c: 4618 mov r0, r3 + 800563e: f7ff fed3 bl 80053e8 LCD_WR_REG(lcddev.setycmd); - 8005422: 4b33 ldr r3, [pc, #204] ; (80054f0 ) - 8005424: 7a5b ldrb r3, [r3, #9] - 8005426: b29b uxth r3, r3 - 8005428: 4618 mov r0, r3 - 800542a: f7ff febf bl 80051ac + 8005642: 4b33 ldr r3, [pc, #204] ; (8005710 ) + 8005644: 7a5b ldrb r3, [r3, #9] + 8005646: b29b uxth r3, r3 + 8005648: 4618 mov r0, r3 + 800564a: f7ff febf bl 80053cc LCD_WR_DATA(0);LCD_WR_DATA(0); - 800542e: 2000 movs r0, #0 - 8005430: f7ff feca bl 80051c8 - 8005434: 2000 movs r0, #0 - 8005436: f7ff fec7 bl 80051c8 + 800564e: 2000 movs r0, #0 + 8005650: f7ff feca bl 80053e8 + 8005654: 2000 movs r0, #0 + 8005656: f7ff fec7 bl 80053e8 LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF); - 800543a: 4b2d ldr r3, [pc, #180] ; (80054f0 ) - 800543c: 885b ldrh r3, [r3, #2] - 800543e: 3b01 subs r3, #1 - 8005440: 121b asrs r3, r3, #8 - 8005442: b29b uxth r3, r3 - 8005444: 4618 mov r0, r3 - 8005446: f7ff febf bl 80051c8 - 800544a: 4b29 ldr r3, [pc, #164] ; (80054f0 ) - 800544c: 885b ldrh r3, [r3, #2] - 800544e: 3b01 subs r3, #1 - 8005450: b29b uxth r3, r3 - 8005452: b2db uxtb r3, r3 - 8005454: b29b uxth r3, r3 - 8005456: 4618 mov r0, r3 - 8005458: f7ff feb6 bl 80051c8 - 800545c: e058 b.n 8005510 + 800565a: 4b2d ldr r3, [pc, #180] ; (8005710 ) + 800565c: 885b ldrh r3, [r3, #2] + 800565e: 3b01 subs r3, #1 + 8005660: 121b asrs r3, r3, #8 + 8005662: b29b uxth r3, r3 + 8005664: 4618 mov r0, r3 + 8005666: f7ff febf bl 80053e8 + 800566a: 4b29 ldr r3, [pc, #164] ; (8005710 ) + 800566c: 885b ldrh r3, [r3, #2] + 800566e: 3b01 subs r3, #1 + 8005670: b29b uxth r3, r3 + 8005672: b2db uxtb r3, r3 + 8005674: b29b uxth r3, r3 + 8005676: 4618 mov r0, r3 + 8005678: f7ff feb6 bl 80053e8 + 800567c: e058 b.n 8005730 }else { switch(dir) - 800545e: 79fb ldrb r3, [r7, #7] - 8005460: 2b07 cmp r3, #7 - 8005462: d836 bhi.n 80054d2 - 8005464: a201 add r2, pc, #4 ; (adr r2, 800546c ) - 8005466: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800546a: bf00 nop - 800546c: 0800548d .word 0x0800548d - 8005470: 08005497 .word 0x08005497 - 8005474: 080054a1 .word 0x080054a1 - 8005478: 080054d3 .word 0x080054d3 - 800547c: 080054ab .word 0x080054ab - 8005480: 080054b5 .word 0x080054b5 - 8005484: 080054bf .word 0x080054bf - 8005488: 080054c9 .word 0x080054c9 + 800567e: 79fb ldrb r3, [r7, #7] + 8005680: 2b07 cmp r3, #7 + 8005682: d836 bhi.n 80056f2 + 8005684: a201 add r2, pc, #4 ; (adr r2, 800568c ) + 8005686: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800568a: bf00 nop + 800568c: 080056ad .word 0x080056ad + 8005690: 080056b7 .word 0x080056b7 + 8005694: 080056c1 .word 0x080056c1 + 8005698: 080056f3 .word 0x080056f3 + 800569c: 080056cb .word 0x080056cb + 80056a0: 080056d5 .word 0x080056d5 + 80056a4: 080056df .word 0x080056df + 80056a8: 080056e9 .word 0x080056e9 { case L2R_U2D://´Ó×óµ½ÓÒ,´ÓÉϵ½Ï regval|=(1<<5)|(1<<4)|(0<<3); - 800548c: 89fb ldrh r3, [r7, #14] - 800548e: f043 0330 orr.w r3, r3, #48 ; 0x30 - 8005492: 81fb strh r3, [r7, #14] + 80056ac: 89fb ldrh r3, [r7, #14] + 80056ae: f043 0330 orr.w r3, r3, #48 ; 0x30 + 80056b2: 81fb strh r3, [r7, #14] break; - 8005494: e01d b.n 80054d2 + 80056b4: e01d b.n 80056f2 case L2R_D2U://´Ó×óµ½ÓÒ,´Óϵ½ÉÏ regval|=(0<<5)|(1<<4)|(0<<3); - 8005496: 89fb ldrh r3, [r7, #14] - 8005498: f043 0310 orr.w r3, r3, #16 - 800549c: 81fb strh r3, [r7, #14] + 80056b6: 89fb ldrh r3, [r7, #14] + 80056b8: f043 0310 orr.w r3, r3, #16 + 80056bc: 81fb strh r3, [r7, #14] break; - 800549e: e018 b.n 80054d2 + 80056be: e018 b.n 80056f2 case R2L_U2D://´ÓÓÒµ½×ó,´ÓÉϵ½Ï regval|=(1<<5)|(0<<4)|(0<<3); - 80054a0: 89fb ldrh r3, [r7, #14] - 80054a2: f043 0320 orr.w r3, r3, #32 - 80054a6: 81fb strh r3, [r7, #14] + 80056c0: 89fb ldrh r3, [r7, #14] + 80056c2: f043 0320 orr.w r3, r3, #32 + 80056c6: 81fb strh r3, [r7, #14] break; - 80054a8: e013 b.n 80054d2 + 80056c8: e013 b.n 80056f2 case R2L_D2U://´ÓÓÒµ½×ó,´Óϵ½ÉÏ regval|=(0<<5)|(0<<4)|(0<<3); break; case U2D_L2R://´ÓÉϵ½ÏÂ,´Ó×óµ½ÓÒ regval|=(1<<5)|(1<<4)|(1<<3); - 80054aa: 89fb ldrh r3, [r7, #14] - 80054ac: f043 0338 orr.w r3, r3, #56 ; 0x38 - 80054b0: 81fb strh r3, [r7, #14] + 80056ca: 89fb ldrh r3, [r7, #14] + 80056cc: f043 0338 orr.w r3, r3, #56 ; 0x38 + 80056d0: 81fb strh r3, [r7, #14] break; - 80054b2: e00e b.n 80054d2 + 80056d2: e00e b.n 80056f2 case U2D_R2L://´ÓÉϵ½ÏÂ,´ÓÓÒµ½×ó regval|=(1<<5)|(0<<4)|(1<<3); - 80054b4: 89fb ldrh r3, [r7, #14] - 80054b6: f043 0328 orr.w r3, r3, #40 ; 0x28 - 80054ba: 81fb strh r3, [r7, #14] + 80056d4: 89fb ldrh r3, [r7, #14] + 80056d6: f043 0328 orr.w r3, r3, #40 ; 0x28 + 80056da: 81fb strh r3, [r7, #14] break; - 80054bc: e009 b.n 80054d2 + 80056dc: e009 b.n 80056f2 case D2U_L2R://´Óϵ½ÉÏ,´Ó×óµ½ÓÒ regval|=(0<<5)|(1<<4)|(1<<3); - 80054be: 89fb ldrh r3, [r7, #14] - 80054c0: f043 0318 orr.w r3, r3, #24 - 80054c4: 81fb strh r3, [r7, #14] + 80056de: 89fb ldrh r3, [r7, #14] + 80056e0: f043 0318 orr.w r3, r3, #24 + 80056e4: 81fb strh r3, [r7, #14] break; - 80054c6: e004 b.n 80054d2 + 80056e6: e004 b.n 80056f2 case D2U_R2L://´Óϵ½ÉÏ,´ÓÓÒµ½×ó regval|=(0<<5)|(0<<4)|(1<<3); - 80054c8: 89fb ldrh r3, [r7, #14] - 80054ca: f043 0308 orr.w r3, r3, #8 - 80054ce: 81fb strh r3, [r7, #14] + 80056e8: 89fb ldrh r3, [r7, #14] + 80056ea: f043 0308 orr.w r3, r3, #8 + 80056ee: 81fb strh r3, [r7, #14] break; - 80054d0: bf00 nop + 80056f0: bf00 nop } if(lcddev.id==0x8989)//8989 IC - 80054d2: 4b07 ldr r3, [pc, #28] ; (80054f0 ) - 80054d4: 889b ldrh r3, [r3, #4] - 80054d6: f648 1289 movw r2, #35209 ; 0x8989 - 80054da: 4293 cmp r3, r2 - 80054dc: d10a bne.n 80054f4 + 80056f2: 4b07 ldr r3, [pc, #28] ; (8005710 ) + 80056f4: 889b ldrh r3, [r3, #4] + 80056f6: f648 1289 movw r2, #35209 ; 0x8989 + 80056fa: 4293 cmp r3, r2 + 80056fc: d10a bne.n 8005714 { dirreg=0X11; - 80054de: 2311 movs r3, #17 - 80054e0: 737b strb r3, [r7, #13] + 80056fe: 2311 movs r3, #17 + 8005700: 737b strb r3, [r7, #13] regval|=0X6040; //65K - 80054e2: 89fb ldrh r3, [r7, #14] - 80054e4: f443 43c0 orr.w r3, r3, #24576 ; 0x6000 - 80054e8: f043 0340 orr.w r3, r3, #64 ; 0x40 - 80054ec: 81fb strh r3, [r7, #14] - 80054ee: e007 b.n 8005500 - 80054f0: 200007b0 .word 0x200007b0 + 8005702: 89fb ldrh r3, [r7, #14] + 8005704: f443 43c0 orr.w r3, r3, #24576 ; 0x6000 + 8005708: f043 0340 orr.w r3, r3, #64 ; 0x40 + 800570c: 81fb strh r3, [r7, #14] + 800570e: e007 b.n 8005720 + 8005710: 20000824 .word 0x20000824 }else//ÆäËûÇý¶¯IC { dirreg=0X03; - 80054f4: 2303 movs r3, #3 - 80054f6: 737b strb r3, [r7, #13] + 8005714: 2303 movs r3, #3 + 8005716: 737b strb r3, [r7, #13] regval|=1<<12; - 80054f8: 89fb ldrh r3, [r7, #14] - 80054fa: f443 5380 orr.w r3, r3, #4096 ; 0x1000 - 80054fe: 81fb strh r3, [r7, #14] + 8005718: 89fb ldrh r3, [r7, #14] + 800571a: f443 5380 orr.w r3, r3, #4096 ; 0x1000 + 800571e: 81fb strh r3, [r7, #14] } LCD_WriteReg(dirreg,regval); - 8005500: 7b7b ldrb r3, [r7, #13] - 8005502: b29b uxth r3, r3 - 8005504: 89fa ldrh r2, [r7, #14] - 8005506: 4611 mov r1, r2 - 8005508: 4618 mov r0, r3 - 800550a: f7ff fe6d bl 80051e8 + 8005720: 7b7b ldrb r3, [r7, #13] + 8005722: b29b uxth r3, r3 + 8005724: 89fa ldrh r2, [r7, #14] + 8005726: 4611 mov r1, r2 + 8005728: 4618 mov r0, r3 + 800572a: f7ff fe6d bl 8005408 } } - 800550e: bf00 nop - 8005510: bf00 nop - 8005512: 3710 adds r7, #16 - 8005514: 46bd mov sp, r7 - 8005516: bd80 pop {r7, pc} + 800572e: bf00 nop + 8005730: bf00 nop + 8005732: 3710 adds r7, #16 + 8005734: 46bd mov sp, r7 + 8005736: bd80 pop {r7, pc} -08005518 : +08005738 : //ÉèÖÃLCDÏÔʾ·½Ïò //dir:0,ÊúÆÁ£»1,ºáÆÁ void LCD_Display_Dir(uint8_t dir) { - 8005518: b580 push {r7, lr} - 800551a: b082 sub sp, #8 - 800551c: af00 add r7, sp, #0 - 800551e: 4603 mov r3, r0 - 8005520: 71fb strb r3, [r7, #7] + 8005738: b580 push {r7, lr} + 800573a: b082 sub sp, #8 + 800573c: af00 add r7, sp, #0 + 800573e: 4603 mov r3, r0 + 8005740: 71fb strb r3, [r7, #7] if(dir==0) //ÊúÆÁ - 8005522: 79fb ldrb r3, [r7, #7] - 8005524: 2b00 cmp r3, #0 - 8005526: d154 bne.n 80055d2 + 8005742: 79fb ldrb r3, [r7, #7] + 8005744: 2b00 cmp r3, #0 + 8005746: d154 bne.n 80057f2 { lcddev.dir=0; //ÊúÆÁ - 8005528: 4b5d ldr r3, [pc, #372] ; (80056a0 ) - 800552a: 2200 movs r2, #0 - 800552c: 719a strb r2, [r3, #6] + 8005748: 4b5d ldr r3, [pc, #372] ; (80058c0 ) + 800574a: 2200 movs r2, #0 + 800574c: 719a strb r2, [r3, #6] lcddev.width=240; - 800552e: 4b5c ldr r3, [pc, #368] ; (80056a0 ) - 8005530: 22f0 movs r2, #240 ; 0xf0 - 8005532: 801a strh r2, [r3, #0] + 800574e: 4b5c ldr r3, [pc, #368] ; (80058c0 ) + 8005750: 22f0 movs r2, #240 ; 0xf0 + 8005752: 801a strh r2, [r3, #0] lcddev.height=320; - 8005534: 4b5a ldr r3, [pc, #360] ; (80056a0 ) - 8005536: f44f 72a0 mov.w r2, #320 ; 0x140 - 800553a: 805a strh r2, [r3, #2] + 8005754: 4b5a ldr r3, [pc, #360] ; (80058c0 ) + 8005756: f44f 72a0 mov.w r2, #320 ; 0x140 + 800575a: 805a strh r2, [r3, #2] if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310) - 800553c: 4b58 ldr r3, [pc, #352] ; (80056a0 ) - 800553e: 889b ldrh r3, [r3, #4] - 8005540: f249 3241 movw r2, #37697 ; 0x9341 - 8005544: 4293 cmp r3, r2 - 8005546: d00b beq.n 8005560 - 8005548: 4b55 ldr r3, [pc, #340] ; (80056a0 ) - 800554a: 889b ldrh r3, [r3, #4] - 800554c: f646 0204 movw r2, #26628 ; 0x6804 - 8005550: 4293 cmp r3, r2 - 8005552: d005 beq.n 8005560 - 8005554: 4b52 ldr r3, [pc, #328] ; (80056a0 ) - 8005556: 889b ldrh r3, [r3, #4] - 8005558: f245 3210 movw r2, #21264 ; 0x5310 - 800555c: 4293 cmp r3, r2 - 800555e: d11e bne.n 800559e + 800575c: 4b58 ldr r3, [pc, #352] ; (80058c0 ) + 800575e: 889b ldrh r3, [r3, #4] + 8005760: f249 3241 movw r2, #37697 ; 0x9341 + 8005764: 4293 cmp r3, r2 + 8005766: d00b beq.n 8005780 + 8005768: 4b55 ldr r3, [pc, #340] ; (80058c0 ) + 800576a: 889b ldrh r3, [r3, #4] + 800576c: f646 0204 movw r2, #26628 ; 0x6804 + 8005770: 4293 cmp r3, r2 + 8005772: d005 beq.n 8005780 + 8005774: 4b52 ldr r3, [pc, #328] ; (80058c0 ) + 8005776: 889b ldrh r3, [r3, #4] + 8005778: f245 3210 movw r2, #21264 ; 0x5310 + 800577c: 4293 cmp r3, r2 + 800577e: d11e bne.n 80057be { lcddev.wramcmd=0X2C; - 8005560: 4b4f ldr r3, [pc, #316] ; (80056a0 ) - 8005562: 222c movs r2, #44 ; 0x2c - 8005564: 71da strb r2, [r3, #7] + 8005780: 4b4f ldr r3, [pc, #316] ; (80058c0 ) + 8005782: 222c movs r2, #44 ; 0x2c + 8005784: 71da strb r2, [r3, #7] lcddev.setxcmd=0X2A; - 8005566: 4b4e ldr r3, [pc, #312] ; (80056a0 ) - 8005568: 222a movs r2, #42 ; 0x2a - 800556a: 721a strb r2, [r3, #8] + 8005786: 4b4e ldr r3, [pc, #312] ; (80058c0 ) + 8005788: 222a movs r2, #42 ; 0x2a + 800578a: 721a strb r2, [r3, #8] lcddev.setycmd=0X2B; - 800556c: 4b4c ldr r3, [pc, #304] ; (80056a0 ) - 800556e: 222b movs r2, #43 ; 0x2b - 8005570: 725a strb r2, [r3, #9] + 800578c: 4b4c ldr r3, [pc, #304] ; (80058c0 ) + 800578e: 222b movs r2, #43 ; 0x2b + 8005790: 725a strb r2, [r3, #9] if(lcddev.id==0X6804||lcddev.id==0X5310) - 8005572: 4b4b ldr r3, [pc, #300] ; (80056a0 ) - 8005574: 889b ldrh r3, [r3, #4] - 8005576: f646 0204 movw r2, #26628 ; 0x6804 - 800557a: 4293 cmp r3, r2 - 800557c: d006 beq.n 800558c - 800557e: 4b48 ldr r3, [pc, #288] ; (80056a0 ) - 8005580: 889b ldrh r3, [r3, #4] - 8005582: f245 3210 movw r2, #21264 ; 0x5310 - 8005586: 4293 cmp r3, r2 - 8005588: f040 8081 bne.w 800568e + 8005792: 4b4b ldr r3, [pc, #300] ; (80058c0 ) + 8005794: 889b ldrh r3, [r3, #4] + 8005796: f646 0204 movw r2, #26628 ; 0x6804 + 800579a: 4293 cmp r3, r2 + 800579c: d006 beq.n 80057ac + 800579e: 4b48 ldr r3, [pc, #288] ; (80058c0 ) + 80057a0: 889b ldrh r3, [r3, #4] + 80057a2: f245 3210 movw r2, #21264 ; 0x5310 + 80057a6: 4293 cmp r3, r2 + 80057a8: f040 8081 bne.w 80058ae { lcddev.width=320; - 800558c: 4b44 ldr r3, [pc, #272] ; (80056a0 ) - 800558e: f44f 72a0 mov.w r2, #320 ; 0x140 - 8005592: 801a strh r2, [r3, #0] + 80057ac: 4b44 ldr r3, [pc, #272] ; (80058c0 ) + 80057ae: f44f 72a0 mov.w r2, #320 ; 0x140 + 80057b2: 801a strh r2, [r3, #0] lcddev.height=480; - 8005594: 4b42 ldr r3, [pc, #264] ; (80056a0 ) - 8005596: f44f 72f0 mov.w r2, #480 ; 0x1e0 - 800559a: 805a strh r2, [r3, #2] + 80057b4: 4b42 ldr r3, [pc, #264] ; (80058c0 ) + 80057b6: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 80057ba: 805a strh r2, [r3, #2] if(lcddev.id==0X6804||lcddev.id==0X5310) - 800559c: e077 b.n 800568e + 80057bc: e077 b.n 80058ae } }else if(lcddev.id==0X8989) - 800559e: 4b40 ldr r3, [pc, #256] ; (80056a0 ) - 80055a0: 889b ldrh r3, [r3, #4] - 80055a2: f648 1289 movw r2, #35209 ; 0x8989 - 80055a6: 4293 cmp r3, r2 - 80055a8: d109 bne.n 80055be + 80057be: 4b40 ldr r3, [pc, #256] ; (80058c0 ) + 80057c0: 889b ldrh r3, [r3, #4] + 80057c2: f648 1289 movw r2, #35209 ; 0x8989 + 80057c6: 4293 cmp r3, r2 + 80057c8: d109 bne.n 80057de { lcddev.wramcmd=R34; - 80055aa: 4b3d ldr r3, [pc, #244] ; (80056a0 ) - 80055ac: 2222 movs r2, #34 ; 0x22 - 80055ae: 71da strb r2, [r3, #7] + 80057ca: 4b3d ldr r3, [pc, #244] ; (80058c0 ) + 80057cc: 2222 movs r2, #34 ; 0x22 + 80057ce: 71da strb r2, [r3, #7] lcddev.setxcmd=0X4E; - 80055b0: 4b3b ldr r3, [pc, #236] ; (80056a0 ) - 80055b2: 224e movs r2, #78 ; 0x4e - 80055b4: 721a strb r2, [r3, #8] + 80057d0: 4b3b ldr r3, [pc, #236] ; (80058c0 ) + 80057d2: 224e movs r2, #78 ; 0x4e + 80057d4: 721a strb r2, [r3, #8] lcddev.setycmd=0X4F; - 80055b6: 4b3a ldr r3, [pc, #232] ; (80056a0 ) - 80055b8: 224f movs r2, #79 ; 0x4f - 80055ba: 725a strb r2, [r3, #9] - 80055bc: e068 b.n 8005690 + 80057d6: 4b3a ldr r3, [pc, #232] ; (80058c0 ) + 80057d8: 224f movs r2, #79 ; 0x4f + 80057da: 725a strb r2, [r3, #9] + 80057dc: e068 b.n 80058b0 }else { lcddev.wramcmd=R34; - 80055be: 4b38 ldr r3, [pc, #224] ; (80056a0 ) - 80055c0: 2222 movs r2, #34 ; 0x22 - 80055c2: 71da strb r2, [r3, #7] + 80057de: 4b38 ldr r3, [pc, #224] ; (80058c0 ) + 80057e0: 2222 movs r2, #34 ; 0x22 + 80057e2: 71da strb r2, [r3, #7] lcddev.setxcmd=R32; - 80055c4: 4b36 ldr r3, [pc, #216] ; (80056a0 ) - 80055c6: 2220 movs r2, #32 - 80055c8: 721a strb r2, [r3, #8] + 80057e4: 4b36 ldr r3, [pc, #216] ; (80058c0 ) + 80057e6: 2220 movs r2, #32 + 80057e8: 721a strb r2, [r3, #8] lcddev.setycmd=R33; - 80055ca: 4b35 ldr r3, [pc, #212] ; (80056a0 ) - 80055cc: 2221 movs r2, #33 ; 0x21 - 80055ce: 725a strb r2, [r3, #9] - 80055d0: e05e b.n 8005690 + 80057ea: 4b35 ldr r3, [pc, #212] ; (80058c0 ) + 80057ec: 2221 movs r2, #33 ; 0x21 + 80057ee: 725a strb r2, [r3, #9] + 80057f0: e05e b.n 80058b0 } }else //ºáÆÁ { lcddev.dir=1; //ºáÆÁ - 80055d2: 4b33 ldr r3, [pc, #204] ; (80056a0 ) - 80055d4: 2201 movs r2, #1 - 80055d6: 719a strb r2, [r3, #6] + 80057f2: 4b33 ldr r3, [pc, #204] ; (80058c0 ) + 80057f4: 2201 movs r2, #1 + 80057f6: 719a strb r2, [r3, #6] lcddev.width=320; - 80055d8: 4b31 ldr r3, [pc, #196] ; (80056a0 ) - 80055da: f44f 72a0 mov.w r2, #320 ; 0x140 - 80055de: 801a strh r2, [r3, #0] + 80057f8: 4b31 ldr r3, [pc, #196] ; (80058c0 ) + 80057fa: f44f 72a0 mov.w r2, #320 ; 0x140 + 80057fe: 801a strh r2, [r3, #0] lcddev.height=240; - 80055e0: 4b2f ldr r3, [pc, #188] ; (80056a0 ) - 80055e2: 22f0 movs r2, #240 ; 0xf0 - 80055e4: 805a strh r2, [r3, #2] + 8005800: 4b2f ldr r3, [pc, #188] ; (80058c0 ) + 8005802: 22f0 movs r2, #240 ; 0xf0 + 8005804: 805a strh r2, [r3, #2] if(lcddev.id==0X9341||lcddev.id==0X5310) - 80055e6: 4b2e ldr r3, [pc, #184] ; (80056a0 ) - 80055e8: 889b ldrh r3, [r3, #4] - 80055ea: f249 3241 movw r2, #37697 ; 0x9341 - 80055ee: 4293 cmp r3, r2 - 80055f0: d005 beq.n 80055fe - 80055f2: 4b2b ldr r3, [pc, #172] ; (80056a0 ) - 80055f4: 889b ldrh r3, [r3, #4] - 80055f6: f245 3210 movw r2, #21264 ; 0x5310 - 80055fa: 4293 cmp r3, r2 - 80055fc: d109 bne.n 8005612 + 8005806: 4b2e ldr r3, [pc, #184] ; (80058c0 ) + 8005808: 889b ldrh r3, [r3, #4] + 800580a: f249 3241 movw r2, #37697 ; 0x9341 + 800580e: 4293 cmp r3, r2 + 8005810: d005 beq.n 800581e + 8005812: 4b2b ldr r3, [pc, #172] ; (80058c0 ) + 8005814: 889b ldrh r3, [r3, #4] + 8005816: f245 3210 movw r2, #21264 ; 0x5310 + 800581a: 4293 cmp r3, r2 + 800581c: d109 bne.n 8005832 { lcddev.wramcmd=0X2C; - 80055fe: 4b28 ldr r3, [pc, #160] ; (80056a0 ) - 8005600: 222c movs r2, #44 ; 0x2c - 8005602: 71da strb r2, [r3, #7] + 800581e: 4b28 ldr r3, [pc, #160] ; (80058c0 ) + 8005820: 222c movs r2, #44 ; 0x2c + 8005822: 71da strb r2, [r3, #7] lcddev.setxcmd=0X2A; - 8005604: 4b26 ldr r3, [pc, #152] ; (80056a0 ) - 8005606: 222a movs r2, #42 ; 0x2a - 8005608: 721a strb r2, [r3, #8] + 8005824: 4b26 ldr r3, [pc, #152] ; (80058c0 ) + 8005826: 222a movs r2, #42 ; 0x2a + 8005828: 721a strb r2, [r3, #8] lcddev.setycmd=0X2B; - 800560a: 4b25 ldr r3, [pc, #148] ; (80056a0 ) - 800560c: 222b movs r2, #43 ; 0x2b - 800560e: 725a strb r2, [r3, #9] - 8005610: e028 b.n 8005664 + 800582a: 4b25 ldr r3, [pc, #148] ; (80058c0 ) + 800582c: 222b movs r2, #43 ; 0x2b + 800582e: 725a strb r2, [r3, #9] + 8005830: e028 b.n 8005884 }else if(lcddev.id==0X6804) - 8005612: 4b23 ldr r3, [pc, #140] ; (80056a0 ) - 8005614: 889b ldrh r3, [r3, #4] - 8005616: f646 0204 movw r2, #26628 ; 0x6804 - 800561a: 4293 cmp r3, r2 - 800561c: d109 bne.n 8005632 + 8005832: 4b23 ldr r3, [pc, #140] ; (80058c0 ) + 8005834: 889b ldrh r3, [r3, #4] + 8005836: f646 0204 movw r2, #26628 ; 0x6804 + 800583a: 4293 cmp r3, r2 + 800583c: d109 bne.n 8005852 { lcddev.wramcmd=0X2C; - 800561e: 4b20 ldr r3, [pc, #128] ; (80056a0 ) - 8005620: 222c movs r2, #44 ; 0x2c - 8005622: 71da strb r2, [r3, #7] + 800583e: 4b20 ldr r3, [pc, #128] ; (80058c0 ) + 8005840: 222c movs r2, #44 ; 0x2c + 8005842: 71da strb r2, [r3, #7] lcddev.setxcmd=0X2B; - 8005624: 4b1e ldr r3, [pc, #120] ; (80056a0 ) - 8005626: 222b movs r2, #43 ; 0x2b - 8005628: 721a strb r2, [r3, #8] + 8005844: 4b1e ldr r3, [pc, #120] ; (80058c0 ) + 8005846: 222b movs r2, #43 ; 0x2b + 8005848: 721a strb r2, [r3, #8] lcddev.setycmd=0X2A; - 800562a: 4b1d ldr r3, [pc, #116] ; (80056a0 ) - 800562c: 222a movs r2, #42 ; 0x2a - 800562e: 725a strb r2, [r3, #9] - 8005630: e018 b.n 8005664 + 800584a: 4b1d ldr r3, [pc, #116] ; (80058c0 ) + 800584c: 222a movs r2, #42 ; 0x2a + 800584e: 725a strb r2, [r3, #9] + 8005850: e018 b.n 8005884 }else if(lcddev.id==0X8989) - 8005632: 4b1b ldr r3, [pc, #108] ; (80056a0 ) - 8005634: 889b ldrh r3, [r3, #4] - 8005636: f648 1289 movw r2, #35209 ; 0x8989 - 800563a: 4293 cmp r3, r2 - 800563c: d109 bne.n 8005652 + 8005852: 4b1b ldr r3, [pc, #108] ; (80058c0 ) + 8005854: 889b ldrh r3, [r3, #4] + 8005856: f648 1289 movw r2, #35209 ; 0x8989 + 800585a: 4293 cmp r3, r2 + 800585c: d109 bne.n 8005872 { lcddev.wramcmd=R34; - 800563e: 4b18 ldr r3, [pc, #96] ; (80056a0 ) - 8005640: 2222 movs r2, #34 ; 0x22 - 8005642: 71da strb r2, [r3, #7] + 800585e: 4b18 ldr r3, [pc, #96] ; (80058c0 ) + 8005860: 2222 movs r2, #34 ; 0x22 + 8005862: 71da strb r2, [r3, #7] lcddev.setxcmd=0X4F; - 8005644: 4b16 ldr r3, [pc, #88] ; (80056a0 ) - 8005646: 224f movs r2, #79 ; 0x4f - 8005648: 721a strb r2, [r3, #8] + 8005864: 4b16 ldr r3, [pc, #88] ; (80058c0 ) + 8005866: 224f movs r2, #79 ; 0x4f + 8005868: 721a strb r2, [r3, #8] lcddev.setycmd=0X4E; - 800564a: 4b15 ldr r3, [pc, #84] ; (80056a0 ) - 800564c: 224e movs r2, #78 ; 0x4e - 800564e: 725a strb r2, [r3, #9] - 8005650: e008 b.n 8005664 + 800586a: 4b15 ldr r3, [pc, #84] ; (80058c0 ) + 800586c: 224e movs r2, #78 ; 0x4e + 800586e: 725a strb r2, [r3, #9] + 8005870: e008 b.n 8005884 }else { lcddev.wramcmd=R34; - 8005652: 4b13 ldr r3, [pc, #76] ; (80056a0 ) - 8005654: 2222 movs r2, #34 ; 0x22 - 8005656: 71da strb r2, [r3, #7] + 8005872: 4b13 ldr r3, [pc, #76] ; (80058c0 ) + 8005874: 2222 movs r2, #34 ; 0x22 + 8005876: 71da strb r2, [r3, #7] lcddev.setxcmd=R33; - 8005658: 4b11 ldr r3, [pc, #68] ; (80056a0 ) - 800565a: 2221 movs r2, #33 ; 0x21 - 800565c: 721a strb r2, [r3, #8] + 8005878: 4b11 ldr r3, [pc, #68] ; (80058c0 ) + 800587a: 2221 movs r2, #33 ; 0x21 + 800587c: 721a strb r2, [r3, #8] lcddev.setycmd=R32; - 800565e: 4b10 ldr r3, [pc, #64] ; (80056a0 ) - 8005660: 2220 movs r2, #32 - 8005662: 725a strb r2, [r3, #9] + 800587e: 4b10 ldr r3, [pc, #64] ; (80058c0 ) + 8005880: 2220 movs r2, #32 + 8005882: 725a strb r2, [r3, #9] } if(lcddev.id==0X6804||lcddev.id==0X5310) - 8005664: 4b0e ldr r3, [pc, #56] ; (80056a0 ) - 8005666: 889b ldrh r3, [r3, #4] - 8005668: f646 0204 movw r2, #26628 ; 0x6804 - 800566c: 4293 cmp r3, r2 - 800566e: d005 beq.n 800567c - 8005670: 4b0b ldr r3, [pc, #44] ; (80056a0 ) - 8005672: 889b ldrh r3, [r3, #4] - 8005674: f245 3210 movw r2, #21264 ; 0x5310 - 8005678: 4293 cmp r3, r2 - 800567a: d109 bne.n 8005690 + 8005884: 4b0e ldr r3, [pc, #56] ; (80058c0 ) + 8005886: 889b ldrh r3, [r3, #4] + 8005888: f646 0204 movw r2, #26628 ; 0x6804 + 800588c: 4293 cmp r3, r2 + 800588e: d005 beq.n 800589c + 8005890: 4b0b ldr r3, [pc, #44] ; (80058c0 ) + 8005892: 889b ldrh r3, [r3, #4] + 8005894: f245 3210 movw r2, #21264 ; 0x5310 + 8005898: 4293 cmp r3, r2 + 800589a: d109 bne.n 80058b0 { lcddev.width=480; - 800567c: 4b08 ldr r3, [pc, #32] ; (80056a0 ) - 800567e: f44f 72f0 mov.w r2, #480 ; 0x1e0 - 8005682: 801a strh r2, [r3, #0] + 800589c: 4b08 ldr r3, [pc, #32] ; (80058c0 ) + 800589e: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 80058a2: 801a strh r2, [r3, #0] lcddev.height=320; - 8005684: 4b06 ldr r3, [pc, #24] ; (80056a0 ) - 8005686: f44f 72a0 mov.w r2, #320 ; 0x140 - 800568a: 805a strh r2, [r3, #2] - 800568c: e000 b.n 8005690 + 80058a4: 4b06 ldr r3, [pc, #24] ; (80058c0 ) + 80058a6: f44f 72a0 mov.w r2, #320 ; 0x140 + 80058aa: 805a strh r2, [r3, #2] + 80058ac: e000 b.n 80058b0 if(lcddev.id==0X6804||lcddev.id==0X5310) - 800568e: bf00 nop + 80058ae: bf00 nop } } LCD_Scan_Dir(DFT_SCAN_DIR); //ĬÈÏɨÃè·½Ïò - 8005690: 2000 movs r0, #0 - 8005692: f7ff fdd3 bl 800523c + 80058b0: 2000 movs r0, #0 + 80058b2: f7ff fdd3 bl 800545c } - 8005696: bf00 nop - 8005698: 3708 adds r7, #8 - 800569a: 46bd mov sp, r7 - 800569c: bd80 pop {r7, pc} - 800569e: bf00 nop - 80056a0: 200007b0 .word 0x200007b0 + 80058b6: bf00 nop + 80058b8: 3708 adds r7, #8 + 80058ba: 46bd mov sp, r7 + 80058bc: bd80 pop {r7, pc} + 80058be: bf00 nop + 80058c0: 20000824 .word 0x20000824 -080056a4 : +080058c4 : //³õʼ»¯lcd //¸Ã³õʼ»¯º¯Êý¿ÉÒÔ³õʼ»¯¸÷ÖÖÒº¾§! void LCDx_Init(void) { - 80056a4: b580 push {r7, lr} - 80056a6: af00 add r7, sp, #0 + 80058c4: b580 push {r7, lr} + 80058c6: af00 add r7, sp, #0 LCD_BL(0); - 80056a8: 2200 movs r2, #0 - 80056aa: 2101 movs r1, #1 - 80056ac: 4876 ldr r0, [pc, #472] ; (8005888 ) - 80056ae: f7fb fb63 bl 8000d78 + 80058c8: 2200 movs r2, #0 + 80058ca: 2101 movs r1, #1 + 80058cc: 4876 ldr r0, [pc, #472] ; (8005aa8 ) + 80058ce: f7fb faae bl 8000e2e HAL_Delay(50); // delay 50 ms - 80056b2: 2032 movs r0, #50 ; 0x32 - 80056b4: f7fb f8c4 bl 8000840 + 80058d2: 2032 movs r0, #50 ; 0x32 + 80058d4: f7fa fff8 bl 80008c8 LCD_WriteReg(0x0000,0x0001); - 80056b8: 2101 movs r1, #1 - 80056ba: 2000 movs r0, #0 - 80056bc: f7ff fd94 bl 80051e8 + 80058d8: 2101 movs r1, #1 + 80058da: 2000 movs r0, #0 + 80058dc: f7ff fd94 bl 8005408 HAL_Delay(50); // delay 50 ms - 80056c0: 2032 movs r0, #50 ; 0x32 - 80056c2: f7fb f8bd bl 8000840 + 80058e0: 2032 movs r0, #50 ; 0x32 + 80058e2: f7fa fff1 bl 80008c8 lcddev.id = LCD_ReadReg(0x0000); - 80056c6: 2000 movs r0, #0 - 80056c8: f7ff fda4 bl 8005214 - 80056cc: 4603 mov r3, r0 - 80056ce: 461a mov r2, r3 - 80056d0: 4b6e ldr r3, [pc, #440] ; (800588c ) - 80056d2: 809a strh r2, [r3, #4] + 80058e6: 2000 movs r0, #0 + 80058e8: f7ff fda4 bl 8005434 + 80058ec: 4603 mov r3, r0 + 80058ee: 461a mov r2, r3 + 80058f0: 4b6e ldr r3, [pc, #440] ; (8005aac ) + 80058f2: 809a strh r2, [r3, #4] LCD_WriteReg(0x00E5,0x78F0); - 80056d4: f647 01f0 movw r1, #30960 ; 0x78f0 - 80056d8: 20e5 movs r0, #229 ; 0xe5 - 80056da: f7ff fd85 bl 80051e8 + 80058f4: f647 01f0 movw r1, #30960 ; 0x78f0 + 80058f8: 20e5 movs r0, #229 ; 0xe5 + 80058fa: f7ff fd85 bl 8005408 LCD_WriteReg(0x0001,0x0100); - 80056de: f44f 7180 mov.w r1, #256 ; 0x100 - 80056e2: 2001 movs r0, #1 - 80056e4: f7ff fd80 bl 80051e8 + 80058fe: f44f 7180 mov.w r1, #256 ; 0x100 + 8005902: 2001 movs r0, #1 + 8005904: f7ff fd80 bl 8005408 LCD_WriteReg(0x0002,0x0700); - 80056e8: f44f 61e0 mov.w r1, #1792 ; 0x700 - 80056ec: 2002 movs r0, #2 - 80056ee: f7ff fd7b bl 80051e8 + 8005908: f44f 61e0 mov.w r1, #1792 ; 0x700 + 800590c: 2002 movs r0, #2 + 800590e: f7ff fd7b bl 8005408 LCD_WriteReg(0x0003,0x1030); - 80056f2: f241 0130 movw r1, #4144 ; 0x1030 - 80056f6: 2003 movs r0, #3 - 80056f8: f7ff fd76 bl 80051e8 + 8005912: f241 0130 movw r1, #4144 ; 0x1030 + 8005916: 2003 movs r0, #3 + 8005918: f7ff fd76 bl 8005408 LCD_WriteReg(0x0004,0x0000); - 80056fc: 2100 movs r1, #0 - 80056fe: 2004 movs r0, #4 - 8005700: f7ff fd72 bl 80051e8 + 800591c: 2100 movs r1, #0 + 800591e: 2004 movs r0, #4 + 8005920: f7ff fd72 bl 8005408 LCD_WriteReg(0x0008,0x0202); - 8005704: f240 2102 movw r1, #514 ; 0x202 - 8005708: 2008 movs r0, #8 - 800570a: f7ff fd6d bl 80051e8 + 8005924: f240 2102 movw r1, #514 ; 0x202 + 8005928: 2008 movs r0, #8 + 800592a: f7ff fd6d bl 8005408 LCD_WriteReg(0x0009,0x0000); - 800570e: 2100 movs r1, #0 - 8005710: 2009 movs r0, #9 - 8005712: f7ff fd69 bl 80051e8 + 800592e: 2100 movs r1, #0 + 8005930: 2009 movs r0, #9 + 8005932: f7ff fd69 bl 8005408 LCD_WriteReg(0x000A,0x0000); - 8005716: 2100 movs r1, #0 - 8005718: 200a movs r0, #10 - 800571a: f7ff fd65 bl 80051e8 + 8005936: 2100 movs r1, #0 + 8005938: 200a movs r0, #10 + 800593a: f7ff fd65 bl 8005408 LCD_WriteReg(0x000C,0x0000); - 800571e: 2100 movs r1, #0 - 8005720: 200c movs r0, #12 - 8005722: f7ff fd61 bl 80051e8 + 800593e: 2100 movs r1, #0 + 8005940: 200c movs r0, #12 + 8005942: f7ff fd61 bl 8005408 LCD_WriteReg(0x000D,0x0000); - 8005726: 2100 movs r1, #0 - 8005728: 200d movs r0, #13 - 800572a: f7ff fd5d bl 80051e8 + 8005946: 2100 movs r1, #0 + 8005948: 200d movs r0, #13 + 800594a: f7ff fd5d bl 8005408 LCD_WriteReg(0x000F,0x0000); - 800572e: 2100 movs r1, #0 - 8005730: 200f movs r0, #15 - 8005732: f7ff fd59 bl 80051e8 + 800594e: 2100 movs r1, #0 + 8005950: 200f movs r0, #15 + 8005952: f7ff fd59 bl 8005408 //power on sequence VGHVGL LCD_WriteReg(0x0010,0x0000); - 8005736: 2100 movs r1, #0 - 8005738: 2010 movs r0, #16 - 800573a: f7ff fd55 bl 80051e8 + 8005956: 2100 movs r1, #0 + 8005958: 2010 movs r0, #16 + 800595a: f7ff fd55 bl 8005408 LCD_WriteReg(0x0011,0x0007); - 800573e: 2107 movs r1, #7 - 8005740: 2011 movs r0, #17 - 8005742: f7ff fd51 bl 80051e8 + 800595e: 2107 movs r1, #7 + 8005960: 2011 movs r0, #17 + 8005962: f7ff fd51 bl 8005408 LCD_WriteReg(0x0012,0x0000); - 8005746: 2100 movs r1, #0 - 8005748: 2012 movs r0, #18 - 800574a: f7ff fd4d bl 80051e8 + 8005966: 2100 movs r1, #0 + 8005968: 2012 movs r0, #18 + 800596a: f7ff fd4d bl 8005408 LCD_WriteReg(0x0013,0x0000); - 800574e: 2100 movs r1, #0 - 8005750: 2013 movs r0, #19 - 8005752: f7ff fd49 bl 80051e8 + 800596e: 2100 movs r1, #0 + 8005970: 2013 movs r0, #19 + 8005972: f7ff fd49 bl 8005408 LCD_WriteReg(0x0007,0x0000); - 8005756: 2100 movs r1, #0 - 8005758: 2007 movs r0, #7 - 800575a: f7ff fd45 bl 80051e8 + 8005976: 2100 movs r1, #0 + 8005978: 2007 movs r0, #7 + 800597a: f7ff fd45 bl 8005408 //vgh LCD_WriteReg(0x0010,0x1690); - 800575e: f241 6190 movw r1, #5776 ; 0x1690 - 8005762: 2010 movs r0, #16 - 8005764: f7ff fd40 bl 80051e8 + 800597e: f241 6190 movw r1, #5776 ; 0x1690 + 8005982: 2010 movs r0, #16 + 8005984: f7ff fd40 bl 8005408 LCD_WriteReg(0x0011,0x0227); - 8005768: f240 2127 movw r1, #551 ; 0x227 - 800576c: 2011 movs r0, #17 - 800576e: f7ff fd3b bl 80051e8 + 8005988: f240 2127 movw r1, #551 ; 0x227 + 800598c: 2011 movs r0, #17 + 800598e: f7ff fd3b bl 8005408 //delayms(100); //vregiout LCD_WriteReg(0x0012,0x009D); //0x001b - 8005772: 219d movs r1, #157 ; 0x9d - 8005774: 2012 movs r0, #18 - 8005776: f7ff fd37 bl 80051e8 + 8005992: 219d movs r1, #157 ; 0x9d + 8005994: 2012 movs r0, #18 + 8005996: f7ff fd37 bl 8005408 //delayms(100); //vom amplitude LCD_WriteReg(0x0013,0x1900); - 800577a: f44f 51c8 mov.w r1, #6400 ; 0x1900 - 800577e: 2013 movs r0, #19 - 8005780: f7ff fd32 bl 80051e8 + 800599a: f44f 51c8 mov.w r1, #6400 ; 0x1900 + 800599e: 2013 movs r0, #19 + 80059a0: f7ff fd32 bl 8005408 //delayms(100); //vom H LCD_WriteReg(0x0029,0x0025); - 8005784: 2125 movs r1, #37 ; 0x25 - 8005786: 2029 movs r0, #41 ; 0x29 - 8005788: f7ff fd2e bl 80051e8 + 80059a4: 2125 movs r1, #37 ; 0x25 + 80059a6: 2029 movs r0, #41 ; 0x29 + 80059a8: f7ff fd2e bl 8005408 LCD_WriteReg(0x002B,0x000D); - 800578c: 210d movs r1, #13 - 800578e: 202b movs r0, #43 ; 0x2b - 8005790: f7ff fd2a bl 80051e8 + 80059ac: 210d movs r1, #13 + 80059ae: 202b movs r0, #43 ; 0x2b + 80059b0: f7ff fd2a bl 8005408 //gamma LCD_WriteReg(0x0030,0x0007); - 8005794: 2107 movs r1, #7 - 8005796: 2030 movs r0, #48 ; 0x30 - 8005798: f7ff fd26 bl 80051e8 + 80059b4: 2107 movs r1, #7 + 80059b6: 2030 movs r0, #48 ; 0x30 + 80059b8: f7ff fd26 bl 8005408 LCD_WriteReg(0x0031,0x0303); - 800579c: f240 3103 movw r1, #771 ; 0x303 - 80057a0: 2031 movs r0, #49 ; 0x31 - 80057a2: f7ff fd21 bl 80051e8 + 80059bc: f240 3103 movw r1, #771 ; 0x303 + 80059c0: 2031 movs r0, #49 ; 0x31 + 80059c2: f7ff fd21 bl 8005408 LCD_WriteReg(0x0032,0x0003);// 0006 - 80057a6: 2103 movs r1, #3 - 80057a8: 2032 movs r0, #50 ; 0x32 - 80057aa: f7ff fd1d bl 80051e8 + 80059c6: 2103 movs r1, #3 + 80059c8: 2032 movs r0, #50 ; 0x32 + 80059ca: f7ff fd1d bl 8005408 LCD_WriteReg(0x0035,0x0206); - 80057ae: f240 2106 movw r1, #518 ; 0x206 - 80057b2: 2035 movs r0, #53 ; 0x35 - 80057b4: f7ff fd18 bl 80051e8 + 80059ce: f240 2106 movw r1, #518 ; 0x206 + 80059d2: 2035 movs r0, #53 ; 0x35 + 80059d4: f7ff fd18 bl 8005408 LCD_WriteReg(0x0036,0x0008); - 80057b8: 2108 movs r1, #8 - 80057ba: 2036 movs r0, #54 ; 0x36 - 80057bc: f7ff fd14 bl 80051e8 + 80059d8: 2108 movs r1, #8 + 80059da: 2036 movs r0, #54 ; 0x36 + 80059dc: f7ff fd14 bl 8005408 LCD_WriteReg(0x0037,0x0406); - 80057c0: f240 4106 movw r1, #1030 ; 0x406 - 80057c4: 2037 movs r0, #55 ; 0x37 - 80057c6: f7ff fd0f bl 80051e8 + 80059e0: f240 4106 movw r1, #1030 ; 0x406 + 80059e4: 2037 movs r0, #55 ; 0x37 + 80059e6: f7ff fd0f bl 8005408 LCD_WriteReg(0x0038,0x0304);//0200 - 80057ca: f44f 7141 mov.w r1, #772 ; 0x304 - 80057ce: 2038 movs r0, #56 ; 0x38 - 80057d0: f7ff fd0a bl 80051e8 + 80059ea: f44f 7141 mov.w r1, #772 ; 0x304 + 80059ee: 2038 movs r0, #56 ; 0x38 + 80059f0: f7ff fd0a bl 8005408 LCD_WriteReg(0x0039,0x0007); - 80057d4: 2107 movs r1, #7 - 80057d6: 2039 movs r0, #57 ; 0x39 - 80057d8: f7ff fd06 bl 80051e8 + 80059f4: 2107 movs r1, #7 + 80059f6: 2039 movs r0, #57 ; 0x39 + 80059f8: f7ff fd06 bl 8005408 LCD_WriteReg(0x003C,0x0602);// 0504 - 80057dc: f240 6102 movw r1, #1538 ; 0x602 - 80057e0: 203c movs r0, #60 ; 0x3c - 80057e2: f7ff fd01 bl 80051e8 + 80059fc: f240 6102 movw r1, #1538 ; 0x602 + 8005a00: 203c movs r0, #60 ; 0x3c + 8005a02: f7ff fd01 bl 8005408 LCD_WriteReg(0x003D,0x0008); - 80057e6: 2108 movs r1, #8 - 80057e8: 203d movs r0, #61 ; 0x3d - 80057ea: f7ff fcfd bl 80051e8 + 8005a06: 2108 movs r1, #8 + 8005a08: 203d movs r0, #61 ; 0x3d + 8005a0a: f7ff fcfd bl 8005408 //ram LCD_WriteReg(0x0050,0x0000); - 80057ee: 2100 movs r1, #0 - 80057f0: 2050 movs r0, #80 ; 0x50 - 80057f2: f7ff fcf9 bl 80051e8 + 8005a0e: 2100 movs r1, #0 + 8005a10: 2050 movs r0, #80 ; 0x50 + 8005a12: f7ff fcf9 bl 8005408 LCD_WriteReg(0x0051,0x00EF); - 80057f6: 21ef movs r1, #239 ; 0xef - 80057f8: 2051 movs r0, #81 ; 0x51 - 80057fa: f7ff fcf5 bl 80051e8 + 8005a16: 21ef movs r1, #239 ; 0xef + 8005a18: 2051 movs r0, #81 ; 0x51 + 8005a1a: f7ff fcf5 bl 8005408 LCD_WriteReg(0x0052,0x0000); - 80057fe: 2100 movs r1, #0 - 8005800: 2052 movs r0, #82 ; 0x52 - 8005802: f7ff fcf1 bl 80051e8 + 8005a1e: 2100 movs r1, #0 + 8005a20: 2052 movs r0, #82 ; 0x52 + 8005a22: f7ff fcf1 bl 8005408 LCD_WriteReg(0x0053,0x013F); - 8005806: f240 113f movw r1, #319 ; 0x13f - 800580a: 2053 movs r0, #83 ; 0x53 - 800580c: f7ff fcec bl 80051e8 + 8005a26: f240 113f movw r1, #319 ; 0x13f + 8005a2a: 2053 movs r0, #83 ; 0x53 + 8005a2c: f7ff fcec bl 8005408 LCD_WriteReg(0x0060,0xA700); - 8005810: f44f 4127 mov.w r1, #42752 ; 0xa700 - 8005814: 2060 movs r0, #96 ; 0x60 - 8005816: f7ff fce7 bl 80051e8 + 8005a30: f44f 4127 mov.w r1, #42752 ; 0xa700 + 8005a34: 2060 movs r0, #96 ; 0x60 + 8005a36: f7ff fce7 bl 8005408 LCD_WriteReg(0x0061,0x0001); - 800581a: 2101 movs r1, #1 - 800581c: 2061 movs r0, #97 ; 0x61 - 800581e: f7ff fce3 bl 80051e8 + 8005a3a: 2101 movs r1, #1 + 8005a3c: 2061 movs r0, #97 ; 0x61 + 8005a3e: f7ff fce3 bl 8005408 LCD_WriteReg(0x006A,0x0000); - 8005822: 2100 movs r1, #0 - 8005824: 206a movs r0, #106 ; 0x6a - 8005826: f7ff fcdf bl 80051e8 + 8005a42: 2100 movs r1, #0 + 8005a44: 206a movs r0, #106 ; 0x6a + 8005a46: f7ff fcdf bl 8005408 // LCD_WriteReg(0x0080,0x0000); - 800582a: 2100 movs r1, #0 - 800582c: 2080 movs r0, #128 ; 0x80 - 800582e: f7ff fcdb bl 80051e8 + 8005a4a: 2100 movs r1, #0 + 8005a4c: 2080 movs r0, #128 ; 0x80 + 8005a4e: f7ff fcdb bl 8005408 LCD_WriteReg(0x0081,0x0000); - 8005832: 2100 movs r1, #0 - 8005834: 2081 movs r0, #129 ; 0x81 - 8005836: f7ff fcd7 bl 80051e8 + 8005a52: 2100 movs r1, #0 + 8005a54: 2081 movs r0, #129 ; 0x81 + 8005a56: f7ff fcd7 bl 8005408 LCD_WriteReg(0x0082,0x0000); - 800583a: 2100 movs r1, #0 - 800583c: 2082 movs r0, #130 ; 0x82 - 800583e: f7ff fcd3 bl 80051e8 + 8005a5a: 2100 movs r1, #0 + 8005a5c: 2082 movs r0, #130 ; 0x82 + 8005a5e: f7ff fcd3 bl 8005408 LCD_WriteReg(0x0083,0x0000); - 8005842: 2100 movs r1, #0 - 8005844: 2083 movs r0, #131 ; 0x83 - 8005846: f7ff fccf bl 80051e8 + 8005a62: 2100 movs r1, #0 + 8005a64: 2083 movs r0, #131 ; 0x83 + 8005a66: f7ff fccf bl 8005408 LCD_WriteReg(0x0084,0x0000); - 800584a: 2100 movs r1, #0 - 800584c: 2084 movs r0, #132 ; 0x84 - 800584e: f7ff fccb bl 80051e8 + 8005a6a: 2100 movs r1, #0 + 8005a6c: 2084 movs r0, #132 ; 0x84 + 8005a6e: f7ff fccb bl 8005408 LCD_WriteReg(0x0085,0x0000); - 8005852: 2100 movs r1, #0 - 8005854: 2085 movs r0, #133 ; 0x85 - 8005856: f7ff fcc7 bl 80051e8 + 8005a72: 2100 movs r1, #0 + 8005a74: 2085 movs r0, #133 ; 0x85 + 8005a76: f7ff fcc7 bl 8005408 // LCD_WriteReg(0x0090,0x0010); - 800585a: 2110 movs r1, #16 - 800585c: 2090 movs r0, #144 ; 0x90 - 800585e: f7ff fcc3 bl 80051e8 + 8005a7a: 2110 movs r1, #16 + 8005a7c: 2090 movs r0, #144 ; 0x90 + 8005a7e: f7ff fcc3 bl 8005408 LCD_WriteReg(0x0092,0x0600); - 8005862: f44f 61c0 mov.w r1, #1536 ; 0x600 - 8005866: 2092 movs r0, #146 ; 0x92 - 8005868: f7ff fcbe bl 80051e8 + 8005a82: f44f 61c0 mov.w r1, #1536 ; 0x600 + 8005a86: 2092 movs r0, #146 ; 0x92 + 8005a88: f7ff fcbe bl 8005408 LCD_WriteReg(0x0007,0x0133); - 800586c: f240 1133 movw r1, #307 ; 0x133 - 8005870: 2007 movs r0, #7 - 8005872: f7ff fcb9 bl 80051e8 + 8005a8c: f240 1133 movw r1, #307 ; 0x133 + 8005a90: 2007 movs r0, #7 + 8005a92: f7ff fcb9 bl 8005408 LCD_WriteReg(0x00,0x0022);// - 8005876: 2122 movs r1, #34 ; 0x22 - 8005878: 2000 movs r0, #0 - 800587a: f7ff fcb5 bl 80051e8 + 8005a96: 2122 movs r1, #34 ; 0x22 + 8005a98: 2000 movs r0, #0 + 8005a9a: f7ff fcb5 bl 8005408 LCD_Display_Dir(1); //ĬÈÏΪhÆÁ - 800587e: 2001 movs r0, #1 - 8005880: f7ff fe4a bl 8005518 + 8005a9e: 2001 movs r0, #1 + 8005aa0: f7ff fe4a bl 8005738 } - 8005884: bf00 nop - 8005886: bd80 pop {r7, pc} - 8005888: 40010c00 .word 0x40010c00 - 800588c: 200007b0 .word 0x200007b0 + 8005aa4: bf00 nop + 8005aa6: bd80 pop {r7, pc} + 8005aa8: 40010c00 .word 0x40010c00 + 8005aac: 20000824 .word 0x20000824 -08005890 : +08005ab0 : //***********************************************************´òµã ¶Áµã ʲôµÄ //ÉèÖùâ±êλÖà //Xpos:ºá×ø±ê //Ypos:×Ý×ø±ê void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos) { - 8005890: b580 push {r7, lr} - 8005892: b082 sub sp, #8 - 8005894: af00 add r7, sp, #0 - 8005896: 4603 mov r3, r0 - 8005898: 460a mov r2, r1 - 800589a: 80fb strh r3, [r7, #6] - 800589c: 4613 mov r3, r2 - 800589e: 80bb strh r3, [r7, #4] + 8005ab0: b580 push {r7, lr} + 8005ab2: b082 sub sp, #8 + 8005ab4: af00 add r7, sp, #0 + 8005ab6: 4603 mov r3, r0 + 8005ab8: 460a mov r2, r1 + 8005aba: 80fb strh r3, [r7, #6] + 8005abc: 4613 mov r3, r2 + 8005abe: 80bb strh r3, [r7, #4] if(lcddev.id==0X9341||lcddev.id==0X5310) - 80058a0: 4b42 ldr r3, [pc, #264] ; (80059ac ) - 80058a2: 889b ldrh r3, [r3, #4] - 80058a4: f249 3241 movw r2, #37697 ; 0x9341 - 80058a8: 4293 cmp r3, r2 - 80058aa: d005 beq.n 80058b8 - 80058ac: 4b3f ldr r3, [pc, #252] ; (80059ac ) - 80058ae: 889b ldrh r3, [r3, #4] - 80058b0: f245 3210 movw r2, #21264 ; 0x5310 - 80058b4: 4293 cmp r3, r2 - 80058b6: d124 bne.n 8005902 + 8005ac0: 4b42 ldr r3, [pc, #264] ; (8005bcc ) + 8005ac2: 889b ldrh r3, [r3, #4] + 8005ac4: f249 3241 movw r2, #37697 ; 0x9341 + 8005ac8: 4293 cmp r3, r2 + 8005aca: d005 beq.n 8005ad8 + 8005acc: 4b3f ldr r3, [pc, #252] ; (8005bcc ) + 8005ace: 889b ldrh r3, [r3, #4] + 8005ad0: f245 3210 movw r2, #21264 ; 0x5310 + 8005ad4: 4293 cmp r3, r2 + 8005ad6: d124 bne.n 8005b22 { LCD_WR_REG(lcddev.setxcmd); - 80058b8: 4b3c ldr r3, [pc, #240] ; (80059ac ) - 80058ba: 7a1b ldrb r3, [r3, #8] - 80058bc: b29b uxth r3, r3 - 80058be: 4618 mov r0, r3 - 80058c0: f7ff fc74 bl 80051ac + 8005ad8: 4b3c ldr r3, [pc, #240] ; (8005bcc ) + 8005ada: 7a1b ldrb r3, [r3, #8] + 8005adc: b29b uxth r3, r3 + 8005ade: 4618 mov r0, r3 + 8005ae0: f7ff fc74 bl 80053cc LCD_WR_DATA(Xpos>>8); - 80058c4: 88fb ldrh r3, [r7, #6] - 80058c6: 0a1b lsrs r3, r3, #8 - 80058c8: b29b uxth r3, r3 - 80058ca: 4618 mov r0, r3 - 80058cc: f7ff fc7c bl 80051c8 + 8005ae4: 88fb ldrh r3, [r7, #6] + 8005ae6: 0a1b lsrs r3, r3, #8 + 8005ae8: b29b uxth r3, r3 + 8005aea: 4618 mov r0, r3 + 8005aec: f7ff fc7c bl 80053e8 LCD_WR_DATA(Xpos&0XFF); - 80058d0: 88fb ldrh r3, [r7, #6] - 80058d2: b2db uxtb r3, r3 - 80058d4: b29b uxth r3, r3 - 80058d6: 4618 mov r0, r3 - 80058d8: f7ff fc76 bl 80051c8 + 8005af0: 88fb ldrh r3, [r7, #6] + 8005af2: b2db uxtb r3, r3 + 8005af4: b29b uxth r3, r3 + 8005af6: 4618 mov r0, r3 + 8005af8: f7ff fc76 bl 80053e8 LCD_WR_REG(lcddev.setycmd); - 80058dc: 4b33 ldr r3, [pc, #204] ; (80059ac ) - 80058de: 7a5b ldrb r3, [r3, #9] - 80058e0: b29b uxth r3, r3 - 80058e2: 4618 mov r0, r3 - 80058e4: f7ff fc62 bl 80051ac + 8005afc: 4b33 ldr r3, [pc, #204] ; (8005bcc ) + 8005afe: 7a5b ldrb r3, [r3, #9] + 8005b00: b29b uxth r3, r3 + 8005b02: 4618 mov r0, r3 + 8005b04: f7ff fc62 bl 80053cc LCD_WR_DATA(Ypos>>8); - 80058e8: 88bb ldrh r3, [r7, #4] - 80058ea: 0a1b lsrs r3, r3, #8 - 80058ec: b29b uxth r3, r3 - 80058ee: 4618 mov r0, r3 - 80058f0: f7ff fc6a bl 80051c8 + 8005b08: 88bb ldrh r3, [r7, #4] + 8005b0a: 0a1b lsrs r3, r3, #8 + 8005b0c: b29b uxth r3, r3 + 8005b0e: 4618 mov r0, r3 + 8005b10: f7ff fc6a bl 80053e8 LCD_WR_DATA(Ypos&0XFF); - 80058f4: 88bb ldrh r3, [r7, #4] - 80058f6: b2db uxtb r3, r3 - 80058f8: b29b uxth r3, r3 - 80058fa: 4618 mov r0, r3 - 80058fc: f7ff fc64 bl 80051c8 + 8005b14: 88bb ldrh r3, [r7, #4] + 8005b16: b2db uxtb r3, r3 + 8005b18: b29b uxth r3, r3 + 8005b1a: 4618 mov r0, r3 + 8005b1c: f7ff fc64 bl 80053e8 { if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//ºáÆÁÆäʵ¾ÍÊǵ÷תx,y×ø±ê LCD_WriteReg(lcddev.setxcmd, Xpos); LCD_WriteReg(lcddev.setycmd, Ypos); } } - 8005900: e050 b.n 80059a4 + 8005b20: e050 b.n 8005bc4 }else if(lcddev.id==0X6804) - 8005902: 4b2a ldr r3, [pc, #168] ; (80059ac ) - 8005904: 889b ldrh r3, [r3, #4] - 8005906: f646 0204 movw r2, #26628 ; 0x6804 - 800590a: 4293 cmp r3, r2 - 800590c: d12f bne.n 800596e + 8005b22: 4b2a ldr r3, [pc, #168] ; (8005bcc ) + 8005b24: 889b ldrh r3, [r3, #4] + 8005b26: f646 0204 movw r2, #26628 ; 0x6804 + 8005b2a: 4293 cmp r3, r2 + 8005b2c: d12f bne.n 8005b8e if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//ºáÆÁʱ´¦Àí - 800590e: 4b27 ldr r3, [pc, #156] ; (80059ac ) - 8005910: 799b ldrb r3, [r3, #6] - 8005912: 2b01 cmp r3, #1 - 8005914: d106 bne.n 8005924 - 8005916: 4b25 ldr r3, [pc, #148] ; (80059ac ) - 8005918: 881a ldrh r2, [r3, #0] - 800591a: 88fb ldrh r3, [r7, #6] - 800591c: 1ad3 subs r3, r2, r3 - 800591e: b29b uxth r3, r3 - 8005920: 3b01 subs r3, #1 - 8005922: 80fb strh r3, [r7, #6] + 8005b2e: 4b27 ldr r3, [pc, #156] ; (8005bcc ) + 8005b30: 799b ldrb r3, [r3, #6] + 8005b32: 2b01 cmp r3, #1 + 8005b34: d106 bne.n 8005b44 + 8005b36: 4b25 ldr r3, [pc, #148] ; (8005bcc ) + 8005b38: 881a ldrh r2, [r3, #0] + 8005b3a: 88fb ldrh r3, [r7, #6] + 8005b3c: 1ad3 subs r3, r2, r3 + 8005b3e: b29b uxth r3, r3 + 8005b40: 3b01 subs r3, #1 + 8005b42: 80fb strh r3, [r7, #6] LCD_WR_REG(lcddev.setxcmd); - 8005924: 4b21 ldr r3, [pc, #132] ; (80059ac ) - 8005926: 7a1b ldrb r3, [r3, #8] - 8005928: b29b uxth r3, r3 - 800592a: 4618 mov r0, r3 - 800592c: f7ff fc3e bl 80051ac + 8005b44: 4b21 ldr r3, [pc, #132] ; (8005bcc ) + 8005b46: 7a1b ldrb r3, [r3, #8] + 8005b48: b29b uxth r3, r3 + 8005b4a: 4618 mov r0, r3 + 8005b4c: f7ff fc3e bl 80053cc LCD_WR_DATA(Xpos>>8); - 8005930: 88fb ldrh r3, [r7, #6] - 8005932: 0a1b lsrs r3, r3, #8 - 8005934: b29b uxth r3, r3 - 8005936: 4618 mov r0, r3 - 8005938: f7ff fc46 bl 80051c8 + 8005b50: 88fb ldrh r3, [r7, #6] + 8005b52: 0a1b lsrs r3, r3, #8 + 8005b54: b29b uxth r3, r3 + 8005b56: 4618 mov r0, r3 + 8005b58: f7ff fc46 bl 80053e8 LCD_WR_DATA(Xpos&0XFF); - 800593c: 88fb ldrh r3, [r7, #6] - 800593e: b2db uxtb r3, r3 - 8005940: b29b uxth r3, r3 - 8005942: 4618 mov r0, r3 - 8005944: f7ff fc40 bl 80051c8 + 8005b5c: 88fb ldrh r3, [r7, #6] + 8005b5e: b2db uxtb r3, r3 + 8005b60: b29b uxth r3, r3 + 8005b62: 4618 mov r0, r3 + 8005b64: f7ff fc40 bl 80053e8 LCD_WR_REG(lcddev.setycmd); - 8005948: 4b18 ldr r3, [pc, #96] ; (80059ac ) - 800594a: 7a5b ldrb r3, [r3, #9] - 800594c: b29b uxth r3, r3 - 800594e: 4618 mov r0, r3 - 8005950: f7ff fc2c bl 80051ac + 8005b68: 4b18 ldr r3, [pc, #96] ; (8005bcc ) + 8005b6a: 7a5b ldrb r3, [r3, #9] + 8005b6c: b29b uxth r3, r3 + 8005b6e: 4618 mov r0, r3 + 8005b70: f7ff fc2c bl 80053cc LCD_WR_DATA(Ypos>>8); - 8005954: 88bb ldrh r3, [r7, #4] - 8005956: 0a1b lsrs r3, r3, #8 - 8005958: b29b uxth r3, r3 - 800595a: 4618 mov r0, r3 - 800595c: f7ff fc34 bl 80051c8 + 8005b74: 88bb ldrh r3, [r7, #4] + 8005b76: 0a1b lsrs r3, r3, #8 + 8005b78: b29b uxth r3, r3 + 8005b7a: 4618 mov r0, r3 + 8005b7c: f7ff fc34 bl 80053e8 LCD_WR_DATA(Ypos&0XFF); - 8005960: 88bb ldrh r3, [r7, #4] - 8005962: b2db uxtb r3, r3 - 8005964: b29b uxth r3, r3 - 8005966: 4618 mov r0, r3 - 8005968: f7ff fc2e bl 80051c8 + 8005b80: 88bb ldrh r3, [r7, #4] + 8005b82: b2db uxtb r3, r3 + 8005b84: b29b uxth r3, r3 + 8005b86: 4618 mov r0, r3 + 8005b88: f7ff fc2e bl 80053e8 } - 800596c: e01a b.n 80059a4 + 8005b8c: e01a b.n 8005bc4 if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//ºáÆÁÆäʵ¾ÍÊǵ÷תx,y×ø±ê - 800596e: 4b0f ldr r3, [pc, #60] ; (80059ac ) - 8005970: 799b ldrb r3, [r3, #6] - 8005972: 2b01 cmp r3, #1 - 8005974: d106 bne.n 8005984 - 8005976: 4b0d ldr r3, [pc, #52] ; (80059ac ) - 8005978: 881a ldrh r2, [r3, #0] - 800597a: 88fb ldrh r3, [r7, #6] - 800597c: 1ad3 subs r3, r2, r3 - 800597e: b29b uxth r3, r3 - 8005980: 3b01 subs r3, #1 - 8005982: 80fb strh r3, [r7, #6] + 8005b8e: 4b0f ldr r3, [pc, #60] ; (8005bcc ) + 8005b90: 799b ldrb r3, [r3, #6] + 8005b92: 2b01 cmp r3, #1 + 8005b94: d106 bne.n 8005ba4 + 8005b96: 4b0d ldr r3, [pc, #52] ; (8005bcc ) + 8005b98: 881a ldrh r2, [r3, #0] + 8005b9a: 88fb ldrh r3, [r7, #6] + 8005b9c: 1ad3 subs r3, r2, r3 + 8005b9e: b29b uxth r3, r3 + 8005ba0: 3b01 subs r3, #1 + 8005ba2: 80fb strh r3, [r7, #6] LCD_WriteReg(lcddev.setxcmd, Xpos); - 8005984: 4b09 ldr r3, [pc, #36] ; (80059ac ) - 8005986: 7a1b ldrb r3, [r3, #8] - 8005988: b29b uxth r3, r3 - 800598a: 88fa ldrh r2, [r7, #6] - 800598c: 4611 mov r1, r2 - 800598e: 4618 mov r0, r3 - 8005990: f7ff fc2a bl 80051e8 + 8005ba4: 4b09 ldr r3, [pc, #36] ; (8005bcc ) + 8005ba6: 7a1b ldrb r3, [r3, #8] + 8005ba8: b29b uxth r3, r3 + 8005baa: 88fa ldrh r2, [r7, #6] + 8005bac: 4611 mov r1, r2 + 8005bae: 4618 mov r0, r3 + 8005bb0: f7ff fc2a bl 8005408 LCD_WriteReg(lcddev.setycmd, Ypos); - 8005994: 4b05 ldr r3, [pc, #20] ; (80059ac ) - 8005996: 7a5b ldrb r3, [r3, #9] - 8005998: b29b uxth r3, r3 - 800599a: 88ba ldrh r2, [r7, #4] - 800599c: 4611 mov r1, r2 - 800599e: 4618 mov r0, r3 - 80059a0: f7ff fc22 bl 80051e8 + 8005bb4: 4b05 ldr r3, [pc, #20] ; (8005bcc ) + 8005bb6: 7a5b ldrb r3, [r3, #9] + 8005bb8: b29b uxth r3, r3 + 8005bba: 88ba ldrh r2, [r7, #4] + 8005bbc: 4611 mov r1, r2 + 8005bbe: 4618 mov r0, r3 + 8005bc0: f7ff fc22 bl 8005408 } - 80059a4: bf00 nop - 80059a6: 3708 adds r7, #8 - 80059a8: 46bd mov sp, r7 - 80059aa: bd80 pop {r7, pc} - 80059ac: 200007b0 .word 0x200007b0 + 8005bc4: bf00 nop + 8005bc6: 3708 adds r7, #8 + 8005bc8: 46bd mov sp, r7 + 8005bca: bd80 pop {r7, pc} + 8005bcc: 20000824 .word 0x20000824 -080059b0 : +08005bd0 : } //»­µã //x,y:×ø±ê //POINT_COLOR:´ËµãµÄÑÕÉ« void LCD_set_dot(uint16_t x,uint16_t y,uint16_t color) { - 80059b0: b580 push {r7, lr} - 80059b2: b082 sub sp, #8 - 80059b4: af00 add r7, sp, #0 - 80059b6: 4603 mov r3, r0 - 80059b8: 80fb strh r3, [r7, #6] - 80059ba: 460b mov r3, r1 - 80059bc: 80bb strh r3, [r7, #4] - 80059be: 4613 mov r3, r2 - 80059c0: 807b strh r3, [r7, #2] + 8005bd0: b580 push {r7, lr} + 8005bd2: b082 sub sp, #8 + 8005bd4: af00 add r7, sp, #0 + 8005bd6: 4603 mov r3, r0 + 8005bd8: 80fb strh r3, [r7, #6] + 8005bda: 460b mov r3, r1 + 8005bdc: 80bb strh r3, [r7, #4] + 8005bde: 4613 mov r3, r2 + 8005be0: 807b strh r3, [r7, #2] LCD_SetCursor(x,y); //ÉèÖùâ±êλÖà - 80059c2: 88ba ldrh r2, [r7, #4] - 80059c4: 88fb ldrh r3, [r7, #6] - 80059c6: 4611 mov r1, r2 - 80059c8: 4618 mov r0, r3 - 80059ca: f7ff ff61 bl 8005890 + 8005be2: 88ba ldrh r2, [r7, #4] + 8005be4: 88fb ldrh r3, [r7, #6] + 8005be6: 4611 mov r1, r2 + 8005be8: 4618 mov r0, r3 + 8005bea: f7ff ff61 bl 8005ab0 LCD_REG_ADDRESS=lcddev.wramcmd; //¿ªÊ¼Ð´ÈëGRAM - 80059ce: 4b06 ldr r3, [pc, #24] ; (80059e8 ) - 80059d0: 79da ldrb r2, [r3, #7] - 80059d2: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 - 80059d6: b292 uxth r2, r2 - 80059d8: 801a strh r2, [r3, #0] + 8005bee: 4b06 ldr r3, [pc, #24] ; (8005c08 ) + 8005bf0: 79da ldrb r2, [r3, #7] + 8005bf2: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 + 8005bf6: b292 uxth r2, r2 + 8005bf8: 801a strh r2, [r3, #0] LCD_DATA_ADDRESS=color; - 80059da: 4a04 ldr r2, [pc, #16] ; (80059ec ) - 80059dc: 887b ldrh r3, [r7, #2] - 80059de: 8013 strh r3, [r2, #0] + 8005bfa: 4a04 ldr r2, [pc, #16] ; (8005c0c ) + 8005bfc: 887b ldrh r3, [r7, #2] + 8005bfe: 8013 strh r3, [r2, #0] } - 80059e0: bf00 nop - 80059e2: 3708 adds r7, #8 - 80059e4: 46bd mov sp, r7 - 80059e6: bd80 pop {r7, pc} - 80059e8: 200007b0 .word 0x200007b0 - 80059ec: 6c000800 .word 0x6c000800 + 8005c00: bf00 nop + 8005c02: 3708 adds r7, #8 + 8005c04: 46bd mov sp, r7 + 8005c06: bd80 pop {r7, pc} + 8005c08: 20000824 .word 0x20000824 + 8005c0c: 6c000800 .word 0x6c000800 -080059f0 : +08005c10 : //ÇåÆÁº¯Êý //color:ÒªÇåÆÁµÄÌî³äÉ« void LCD_Clear(uint16_t color) { - 80059f0: b580 push {r7, lr} - 80059f2: b084 sub sp, #16 - 80059f4: af00 add r7, sp, #0 - 80059f6: 4603 mov r3, r0 - 80059f8: 80fb strh r3, [r7, #6] + 8005c10: b580 push {r7, lr} + 8005c12: b084 sub sp, #16 + 8005c14: af00 add r7, sp, #0 + 8005c16: 4603 mov r3, r0 + 8005c18: 80fb strh r3, [r7, #6] uint32_t index=0; - 80059fa: 2300 movs r3, #0 - 80059fc: 60fb str r3, [r7, #12] + 8005c1a: 2300 movs r3, #0 + 8005c1c: 60fb str r3, [r7, #12] uint32_t totalpoint=lcddev.width; - 80059fe: 4b23 ldr r3, [pc, #140] ; (8005a8c ) - 8005a00: 881b ldrh r3, [r3, #0] - 8005a02: 60bb str r3, [r7, #8] + 8005c1e: 4b23 ldr r3, [pc, #140] ; (8005cac ) + 8005c20: 881b ldrh r3, [r3, #0] + 8005c22: 60bb str r3, [r7, #8] totalpoint*=lcddev.height; //µÃµ½×ܵãÊý - 8005a04: 4b21 ldr r3, [pc, #132] ; (8005a8c ) - 8005a06: 885b ldrh r3, [r3, #2] - 8005a08: 461a mov r2, r3 - 8005a0a: 68bb ldr r3, [r7, #8] - 8005a0c: fb02 f303 mul.w r3, r2, r3 - 8005a10: 60bb str r3, [r7, #8] + 8005c24: 4b21 ldr r3, [pc, #132] ; (8005cac ) + 8005c26: 885b ldrh r3, [r3, #2] + 8005c28: 461a mov r2, r3 + 8005c2a: 68bb ldr r3, [r7, #8] + 8005c2c: fb02 f303 mul.w r3, r2, r3 + 8005c30: 60bb str r3, [r7, #8] if((lcddev.id==0X6804)&&(lcddev.dir==1))//6804ºáÆÁµÄʱºòÌØÊâ´¦Àí - 8005a12: 4b1e ldr r3, [pc, #120] ; (8005a8c ) - 8005a14: 889b ldrh r3, [r3, #4] - 8005a16: f646 0204 movw r2, #26628 ; 0x6804 - 8005a1a: 4293 cmp r3, r2 - 8005a1c: d11a bne.n 8005a54 - 8005a1e: 4b1b ldr r3, [pc, #108] ; (8005a8c ) - 8005a20: 799b ldrb r3, [r3, #6] - 8005a22: 2b01 cmp r3, #1 - 8005a24: d116 bne.n 8005a54 + 8005c32: 4b1e ldr r3, [pc, #120] ; (8005cac ) + 8005c34: 889b ldrh r3, [r3, #4] + 8005c36: f646 0204 movw r2, #26628 ; 0x6804 + 8005c3a: 4293 cmp r3, r2 + 8005c3c: d11a bne.n 8005c74 + 8005c3e: 4b1b ldr r3, [pc, #108] ; (8005cac ) + 8005c40: 799b ldrb r3, [r3, #6] + 8005c42: 2b01 cmp r3, #1 + 8005c44: d116 bne.n 8005c74 { lcddev.dir=0; - 8005a26: 4b19 ldr r3, [pc, #100] ; (8005a8c ) - 8005a28: 2200 movs r2, #0 - 8005a2a: 719a strb r2, [r3, #6] + 8005c46: 4b19 ldr r3, [pc, #100] ; (8005cac ) + 8005c48: 2200 movs r2, #0 + 8005c4a: 719a strb r2, [r3, #6] lcddev.setxcmd=0X2A; - 8005a2c: 4b17 ldr r3, [pc, #92] ; (8005a8c ) - 8005a2e: 222a movs r2, #42 ; 0x2a - 8005a30: 721a strb r2, [r3, #8] + 8005c4c: 4b17 ldr r3, [pc, #92] ; (8005cac ) + 8005c4e: 222a movs r2, #42 ; 0x2a + 8005c50: 721a strb r2, [r3, #8] lcddev.setycmd=0X2B; - 8005a32: 4b16 ldr r3, [pc, #88] ; (8005a8c ) - 8005a34: 222b movs r2, #43 ; 0x2b - 8005a36: 725a strb r2, [r3, #9] + 8005c52: 4b16 ldr r3, [pc, #88] ; (8005cac ) + 8005c54: 222b movs r2, #43 ; 0x2b + 8005c56: 725a strb r2, [r3, #9] LCD_SetCursor(0x00,0x0000); //ÉèÖùâ±êλÖà - 8005a38: 2100 movs r1, #0 - 8005a3a: 2000 movs r0, #0 - 8005a3c: f7ff ff28 bl 8005890 + 8005c58: 2100 movs r1, #0 + 8005c5a: 2000 movs r0, #0 + 8005c5c: f7ff ff28 bl 8005ab0 lcddev.dir=1; - 8005a40: 4b12 ldr r3, [pc, #72] ; (8005a8c ) - 8005a42: 2201 movs r2, #1 - 8005a44: 719a strb r2, [r3, #6] + 8005c60: 4b12 ldr r3, [pc, #72] ; (8005cac ) + 8005c62: 2201 movs r2, #1 + 8005c64: 719a strb r2, [r3, #6] lcddev.setxcmd=0X2B; - 8005a46: 4b11 ldr r3, [pc, #68] ; (8005a8c ) - 8005a48: 222b movs r2, #43 ; 0x2b - 8005a4a: 721a strb r2, [r3, #8] + 8005c66: 4b11 ldr r3, [pc, #68] ; (8005cac ) + 8005c68: 222b movs r2, #43 ; 0x2b + 8005c6a: 721a strb r2, [r3, #8] lcddev.setycmd=0X2A; - 8005a4c: 4b0f ldr r3, [pc, #60] ; (8005a8c ) - 8005a4e: 222a movs r2, #42 ; 0x2a - 8005a50: 725a strb r2, [r3, #9] - 8005a52: e003 b.n 8005a5c + 8005c6c: 4b0f ldr r3, [pc, #60] ; (8005cac ) + 8005c6e: 222a movs r2, #42 ; 0x2a + 8005c70: 725a strb r2, [r3, #9] + 8005c72: e003 b.n 8005c7c }else LCD_SetCursor(0x00,0x0000); //ÉèÖùâ±êλÖà - 8005a54: 2100 movs r1, #0 - 8005a56: 2000 movs r0, #0 - 8005a58: f7ff ff1a bl 8005890 + 8005c74: 2100 movs r1, #0 + 8005c76: 2000 movs r0, #0 + 8005c78: f7ff ff1a bl 8005ab0 LCD_REG_ADDRESS=lcddev.wramcmd; //¿ªÊ¼Ð´ÈëGRAM - 8005a5c: 4b0b ldr r3, [pc, #44] ; (8005a8c ) - 8005a5e: 79da ldrb r2, [r3, #7] - 8005a60: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 - 8005a64: b292 uxth r2, r2 - 8005a66: 801a strh r2, [r3, #0] + 8005c7c: 4b0b ldr r3, [pc, #44] ; (8005cac ) + 8005c7e: 79da ldrb r2, [r3, #7] + 8005c80: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 + 8005c84: b292 uxth r2, r2 + 8005c86: 801a strh r2, [r3, #0] for(index=0;index + 8005c88: 2300 movs r3, #0 + 8005c8a: 60fb str r3, [r7, #12] + 8005c8c: e005 b.n 8005c9a { LCD_DATA_ADDRESS=color; - 8005a6e: 4a08 ldr r2, [pc, #32] ; (8005a90 ) - 8005a70: 88fb ldrh r3, [r7, #6] - 8005a72: 8013 strh r3, [r2, #0] + 8005c8e: 4a08 ldr r2, [pc, #32] ; (8005cb0 ) + 8005c90: 88fb ldrh r3, [r7, #6] + 8005c92: 8013 strh r3, [r2, #0] for(index=0;index + 8005c94: 68fb ldr r3, [r7, #12] + 8005c96: 3301 adds r3, #1 + 8005c98: 60fb str r3, [r7, #12] + 8005c9a: 68fa ldr r2, [r7, #12] + 8005c9c: 68bb ldr r3, [r7, #8] + 8005c9e: 429a cmp r2, r3 + 8005ca0: d3f5 bcc.n 8005c8e } } - 8005a82: bf00 nop - 8005a84: bf00 nop - 8005a86: 3710 adds r7, #16 - 8005a88: 46bd mov sp, r7 - 8005a8a: bd80 pop {r7, pc} - 8005a8c: 200007b0 .word 0x200007b0 - 8005a90: 6c000800 .word 0x6c000800 + 8005ca2: bf00 nop + 8005ca4: bf00 nop + 8005ca6: 3710 adds r7, #16 + 8005ca8: 46bd mov sp, r7 + 8005caa: bd80 pop {r7, pc} + 8005cac: 20000824 .word 0x20000824 + 8005cb0: 6c000800 .word 0x6c000800 -08005a94 : +08005cb4 : //³õʼ»¯×ÖÌå //·µ»ØÖµ:0,×Ö¿âÍêºÃ. // ÆäËû,×ֿⶪʧ uint8_t font_init(void) { - 8005a94: b580 push {r7, lr} - 8005a96: b082 sub sp, #8 - 8005a98: af00 add r7, sp, #0 + 8005cb4: b580 push {r7, lr} + 8005cb6: b082 sub sp, #8 + 8005cb8: af00 add r7, sp, #0 uint8_t t=0; - 8005a9a: 2300 movs r3, #0 - 8005a9c: 71fb strb r3, [r7, #7] + 8005cba: 2300 movs r3, #0 + 8005cbc: 71fb strb r3, [r7, #7] while(t<10)//Á¬Ðø¶ÁÈ¡10´Î,¶¼ÊÇ´íÎó,˵Ã÷ȷʵÊÇÓÐÎÊÌâ,µÃ¸üÐÂ×Ö¿âÁË - 8005a9e: e014 b.n 8005aca + 8005cbe: e014 b.n 8005cea { t++; - 8005aa0: 79fb ldrb r3, [r7, #7] - 8005aa2: 3301 adds r3, #1 - 8005aa4: 71fb strb r3, [r7, #7] + 8005cc0: 79fb ldrb r3, [r7, #7] + 8005cc2: 3301 adds r3, #1 + 8005cc4: 71fb strb r3, [r7, #7] W25QXX_Read((uint8_t*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//¶Á³öftinfo½á¹¹ÌåÊý¾Ý - 8005aa6: 2224 movs r2, #36 ; 0x24 - 8005aa8: f44f 0180 mov.w r1, #4194304 ; 0x400000 - 8005aac: 480d ldr r0, [pc, #52] ; (8005ae4 ) - 8005aae: f7fe fe71 bl 8004794 + 8005cc6: 2224 movs r2, #36 ; 0x24 + 8005cc8: f44f 0180 mov.w r1, #4194304 ; 0x400000 + 8005ccc: 480d ldr r0, [pc, #52] ; (8005d04 ) + 8005cce: f7fe fe5d bl 800498c if(ftinfo.fontok==0XAA) - 8005ab2: 4b0c ldr r3, [pc, #48] ; (8005ae4 ) - 8005ab4: 781b ldrb r3, [r3, #0] - 8005ab6: 2baa cmp r3, #170 ; 0xaa - 8005ab8: d107 bne.n 8005aca + 8005cd2: 4b0c ldr r3, [pc, #48] ; (8005d04 ) + 8005cd4: 781b ldrb r3, [r3, #0] + 8005cd6: 2baa cmp r3, #170 ; 0xaa + 8005cd8: d107 bne.n 8005cea { ftinfo.f12addr=0x0042a929; - 8005aba: 4b0a ldr r3, [pc, #40] ; (8005ae4 ) - 8005abc: 4a0a ldr r2, [pc, #40] ; (8005ae8 ) - 8005abe: 60da str r2, [r3, #12] + 8005cda: 4b0a ldr r3, [pc, #40] ; (8005d04 ) + 8005cdc: 4a0a ldr r2, [pc, #40] ; (8005d08 ) + 8005cde: 60da str r2, [r3, #12] ftinfo.f16addr=0x004b6d89; - 8005ac0: 4b08 ldr r3, [pc, #32] ; (8005ae4 ) - 8005ac2: 4a0a ldr r2, [pc, #40] ; (8005aec ) - 8005ac4: 615a str r2, [r3, #20] + 8005ce0: 4b08 ldr r3, [pc, #32] ; (8005d04 ) + 8005ce2: 4a0a ldr r2, [pc, #40] ; (8005d0c ) + 8005ce4: 615a str r2, [r3, #20] return 0; - 8005ac6: 2300 movs r3, #0 - 8005ac8: e008 b.n 8005adc + 8005ce6: 2300 movs r3, #0 + 8005ce8: e008 b.n 8005cfc while(t<10)//Á¬Ðø¶ÁÈ¡10´Î,¶¼ÊÇ´íÎó,˵Ã÷ȷʵÊÇÓÐÎÊÌâ,µÃ¸üÐÂ×Ö¿âÁË - 8005aca: 79fb ldrb r3, [r7, #7] - 8005acc: 2b09 cmp r3, #9 - 8005ace: d9e7 bls.n 8005aa0 + 8005cea: 79fb ldrb r3, [r7, #7] + 8005cec: 2b09 cmp r3, #9 + 8005cee: d9e7 bls.n 8005cc0 } } if(ftinfo.fontok!=0XAA)return 1; - 8005ad0: 4b04 ldr r3, [pc, #16] ; (8005ae4 ) - 8005ad2: 781b ldrb r3, [r3, #0] - 8005ad4: 2baa cmp r3, #170 ; 0xaa - 8005ad6: d001 beq.n 8005adc - 8005ad8: 2301 movs r3, #1 - 8005ada: e7ff b.n 8005adc + 8005cf0: 4b04 ldr r3, [pc, #16] ; (8005d04 ) + 8005cf2: 781b ldrb r3, [r3, #0] + 8005cf4: 2baa cmp r3, #170 ; 0xaa + 8005cf6: d001 beq.n 8005cfc + 8005cf8: 2301 movs r3, #1 + 8005cfa: e7ff b.n 8005cfc } - 8005adc: 4618 mov r0, r3 - 8005ade: 3708 adds r7, #8 - 8005ae0: 46bd mov sp, r7 - 8005ae2: bd80 pop {r7, pc} - 8005ae4: 200007bc .word 0x200007bc - 8005ae8: 0042a929 .word 0x0042a929 - 8005aec: 004b6d89 .word 0x004b6d89 + 8005cfc: 4618 mov r0, r3 + 8005cfe: 3708 adds r7, #8 + 8005d00: 46bd mov sp, r7 + 8005d02: bd80 pop {r7, pc} + 8005d04: 20000830 .word 0x20000830 + 8005d08: 0042a929 .word 0x0042a929 + 8005d0c: 004b6d89 .word 0x004b6d89 -08005af0 : +08005d10 : //´Ó×Ö¿âÖвéÕÒ³ö×ÖÄ£ //code ×Ö·û´®µÄ¿ªÊ¼µØÖ·,GBKÂë //mat Êý¾Ý´æ·ÅµØÖ· (size/8+((size%8)?1:0))*(size) bytes´óС //size:×ÖÌå´óС void Get_HzMat(unsigned char *code,unsigned char *mat,uint8_t size) { - 8005af0: b580 push {r7, lr} - 8005af2: b086 sub sp, #24 - 8005af4: af00 add r7, sp, #0 - 8005af6: 60f8 str r0, [r7, #12] - 8005af8: 60b9 str r1, [r7, #8] - 8005afa: 4613 mov r3, r2 - 8005afc: 71fb strb r3, [r7, #7] + 8005d10: b580 push {r7, lr} + 8005d12: b086 sub sp, #24 + 8005d14: af00 add r7, sp, #0 + 8005d16: 60f8 str r0, [r7, #12] + 8005d18: 60b9 str r1, [r7, #8] + 8005d1a: 4613 mov r3, r2 + 8005d1c: 71fb strb r3, [r7, #7] unsigned char qh,ql; unsigned char i; unsigned long foffset; uint8_t csize=(size/8+((size%8)?1:0))*(size);//µÃµ½×ÖÌåÒ»¸ö×Ö·û¶ÔÓ¦µãÕó¼¯ËùÕ¼µÄ×Ö½ÚÊý - 8005afe: 79fb ldrb r3, [r7, #7] - 8005b00: 08db lsrs r3, r3, #3 - 8005b02: b2db uxtb r3, r3 - 8005b04: 461a mov r2, r3 - 8005b06: 79fb ldrb r3, [r7, #7] - 8005b08: f003 0307 and.w r3, r3, #7 - 8005b0c: b2db uxtb r3, r3 - 8005b0e: 2b00 cmp r3, #0 - 8005b10: bf14 ite ne - 8005b12: 2301 movne r3, #1 - 8005b14: 2300 moveq r3, #0 - 8005b16: b2db uxtb r3, r3 - 8005b18: 4413 add r3, r2 - 8005b1a: b2db uxtb r3, r3 - 8005b1c: 79fa ldrb r2, [r7, #7] - 8005b1e: fb02 f303 mul.w r3, r2, r3 - 8005b22: 757b strb r3, [r7, #21] + 8005d1e: 79fb ldrb r3, [r7, #7] + 8005d20: 08db lsrs r3, r3, #3 + 8005d22: b2db uxtb r3, r3 + 8005d24: 461a mov r2, r3 + 8005d26: 79fb ldrb r3, [r7, #7] + 8005d28: f003 0307 and.w r3, r3, #7 + 8005d2c: b2db uxtb r3, r3 + 8005d2e: 2b00 cmp r3, #0 + 8005d30: bf14 ite ne + 8005d32: 2301 movne r3, #1 + 8005d34: 2300 moveq r3, #0 + 8005d36: b2db uxtb r3, r3 + 8005d38: 4413 add r3, r2 + 8005d3a: b2db uxtb r3, r3 + 8005d3c: 79fa ldrb r2, [r7, #7] + 8005d3e: fb02 f303 mul.w r3, r2, r3 + 8005d42: 757b strb r3, [r7, #21] qh=*code; - 8005b24: 68fb ldr r3, [r7, #12] - 8005b26: 781b ldrb r3, [r3, #0] - 8005b28: 753b strb r3, [r7, #20] + 8005d44: 68fb ldr r3, [r7, #12] + 8005d46: 781b ldrb r3, [r3, #0] + 8005d48: 753b strb r3, [r7, #20] ql=*(++code); - 8005b2a: 68fb ldr r3, [r7, #12] - 8005b2c: 3301 adds r3, #1 - 8005b2e: 60fb str r3, [r7, #12] - 8005b30: 68fb ldr r3, [r7, #12] - 8005b32: 781b ldrb r3, [r3, #0] - 8005b34: 75fb strb r3, [r7, #23] + 8005d4a: 68fb ldr r3, [r7, #12] + 8005d4c: 3301 adds r3, #1 + 8005d4e: 60fb str r3, [r7, #12] + 8005d50: 68fb ldr r3, [r7, #12] + 8005d52: 781b ldrb r3, [r3, #0] + 8005d54: 75fb strb r3, [r7, #23] if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//·Ç ³£Óúº×Ö - 8005b36: 7d3b ldrb r3, [r7, #20] - 8005b38: 2b80 cmp r3, #128 ; 0x80 - 8005b3a: d908 bls.n 8005b4e - 8005b3c: 7dfb ldrb r3, [r7, #23] - 8005b3e: 2b3f cmp r3, #63 ; 0x3f - 8005b40: d905 bls.n 8005b4e - 8005b42: 7dfb ldrb r3, [r7, #23] - 8005b44: 2bff cmp r3, #255 ; 0xff - 8005b46: d002 beq.n 8005b4e - 8005b48: 7d3b ldrb r3, [r7, #20] - 8005b4a: 2bff cmp r3, #255 ; 0xff - 8005b4c: d10f bne.n 8005b6e + 8005d56: 7d3b ldrb r3, [r7, #20] + 8005d58: 2b80 cmp r3, #128 ; 0x80 + 8005d5a: d908 bls.n 8005d6e + 8005d5c: 7dfb ldrb r3, [r7, #23] + 8005d5e: 2b3f cmp r3, #63 ; 0x3f + 8005d60: d905 bls.n 8005d6e + 8005d62: 7dfb ldrb r3, [r7, #23] + 8005d64: 2bff cmp r3, #255 ; 0xff + 8005d66: d002 beq.n 8005d6e + 8005d68: 7d3b ldrb r3, [r7, #20] + 8005d6a: 2bff cmp r3, #255 ; 0xff + 8005d6c: d10f bne.n 8005d8e { for(i=0;i - 8005b54: 68bb ldr r3, [r7, #8] - 8005b56: 1c5a adds r2, r3, #1 - 8005b58: 60ba str r2, [r7, #8] - 8005b5a: 2200 movs r2, #0 - 8005b5c: 701a strb r2, [r3, #0] - 8005b5e: 7dbb ldrb r3, [r7, #22] - 8005b60: 3301 adds r3, #1 - 8005b62: 75bb strb r3, [r7, #22] - 8005b64: 7dba ldrb r2, [r7, #22] - 8005b66: 7d7b ldrb r3, [r7, #21] - 8005b68: 429a cmp r2, r3 - 8005b6a: d3f3 bcc.n 8005b54 + 8005d6e: 2300 movs r3, #0 + 8005d70: 75bb strb r3, [r7, #22] + 8005d72: e007 b.n 8005d84 + 8005d74: 68bb ldr r3, [r7, #8] + 8005d76: 1c5a adds r2, r3, #1 + 8005d78: 60ba str r2, [r7, #8] + 8005d7a: 2200 movs r2, #0 + 8005d7c: 701a strb r2, [r3, #0] + 8005d7e: 7dbb ldrb r3, [r7, #22] + 8005d80: 3301 adds r3, #1 + 8005d82: 75bb strb r3, [r7, #22] + 8005d84: 7dba ldrb r2, [r7, #22] + 8005d86: 7d7b ldrb r3, [r7, #21] + 8005d88: 429a cmp r2, r3 + 8005d8a: d3f3 bcc.n 8005d74 return; //½áÊø·ÃÎÊ - 8005b6c: e041 b.n 8005bf2 + 8005d8c: e041 b.n 8005e12 } if(ql<0x7f)ql-=0x40;//×¢Òâ! - 8005b6e: 7dfb ldrb r3, [r7, #23] - 8005b70: 2b7e cmp r3, #126 ; 0x7e - 8005b72: d803 bhi.n 8005b7c - 8005b74: 7dfb ldrb r3, [r7, #23] - 8005b76: 3b40 subs r3, #64 ; 0x40 - 8005b78: 75fb strb r3, [r7, #23] - 8005b7a: e002 b.n 8005b82 + 8005d8e: 7dfb ldrb r3, [r7, #23] + 8005d90: 2b7e cmp r3, #126 ; 0x7e + 8005d92: d803 bhi.n 8005d9c + 8005d94: 7dfb ldrb r3, [r7, #23] + 8005d96: 3b40 subs r3, #64 ; 0x40 + 8005d98: 75fb strb r3, [r7, #23] + 8005d9a: e002 b.n 8005da2 else ql-=0x41; - 8005b7c: 7dfb ldrb r3, [r7, #23] - 8005b7e: 3b41 subs r3, #65 ; 0x41 - 8005b80: 75fb strb r3, [r7, #23] + 8005d9c: 7dfb ldrb r3, [r7, #23] + 8005d9e: 3b41 subs r3, #65 ; 0x41 + 8005da0: 75fb strb r3, [r7, #23] qh-=0x81; - 8005b82: 7d3b ldrb r3, [r7, #20] - 8005b84: 337f adds r3, #127 ; 0x7f - 8005b86: 753b strb r3, [r7, #20] + 8005da2: 7d3b ldrb r3, [r7, #20] + 8005da4: 337f adds r3, #127 ; 0x7f + 8005da6: 753b strb r3, [r7, #20] foffset=((unsigned long)190*qh+ql)*csize; //µÃµ½×Ö¿âÖеÄ×Ö½ÚÆ«ÒÆÁ¿ - 8005b88: 7d3b ldrb r3, [r7, #20] - 8005b8a: 22be movs r2, #190 ; 0xbe - 8005b8c: fb02 f203 mul.w r2, r2, r3 - 8005b90: 7dfb ldrb r3, [r7, #23] - 8005b92: 4413 add r3, r2 - 8005b94: 7d7a ldrb r2, [r7, #21] - 8005b96: fb02 f303 mul.w r3, r2, r3 - 8005b9a: 613b str r3, [r7, #16] + 8005da8: 7d3b ldrb r3, [r7, #20] + 8005daa: 22be movs r2, #190 ; 0xbe + 8005dac: fb02 f203 mul.w r2, r2, r3 + 8005db0: 7dfb ldrb r3, [r7, #23] + 8005db2: 4413 add r3, r2 + 8005db4: 7d7a ldrb r2, [r7, #21] + 8005db6: fb02 f303 mul.w r3, r2, r3 + 8005dba: 613b str r3, [r7, #16] switch(size) - 8005b9c: 79fb ldrb r3, [r7, #7] - 8005b9e: 2b18 cmp r3, #24 - 8005ba0: d01c beq.n 8005bdc - 8005ba2: 2b18 cmp r3, #24 - 8005ba4: dc25 bgt.n 8005bf2 - 8005ba6: 2b0c cmp r3, #12 - 8005ba8: d002 beq.n 8005bb0 - 8005baa: 2b10 cmp r3, #16 - 8005bac: d00b beq.n 8005bc6 - 8005bae: e020 b.n 8005bf2 + 8005dbc: 79fb ldrb r3, [r7, #7] + 8005dbe: 2b18 cmp r3, #24 + 8005dc0: d01c beq.n 8005dfc + 8005dc2: 2b18 cmp r3, #24 + 8005dc4: dc25 bgt.n 8005e12 + 8005dc6: 2b0c cmp r3, #12 + 8005dc8: d002 beq.n 8005dd0 + 8005dca: 2b10 cmp r3, #16 + 8005dcc: d00b beq.n 8005de6 + 8005dce: e020 b.n 8005e12 { case 12: W25QXX_Read(mat,foffset+ftinfo.f12addr,csize); - 8005bb0: 4b11 ldr r3, [pc, #68] ; (8005bf8 ) - 8005bb2: 68da ldr r2, [r3, #12] - 8005bb4: 693b ldr r3, [r7, #16] - 8005bb6: 4413 add r3, r2 - 8005bb8: 7d7a ldrb r2, [r7, #21] - 8005bba: b292 uxth r2, r2 - 8005bbc: 4619 mov r1, r3 - 8005bbe: 68b8 ldr r0, [r7, #8] - 8005bc0: f7fe fde8 bl 8004794 + 8005dd0: 4b11 ldr r3, [pc, #68] ; (8005e18 ) + 8005dd2: 68da ldr r2, [r3, #12] + 8005dd4: 693b ldr r3, [r7, #16] + 8005dd6: 4413 add r3, r2 + 8005dd8: 7d7a ldrb r2, [r7, #21] + 8005dda: b292 uxth r2, r2 + 8005ddc: 4619 mov r1, r3 + 8005dde: 68b8 ldr r0, [r7, #8] + 8005de0: f7fe fdd4 bl 800498c break; - 8005bc4: e015 b.n 8005bf2 + 8005de4: e015 b.n 8005e12 case 16: W25QXX_Read(mat,foffset+ftinfo.f16addr,csize); - 8005bc6: 4b0c ldr r3, [pc, #48] ; (8005bf8 ) - 8005bc8: 695a ldr r2, [r3, #20] - 8005bca: 693b ldr r3, [r7, #16] - 8005bcc: 4413 add r3, r2 - 8005bce: 7d7a ldrb r2, [r7, #21] - 8005bd0: b292 uxth r2, r2 - 8005bd2: 4619 mov r1, r3 - 8005bd4: 68b8 ldr r0, [r7, #8] - 8005bd6: f7fe fddd bl 8004794 + 8005de6: 4b0c ldr r3, [pc, #48] ; (8005e18 ) + 8005de8: 695a ldr r2, [r3, #20] + 8005dea: 693b ldr r3, [r7, #16] + 8005dec: 4413 add r3, r2 + 8005dee: 7d7a ldrb r2, [r7, #21] + 8005df0: b292 uxth r2, r2 + 8005df2: 4619 mov r1, r3 + 8005df4: 68b8 ldr r0, [r7, #8] + 8005df6: f7fe fdc9 bl 800498c break; - 8005bda: e00a b.n 8005bf2 + 8005dfa: e00a b.n 8005e12 case 24: W25QXX_Read(mat,foffset+ftinfo.f24addr,csize); - 8005bdc: 4b06 ldr r3, [pc, #24] ; (8005bf8 ) - 8005bde: 69da ldr r2, [r3, #28] - 8005be0: 693b ldr r3, [r7, #16] - 8005be2: 4413 add r3, r2 - 8005be4: 7d7a ldrb r2, [r7, #21] - 8005be6: b292 uxth r2, r2 - 8005be8: 4619 mov r1, r3 - 8005bea: 68b8 ldr r0, [r7, #8] - 8005bec: f7fe fdd2 bl 8004794 + 8005dfc: 4b06 ldr r3, [pc, #24] ; (8005e18 ) + 8005dfe: 69da ldr r2, [r3, #28] + 8005e00: 693b ldr r3, [r7, #16] + 8005e02: 4413 add r3, r2 + 8005e04: 7d7a ldrb r2, [r7, #21] + 8005e06: b292 uxth r2, r2 + 8005e08: 4619 mov r1, r3 + 8005e0a: 68b8 ldr r0, [r7, #8] + 8005e0c: f7fe fdbe bl 800498c break; - 8005bf0: bf00 nop + 8005e10: bf00 nop } } - 8005bf2: 3718 adds r7, #24 - 8005bf4: 46bd mov sp, r7 - 8005bf6: bd80 pop {r7, pc} - 8005bf8: 200007bc .word 0x200007bc + 8005e12: 3718 adds r7, #24 + 8005e14: 46bd mov sp, r7 + 8005e16: bd80 pop {r7, pc} + 8005e18: 20000830 .word 0x20000830 -08005bfc : +08005e1c : //x,y :ºº×ÖµÄ×ø±ê //font:ºº×ÖGBKÂë //size:×ÖÌå´óС //mode:0,Õý³£ÏÔʾ,1,µþ¼ÓÏÔʾ void Show_Font(uint16_t x,uint16_t y,uint8_t *font,uint8_t size,uint16_t bg,uint16_t color) { - 8005bfc: b580 push {r7, lr} - 8005bfe: b098 sub sp, #96 ; 0x60 - 8005c00: af00 add r7, sp, #0 - 8005c02: 60ba str r2, [r7, #8] - 8005c04: 461a mov r2, r3 - 8005c06: 4603 mov r3, r0 - 8005c08: 81fb strh r3, [r7, #14] - 8005c0a: 460b mov r3, r1 - 8005c0c: 81bb strh r3, [r7, #12] - 8005c0e: 4613 mov r3, r2 - 8005c10: 71fb strb r3, [r7, #7] + 8005e1c: b580 push {r7, lr} + 8005e1e: b098 sub sp, #96 ; 0x60 + 8005e20: af00 add r7, sp, #0 + 8005e22: 60ba str r2, [r7, #8] + 8005e24: 461a mov r2, r3 + 8005e26: 4603 mov r3, r0 + 8005e28: 81fb strh r3, [r7, #14] + 8005e2a: 460b mov r3, r1 + 8005e2c: 81bb strh r3, [r7, #12] + 8005e2e: 4613 mov r3, r2 + 8005e30: 71fb strb r3, [r7, #7] uint8_t temp,t,t1; uint16_t y0=y; - 8005c12: 89bb ldrh r3, [r7, #12] - 8005c14: f8a7 305a strh.w r3, [r7, #90] ; 0x5a + 8005e32: 89bb ldrh r3, [r7, #12] + 8005e34: f8a7 305a strh.w r3, [r7, #90] ; 0x5a uint8_t dzk[72]; uint8_t csize=(size/8+((size%8)?1:0))*(size);//µÃµ½×ÖÌåÒ»¸ö×Ö·û¶ÔÓ¦µãÕó¼¯ËùÕ¼µÄ×Ö½ÚÊý - 8005c18: 79fb ldrb r3, [r7, #7] - 8005c1a: 08db lsrs r3, r3, #3 - 8005c1c: b2db uxtb r3, r3 - 8005c1e: 461a mov r2, r3 - 8005c20: 79fb ldrb r3, [r7, #7] - 8005c22: f003 0307 and.w r3, r3, #7 - 8005c26: b2db uxtb r3, r3 - 8005c28: 2b00 cmp r3, #0 - 8005c2a: bf14 ite ne - 8005c2c: 2301 movne r3, #1 - 8005c2e: 2300 moveq r3, #0 - 8005c30: b2db uxtb r3, r3 - 8005c32: 4413 add r3, r2 - 8005c34: b2db uxtb r3, r3 - 8005c36: 79fa ldrb r2, [r7, #7] - 8005c38: fb02 f303 mul.w r3, r2, r3 - 8005c3c: f887 3059 strb.w r3, [r7, #89] ; 0x59 + 8005e38: 79fb ldrb r3, [r7, #7] + 8005e3a: 08db lsrs r3, r3, #3 + 8005e3c: b2db uxtb r3, r3 + 8005e3e: 461a mov r2, r3 + 8005e40: 79fb ldrb r3, [r7, #7] + 8005e42: f003 0307 and.w r3, r3, #7 + 8005e46: b2db uxtb r3, r3 + 8005e48: 2b00 cmp r3, #0 + 8005e4a: bf14 ite ne + 8005e4c: 2301 movne r3, #1 + 8005e4e: 2300 moveq r3, #0 + 8005e50: b2db uxtb r3, r3 + 8005e52: 4413 add r3, r2 + 8005e54: b2db uxtb r3, r3 + 8005e56: 79fa ldrb r2, [r7, #7] + 8005e58: fb02 f303 mul.w r3, r2, r3 + 8005e5c: f887 3059 strb.w r3, [r7, #89] ; 0x59 if(size!=12&&size!=16)return; //²»Ö§³ÖµÄsize - 8005c40: 79fb ldrb r3, [r7, #7] - 8005c42: 2b0c cmp r3, #12 - 8005c44: d002 beq.n 8005c4c - 8005c46: 79fb ldrb r3, [r7, #7] - 8005c48: 2b10 cmp r3, #16 - 8005c4a: d15b bne.n 8005d04 + 8005e60: 79fb ldrb r3, [r7, #7] + 8005e62: 2b0c cmp r3, #12 + 8005e64: d002 beq.n 8005e6c + 8005e66: 79fb ldrb r3, [r7, #7] + 8005e68: 2b10 cmp r3, #16 + 8005e6a: d15b bne.n 8005f24 Get_HzMat(font,dzk,size); //µÃµ½ÏàÓ¦´óСµÄµãÕóÊý¾Ý - 8005c4c: 79fa ldrb r2, [r7, #7] - 8005c4e: f107 0310 add.w r3, r7, #16 - 8005c52: 4619 mov r1, r3 - 8005c54: 68b8 ldr r0, [r7, #8] - 8005c56: f7ff ff4b bl 8005af0 + 8005e6c: 79fa ldrb r2, [r7, #7] + 8005e6e: f107 0310 add.w r3, r7, #16 + 8005e72: 4619 mov r1, r3 + 8005e74: 68b8 ldr r0, [r7, #8] + 8005e76: f7ff ff4b bl 8005d10 for(t=0;t + 8005e7a: 2300 movs r3, #0 + 8005e7c: f887 305e strb.w r3, [r7, #94] ; 0x5e + 8005e80: e049 b.n 8005f16 { temp=dzk[t]; //µÃµ½µãÕóÊý¾Ý - 8005c62: f897 305e ldrb.w r3, [r7, #94] ; 0x5e - 8005c66: f107 0260 add.w r2, r7, #96 ; 0x60 - 8005c6a: 4413 add r3, r2 - 8005c6c: f813 3c50 ldrb.w r3, [r3, #-80] - 8005c70: f887 305f strb.w r3, [r7, #95] ; 0x5f + 8005e82: f897 305e ldrb.w r3, [r7, #94] ; 0x5e + 8005e86: f107 0260 add.w r2, r7, #96 ; 0x60 + 8005e8a: 4413 add r3, r2 + 8005e8c: f813 3c50 ldrb.w r3, [r3, #-80] + 8005e90: f887 305f strb.w r3, [r7, #95] ; 0x5f for(t1=0;t1<8;t1++) - 8005c74: 2300 movs r3, #0 - 8005c76: f887 305d strb.w r3, [r7, #93] ; 0x5d - 8005c7a: e033 b.n 8005ce4 + 8005e94: 2300 movs r3, #0 + 8005e96: f887 305d strb.w r3, [r7, #93] ; 0x5d + 8005e9a: e033 b.n 8005f04 { if(temp&0x80){LCD_set_dot(x,y,color);}else{if(bg!=color){LCD_set_dot(x,y,bg);}} - 8005c7c: f997 305f ldrsb.w r3, [r7, #95] ; 0x5f - 8005c80: 2b00 cmp r3, #0 - 8005c82: da07 bge.n 8005c94 - 8005c84: f8b7 206c ldrh.w r2, [r7, #108] ; 0x6c - 8005c88: 89b9 ldrh r1, [r7, #12] - 8005c8a: 89fb ldrh r3, [r7, #14] - 8005c8c: 4618 mov r0, r3 - 8005c8e: f7ff fe8f bl 80059b0 - 8005c92: e00c b.n 8005cae - 8005c94: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 - 8005c98: f8b7 306c ldrh.w r3, [r7, #108] ; 0x6c - 8005c9c: 429a cmp r2, r3 - 8005c9e: d006 beq.n 8005cae - 8005ca0: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 - 8005ca4: 89b9 ldrh r1, [r7, #12] - 8005ca6: 89fb ldrh r3, [r7, #14] - 8005ca8: 4618 mov r0, r3 - 8005caa: f7ff fe81 bl 80059b0 + 8005e9c: f997 305f ldrsb.w r3, [r7, #95] ; 0x5f + 8005ea0: 2b00 cmp r3, #0 + 8005ea2: da07 bge.n 8005eb4 + 8005ea4: f8b7 206c ldrh.w r2, [r7, #108] ; 0x6c + 8005ea8: 89b9 ldrh r1, [r7, #12] + 8005eaa: 89fb ldrh r3, [r7, #14] + 8005eac: 4618 mov r0, r3 + 8005eae: f7ff fe8f bl 8005bd0 + 8005eb2: e00c b.n 8005ece + 8005eb4: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 + 8005eb8: f8b7 306c ldrh.w r3, [r7, #108] ; 0x6c + 8005ebc: 429a cmp r2, r3 + 8005ebe: d006 beq.n 8005ece + 8005ec0: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 + 8005ec4: 89b9 ldrh r1, [r7, #12] + 8005ec6: 89fb ldrh r3, [r7, #14] + 8005ec8: 4618 mov r0, r3 + 8005eca: f7ff fe81 bl 8005bd0 temp<<=1; - 8005cae: f897 305f ldrb.w r3, [r7, #95] ; 0x5f - 8005cb2: 005b lsls r3, r3, #1 - 8005cb4: f887 305f strb.w r3, [r7, #95] ; 0x5f + 8005ece: f897 305f ldrb.w r3, [r7, #95] ; 0x5f + 8005ed2: 005b lsls r3, r3, #1 + 8005ed4: f887 305f strb.w r3, [r7, #95] ; 0x5f y++; - 8005cb8: 89bb ldrh r3, [r7, #12] - 8005cba: 3301 adds r3, #1 - 8005cbc: 81bb strh r3, [r7, #12] + 8005ed8: 89bb ldrh r3, [r7, #12] + 8005eda: 3301 adds r3, #1 + 8005edc: 81bb strh r3, [r7, #12] if((y-y0)==size) - 8005cbe: 89ba ldrh r2, [r7, #12] - 8005cc0: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a - 8005cc4: 1ad2 subs r2, r2, r3 - 8005cc6: 79fb ldrb r3, [r7, #7] - 8005cc8: 429a cmp r2, r3 - 8005cca: d106 bne.n 8005cda + 8005ede: 89ba ldrh r2, [r7, #12] + 8005ee0: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a + 8005ee4: 1ad2 subs r2, r2, r3 + 8005ee6: 79fb ldrb r3, [r7, #7] + 8005ee8: 429a cmp r2, r3 + 8005eea: d106 bne.n 8005efa { y=y0; - 8005ccc: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a - 8005cd0: 81bb strh r3, [r7, #12] + 8005eec: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a + 8005ef0: 81bb strh r3, [r7, #12] x++; - 8005cd2: 89fb ldrh r3, [r7, #14] - 8005cd4: 3301 adds r3, #1 - 8005cd6: 81fb strh r3, [r7, #14] + 8005ef2: 89fb ldrh r3, [r7, #14] + 8005ef4: 3301 adds r3, #1 + 8005ef6: 81fb strh r3, [r7, #14] break; - 8005cd8: e008 b.n 8005cec + 8005ef8: e008 b.n 8005f0c for(t1=0;t1<8;t1++) - 8005cda: f897 305d ldrb.w r3, [r7, #93] ; 0x5d - 8005cde: 3301 adds r3, #1 - 8005ce0: f887 305d strb.w r3, [r7, #93] ; 0x5d - 8005ce4: f897 305d ldrb.w r3, [r7, #93] ; 0x5d - 8005ce8: 2b07 cmp r3, #7 - 8005cea: d9c7 bls.n 8005c7c + 8005efa: f897 305d ldrb.w r3, [r7, #93] ; 0x5d + 8005efe: 3301 adds r3, #1 + 8005f00: f887 305d strb.w r3, [r7, #93] ; 0x5d + 8005f04: f897 305d ldrb.w r3, [r7, #93] ; 0x5d + 8005f08: 2b07 cmp r3, #7 + 8005f0a: d9c7 bls.n 8005e9c for(t=0;t - 8005d02: e000 b.n 8005d06 + 8005f0c: f897 305e ldrb.w r3, [r7, #94] ; 0x5e + 8005f10: 3301 adds r3, #1 + 8005f12: f887 305e strb.w r3, [r7, #94] ; 0x5e + 8005f16: f897 205e ldrb.w r2, [r7, #94] ; 0x5e + 8005f1a: f897 3059 ldrb.w r3, [r7, #89] ; 0x59 + 8005f1e: 429a cmp r2, r3 + 8005f20: d3af bcc.n 8005e82 + 8005f22: e000 b.n 8005f26 if(size!=12&&size!=16)return; //²»Ö§³ÖµÄsize - 8005d04: bf00 nop + 8005f24: bf00 nop } } } } - 8005d06: 3760 adds r7, #96 ; 0x60 - 8005d08: 46bd mov sp, r7 - 8005d0a: bd80 pop {r7, pc} + 8005f26: 3760 adds r7, #96 ; 0x60 + 8005f28: 46bd mov sp, r7 + 8005f2a: bd80 pop {r7, pc} -08005d0c : +08005f2c : //num:ÒªÏÔʾµÄ×Ö·û:" "--->"~" //size:×ÖÌå´óС 12/16 //mode:µþ¼Ó·½Ê½(1)»¹ÊǷǵþ¼Ó·½Ê½(0) void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t size,uint16_t bg,uint16_t color) { - 8005d0c: b590 push {r4, r7, lr} - 8005d0e: b085 sub sp, #20 - 8005d10: af00 add r7, sp, #0 - 8005d12: 4604 mov r4, r0 - 8005d14: 4608 mov r0, r1 - 8005d16: 4611 mov r1, r2 - 8005d18: 461a mov r2, r3 - 8005d1a: 4623 mov r3, r4 - 8005d1c: 80fb strh r3, [r7, #6] - 8005d1e: 4603 mov r3, r0 - 8005d20: 80bb strh r3, [r7, #4] - 8005d22: 460b mov r3, r1 - 8005d24: 70fb strb r3, [r7, #3] - 8005d26: 4613 mov r3, r2 - 8005d28: 70bb strb r3, [r7, #2] + 8005f2c: b590 push {r4, r7, lr} + 8005f2e: b085 sub sp, #20 + 8005f30: af00 add r7, sp, #0 + 8005f32: 4604 mov r4, r0 + 8005f34: 4608 mov r0, r1 + 8005f36: 4611 mov r1, r2 + 8005f38: 461a mov r2, r3 + 8005f3a: 4623 mov r3, r4 + 8005f3c: 80fb strh r3, [r7, #6] + 8005f3e: 4603 mov r3, r0 + 8005f40: 80bb strh r3, [r7, #4] + 8005f42: 460b mov r3, r1 + 8005f44: 70fb strb r3, [r7, #3] + 8005f46: 4613 mov r3, r2 + 8005f48: 70bb strb r3, [r7, #2] uint8_t temp,t1,t; uint16_t y0=y; - 8005d2a: 88bb ldrh r3, [r7, #4] - 8005d2c: 817b strh r3, [r7, #10] + 8005f4a: 88bb ldrh r3, [r7, #4] + 8005f4c: 817b strh r3, [r7, #10] //ÉèÖô°¿Ú num=num-' ';//µÃµ½Æ«ÒƺóµÄÖµ - 8005d2e: 78fb ldrb r3, [r7, #3] - 8005d30: 3b20 subs r3, #32 - 8005d32: 70fb strb r3, [r7, #3] + 8005f4e: 78fb ldrb r3, [r7, #3] + 8005f50: 3b20 subs r3, #32 + 8005f52: 70fb strb r3, [r7, #3] for(t=0;t + 8005f54: 2300 movs r3, #0 + 8005f56: 737b strb r3, [r7, #13] + 8005f58: e055 b.n 8006006 { if(size==12){temp=asc2_1206[num][t];} //µ÷ÓÃ1206×ÖÌå - 8005d3a: 78bb ldrb r3, [r7, #2] - 8005d3c: 2b0c cmp r3, #12 - 8005d3e: d10b bne.n 8005d58 - 8005d40: 78fa ldrb r2, [r7, #3] - 8005d42: 7b79 ldrb r1, [r7, #13] - 8005d44: 482c ldr r0, [pc, #176] ; (8005df8 ) - 8005d46: 4613 mov r3, r2 - 8005d48: 005b lsls r3, r3, #1 - 8005d4a: 4413 add r3, r2 - 8005d4c: 009b lsls r3, r3, #2 - 8005d4e: 4403 add r3, r0 - 8005d50: 440b add r3, r1 - 8005d52: 781b ldrb r3, [r3, #0] - 8005d54: 73fb strb r3, [r7, #15] - 8005d56: e007 b.n 8005d68 + 8005f5a: 78bb ldrb r3, [r7, #2] + 8005f5c: 2b0c cmp r3, #12 + 8005f5e: d10b bne.n 8005f78 + 8005f60: 78fa ldrb r2, [r7, #3] + 8005f62: 7b79 ldrb r1, [r7, #13] + 8005f64: 482c ldr r0, [pc, #176] ; (8006018 ) + 8005f66: 4613 mov r3, r2 + 8005f68: 005b lsls r3, r3, #1 + 8005f6a: 4413 add r3, r2 + 8005f6c: 009b lsls r3, r3, #2 + 8005f6e: 4403 add r3, r0 + 8005f70: 440b add r3, r1 + 8005f72: 781b ldrb r3, [r3, #0] + 8005f74: 73fb strb r3, [r7, #15] + 8005f76: e007 b.n 8005f88 else{ temp=asc2_1608[num][t]; } //µ÷ÓÃ1608×ÖÌå - 8005d58: 78fa ldrb r2, [r7, #3] - 8005d5a: 7b7b ldrb r3, [r7, #13] - 8005d5c: 4927 ldr r1, [pc, #156] ; (8005dfc ) - 8005d5e: 0112 lsls r2, r2, #4 - 8005d60: 440a add r2, r1 - 8005d62: 4413 add r3, r2 - 8005d64: 781b ldrb r3, [r3, #0] - 8005d66: 73fb strb r3, [r7, #15] + 8005f78: 78fa ldrb r2, [r7, #3] + 8005f7a: 7b7b ldrb r3, [r7, #13] + 8005f7c: 4927 ldr r1, [pc, #156] ; (800601c ) + 8005f7e: 0112 lsls r2, r2, #4 + 8005f80: 440a add r2, r1 + 8005f82: 4413 add r3, r2 + 8005f84: 781b ldrb r3, [r3, #0] + 8005f86: 73fb strb r3, [r7, #15] for(t1=0;t1<8;t1++) - 8005d68: 2300 movs r3, #0 - 8005d6a: 73bb strb r3, [r7, #14] - 8005d6c: e033 b.n 8005dd6 + 8005f88: 2300 movs r3, #0 + 8005f8a: 73bb strb r3, [r7, #14] + 8005f8c: e033 b.n 8005ff6 { if(temp&0x80){LCD_set_dot(x,y,color);}else{if(bg!=color){LCD_set_dot(x,y,bg);}} - 8005d6e: f997 300f ldrsb.w r3, [r7, #15] - 8005d72: 2b00 cmp r3, #0 - 8005d74: da06 bge.n 8005d84 - 8005d76: 8cba ldrh r2, [r7, #36] ; 0x24 - 8005d78: 88b9 ldrh r1, [r7, #4] - 8005d7a: 88fb ldrh r3, [r7, #6] - 8005d7c: 4618 mov r0, r3 - 8005d7e: f7ff fe17 bl 80059b0 - 8005d82: e009 b.n 8005d98 - 8005d84: 8c3a ldrh r2, [r7, #32] - 8005d86: 8cbb ldrh r3, [r7, #36] ; 0x24 - 8005d88: 429a cmp r2, r3 - 8005d8a: d005 beq.n 8005d98 - 8005d8c: 8c3a ldrh r2, [r7, #32] - 8005d8e: 88b9 ldrh r1, [r7, #4] - 8005d90: 88fb ldrh r3, [r7, #6] - 8005d92: 4618 mov r0, r3 - 8005d94: f7ff fe0c bl 80059b0 + 8005f8e: f997 300f ldrsb.w r3, [r7, #15] + 8005f92: 2b00 cmp r3, #0 + 8005f94: da06 bge.n 8005fa4 + 8005f96: 8cba ldrh r2, [r7, #36] ; 0x24 + 8005f98: 88b9 ldrh r1, [r7, #4] + 8005f9a: 88fb ldrh r3, [r7, #6] + 8005f9c: 4618 mov r0, r3 + 8005f9e: f7ff fe17 bl 8005bd0 + 8005fa2: e009 b.n 8005fb8 + 8005fa4: 8c3a ldrh r2, [r7, #32] + 8005fa6: 8cbb ldrh r3, [r7, #36] ; 0x24 + 8005fa8: 429a cmp r2, r3 + 8005faa: d005 beq.n 8005fb8 + 8005fac: 8c3a ldrh r2, [r7, #32] + 8005fae: 88b9 ldrh r1, [r7, #4] + 8005fb0: 88fb ldrh r3, [r7, #6] + 8005fb2: 4618 mov r0, r3 + 8005fb4: f7ff fe0c bl 8005bd0 temp<<=1; - 8005d98: 7bfb ldrb r3, [r7, #15] - 8005d9a: 005b lsls r3, r3, #1 - 8005d9c: 73fb strb r3, [r7, #15] + 8005fb8: 7bfb ldrb r3, [r7, #15] + 8005fba: 005b lsls r3, r3, #1 + 8005fbc: 73fb strb r3, [r7, #15] y++; - 8005d9e: 88bb ldrh r3, [r7, #4] - 8005da0: 3301 adds r3, #1 - 8005da2: 80bb strh r3, [r7, #4] + 8005fbe: 88bb ldrh r3, [r7, #4] + 8005fc0: 3301 adds r3, #1 + 8005fc2: 80bb strh r3, [r7, #4] if(x>=lcddev.width){return;}//³¬ÇøÓòÁË - 8005da4: 4b16 ldr r3, [pc, #88] ; (8005e00 ) - 8005da6: 881b ldrh r3, [r3, #0] - 8005da8: 88fa ldrh r2, [r7, #6] - 8005daa: 429a cmp r2, r3 - 8005dac: d220 bcs.n 8005df0 + 8005fc4: 4b16 ldr r3, [pc, #88] ; (8006020 ) + 8005fc6: 881b ldrh r3, [r3, #0] + 8005fc8: 88fa ldrh r2, [r7, #6] + 8005fca: 429a cmp r2, r3 + 8005fcc: d220 bcs.n 8006010 if((y-y0)==size) - 8005dae: 88ba ldrh r2, [r7, #4] - 8005db0: 897b ldrh r3, [r7, #10] - 8005db2: 1ad2 subs r2, r2, r3 - 8005db4: 78bb ldrb r3, [r7, #2] - 8005db6: 429a cmp r2, r3 - 8005db8: d10a bne.n 8005dd0 + 8005fce: 88ba ldrh r2, [r7, #4] + 8005fd0: 897b ldrh r3, [r7, #10] + 8005fd2: 1ad2 subs r2, r2, r3 + 8005fd4: 78bb ldrb r3, [r7, #2] + 8005fd6: 429a cmp r2, r3 + 8005fd8: d10a bne.n 8005ff0 { y=y0; - 8005dba: 897b ldrh r3, [r7, #10] - 8005dbc: 80bb strh r3, [r7, #4] + 8005fda: 897b ldrh r3, [r7, #10] + 8005fdc: 80bb strh r3, [r7, #4] x++; - 8005dbe: 88fb ldrh r3, [r7, #6] - 8005dc0: 3301 adds r3, #1 - 8005dc2: 80fb strh r3, [r7, #6] + 8005fde: 88fb ldrh r3, [r7, #6] + 8005fe0: 3301 adds r3, #1 + 8005fe2: 80fb strh r3, [r7, #6] if(x>=lcddev.width){return;}//³¬ÇøÓòÁË - 8005dc4: 4b0e ldr r3, [pc, #56] ; (8005e00 ) - 8005dc6: 881b ldrh r3, [r3, #0] - 8005dc8: 88fa ldrh r2, [r7, #6] - 8005dca: 429a cmp r2, r3 - 8005dcc: d307 bcc.n 8005dde - 8005dce: e010 b.n 8005df2 + 8005fe4: 4b0e ldr r3, [pc, #56] ; (8006020 ) + 8005fe6: 881b ldrh r3, [r3, #0] + 8005fe8: 88fa ldrh r2, [r7, #6] + 8005fea: 429a cmp r2, r3 + 8005fec: d307 bcc.n 8005ffe + 8005fee: e010 b.n 8006012 for(t1=0;t1<8;t1++) - 8005dd0: 7bbb ldrb r3, [r7, #14] - 8005dd2: 3301 adds r3, #1 - 8005dd4: 73bb strb r3, [r7, #14] - 8005dd6: 7bbb ldrb r3, [r7, #14] - 8005dd8: 2b07 cmp r3, #7 - 8005dda: d9c8 bls.n 8005d6e - 8005ddc: e000 b.n 8005de0 + 8005ff0: 7bbb ldrb r3, [r7, #14] + 8005ff2: 3301 adds r3, #1 + 8005ff4: 73bb strb r3, [r7, #14] + 8005ff6: 7bbb ldrb r3, [r7, #14] + 8005ff8: 2b07 cmp r3, #7 + 8005ffa: d9c8 bls.n 8005f8e + 8005ffc: e000 b.n 8006000 break; - 8005dde: bf00 nop + 8005ffe: bf00 nop for(t=0;t - 8005dee: e000 b.n 8005df2 + 8006000: 7b7b ldrb r3, [r7, #13] + 8006002: 3301 adds r3, #1 + 8006004: 737b strb r3, [r7, #13] + 8006006: 7b7a ldrb r2, [r7, #13] + 8006008: 78bb ldrb r3, [r7, #2] + 800600a: 429a cmp r2, r3 + 800600c: d3a5 bcc.n 8005f5a + 800600e: e000 b.n 8006012 if(x>=lcddev.width){return;}//³¬ÇøÓòÁË - 8005df0: bf00 nop + 8006010: bf00 nop } } } - 8005df2: 3714 adds r7, #20 - 8005df4: 46bd mov sp, r7 - 8005df6: bd90 pop {r4, r7, pc} - 8005df8: 08006048 .word 0x08006048 - 8005dfc: 080064bc .word 0x080064bc - 8005e00: 200007b0 .word 0x200007b0 + 8006012: 3714 adds r7, #20 + 8006014: 46bd mov sp, r7 + 8006016: bd90 pop {r4, r7, pc} + 8006018: 08006af8 .word 0x08006af8 + 800601c: 08006f6c .word 0x08006f6c + 8006020: 20000824 .word 0x20000824 -08005e04 : +08006024 : //width,height:ÇøÓò´óС //size:×ÖÌå´óС //*p:×Ö·û´®ÆðʼµØÖ· void LCD_ShowString(uint16_t x,uint16_t y,uint8_t *p,uint8_t size,uint16_t bg,uint16_t color,uint16_t len) { - 8005e04: b590 push {r4, r7, lr} - 8005e06: b087 sub sp, #28 - 8005e08: af02 add r7, sp, #8 - 8005e0a: 60ba str r2, [r7, #8] - 8005e0c: 461a mov r2, r3 - 8005e0e: 4603 mov r3, r0 - 8005e10: 81fb strh r3, [r7, #14] - 8005e12: 460b mov r3, r1 - 8005e14: 81bb strh r3, [r7, #12] - 8005e16: 4613 mov r3, r2 - 8005e18: 71fb strb r3, [r7, #7] + 8006024: b590 push {r4, r7, lr} + 8006026: b087 sub sp, #28 + 8006028: af02 add r7, sp, #8 + 800602a: 60ba str r2, [r7, #8] + 800602c: 461a mov r2, r3 + 800602e: 4603 mov r3, r0 + 8006030: 81fb strh r3, [r7, #14] + 8006032: 460b mov r3, r1 + 8006034: 81bb strh r3, [r7, #12] + 8006036: 4613 mov r3, r2 + 8006038: 71fb strb r3, [r7, #7] while(len--) - 8005e1a: e052 b.n 8005ec2 + 800603a: e057 b.n 80060ec { if(x>=lcddev.width) - 8005e1c: 4b2e ldr r3, [pc, #184] ; (8005ed8 ) - 8005e1e: 881b ldrh r3, [r3, #0] - 8005e20: 89fa ldrh r2, [r7, #14] - 8005e22: 429a cmp r2, r3 - 8005e24: d306 bcc.n 8005e34 + 800603c: 4b31 ldr r3, [pc, #196] ; (8006104 ) + 800603e: 881b ldrh r3, [r3, #0] + 8006040: 89fa ldrh r2, [r7, #14] + 8006042: 429a cmp r2, r3 + 8006044: d306 bcc.n 8006054 { x=0; - 8005e26: 2300 movs r3, #0 - 8005e28: 81fb strh r3, [r7, #14] + 8006046: 2300 movs r3, #0 + 8006048: 81fb strh r3, [r7, #14] y+=size; - 8005e2a: 79fb ldrb r3, [r7, #7] - 8005e2c: b29a uxth r2, r3 - 8005e2e: 89bb ldrh r3, [r7, #12] - 8005e30: 4413 add r3, r2 - 8005e32: 81bb strh r3, [r7, #12] + 800604a: 79fb ldrb r3, [r7, #7] + 800604c: b29a uxth r2, r3 + 800604e: 89bb ldrh r3, [r7, #12] + 8006050: 4413 add r3, r2 + 8006052: 81bb strh r3, [r7, #12] } if(*p=='\0') - 8005e34: 68bb ldr r3, [r7, #8] - 8005e36: 781b ldrb r3, [r3, #0] - 8005e38: 2b00 cmp r3, #0 - 8005e3a: d048 beq.n 8005ece + 8006054: 68bb ldr r3, [r7, #8] + 8006056: 781b ldrb r3, [r3, #0] + 8006058: 2b00 cmp r3, #0 + 800605a: d04d beq.n 80060f8 { return; } if(*p=='\r') - 8005e3c: 68bb ldr r3, [r7, #8] - 8005e3e: 781b ldrb r3, [r3, #0] - 8005e40: 2b0d cmp r3, #13 - 8005e42: d102 bne.n 8005e4a + 800605c: 68bb ldr r3, [r7, #8] + 800605e: 781b ldrb r3, [r3, #0] + 8006060: 2b0d cmp r3, #13 + 8006062: d106 bne.n 8006072 { p++; - 8005e44: 68bb ldr r3, [r7, #8] - 8005e46: 3301 adds r3, #1 - 8005e48: 60bb str r3, [r7, #8] + 8006064: 68bb ldr r3, [r7, #8] + 8006066: 3301 adds r3, #1 + 8006068: 60bb str r3, [r7, #8] + if(*p!='\n') + 800606a: 68bb ldr r3, [r7, #8] + 800606c: 781b ldrb r3, [r3, #0] + 800606e: 2b0a cmp r3, #10 + 8006070: d144 bne.n 80060fc + { + return ; + } } if(*p=='\n') - 8005e4a: 68bb ldr r3, [r7, #8] - 8005e4c: 781b ldrb r3, [r3, #0] - 8005e4e: 2b0a cmp r3, #10 - 8005e50: d109 bne.n 8005e66 + 8006072: 68bb ldr r3, [r7, #8] + 8006074: 781b ldrb r3, [r3, #0] + 8006076: 2b0a cmp r3, #10 + 8006078: d109 bne.n 800608e { x=0; - 8005e52: 2300 movs r3, #0 - 8005e54: 81fb strh r3, [r7, #14] + 800607a: 2300 movs r3, #0 + 800607c: 81fb strh r3, [r7, #14] y+=size; - 8005e56: 79fb ldrb r3, [r7, #7] - 8005e58: b29a uxth r2, r3 - 8005e5a: 89bb ldrh r3, [r7, #12] - 8005e5c: 4413 add r3, r2 - 8005e5e: 81bb strh r3, [r7, #12] + 800607e: 79fb ldrb r3, [r7, #7] + 8006080: b29a uxth r2, r3 + 8006082: 89bb ldrh r3, [r7, #12] + 8006084: 4413 add r3, r2 + 8006086: 81bb strh r3, [r7, #12] p++; - 8005e60: 68bb ldr r3, [r7, #8] - 8005e62: 3301 adds r3, #1 - 8005e64: 60bb str r3, [r7, #8] + 8006088: 68bb ldr r3, [r7, #8] + 800608a: 3301 adds r3, #1 + 800608c: 60bb str r3, [r7, #8] } - if(*p<127) - 8005e66: 68bb ldr r3, [r7, #8] - 8005e68: 781b ldrb r3, [r3, #0] - 8005e6a: 2b7e cmp r3, #126 ; 0x7e - 8005e6c: d813 bhi.n 8005e96 + if(*p>127) + 800608e: 68bb ldr r3, [r7, #8] + 8006090: 781b ldrb r3, [r3, #0] + 8006092: b25b sxtb r3, r3 + 8006094: 2b00 cmp r3, #0 + 8006096: da13 bge.n 80060c0 { - LCD_ShowChar(x,y,*p,size,bg,color); - 8005e6e: 68bb ldr r3, [r7, #8] - 8005e70: 781a ldrb r2, [r3, #0] - 8005e72: 79fc ldrb r4, [r7, #7] - 8005e74: 89b9 ldrh r1, [r7, #12] - 8005e76: 89f8 ldrh r0, [r7, #14] - 8005e78: 8cbb ldrh r3, [r7, #36] ; 0x24 - 8005e7a: 9301 str r3, [sp, #4] - 8005e7c: 8c3b ldrh r3, [r7, #32] - 8005e7e: 9300 str r3, [sp, #0] - 8005e80: 4623 mov r3, r4 - 8005e82: f7ff ff43 bl 8005d0c - x+=(size/2); - 8005e86: 79fb ldrb r3, [r7, #7] - 8005e88: 085b lsrs r3, r3, #1 - 8005e8a: b2db uxtb r3, r3 - 8005e8c: b29a uxth r2, r3 - 8005e8e: 89fb ldrh r3, [r7, #14] - 8005e90: 4413 add r3, r2 - 8005e92: 81fb strh r3, [r7, #14] - 8005e94: e012 b.n 8005ebc + + + Show_Font(x,y,p,size,bg,color); + 8006098: 79fa ldrb r2, [r7, #7] + 800609a: 89b9 ldrh r1, [r7, #12] + 800609c: 89f8 ldrh r0, [r7, #14] + 800609e: 8cbb ldrh r3, [r7, #36] ; 0x24 + 80060a0: 9301 str r3, [sp, #4] + 80060a2: 8c3b ldrh r3, [r7, #32] + 80060a4: 9300 str r3, [sp, #0] + 80060a6: 4613 mov r3, r2 + 80060a8: 68ba ldr r2, [r7, #8] + 80060aa: f7ff feb7 bl 8005e1c + p++; + 80060ae: 68bb ldr r3, [r7, #8] + 80060b0: 3301 adds r3, #1 + 80060b2: 60bb str r3, [r7, #8] + x+=size; + 80060b4: 79fb ldrb r3, [r7, #7] + 80060b6: b29a uxth r2, r3 + 80060b8: 89fb ldrh r3, [r7, #14] + 80060ba: 4413 add r3, r2 + 80060bc: 81fb strh r3, [r7, #14] + 80060be: e012 b.n 80060e6 }else { - Show_Font(x,y,p,size,bg,color); - 8005e96: 79fa ldrb r2, [r7, #7] - 8005e98: 89b9 ldrh r1, [r7, #12] - 8005e9a: 89f8 ldrh r0, [r7, #14] - 8005e9c: 8cbb ldrh r3, [r7, #36] ; 0x24 - 8005e9e: 9301 str r3, [sp, #4] - 8005ea0: 8c3b ldrh r3, [r7, #32] - 8005ea2: 9300 str r3, [sp, #0] - 8005ea4: 4613 mov r3, r2 - 8005ea6: 68ba ldr r2, [r7, #8] - 8005ea8: f7ff fea8 bl 8005bfc - p++; - 8005eac: 68bb ldr r3, [r7, #8] - 8005eae: 3301 adds r3, #1 - 8005eb0: 60bb str r3, [r7, #8] - x+=size; - 8005eb2: 79fb ldrb r3, [r7, #7] - 8005eb4: b29a uxth r2, r3 - 8005eb6: 89fb ldrh r3, [r7, #14] - 8005eb8: 4413 add r3, r2 - 8005eba: 81fb strh r3, [r7, #14] + LCD_ShowChar(x,y,*p,size,bg,color); + 80060c0: 68bb ldr r3, [r7, #8] + 80060c2: 781a ldrb r2, [r3, #0] + 80060c4: 79fc ldrb r4, [r7, #7] + 80060c6: 89b9 ldrh r1, [r7, #12] + 80060c8: 89f8 ldrh r0, [r7, #14] + 80060ca: 8cbb ldrh r3, [r7, #36] ; 0x24 + 80060cc: 9301 str r3, [sp, #4] + 80060ce: 8c3b ldrh r3, [r7, #32] + 80060d0: 9300 str r3, [sp, #0] + 80060d2: 4623 mov r3, r4 + 80060d4: f7ff ff2a bl 8005f2c + x+=(size/2); + 80060d8: 79fb ldrb r3, [r7, #7] + 80060da: 085b lsrs r3, r3, #1 + 80060dc: b2db uxtb r3, r3 + 80060de: b29a uxth r2, r3 + 80060e0: 89fb ldrh r3, [r7, #14] + 80060e2: 4413 add r3, r2 + 80060e4: 81fb strh r3, [r7, #14] } p++; - 8005ebc: 68bb ldr r3, [r7, #8] - 8005ebe: 3301 adds r3, #1 - 8005ec0: 60bb str r3, [r7, #8] + 80060e6: 68bb ldr r3, [r7, #8] + 80060e8: 3301 adds r3, #1 + 80060ea: 60bb str r3, [r7, #8] while(len--) - 8005ec2: 8d3b ldrh r3, [r7, #40] ; 0x28 - 8005ec4: 1e5a subs r2, r3, #1 - 8005ec6: 853a strh r2, [r7, #40] ; 0x28 - 8005ec8: 2b00 cmp r3, #0 - 8005eca: d1a7 bne.n 8005e1c - 8005ecc: e000 b.n 8005ed0 + 80060ec: 8d3b ldrh r3, [r7, #40] ; 0x28 + 80060ee: 1e5a subs r2, r3, #1 + 80060f0: 853a strh r2, [r7, #40] ; 0x28 + 80060f2: 2b00 cmp r3, #0 + 80060f4: d1a2 bne.n 800603c + 80060f6: e002 b.n 80060fe return; - 8005ece: bf00 nop + 80060f8: bf00 nop + 80060fa: e000 b.n 80060fe + return ; + 80060fc: bf00 nop } } - 8005ed0: 3714 adds r7, #20 - 8005ed2: 46bd mov sp, r7 - 8005ed4: bd90 pop {r4, r7, pc} - 8005ed6: bf00 nop - 8005ed8: 200007b0 .word 0x200007b0 + 80060fe: 3714 adds r7, #20 + 8006100: 46bd mov sp, r7 + 8006102: bd90 pop {r4, r7, pc} + 8006104: 20000824 .word 0x20000824 -08005edc <__libc_init_array>: - 8005edc: b570 push {r4, r5, r6, lr} - 8005ede: 2600 movs r6, #0 - 8005ee0: 4d0c ldr r5, [pc, #48] ; (8005f14 <__libc_init_array+0x38>) - 8005ee2: 4c0d ldr r4, [pc, #52] ; (8005f18 <__libc_init_array+0x3c>) - 8005ee4: 1b64 subs r4, r4, r5 - 8005ee6: 10a4 asrs r4, r4, #2 - 8005ee8: 42a6 cmp r6, r4 - 8005eea: d109 bne.n 8005f00 <__libc_init_array+0x24> - 8005eec: f000 f822 bl 8005f34 <_init> - 8005ef0: 2600 movs r6, #0 - 8005ef2: 4d0a ldr r5, [pc, #40] ; (8005f1c <__libc_init_array+0x40>) - 8005ef4: 4c0a ldr r4, [pc, #40] ; (8005f20 <__libc_init_array+0x44>) - 8005ef6: 1b64 subs r4, r4, r5 - 8005ef8: 10a4 asrs r4, r4, #2 - 8005efa: 42a6 cmp r6, r4 - 8005efc: d105 bne.n 8005f0a <__libc_init_array+0x2e> - 8005efe: bd70 pop {r4, r5, r6, pc} - 8005f00: f855 3b04 ldr.w r3, [r5], #4 - 8005f04: 4798 blx r3 - 8005f06: 3601 adds r6, #1 - 8005f08: e7ee b.n 8005ee8 <__libc_init_array+0xc> - 8005f0a: f855 3b04 ldr.w r3, [r5], #4 - 8005f0e: 4798 blx r3 - 8005f10: 3601 adds r6, #1 - 8005f12: e7f2 b.n 8005efa <__libc_init_array+0x1e> - 8005f14: 08006aac .word 0x08006aac - 8005f18: 08006aac .word 0x08006aac - 8005f1c: 08006aac .word 0x08006aac - 8005f20: 08006ab0 .word 0x08006ab0 +08006108 <__errno>: + 8006108: 4b01 ldr r3, [pc, #4] ; (8006110 <__errno+0x8>) + 800610a: 6818 ldr r0, [r3, #0] + 800610c: 4770 bx lr + 800610e: bf00 nop + 8006110: 20000024 .word 0x20000024 -08005f24 : - 8005f24: 4603 mov r3, r0 - 8005f26: 4402 add r2, r0 - 8005f28: 4293 cmp r3, r2 - 8005f2a: d100 bne.n 8005f2e - 8005f2c: 4770 bx lr - 8005f2e: f803 1b01 strb.w r1, [r3], #1 - 8005f32: e7f9 b.n 8005f28 +08006114 <__libc_init_array>: + 8006114: b570 push {r4, r5, r6, lr} + 8006116: 2600 movs r6, #0 + 8006118: 4d0c ldr r5, [pc, #48] ; (800614c <__libc_init_array+0x38>) + 800611a: 4c0d ldr r4, [pc, #52] ; (8006150 <__libc_init_array+0x3c>) + 800611c: 1b64 subs r4, r4, r5 + 800611e: 10a4 asrs r4, r4, #2 + 8006120: 42a6 cmp r6, r4 + 8006122: d109 bne.n 8006138 <__libc_init_array+0x24> + 8006124: f000 fc5c bl 80069e0 <_init> + 8006128: 2600 movs r6, #0 + 800612a: 4d0a ldr r5, [pc, #40] ; (8006154 <__libc_init_array+0x40>) + 800612c: 4c0a ldr r4, [pc, #40] ; (8006158 <__libc_init_array+0x44>) + 800612e: 1b64 subs r4, r4, r5 + 8006130: 10a4 asrs r4, r4, #2 + 8006132: 42a6 cmp r6, r4 + 8006134: d105 bne.n 8006142 <__libc_init_array+0x2e> + 8006136: bd70 pop {r4, r5, r6, pc} + 8006138: f855 3b04 ldr.w r3, [r5], #4 + 800613c: 4798 blx r3 + 800613e: 3601 adds r6, #1 + 8006140: e7ee b.n 8006120 <__libc_init_array+0xc> + 8006142: f855 3b04 ldr.w r3, [r5], #4 + 8006146: 4798 blx r3 + 8006148: 3601 adds r6, #1 + 800614a: e7f2 b.n 8006132 <__libc_init_array+0x1e> + 800614c: 08007590 .word 0x08007590 + 8006150: 08007590 .word 0x08007590 + 8006154: 08007590 .word 0x08007590 + 8006158: 08007594 .word 0x08007594 -08005f34 <_init>: - 8005f34: b5f8 push {r3, r4, r5, r6, r7, lr} - 8005f36: bf00 nop - 8005f38: bcf8 pop {r3, r4, r5, r6, r7} - 8005f3a: bc08 pop {r3} - 8005f3c: 469e mov lr, r3 - 8005f3e: 4770 bx lr +0800615c : + 800615c: 4603 mov r3, r0 + 800615e: 4402 add r2, r0 + 8006160: 4293 cmp r3, r2 + 8006162: d100 bne.n 8006166 + 8006164: 4770 bx lr + 8006166: f803 1b01 strb.w r1, [r3], #1 + 800616a: e7f9 b.n 8006160 -08005f40 <_fini>: - 8005f40: b5f8 push {r3, r4, r5, r6, r7, lr} - 8005f42: bf00 nop - 8005f44: bcf8 pop {r3, r4, r5, r6, r7} - 8005f46: bc08 pop {r3} - 8005f48: 469e mov lr, r3 - 8005f4a: 4770 bx lr +0800616c : + 800616c: b40e push {r1, r2, r3} + 800616e: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000 + 8006172: b500 push {lr} + 8006174: b09c sub sp, #112 ; 0x70 + 8006176: ab1d add r3, sp, #116 ; 0x74 + 8006178: 9002 str r0, [sp, #8] + 800617a: 9006 str r0, [sp, #24] + 800617c: 9107 str r1, [sp, #28] + 800617e: 9104 str r1, [sp, #16] + 8006180: 4808 ldr r0, [pc, #32] ; (80061a4 ) + 8006182: 4909 ldr r1, [pc, #36] ; (80061a8 ) + 8006184: f853 2b04 ldr.w r2, [r3], #4 + 8006188: 9105 str r1, [sp, #20] + 800618a: 6800 ldr r0, [r0, #0] + 800618c: a902 add r1, sp, #8 + 800618e: 9301 str r3, [sp, #4] + 8006190: f000 f868 bl 8006264 <_svfiprintf_r> + 8006194: 2200 movs r2, #0 + 8006196: 9b02 ldr r3, [sp, #8] + 8006198: 701a strb r2, [r3, #0] + 800619a: b01c add sp, #112 ; 0x70 + 800619c: f85d eb04 ldr.w lr, [sp], #4 + 80061a0: b003 add sp, #12 + 80061a2: 4770 bx lr + 80061a4: 20000024 .word 0x20000024 + 80061a8: ffff0208 .word 0xffff0208 + +080061ac <__ssputs_r>: + 80061ac: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 80061b0: 688e ldr r6, [r1, #8] + 80061b2: 4682 mov sl, r0 + 80061b4: 429e cmp r6, r3 + 80061b6: 460c mov r4, r1 + 80061b8: 4690 mov r8, r2 + 80061ba: 461f mov r7, r3 + 80061bc: d838 bhi.n 8006230 <__ssputs_r+0x84> + 80061be: 898a ldrh r2, [r1, #12] + 80061c0: f412 6f90 tst.w r2, #1152 ; 0x480 + 80061c4: d032 beq.n 800622c <__ssputs_r+0x80> + 80061c6: 6825 ldr r5, [r4, #0] + 80061c8: 6909 ldr r1, [r1, #16] + 80061ca: 3301 adds r3, #1 + 80061cc: eba5 0901 sub.w r9, r5, r1 + 80061d0: 6965 ldr r5, [r4, #20] + 80061d2: 444b add r3, r9 + 80061d4: eb05 0545 add.w r5, r5, r5, lsl #1 + 80061d8: eb05 75d5 add.w r5, r5, r5, lsr #31 + 80061dc: 106d asrs r5, r5, #1 + 80061de: 429d cmp r5, r3 + 80061e0: bf38 it cc + 80061e2: 461d movcc r5, r3 + 80061e4: 0553 lsls r3, r2, #21 + 80061e6: d531 bpl.n 800624c <__ssputs_r+0xa0> + 80061e8: 4629 mov r1, r5 + 80061ea: f000 fb53 bl 8006894 <_malloc_r> + 80061ee: 4606 mov r6, r0 + 80061f0: b950 cbnz r0, 8006208 <__ssputs_r+0x5c> + 80061f2: 230c movs r3, #12 + 80061f4: f04f 30ff mov.w r0, #4294967295 + 80061f8: f8ca 3000 str.w r3, [sl] + 80061fc: 89a3 ldrh r3, [r4, #12] + 80061fe: f043 0340 orr.w r3, r3, #64 ; 0x40 + 8006202: 81a3 strh r3, [r4, #12] + 8006204: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8006208: 464a mov r2, r9 + 800620a: 6921 ldr r1, [r4, #16] + 800620c: f000 face bl 80067ac + 8006210: 89a3 ldrh r3, [r4, #12] + 8006212: f423 6390 bic.w r3, r3, #1152 ; 0x480 + 8006216: f043 0380 orr.w r3, r3, #128 ; 0x80 + 800621a: 81a3 strh r3, [r4, #12] + 800621c: 6126 str r6, [r4, #16] + 800621e: 444e add r6, r9 + 8006220: 6026 str r6, [r4, #0] + 8006222: 463e mov r6, r7 + 8006224: 6165 str r5, [r4, #20] + 8006226: eba5 0509 sub.w r5, r5, r9 + 800622a: 60a5 str r5, [r4, #8] + 800622c: 42be cmp r6, r7 + 800622e: d900 bls.n 8006232 <__ssputs_r+0x86> + 8006230: 463e mov r6, r7 + 8006232: 4632 mov r2, r6 + 8006234: 4641 mov r1, r8 + 8006236: 6820 ldr r0, [r4, #0] + 8006238: f000 fac6 bl 80067c8 + 800623c: 68a3 ldr r3, [r4, #8] + 800623e: 6822 ldr r2, [r4, #0] + 8006240: 1b9b subs r3, r3, r6 + 8006242: 4432 add r2, r6 + 8006244: 2000 movs r0, #0 + 8006246: 60a3 str r3, [r4, #8] + 8006248: 6022 str r2, [r4, #0] + 800624a: e7db b.n 8006204 <__ssputs_r+0x58> + 800624c: 462a mov r2, r5 + 800624e: f000 fb7b bl 8006948 <_realloc_r> + 8006252: 4606 mov r6, r0 + 8006254: 2800 cmp r0, #0 + 8006256: d1e1 bne.n 800621c <__ssputs_r+0x70> + 8006258: 4650 mov r0, sl + 800625a: 6921 ldr r1, [r4, #16] + 800625c: f000 face bl 80067fc <_free_r> + 8006260: e7c7 b.n 80061f2 <__ssputs_r+0x46> + ... + +08006264 <_svfiprintf_r>: + 8006264: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8006268: 4698 mov r8, r3 + 800626a: 898b ldrh r3, [r1, #12] + 800626c: 4607 mov r7, r0 + 800626e: 061b lsls r3, r3, #24 + 8006270: 460d mov r5, r1 + 8006272: 4614 mov r4, r2 + 8006274: b09d sub sp, #116 ; 0x74 + 8006276: d50e bpl.n 8006296 <_svfiprintf_r+0x32> + 8006278: 690b ldr r3, [r1, #16] + 800627a: b963 cbnz r3, 8006296 <_svfiprintf_r+0x32> + 800627c: 2140 movs r1, #64 ; 0x40 + 800627e: f000 fb09 bl 8006894 <_malloc_r> + 8006282: 6028 str r0, [r5, #0] + 8006284: 6128 str r0, [r5, #16] + 8006286: b920 cbnz r0, 8006292 <_svfiprintf_r+0x2e> + 8006288: 230c movs r3, #12 + 800628a: 603b str r3, [r7, #0] + 800628c: f04f 30ff mov.w r0, #4294967295 + 8006290: e0d1 b.n 8006436 <_svfiprintf_r+0x1d2> + 8006292: 2340 movs r3, #64 ; 0x40 + 8006294: 616b str r3, [r5, #20] + 8006296: 2300 movs r3, #0 + 8006298: 9309 str r3, [sp, #36] ; 0x24 + 800629a: 2320 movs r3, #32 + 800629c: f88d 3029 strb.w r3, [sp, #41] ; 0x29 + 80062a0: 2330 movs r3, #48 ; 0x30 + 80062a2: f04f 0901 mov.w r9, #1 + 80062a6: f8cd 800c str.w r8, [sp, #12] + 80062aa: f8df 81a4 ldr.w r8, [pc, #420] ; 8006450 <_svfiprintf_r+0x1ec> + 80062ae: f88d 302a strb.w r3, [sp, #42] ; 0x2a + 80062b2: 4623 mov r3, r4 + 80062b4: 469a mov sl, r3 + 80062b6: f813 2b01 ldrb.w r2, [r3], #1 + 80062ba: b10a cbz r2, 80062c0 <_svfiprintf_r+0x5c> + 80062bc: 2a25 cmp r2, #37 ; 0x25 + 80062be: d1f9 bne.n 80062b4 <_svfiprintf_r+0x50> + 80062c0: ebba 0b04 subs.w fp, sl, r4 + 80062c4: d00b beq.n 80062de <_svfiprintf_r+0x7a> + 80062c6: 465b mov r3, fp + 80062c8: 4622 mov r2, r4 + 80062ca: 4629 mov r1, r5 + 80062cc: 4638 mov r0, r7 + 80062ce: f7ff ff6d bl 80061ac <__ssputs_r> + 80062d2: 3001 adds r0, #1 + 80062d4: f000 80aa beq.w 800642c <_svfiprintf_r+0x1c8> + 80062d8: 9a09 ldr r2, [sp, #36] ; 0x24 + 80062da: 445a add r2, fp + 80062dc: 9209 str r2, [sp, #36] ; 0x24 + 80062de: f89a 3000 ldrb.w r3, [sl] + 80062e2: 2b00 cmp r3, #0 + 80062e4: f000 80a2 beq.w 800642c <_svfiprintf_r+0x1c8> + 80062e8: 2300 movs r3, #0 + 80062ea: f04f 32ff mov.w r2, #4294967295 + 80062ee: e9cd 2305 strd r2, r3, [sp, #20] + 80062f2: f10a 0a01 add.w sl, sl, #1 + 80062f6: 9304 str r3, [sp, #16] + 80062f8: 9307 str r3, [sp, #28] + 80062fa: f88d 3053 strb.w r3, [sp, #83] ; 0x53 + 80062fe: 931a str r3, [sp, #104] ; 0x68 + 8006300: 4654 mov r4, sl + 8006302: 2205 movs r2, #5 + 8006304: f814 1b01 ldrb.w r1, [r4], #1 + 8006308: 4851 ldr r0, [pc, #324] ; (8006450 <_svfiprintf_r+0x1ec>) + 800630a: f000 fa41 bl 8006790 + 800630e: 9a04 ldr r2, [sp, #16] + 8006310: b9d8 cbnz r0, 800634a <_svfiprintf_r+0xe6> + 8006312: 06d0 lsls r0, r2, #27 + 8006314: bf44 itt mi + 8006316: 2320 movmi r3, #32 + 8006318: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 + 800631c: 0711 lsls r1, r2, #28 + 800631e: bf44 itt mi + 8006320: 232b movmi r3, #43 ; 0x2b + 8006322: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 + 8006326: f89a 3000 ldrb.w r3, [sl] + 800632a: 2b2a cmp r3, #42 ; 0x2a + 800632c: d015 beq.n 800635a <_svfiprintf_r+0xf6> + 800632e: 4654 mov r4, sl + 8006330: 2000 movs r0, #0 + 8006332: f04f 0c0a mov.w ip, #10 + 8006336: 9a07 ldr r2, [sp, #28] + 8006338: 4621 mov r1, r4 + 800633a: f811 3b01 ldrb.w r3, [r1], #1 + 800633e: 3b30 subs r3, #48 ; 0x30 + 8006340: 2b09 cmp r3, #9 + 8006342: d94e bls.n 80063e2 <_svfiprintf_r+0x17e> + 8006344: b1b0 cbz r0, 8006374 <_svfiprintf_r+0x110> + 8006346: 9207 str r2, [sp, #28] + 8006348: e014 b.n 8006374 <_svfiprintf_r+0x110> + 800634a: eba0 0308 sub.w r3, r0, r8 + 800634e: fa09 f303 lsl.w r3, r9, r3 + 8006352: 4313 orrs r3, r2 + 8006354: 46a2 mov sl, r4 + 8006356: 9304 str r3, [sp, #16] + 8006358: e7d2 b.n 8006300 <_svfiprintf_r+0x9c> + 800635a: 9b03 ldr r3, [sp, #12] + 800635c: 1d19 adds r1, r3, #4 + 800635e: 681b ldr r3, [r3, #0] + 8006360: 9103 str r1, [sp, #12] + 8006362: 2b00 cmp r3, #0 + 8006364: bfbb ittet lt + 8006366: 425b neglt r3, r3 + 8006368: f042 0202 orrlt.w r2, r2, #2 + 800636c: 9307 strge r3, [sp, #28] + 800636e: 9307 strlt r3, [sp, #28] + 8006370: bfb8 it lt + 8006372: 9204 strlt r2, [sp, #16] + 8006374: 7823 ldrb r3, [r4, #0] + 8006376: 2b2e cmp r3, #46 ; 0x2e + 8006378: d10c bne.n 8006394 <_svfiprintf_r+0x130> + 800637a: 7863 ldrb r3, [r4, #1] + 800637c: 2b2a cmp r3, #42 ; 0x2a + 800637e: d135 bne.n 80063ec <_svfiprintf_r+0x188> + 8006380: 9b03 ldr r3, [sp, #12] + 8006382: 3402 adds r4, #2 + 8006384: 1d1a adds r2, r3, #4 + 8006386: 681b ldr r3, [r3, #0] + 8006388: 9203 str r2, [sp, #12] + 800638a: 2b00 cmp r3, #0 + 800638c: bfb8 it lt + 800638e: f04f 33ff movlt.w r3, #4294967295 + 8006392: 9305 str r3, [sp, #20] + 8006394: f8df a0c8 ldr.w sl, [pc, #200] ; 8006460 <_svfiprintf_r+0x1fc> + 8006398: 2203 movs r2, #3 + 800639a: 4650 mov r0, sl + 800639c: 7821 ldrb r1, [r4, #0] + 800639e: f000 f9f7 bl 8006790 + 80063a2: b140 cbz r0, 80063b6 <_svfiprintf_r+0x152> + 80063a4: 2340 movs r3, #64 ; 0x40 + 80063a6: eba0 000a sub.w r0, r0, sl + 80063aa: fa03 f000 lsl.w r0, r3, r0 + 80063ae: 9b04 ldr r3, [sp, #16] + 80063b0: 3401 adds r4, #1 + 80063b2: 4303 orrs r3, r0 + 80063b4: 9304 str r3, [sp, #16] + 80063b6: f814 1b01 ldrb.w r1, [r4], #1 + 80063ba: 2206 movs r2, #6 + 80063bc: 4825 ldr r0, [pc, #148] ; (8006454 <_svfiprintf_r+0x1f0>) + 80063be: f88d 1028 strb.w r1, [sp, #40] ; 0x28 + 80063c2: f000 f9e5 bl 8006790 + 80063c6: 2800 cmp r0, #0 + 80063c8: d038 beq.n 800643c <_svfiprintf_r+0x1d8> + 80063ca: 4b23 ldr r3, [pc, #140] ; (8006458 <_svfiprintf_r+0x1f4>) + 80063cc: bb1b cbnz r3, 8006416 <_svfiprintf_r+0x1b2> + 80063ce: 9b03 ldr r3, [sp, #12] + 80063d0: 3307 adds r3, #7 + 80063d2: f023 0307 bic.w r3, r3, #7 + 80063d6: 3308 adds r3, #8 + 80063d8: 9303 str r3, [sp, #12] + 80063da: 9b09 ldr r3, [sp, #36] ; 0x24 + 80063dc: 4433 add r3, r6 + 80063de: 9309 str r3, [sp, #36] ; 0x24 + 80063e0: e767 b.n 80062b2 <_svfiprintf_r+0x4e> + 80063e2: 460c mov r4, r1 + 80063e4: 2001 movs r0, #1 + 80063e6: fb0c 3202 mla r2, ip, r2, r3 + 80063ea: e7a5 b.n 8006338 <_svfiprintf_r+0xd4> + 80063ec: 2300 movs r3, #0 + 80063ee: f04f 0c0a mov.w ip, #10 + 80063f2: 4619 mov r1, r3 + 80063f4: 3401 adds r4, #1 + 80063f6: 9305 str r3, [sp, #20] + 80063f8: 4620 mov r0, r4 + 80063fa: f810 2b01 ldrb.w r2, [r0], #1 + 80063fe: 3a30 subs r2, #48 ; 0x30 + 8006400: 2a09 cmp r2, #9 + 8006402: d903 bls.n 800640c <_svfiprintf_r+0x1a8> + 8006404: 2b00 cmp r3, #0 + 8006406: d0c5 beq.n 8006394 <_svfiprintf_r+0x130> + 8006408: 9105 str r1, [sp, #20] + 800640a: e7c3 b.n 8006394 <_svfiprintf_r+0x130> + 800640c: 4604 mov r4, r0 + 800640e: 2301 movs r3, #1 + 8006410: fb0c 2101 mla r1, ip, r1, r2 + 8006414: e7f0 b.n 80063f8 <_svfiprintf_r+0x194> + 8006416: ab03 add r3, sp, #12 + 8006418: 9300 str r3, [sp, #0] + 800641a: 462a mov r2, r5 + 800641c: 4638 mov r0, r7 + 800641e: 4b0f ldr r3, [pc, #60] ; (800645c <_svfiprintf_r+0x1f8>) + 8006420: a904 add r1, sp, #16 + 8006422: f3af 8000 nop.w + 8006426: 1c42 adds r2, r0, #1 + 8006428: 4606 mov r6, r0 + 800642a: d1d6 bne.n 80063da <_svfiprintf_r+0x176> + 800642c: 89ab ldrh r3, [r5, #12] + 800642e: 065b lsls r3, r3, #25 + 8006430: f53f af2c bmi.w 800628c <_svfiprintf_r+0x28> + 8006434: 9809 ldr r0, [sp, #36] ; 0x24 + 8006436: b01d add sp, #116 ; 0x74 + 8006438: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 800643c: ab03 add r3, sp, #12 + 800643e: 9300 str r3, [sp, #0] + 8006440: 462a mov r2, r5 + 8006442: 4638 mov r0, r7 + 8006444: 4b05 ldr r3, [pc, #20] ; (800645c <_svfiprintf_r+0x1f8>) + 8006446: a904 add r1, sp, #16 + 8006448: f000 f87c bl 8006544 <_printf_i> + 800644c: e7eb b.n 8006426 <_svfiprintf_r+0x1c2> + 800644e: bf00 nop + 8006450: 0800755c .word 0x0800755c + 8006454: 08007566 .word 0x08007566 + 8006458: 00000000 .word 0x00000000 + 800645c: 080061ad .word 0x080061ad + 8006460: 08007562 .word 0x08007562 + +08006464 <_printf_common>: + 8006464: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8006468: 4616 mov r6, r2 + 800646a: 4699 mov r9, r3 + 800646c: 688a ldr r2, [r1, #8] + 800646e: 690b ldr r3, [r1, #16] + 8006470: 4607 mov r7, r0 + 8006472: 4293 cmp r3, r2 + 8006474: bfb8 it lt + 8006476: 4613 movlt r3, r2 + 8006478: 6033 str r3, [r6, #0] + 800647a: f891 2043 ldrb.w r2, [r1, #67] ; 0x43 + 800647e: 460c mov r4, r1 + 8006480: f8dd 8020 ldr.w r8, [sp, #32] + 8006484: b10a cbz r2, 800648a <_printf_common+0x26> + 8006486: 3301 adds r3, #1 + 8006488: 6033 str r3, [r6, #0] + 800648a: 6823 ldr r3, [r4, #0] + 800648c: 0699 lsls r1, r3, #26 + 800648e: bf42 ittt mi + 8006490: 6833 ldrmi r3, [r6, #0] + 8006492: 3302 addmi r3, #2 + 8006494: 6033 strmi r3, [r6, #0] + 8006496: 6825 ldr r5, [r4, #0] + 8006498: f015 0506 ands.w r5, r5, #6 + 800649c: d106 bne.n 80064ac <_printf_common+0x48> + 800649e: f104 0a19 add.w sl, r4, #25 + 80064a2: 68e3 ldr r3, [r4, #12] + 80064a4: 6832 ldr r2, [r6, #0] + 80064a6: 1a9b subs r3, r3, r2 + 80064a8: 42ab cmp r3, r5 + 80064aa: dc28 bgt.n 80064fe <_printf_common+0x9a> + 80064ac: f894 2043 ldrb.w r2, [r4, #67] ; 0x43 + 80064b0: 1e13 subs r3, r2, #0 + 80064b2: 6822 ldr r2, [r4, #0] + 80064b4: bf18 it ne + 80064b6: 2301 movne r3, #1 + 80064b8: 0692 lsls r2, r2, #26 + 80064ba: d42d bmi.n 8006518 <_printf_common+0xb4> + 80064bc: 4649 mov r1, r9 + 80064be: 4638 mov r0, r7 + 80064c0: f104 0243 add.w r2, r4, #67 ; 0x43 + 80064c4: 47c0 blx r8 + 80064c6: 3001 adds r0, #1 + 80064c8: d020 beq.n 800650c <_printf_common+0xa8> + 80064ca: 6823 ldr r3, [r4, #0] + 80064cc: 68e5 ldr r5, [r4, #12] + 80064ce: f003 0306 and.w r3, r3, #6 + 80064d2: 2b04 cmp r3, #4 + 80064d4: bf18 it ne + 80064d6: 2500 movne r5, #0 + 80064d8: 6832 ldr r2, [r6, #0] + 80064da: f04f 0600 mov.w r6, #0 + 80064de: 68a3 ldr r3, [r4, #8] + 80064e0: bf08 it eq + 80064e2: 1aad subeq r5, r5, r2 + 80064e4: 6922 ldr r2, [r4, #16] + 80064e6: bf08 it eq + 80064e8: ea25 75e5 biceq.w r5, r5, r5, asr #31 + 80064ec: 4293 cmp r3, r2 + 80064ee: bfc4 itt gt + 80064f0: 1a9b subgt r3, r3, r2 + 80064f2: 18ed addgt r5, r5, r3 + 80064f4: 341a adds r4, #26 + 80064f6: 42b5 cmp r5, r6 + 80064f8: d11a bne.n 8006530 <_printf_common+0xcc> + 80064fa: 2000 movs r0, #0 + 80064fc: e008 b.n 8006510 <_printf_common+0xac> + 80064fe: 2301 movs r3, #1 + 8006500: 4652 mov r2, sl + 8006502: 4649 mov r1, r9 + 8006504: 4638 mov r0, r7 + 8006506: 47c0 blx r8 + 8006508: 3001 adds r0, #1 + 800650a: d103 bne.n 8006514 <_printf_common+0xb0> + 800650c: f04f 30ff mov.w r0, #4294967295 + 8006510: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8006514: 3501 adds r5, #1 + 8006516: e7c4 b.n 80064a2 <_printf_common+0x3e> + 8006518: 2030 movs r0, #48 ; 0x30 + 800651a: 18e1 adds r1, r4, r3 + 800651c: f881 0043 strb.w r0, [r1, #67] ; 0x43 + 8006520: 1c5a adds r2, r3, #1 + 8006522: f894 1045 ldrb.w r1, [r4, #69] ; 0x45 + 8006526: 4422 add r2, r4 + 8006528: 3302 adds r3, #2 + 800652a: f882 1043 strb.w r1, [r2, #67] ; 0x43 + 800652e: e7c5 b.n 80064bc <_printf_common+0x58> + 8006530: 2301 movs r3, #1 + 8006532: 4622 mov r2, r4 + 8006534: 4649 mov r1, r9 + 8006536: 4638 mov r0, r7 + 8006538: 47c0 blx r8 + 800653a: 3001 adds r0, #1 + 800653c: d0e6 beq.n 800650c <_printf_common+0xa8> + 800653e: 3601 adds r6, #1 + 8006540: e7d9 b.n 80064f6 <_printf_common+0x92> + ... + +08006544 <_printf_i>: + 8006544: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + 8006548: 460c mov r4, r1 + 800654a: 7e27 ldrb r7, [r4, #24] + 800654c: 4691 mov r9, r2 + 800654e: 2f78 cmp r7, #120 ; 0x78 + 8006550: 4680 mov r8, r0 + 8006552: 469a mov sl, r3 + 8006554: 990c ldr r1, [sp, #48] ; 0x30 + 8006556: f104 0243 add.w r2, r4, #67 ; 0x43 + 800655a: d807 bhi.n 800656c <_printf_i+0x28> + 800655c: 2f62 cmp r7, #98 ; 0x62 + 800655e: d80a bhi.n 8006576 <_printf_i+0x32> + 8006560: 2f00 cmp r7, #0 + 8006562: f000 80d9 beq.w 8006718 <_printf_i+0x1d4> + 8006566: 2f58 cmp r7, #88 ; 0x58 + 8006568: f000 80a4 beq.w 80066b4 <_printf_i+0x170> + 800656c: f104 0642 add.w r6, r4, #66 ; 0x42 + 8006570: f884 7042 strb.w r7, [r4, #66] ; 0x42 + 8006574: e03a b.n 80065ec <_printf_i+0xa8> + 8006576: f1a7 0363 sub.w r3, r7, #99 ; 0x63 + 800657a: 2b15 cmp r3, #21 + 800657c: d8f6 bhi.n 800656c <_printf_i+0x28> + 800657e: a001 add r0, pc, #4 ; (adr r0, 8006584 <_printf_i+0x40>) + 8006580: f850 f023 ldr.w pc, [r0, r3, lsl #2] + 8006584: 080065dd .word 0x080065dd + 8006588: 080065f1 .word 0x080065f1 + 800658c: 0800656d .word 0x0800656d + 8006590: 0800656d .word 0x0800656d + 8006594: 0800656d .word 0x0800656d + 8006598: 0800656d .word 0x0800656d + 800659c: 080065f1 .word 0x080065f1 + 80065a0: 0800656d .word 0x0800656d + 80065a4: 0800656d .word 0x0800656d + 80065a8: 0800656d .word 0x0800656d + 80065ac: 0800656d .word 0x0800656d + 80065b0: 080066ff .word 0x080066ff + 80065b4: 08006621 .word 0x08006621 + 80065b8: 080066e1 .word 0x080066e1 + 80065bc: 0800656d .word 0x0800656d + 80065c0: 0800656d .word 0x0800656d + 80065c4: 08006721 .word 0x08006721 + 80065c8: 0800656d .word 0x0800656d + 80065cc: 08006621 .word 0x08006621 + 80065d0: 0800656d .word 0x0800656d + 80065d4: 0800656d .word 0x0800656d + 80065d8: 080066e9 .word 0x080066e9 + 80065dc: 680b ldr r3, [r1, #0] + 80065de: f104 0642 add.w r6, r4, #66 ; 0x42 + 80065e2: 1d1a adds r2, r3, #4 + 80065e4: 681b ldr r3, [r3, #0] + 80065e6: 600a str r2, [r1, #0] + 80065e8: f884 3042 strb.w r3, [r4, #66] ; 0x42 + 80065ec: 2301 movs r3, #1 + 80065ee: e0a4 b.n 800673a <_printf_i+0x1f6> + 80065f0: 6825 ldr r5, [r4, #0] + 80065f2: 6808 ldr r0, [r1, #0] + 80065f4: 062e lsls r6, r5, #24 + 80065f6: f100 0304 add.w r3, r0, #4 + 80065fa: d50a bpl.n 8006612 <_printf_i+0xce> + 80065fc: 6805 ldr r5, [r0, #0] + 80065fe: 600b str r3, [r1, #0] + 8006600: 2d00 cmp r5, #0 + 8006602: da03 bge.n 800660c <_printf_i+0xc8> + 8006604: 232d movs r3, #45 ; 0x2d + 8006606: 426d negs r5, r5 + 8006608: f884 3043 strb.w r3, [r4, #67] ; 0x43 + 800660c: 230a movs r3, #10 + 800660e: 485e ldr r0, [pc, #376] ; (8006788 <_printf_i+0x244>) + 8006610: e019 b.n 8006646 <_printf_i+0x102> + 8006612: f015 0f40 tst.w r5, #64 ; 0x40 + 8006616: 6805 ldr r5, [r0, #0] + 8006618: 600b str r3, [r1, #0] + 800661a: bf18 it ne + 800661c: b22d sxthne r5, r5 + 800661e: e7ef b.n 8006600 <_printf_i+0xbc> + 8006620: 680b ldr r3, [r1, #0] + 8006622: 6825 ldr r5, [r4, #0] + 8006624: 1d18 adds r0, r3, #4 + 8006626: 6008 str r0, [r1, #0] + 8006628: 0628 lsls r0, r5, #24 + 800662a: d501 bpl.n 8006630 <_printf_i+0xec> + 800662c: 681d ldr r5, [r3, #0] + 800662e: e002 b.n 8006636 <_printf_i+0xf2> + 8006630: 0669 lsls r1, r5, #25 + 8006632: d5fb bpl.n 800662c <_printf_i+0xe8> + 8006634: 881d ldrh r5, [r3, #0] + 8006636: 2f6f cmp r7, #111 ; 0x6f + 8006638: bf0c ite eq + 800663a: 2308 moveq r3, #8 + 800663c: 230a movne r3, #10 + 800663e: 4852 ldr r0, [pc, #328] ; (8006788 <_printf_i+0x244>) + 8006640: 2100 movs r1, #0 + 8006642: f884 1043 strb.w r1, [r4, #67] ; 0x43 + 8006646: 6866 ldr r6, [r4, #4] + 8006648: 2e00 cmp r6, #0 + 800664a: bfa8 it ge + 800664c: 6821 ldrge r1, [r4, #0] + 800664e: 60a6 str r6, [r4, #8] + 8006650: bfa4 itt ge + 8006652: f021 0104 bicge.w r1, r1, #4 + 8006656: 6021 strge r1, [r4, #0] + 8006658: b90d cbnz r5, 800665e <_printf_i+0x11a> + 800665a: 2e00 cmp r6, #0 + 800665c: d04d beq.n 80066fa <_printf_i+0x1b6> + 800665e: 4616 mov r6, r2 + 8006660: fbb5 f1f3 udiv r1, r5, r3 + 8006664: fb03 5711 mls r7, r3, r1, r5 + 8006668: 5dc7 ldrb r7, [r0, r7] + 800666a: f806 7d01 strb.w r7, [r6, #-1]! + 800666e: 462f mov r7, r5 + 8006670: 42bb cmp r3, r7 + 8006672: 460d mov r5, r1 + 8006674: d9f4 bls.n 8006660 <_printf_i+0x11c> + 8006676: 2b08 cmp r3, #8 + 8006678: d10b bne.n 8006692 <_printf_i+0x14e> + 800667a: 6823 ldr r3, [r4, #0] + 800667c: 07df lsls r7, r3, #31 + 800667e: d508 bpl.n 8006692 <_printf_i+0x14e> + 8006680: 6923 ldr r3, [r4, #16] + 8006682: 6861 ldr r1, [r4, #4] + 8006684: 4299 cmp r1, r3 + 8006686: bfde ittt le + 8006688: 2330 movle r3, #48 ; 0x30 + 800668a: f806 3c01 strble.w r3, [r6, #-1] + 800668e: f106 36ff addle.w r6, r6, #4294967295 + 8006692: 1b92 subs r2, r2, r6 + 8006694: 6122 str r2, [r4, #16] + 8006696: 464b mov r3, r9 + 8006698: 4621 mov r1, r4 + 800669a: 4640 mov r0, r8 + 800669c: f8cd a000 str.w sl, [sp] + 80066a0: aa03 add r2, sp, #12 + 80066a2: f7ff fedf bl 8006464 <_printf_common> + 80066a6: 3001 adds r0, #1 + 80066a8: d14c bne.n 8006744 <_printf_i+0x200> + 80066aa: f04f 30ff mov.w r0, #4294967295 + 80066ae: b004 add sp, #16 + 80066b0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80066b4: 4834 ldr r0, [pc, #208] ; (8006788 <_printf_i+0x244>) + 80066b6: f884 7045 strb.w r7, [r4, #69] ; 0x45 + 80066ba: 680e ldr r6, [r1, #0] + 80066bc: 6823 ldr r3, [r4, #0] + 80066be: f856 5b04 ldr.w r5, [r6], #4 + 80066c2: 061f lsls r7, r3, #24 + 80066c4: 600e str r6, [r1, #0] + 80066c6: d514 bpl.n 80066f2 <_printf_i+0x1ae> + 80066c8: 07d9 lsls r1, r3, #31 + 80066ca: bf44 itt mi + 80066cc: f043 0320 orrmi.w r3, r3, #32 + 80066d0: 6023 strmi r3, [r4, #0] + 80066d2: b91d cbnz r5, 80066dc <_printf_i+0x198> + 80066d4: 6823 ldr r3, [r4, #0] + 80066d6: f023 0320 bic.w r3, r3, #32 + 80066da: 6023 str r3, [r4, #0] + 80066dc: 2310 movs r3, #16 + 80066de: e7af b.n 8006640 <_printf_i+0xfc> + 80066e0: 6823 ldr r3, [r4, #0] + 80066e2: f043 0320 orr.w r3, r3, #32 + 80066e6: 6023 str r3, [r4, #0] + 80066e8: 2378 movs r3, #120 ; 0x78 + 80066ea: 4828 ldr r0, [pc, #160] ; (800678c <_printf_i+0x248>) + 80066ec: f884 3045 strb.w r3, [r4, #69] ; 0x45 + 80066f0: e7e3 b.n 80066ba <_printf_i+0x176> + 80066f2: 065e lsls r6, r3, #25 + 80066f4: bf48 it mi + 80066f6: b2ad uxthmi r5, r5 + 80066f8: e7e6 b.n 80066c8 <_printf_i+0x184> + 80066fa: 4616 mov r6, r2 + 80066fc: e7bb b.n 8006676 <_printf_i+0x132> + 80066fe: 680b ldr r3, [r1, #0] + 8006700: 6826 ldr r6, [r4, #0] + 8006702: 1d1d adds r5, r3, #4 + 8006704: 6960 ldr r0, [r4, #20] + 8006706: 600d str r5, [r1, #0] + 8006708: 0635 lsls r5, r6, #24 + 800670a: 681b ldr r3, [r3, #0] + 800670c: d501 bpl.n 8006712 <_printf_i+0x1ce> + 800670e: 6018 str r0, [r3, #0] + 8006710: e002 b.n 8006718 <_printf_i+0x1d4> + 8006712: 0671 lsls r1, r6, #25 + 8006714: d5fb bpl.n 800670e <_printf_i+0x1ca> + 8006716: 8018 strh r0, [r3, #0] + 8006718: 2300 movs r3, #0 + 800671a: 4616 mov r6, r2 + 800671c: 6123 str r3, [r4, #16] + 800671e: e7ba b.n 8006696 <_printf_i+0x152> + 8006720: 680b ldr r3, [r1, #0] + 8006722: 1d1a adds r2, r3, #4 + 8006724: 600a str r2, [r1, #0] + 8006726: 681e ldr r6, [r3, #0] + 8006728: 2100 movs r1, #0 + 800672a: 4630 mov r0, r6 + 800672c: 6862 ldr r2, [r4, #4] + 800672e: f000 f82f bl 8006790 + 8006732: b108 cbz r0, 8006738 <_printf_i+0x1f4> + 8006734: 1b80 subs r0, r0, r6 + 8006736: 6060 str r0, [r4, #4] + 8006738: 6863 ldr r3, [r4, #4] + 800673a: 6123 str r3, [r4, #16] + 800673c: 2300 movs r3, #0 + 800673e: f884 3043 strb.w r3, [r4, #67] ; 0x43 + 8006742: e7a8 b.n 8006696 <_printf_i+0x152> + 8006744: 4632 mov r2, r6 + 8006746: 4649 mov r1, r9 + 8006748: 4640 mov r0, r8 + 800674a: 6923 ldr r3, [r4, #16] + 800674c: 47d0 blx sl + 800674e: 3001 adds r0, #1 + 8006750: d0ab beq.n 80066aa <_printf_i+0x166> + 8006752: 6823 ldr r3, [r4, #0] + 8006754: 079b lsls r3, r3, #30 + 8006756: d413 bmi.n 8006780 <_printf_i+0x23c> + 8006758: 68e0 ldr r0, [r4, #12] + 800675a: 9b03 ldr r3, [sp, #12] + 800675c: 4298 cmp r0, r3 + 800675e: bfb8 it lt + 8006760: 4618 movlt r0, r3 + 8006762: e7a4 b.n 80066ae <_printf_i+0x16a> + 8006764: 2301 movs r3, #1 + 8006766: 4632 mov r2, r6 + 8006768: 4649 mov r1, r9 + 800676a: 4640 mov r0, r8 + 800676c: 47d0 blx sl + 800676e: 3001 adds r0, #1 + 8006770: d09b beq.n 80066aa <_printf_i+0x166> + 8006772: 3501 adds r5, #1 + 8006774: 68e3 ldr r3, [r4, #12] + 8006776: 9903 ldr r1, [sp, #12] + 8006778: 1a5b subs r3, r3, r1 + 800677a: 42ab cmp r3, r5 + 800677c: dcf2 bgt.n 8006764 <_printf_i+0x220> + 800677e: e7eb b.n 8006758 <_printf_i+0x214> + 8006780: 2500 movs r5, #0 + 8006782: f104 0619 add.w r6, r4, #25 + 8006786: e7f5 b.n 8006774 <_printf_i+0x230> + 8006788: 0800756d .word 0x0800756d + 800678c: 0800757e .word 0x0800757e + +08006790 : + 8006790: 4603 mov r3, r0 + 8006792: b510 push {r4, lr} + 8006794: b2c9 uxtb r1, r1 + 8006796: 4402 add r2, r0 + 8006798: 4293 cmp r3, r2 + 800679a: 4618 mov r0, r3 + 800679c: d101 bne.n 80067a2 + 800679e: 2000 movs r0, #0 + 80067a0: e003 b.n 80067aa + 80067a2: 7804 ldrb r4, [r0, #0] + 80067a4: 3301 adds r3, #1 + 80067a6: 428c cmp r4, r1 + 80067a8: d1f6 bne.n 8006798 + 80067aa: bd10 pop {r4, pc} + +080067ac : + 80067ac: 440a add r2, r1 + 80067ae: 4291 cmp r1, r2 + 80067b0: f100 33ff add.w r3, r0, #4294967295 + 80067b4: d100 bne.n 80067b8 + 80067b6: 4770 bx lr + 80067b8: b510 push {r4, lr} + 80067ba: f811 4b01 ldrb.w r4, [r1], #1 + 80067be: 4291 cmp r1, r2 + 80067c0: f803 4f01 strb.w r4, [r3, #1]! + 80067c4: d1f9 bne.n 80067ba + 80067c6: bd10 pop {r4, pc} + +080067c8 : + 80067c8: 4288 cmp r0, r1 + 80067ca: b510 push {r4, lr} + 80067cc: eb01 0402 add.w r4, r1, r2 + 80067d0: d902 bls.n 80067d8 + 80067d2: 4284 cmp r4, r0 + 80067d4: 4623 mov r3, r4 + 80067d6: d807 bhi.n 80067e8 + 80067d8: 1e43 subs r3, r0, #1 + 80067da: 42a1 cmp r1, r4 + 80067dc: d008 beq.n 80067f0 + 80067de: f811 2b01 ldrb.w r2, [r1], #1 + 80067e2: f803 2f01 strb.w r2, [r3, #1]! + 80067e6: e7f8 b.n 80067da + 80067e8: 4601 mov r1, r0 + 80067ea: 4402 add r2, r0 + 80067ec: 428a cmp r2, r1 + 80067ee: d100 bne.n 80067f2 + 80067f0: bd10 pop {r4, pc} + 80067f2: f813 4d01 ldrb.w r4, [r3, #-1]! + 80067f6: f802 4d01 strb.w r4, [r2, #-1]! + 80067fa: e7f7 b.n 80067ec + +080067fc <_free_r>: + 80067fc: b538 push {r3, r4, r5, lr} + 80067fe: 4605 mov r5, r0 + 8006800: 2900 cmp r1, #0 + 8006802: d043 beq.n 800688c <_free_r+0x90> + 8006804: f851 3c04 ldr.w r3, [r1, #-4] + 8006808: 1f0c subs r4, r1, #4 + 800680a: 2b00 cmp r3, #0 + 800680c: bfb8 it lt + 800680e: 18e4 addlt r4, r4, r3 + 8006810: f000 f8d0 bl 80069b4 <__malloc_lock> + 8006814: 4a1e ldr r2, [pc, #120] ; (8006890 <_free_r+0x94>) + 8006816: 6813 ldr r3, [r2, #0] + 8006818: 4610 mov r0, r2 + 800681a: b933 cbnz r3, 800682a <_free_r+0x2e> + 800681c: 6063 str r3, [r4, #4] + 800681e: 6014 str r4, [r2, #0] + 8006820: 4628 mov r0, r5 + 8006822: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8006826: f000 b8cb b.w 80069c0 <__malloc_unlock> + 800682a: 42a3 cmp r3, r4 + 800682c: d90a bls.n 8006844 <_free_r+0x48> + 800682e: 6821 ldr r1, [r4, #0] + 8006830: 1862 adds r2, r4, r1 + 8006832: 4293 cmp r3, r2 + 8006834: bf01 itttt eq + 8006836: 681a ldreq r2, [r3, #0] + 8006838: 685b ldreq r3, [r3, #4] + 800683a: 1852 addeq r2, r2, r1 + 800683c: 6022 streq r2, [r4, #0] + 800683e: 6063 str r3, [r4, #4] + 8006840: 6004 str r4, [r0, #0] + 8006842: e7ed b.n 8006820 <_free_r+0x24> + 8006844: 461a mov r2, r3 + 8006846: 685b ldr r3, [r3, #4] + 8006848: b10b cbz r3, 800684e <_free_r+0x52> + 800684a: 42a3 cmp r3, r4 + 800684c: d9fa bls.n 8006844 <_free_r+0x48> + 800684e: 6811 ldr r1, [r2, #0] + 8006850: 1850 adds r0, r2, r1 + 8006852: 42a0 cmp r0, r4 + 8006854: d10b bne.n 800686e <_free_r+0x72> + 8006856: 6820 ldr r0, [r4, #0] + 8006858: 4401 add r1, r0 + 800685a: 1850 adds r0, r2, r1 + 800685c: 4283 cmp r3, r0 + 800685e: 6011 str r1, [r2, #0] + 8006860: d1de bne.n 8006820 <_free_r+0x24> + 8006862: 6818 ldr r0, [r3, #0] + 8006864: 685b ldr r3, [r3, #4] + 8006866: 4401 add r1, r0 + 8006868: 6011 str r1, [r2, #0] + 800686a: 6053 str r3, [r2, #4] + 800686c: e7d8 b.n 8006820 <_free_r+0x24> + 800686e: d902 bls.n 8006876 <_free_r+0x7a> + 8006870: 230c movs r3, #12 + 8006872: 602b str r3, [r5, #0] + 8006874: e7d4 b.n 8006820 <_free_r+0x24> + 8006876: 6820 ldr r0, [r4, #0] + 8006878: 1821 adds r1, r4, r0 + 800687a: 428b cmp r3, r1 + 800687c: bf01 itttt eq + 800687e: 6819 ldreq r1, [r3, #0] + 8006880: 685b ldreq r3, [r3, #4] + 8006882: 1809 addeq r1, r1, r0 + 8006884: 6021 streq r1, [r4, #0] + 8006886: 6063 str r3, [r4, #4] + 8006888: 6054 str r4, [r2, #4] + 800688a: e7c9 b.n 8006820 <_free_r+0x24> + 800688c: bd38 pop {r3, r4, r5, pc} + 800688e: bf00 nop + 8006890: 200000dc .word 0x200000dc + +08006894 <_malloc_r>: + 8006894: b5f8 push {r3, r4, r5, r6, r7, lr} + 8006896: 1ccd adds r5, r1, #3 + 8006898: f025 0503 bic.w r5, r5, #3 + 800689c: 3508 adds r5, #8 + 800689e: 2d0c cmp r5, #12 + 80068a0: bf38 it cc + 80068a2: 250c movcc r5, #12 + 80068a4: 2d00 cmp r5, #0 + 80068a6: 4606 mov r6, r0 + 80068a8: db01 blt.n 80068ae <_malloc_r+0x1a> + 80068aa: 42a9 cmp r1, r5 + 80068ac: d903 bls.n 80068b6 <_malloc_r+0x22> + 80068ae: 230c movs r3, #12 + 80068b0: 6033 str r3, [r6, #0] + 80068b2: 2000 movs r0, #0 + 80068b4: bdf8 pop {r3, r4, r5, r6, r7, pc} + 80068b6: f000 f87d bl 80069b4 <__malloc_lock> + 80068ba: 4921 ldr r1, [pc, #132] ; (8006940 <_malloc_r+0xac>) + 80068bc: 680a ldr r2, [r1, #0] + 80068be: 4614 mov r4, r2 + 80068c0: b99c cbnz r4, 80068ea <_malloc_r+0x56> + 80068c2: 4f20 ldr r7, [pc, #128] ; (8006944 <_malloc_r+0xb0>) + 80068c4: 683b ldr r3, [r7, #0] + 80068c6: b923 cbnz r3, 80068d2 <_malloc_r+0x3e> + 80068c8: 4621 mov r1, r4 + 80068ca: 4630 mov r0, r6 + 80068cc: f000 f862 bl 8006994 <_sbrk_r> + 80068d0: 6038 str r0, [r7, #0] + 80068d2: 4629 mov r1, r5 + 80068d4: 4630 mov r0, r6 + 80068d6: f000 f85d bl 8006994 <_sbrk_r> + 80068da: 1c43 adds r3, r0, #1 + 80068dc: d123 bne.n 8006926 <_malloc_r+0x92> + 80068de: 230c movs r3, #12 + 80068e0: 4630 mov r0, r6 + 80068e2: 6033 str r3, [r6, #0] + 80068e4: f000 f86c bl 80069c0 <__malloc_unlock> + 80068e8: e7e3 b.n 80068b2 <_malloc_r+0x1e> + 80068ea: 6823 ldr r3, [r4, #0] + 80068ec: 1b5b subs r3, r3, r5 + 80068ee: d417 bmi.n 8006920 <_malloc_r+0x8c> + 80068f0: 2b0b cmp r3, #11 + 80068f2: d903 bls.n 80068fc <_malloc_r+0x68> + 80068f4: 6023 str r3, [r4, #0] + 80068f6: 441c add r4, r3 + 80068f8: 6025 str r5, [r4, #0] + 80068fa: e004 b.n 8006906 <_malloc_r+0x72> + 80068fc: 6863 ldr r3, [r4, #4] + 80068fe: 42a2 cmp r2, r4 + 8006900: bf0c ite eq + 8006902: 600b streq r3, [r1, #0] + 8006904: 6053 strne r3, [r2, #4] + 8006906: 4630 mov r0, r6 + 8006908: f000 f85a bl 80069c0 <__malloc_unlock> + 800690c: f104 000b add.w r0, r4, #11 + 8006910: 1d23 adds r3, r4, #4 + 8006912: f020 0007 bic.w r0, r0, #7 + 8006916: 1ac2 subs r2, r0, r3 + 8006918: d0cc beq.n 80068b4 <_malloc_r+0x20> + 800691a: 1a1b subs r3, r3, r0 + 800691c: 50a3 str r3, [r4, r2] + 800691e: e7c9 b.n 80068b4 <_malloc_r+0x20> + 8006920: 4622 mov r2, r4 + 8006922: 6864 ldr r4, [r4, #4] + 8006924: e7cc b.n 80068c0 <_malloc_r+0x2c> + 8006926: 1cc4 adds r4, r0, #3 + 8006928: f024 0403 bic.w r4, r4, #3 + 800692c: 42a0 cmp r0, r4 + 800692e: d0e3 beq.n 80068f8 <_malloc_r+0x64> + 8006930: 1a21 subs r1, r4, r0 + 8006932: 4630 mov r0, r6 + 8006934: f000 f82e bl 8006994 <_sbrk_r> + 8006938: 3001 adds r0, #1 + 800693a: d1dd bne.n 80068f8 <_malloc_r+0x64> + 800693c: e7cf b.n 80068de <_malloc_r+0x4a> + 800693e: bf00 nop + 8006940: 200000dc .word 0x200000dc + 8006944: 200000e0 .word 0x200000e0 + +08006948 <_realloc_r>: + 8006948: b5f8 push {r3, r4, r5, r6, r7, lr} + 800694a: 4607 mov r7, r0 + 800694c: 4614 mov r4, r2 + 800694e: 460e mov r6, r1 + 8006950: b921 cbnz r1, 800695c <_realloc_r+0x14> + 8006952: 4611 mov r1, r2 + 8006954: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} + 8006958: f7ff bf9c b.w 8006894 <_malloc_r> + 800695c: b922 cbnz r2, 8006968 <_realloc_r+0x20> + 800695e: f7ff ff4d bl 80067fc <_free_r> + 8006962: 4625 mov r5, r4 + 8006964: 4628 mov r0, r5 + 8006966: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8006968: f000 f830 bl 80069cc <_malloc_usable_size_r> + 800696c: 42a0 cmp r0, r4 + 800696e: d20f bcs.n 8006990 <_realloc_r+0x48> + 8006970: 4621 mov r1, r4 + 8006972: 4638 mov r0, r7 + 8006974: f7ff ff8e bl 8006894 <_malloc_r> + 8006978: 4605 mov r5, r0 + 800697a: 2800 cmp r0, #0 + 800697c: d0f2 beq.n 8006964 <_realloc_r+0x1c> + 800697e: 4631 mov r1, r6 + 8006980: 4622 mov r2, r4 + 8006982: f7ff ff13 bl 80067ac + 8006986: 4631 mov r1, r6 + 8006988: 4638 mov r0, r7 + 800698a: f7ff ff37 bl 80067fc <_free_r> + 800698e: e7e9 b.n 8006964 <_realloc_r+0x1c> + 8006990: 4635 mov r5, r6 + 8006992: e7e7 b.n 8006964 <_realloc_r+0x1c> + +08006994 <_sbrk_r>: + 8006994: b538 push {r3, r4, r5, lr} + 8006996: 2300 movs r3, #0 + 8006998: 4d05 ldr r5, [pc, #20] ; (80069b0 <_sbrk_r+0x1c>) + 800699a: 4604 mov r4, r0 + 800699c: 4608 mov r0, r1 + 800699e: 602b str r3, [r5, #0] + 80069a0: f7f9 fece bl 8000740 <_sbrk> + 80069a4: 1c43 adds r3, r0, #1 + 80069a6: d102 bne.n 80069ae <_sbrk_r+0x1a> + 80069a8: 682b ldr r3, [r5, #0] + 80069aa: b103 cbz r3, 80069ae <_sbrk_r+0x1a> + 80069ac: 6023 str r3, [r4, #0] + 80069ae: bd38 pop {r3, r4, r5, pc} + 80069b0: 20000854 .word 0x20000854 + +080069b4 <__malloc_lock>: + 80069b4: 4801 ldr r0, [pc, #4] ; (80069bc <__malloc_lock+0x8>) + 80069b6: f000 b811 b.w 80069dc <__retarget_lock_acquire_recursive> + 80069ba: bf00 nop + 80069bc: 2000085c .word 0x2000085c + +080069c0 <__malloc_unlock>: + 80069c0: 4801 ldr r0, [pc, #4] ; (80069c8 <__malloc_unlock+0x8>) + 80069c2: f000 b80c b.w 80069de <__retarget_lock_release_recursive> + 80069c6: bf00 nop + 80069c8: 2000085c .word 0x2000085c + +080069cc <_malloc_usable_size_r>: + 80069cc: f851 3c04 ldr.w r3, [r1, #-4] + 80069d0: 1f18 subs r0, r3, #4 + 80069d2: 2b00 cmp r3, #0 + 80069d4: bfbc itt lt + 80069d6: 580b ldrlt r3, [r1, r0] + 80069d8: 18c0 addlt r0, r0, r3 + 80069da: 4770 bx lr + +080069dc <__retarget_lock_acquire_recursive>: + 80069dc: 4770 bx lr + +080069de <__retarget_lock_release_recursive>: + 80069de: 4770 bx lr + +080069e0 <_init>: + 80069e0: b5f8 push {r3, r4, r5, r6, r7, lr} + 80069e2: bf00 nop + 80069e4: bcf8 pop {r3, r4, r5, r6, r7} + 80069e6: bc08 pop {r3} + 80069e8: 469e mov lr, r3 + 80069ea: 4770 bx lr + +080069ec <_fini>: + 80069ec: b5f8 push {r3, r4, r5, r6, r7, lr} + 80069ee: bf00 nop + 80069f0: bcf8 pop {r3, r4, r5, r6, r7} + 80069f2: bc08 pop {r3} + 80069f4: 469e mov lr, r3 + 80069f6: 4770 bx lr diff --git a/103ze/Debug/103ze_code.map b/103ze/Debug/103ze_code.map index ecbbcc9..eaf70c8 100644 --- a/103ze/Debug/103ze_code.map +++ b/103ze/Debug/103ze_code.map @@ -10,23 +10,69 @@ c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externalt c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/crt0.o (__libc_init_array) c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/crt0.o (memset) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + mycode/c.o (sprintf) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) (_svfprintf_r) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_printf_i) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (memchr) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (memcpy) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (memmove) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_free_r) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_malloc_r) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_realloc_r) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) (_sbrk_r) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) (__malloc_lock) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) (_malloc_usable_size_r) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) (errno) +c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) (__retarget_lock_acquire_recursive) Allocating common symbols Common symbol size file USERPath 0x4 FATFS/App/fatfs.o +__lock___atexit_recursive_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) +__lock___arc4random_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) hspi2 0x58 Core/Src/main.o +errno 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) ftinfo 0x24 mycode/text.o uwTick 0x4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o pFlash 0x20 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o +__lock___env_recursive_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) +__lock___sinit_recursive_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) hsram1 0x48 Core/Src/main.o +__lock___malloc_recursive_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) retUSER 0x1 FATFS/App/fatfs.o lcddev 0xa mycode/lcd.o SD 0x230 mycode/c.o -Timer2 0x1 mycode/fatfs_sd.o -Timer1 0x1 mycode/fatfs_sd.o +Timer2 0x4 mycode/fatfs_sd.o +__lock___at_quick_exit_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) +Timer1 0x4 mycode/fatfs_sd.o +__lock___dd_hash_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) +__lock___tz_mutex 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) USERFile 0x22c FATFS/App/fatfs.o USERFatFS 0x230 FATFS/App/fatfs.o +__lock___sfp_recursive_mutex + 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) Discarded input sections @@ -168,7 +214,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 Core/Src/stm32f1xx_hal_msp.o .debug_macro 0x0000000000000000 0x217 Core/Src/stm32f1xx_hal_msp.o .debug_macro 0x0000000000000000 0xb5 Core/Src/stm32f1xx_hal_msp.o - .debug_macro 0x0000000000000000 0x28 Core/Src/stm32f1xx_hal_msp.o + .debug_macro 0x0000000000000000 0x4c Core/Src/stm32f1xx_hal_msp.o .group 0x0000000000000000 0xc Core/Src/stm32f1xx_it.o .group 0x0000000000000000 0xc Core/Src/stm32f1xx_it.o .group 0x0000000000000000 0xc Core/Src/stm32f1xx_it.o @@ -245,7 +291,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 Core/Src/stm32f1xx_it.o .debug_macro 0x0000000000000000 0x217 Core/Src/stm32f1xx_it.o .debug_macro 0x0000000000000000 0xb5 Core/Src/stm32f1xx_it.o - .debug_macro 0x0000000000000000 0x28 Core/Src/stm32f1xx_it.o + .debug_macro 0x0000000000000000 0x4c Core/Src/stm32f1xx_it.o .group 0x0000000000000000 0xc Core/Src/syscalls.o .group 0x0000000000000000 0xc Core/Src/syscalls.o .group 0x0000000000000000 0xc Core/Src/syscalls.o @@ -401,15 +447,6 @@ Discarded input sections .text 0x0000000000000000 0x0 Core/Src/sysmem.o .data 0x0000000000000000 0x0 Core/Src/sysmem.o .bss 0x0000000000000000 0x0 Core/Src/sysmem.o - .bss.__sbrk_heap_end - 0x0000000000000000 0x4 Core/Src/sysmem.o - .text._sbrk 0x0000000000000000 0x6c Core/Src/sysmem.o - .debug_info 0x0000000000000000 0xa25 Core/Src/sysmem.o - .debug_abbrev 0x0000000000000000 0x1bf Core/Src/sysmem.o - .debug_aranges - 0x0000000000000000 0x20 Core/Src/sysmem.o - .debug_ranges 0x0000000000000000 0x10 Core/Src/sysmem.o - .debug_macro 0x0000000000000000 0xff Core/Src/sysmem.o .debug_macro 0x0000000000000000 0xa9c Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x10 Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x22 Core/Src/sysmem.o @@ -428,16 +465,9 @@ Discarded input sections .debug_macro 0x0000000000000000 0x71 Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x1c Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x12a Core/Src/sysmem.o - .debug_macro 0x0000000000000000 0x23b Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x103 Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x6a Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x1df Core/Src/sysmem.o - .debug_line 0x0000000000000000 0x4f8 Core/Src/sysmem.o - .debug_str 0x0000000000000000 0x6250 Core/Src/sysmem.o - .comment 0x0000000000000000 0x54 Core/Src/sysmem.o - .debug_frame 0x0000000000000000 0x34 Core/Src/sysmem.o - .ARM.attributes - 0x0000000000000000 0x2d Core/Src/sysmem.o .group 0x0000000000000000 0xc Core/Src/system_stm32f1xx.o .group 0x0000000000000000 0xc Core/Src/system_stm32f1xx.o .group 0x0000000000000000 0xc Core/Src/system_stm32f1xx.o @@ -1246,8 +1276,6 @@ Discarded input sections .bss 0x0000000000000000 0x0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o .text.HAL_GPIO_DeInit 0x0000000000000000 0x198 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .text.HAL_GPIO_ReadPin - 0x0000000000000000 0x2e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o .text.HAL_GPIO_TogglePin 0x0000000000000000 0x32 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o .text.HAL_GPIO_LockPin @@ -2335,7 +2363,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 FATFS/App/fatfs.o .debug_macro 0x0000000000000000 0x217 FATFS/App/fatfs.o .debug_macro 0x0000000000000000 0xb5 FATFS/App/fatfs.o - .debug_macro 0x0000000000000000 0x28 FATFS/App/fatfs.o + .debug_macro 0x0000000000000000 0x4c FATFS/App/fatfs.o .debug_macro 0x0000000000000000 0xf5 FATFS/App/fatfs.o .debug_macro 0x0000000000000000 0x8e FATFS/App/fatfs.o .group 0x0000000000000000 0xc FATFS/Target/user_diskio.o @@ -2447,7 +2475,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 FATFS/Target/user_diskio.o .debug_macro 0x0000000000000000 0x217 FATFS/Target/user_diskio.o .debug_macro 0x0000000000000000 0xb5 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000000000 0x28 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000000000 0x4c FATFS/Target/user_diskio.o .debug_macro 0x0000000000000000 0xd8 FATFS/Target/user_diskio.o .debug_macro 0x0000000000000000 0xf5 FATFS/Target/user_diskio.o .group 0x0000000000000000 0xc Middlewares/Third_Party/FatFs/src/diskio.o @@ -2536,7 +2564,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 Middlewares/Third_Party/FatFs/src/diskio.o .debug_macro 0x0000000000000000 0x217 Middlewares/Third_Party/FatFs/src/diskio.o .debug_macro 0x0000000000000000 0xb5 Middlewares/Third_Party/FatFs/src/diskio.o - .debug_macro 0x0000000000000000 0x28 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_macro 0x0000000000000000 0x4c Middlewares/Third_Party/FatFs/src/diskio.o .debug_macro 0x0000000000000000 0xd8 Middlewares/Third_Party/FatFs/src/diskio.o .debug_macro 0x0000000000000000 0xf5 Middlewares/Third_Party/FatFs/src/diskio.o .group 0x0000000000000000 0xc Middlewares/Third_Party/FatFs/src/ff.o @@ -2662,7 +2690,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 Middlewares/Third_Party/FatFs/src/ff.o .debug_macro 0x0000000000000000 0x217 Middlewares/Third_Party/FatFs/src/ff.o .debug_macro 0x0000000000000000 0xb5 Middlewares/Third_Party/FatFs/src/ff.o - .debug_macro 0x0000000000000000 0x28 Middlewares/Third_Party/FatFs/src/ff.o + .debug_macro 0x0000000000000000 0x4c Middlewares/Third_Party/FatFs/src/ff.o .debug_macro 0x0000000000000000 0xd8 Middlewares/Third_Party/FatFs/src/ff.o .debug_macro 0x0000000000000000 0xf5 Middlewares/Third_Party/FatFs/src/ff.o .debug_macro 0x0000000000000000 0x8e Middlewares/Third_Party/FatFs/src/ff.o @@ -2754,7 +2782,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .debug_macro 0x0000000000000000 0x217 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .debug_macro 0x0000000000000000 0xb5 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_macro 0x0000000000000000 0x28 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_macro 0x0000000000000000 0x4c Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .debug_macro 0x0000000000000000 0xd8 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .debug_macro 0x0000000000000000 0xf5 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .group 0x0000000000000000 0xc Middlewares/Third_Party/FatFs/src/option/syscall.o @@ -2874,11 +2902,11 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 Middlewares/Third_Party/FatFs/src/option/syscall.o .debug_macro 0x0000000000000000 0x217 Middlewares/Third_Party/FatFs/src/option/syscall.o .debug_macro 0x0000000000000000 0xb5 Middlewares/Third_Party/FatFs/src/option/syscall.o - .debug_macro 0x0000000000000000 0x28 Middlewares/Third_Party/FatFs/src/option/syscall.o + .debug_macro 0x0000000000000000 0x4c Middlewares/Third_Party/FatFs/src/option/syscall.o .debug_macro 0x0000000000000000 0xd8 Middlewares/Third_Party/FatFs/src/option/syscall.o .debug_macro 0x0000000000000000 0xf5 Middlewares/Third_Party/FatFs/src/option/syscall.o .debug_line 0x0000000000000000 0x829 Middlewares/Third_Party/FatFs/src/option/syscall.o - .debug_str 0x0000000000000000 0x8fb2f Middlewares/Third_Party/FatFs/src/option/syscall.o + .debug_str 0x0000000000000000 0x8fbb8 Middlewares/Third_Party/FatFs/src/option/syscall.o .comment 0x0000000000000000 0x54 Middlewares/Third_Party/FatFs/src/option/syscall.o .ARM.attributes 0x0000000000000000 0x33 Middlewares/Third_Party/FatFs/src/option/syscall.o @@ -2964,7 +2992,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 mycode/c.o .debug_macro 0x0000000000000000 0x217 mycode/c.o .debug_macro 0x0000000000000000 0xb5 mycode/c.o - .debug_macro 0x0000000000000000 0x28 mycode/c.o + .debug_macro 0x0000000000000000 0x4c mycode/c.o .debug_macro 0x0000000000000000 0xde mycode/c.o .debug_macro 0x0000000000000000 0xf5 mycode/c.o .debug_macro 0x0000000000000000 0x8e mycode/c.o @@ -3045,7 +3073,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 mycode/falsh.o .debug_macro 0x0000000000000000 0x217 mycode/falsh.o .debug_macro 0x0000000000000000 0xb5 mycode/falsh.o - .debug_macro 0x0000000000000000 0x28 mycode/falsh.o + .debug_macro 0x0000000000000000 0x4c mycode/falsh.o .group 0x0000000000000000 0xc mycode/fatfs_sd.o .group 0x0000000000000000 0xc mycode/fatfs_sd.o .group 0x0000000000000000 0xc mycode/fatfs_sd.o @@ -3090,7 +3118,7 @@ Discarded input sections .data 0x0000000000000000 0x0 mycode/fatfs_sd.o .bss 0x0000000000000000 0x0 mycode/fatfs_sd.o .text.SDTimer_Handler - 0x0000000000000000 0x44 mycode/fatfs_sd.o + 0x0000000000000000 0x38 mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0xa9c mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0x21b mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0x2e mycode/fatfs_sd.o @@ -3127,7 +3155,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0x217 mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0xb5 mycode/fatfs_sd.o - .debug_macro 0x0000000000000000 0x28 mycode/fatfs_sd.o + .debug_macro 0x0000000000000000 0x4c mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0x16 mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0x7c mycode/fatfs_sd.o .debug_macro 0x0000000000000000 0x64 mycode/fatfs_sd.o @@ -3228,7 +3256,7 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 mycode/lcd.o .debug_macro 0x0000000000000000 0x217 mycode/lcd.o .debug_macro 0x0000000000000000 0xb5 mycode/lcd.o - .debug_macro 0x0000000000000000 0x28 mycode/lcd.o + .debug_macro 0x0000000000000000 0x4c mycode/lcd.o .group 0x0000000000000000 0xc mycode/text.o .group 0x0000000000000000 0xc mycode/text.o .group 0x0000000000000000 0xc mycode/text.o @@ -3307,15 +3335,11 @@ Discarded input sections .debug_macro 0x0000000000000000 0x141 mycode/text.o .debug_macro 0x0000000000000000 0x217 mycode/text.o .debug_macro 0x0000000000000000 0xb5 mycode/text.o - .debug_macro 0x0000000000000000 0x28 mycode/text.o + .debug_macro 0x0000000000000000 0x4c mycode/text.o .debug_macro 0x0000000000000000 0x38a mycode/text.o .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) - .text.__errno 0x0000000000000000 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) - .debug_frame 0x0000000000000000 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) - .ARM.attributes - 0x0000000000000000 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-exit.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-exit.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-exit.o) @@ -3326,20 +3350,80 @@ Discarded input sections .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) - .data._impure_ptr - 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) - .data.impure_data - 0x0000000000000000 0x60 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .rodata._global_impure_ptr 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) - .ARM.attributes - 0x0000000000000000 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + .text._sprintf_r + 0x0000000000000000 0x38 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + .text.__ssprint_r + 0x0000000000000000 0xf6 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + .text.cleanup_glue + 0x0000000000000000 0x1a c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + .text._reclaim_reent + 0x0000000000000000 0xb8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_init + 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_init_recursive + 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_close + 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_close_recursive + 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_acquire + 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_try_acquire + 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_try_acquire_recursive + 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .text.__retarget_lock_release + 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtend.o .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtend.o .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtend.o @@ -3427,7 +3511,7 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte 0x0000000008000000 g_pfnVectors 0x00000000080001e4 . = ALIGN (0x4) -.text 0x00000000080001e4 0x5d68 +.text 0x00000000080001e4 0x6814 0x00000000080001e4 . = ALIGN (0x4) *(.text) .text 0x00000000080001e4 0x40 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o @@ -3440,493 +3524,555 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .text.MX_SPI2_Init 0x00000000080002d0 0x6c Core/Src/main.o .text.MX_GPIO_Init - 0x000000000800033c 0x10c Core/Src/main.o + 0x000000000800033c 0x128 Core/Src/main.o .text.MX_FSMC_Init - 0x0000000008000448 0xc8 Core/Src/main.o + 0x0000000008000464 0xc8 Core/Src/main.o .text.Error_Handler - 0x0000000008000510 0xa Core/Src/main.o - 0x0000000008000510 Error_Handler - *fill* 0x000000000800051a 0x2 + 0x000000000800052c 0xa Core/Src/main.o + 0x000000000800052c Error_Handler + *fill* 0x0000000008000536 0x2 .text.HAL_MspInit - 0x000000000800051c 0x64 Core/Src/stm32f1xx_hal_msp.o - 0x000000000800051c HAL_MspInit + 0x0000000008000538 0x64 Core/Src/stm32f1xx_hal_msp.o + 0x0000000008000538 HAL_MspInit .text.HAL_SPI_MspInit - 0x0000000008000580 0x98 Core/Src/stm32f1xx_hal_msp.o - 0x0000000008000580 HAL_SPI_MspInit + 0x000000000800059c 0x98 Core/Src/stm32f1xx_hal_msp.o + 0x000000000800059c HAL_SPI_MspInit .text.HAL_FSMC_MspInit - 0x0000000008000618 0xa8 Core/Src/stm32f1xx_hal_msp.o + 0x0000000008000634 0xa8 Core/Src/stm32f1xx_hal_msp.o .text.HAL_SRAM_MspInit - 0x00000000080006c0 0x14 Core/Src/stm32f1xx_hal_msp.o - 0x00000000080006c0 HAL_SRAM_MspInit + 0x00000000080006dc 0x14 Core/Src/stm32f1xx_hal_msp.o + 0x00000000080006dc HAL_SRAM_MspInit .text.NMI_Handler - 0x00000000080006d4 0x6 Core/Src/stm32f1xx_it.o - 0x00000000080006d4 NMI_Handler + 0x00000000080006f0 0x6 Core/Src/stm32f1xx_it.o + 0x00000000080006f0 NMI_Handler .text.HardFault_Handler - 0x00000000080006da 0x6 Core/Src/stm32f1xx_it.o - 0x00000000080006da HardFault_Handler + 0x00000000080006f6 0x6 Core/Src/stm32f1xx_it.o + 0x00000000080006f6 HardFault_Handler .text.MemManage_Handler - 0x00000000080006e0 0x6 Core/Src/stm32f1xx_it.o - 0x00000000080006e0 MemManage_Handler + 0x00000000080006fc 0x6 Core/Src/stm32f1xx_it.o + 0x00000000080006fc MemManage_Handler .text.BusFault_Handler - 0x00000000080006e6 0x6 Core/Src/stm32f1xx_it.o - 0x00000000080006e6 BusFault_Handler + 0x0000000008000702 0x6 Core/Src/stm32f1xx_it.o + 0x0000000008000702 BusFault_Handler .text.UsageFault_Handler - 0x00000000080006ec 0x6 Core/Src/stm32f1xx_it.o - 0x00000000080006ec UsageFault_Handler + 0x0000000008000708 0x6 Core/Src/stm32f1xx_it.o + 0x0000000008000708 UsageFault_Handler .text.SVC_Handler - 0x00000000080006f2 0xc Core/Src/stm32f1xx_it.o - 0x00000000080006f2 SVC_Handler + 0x000000000800070e 0xc Core/Src/stm32f1xx_it.o + 0x000000000800070e SVC_Handler .text.DebugMon_Handler - 0x00000000080006fe 0xc Core/Src/stm32f1xx_it.o - 0x00000000080006fe DebugMon_Handler + 0x000000000800071a 0xc Core/Src/stm32f1xx_it.o + 0x000000000800071a DebugMon_Handler .text.PendSV_Handler - 0x000000000800070a 0xc Core/Src/stm32f1xx_it.o - 0x000000000800070a PendSV_Handler + 0x0000000008000726 0xc Core/Src/stm32f1xx_it.o + 0x0000000008000726 PendSV_Handler .text.SysTick_Handler - 0x0000000008000716 0xc Core/Src/stm32f1xx_it.o - 0x0000000008000716 SysTick_Handler + 0x0000000008000732 0xc Core/Src/stm32f1xx_it.o + 0x0000000008000732 SysTick_Handler + *fill* 0x000000000800073e 0x2 + .text._sbrk 0x0000000008000740 0x6c Core/Src/sysmem.o + 0x0000000008000740 _sbrk .text.SystemInit - 0x0000000008000722 0xc Core/Src/system_stm32f1xx.o - 0x0000000008000722 SystemInit - *fill* 0x000000000800072e 0x2 + 0x00000000080007ac 0xc Core/Src/system_stm32f1xx.o + 0x00000000080007ac SystemInit .text.Reset_Handler - 0x0000000008000730 0x48 Core/Startup/startup_stm32f103zetx.o - 0x0000000008000730 Reset_Handler + 0x00000000080007b8 0x48 Core/Startup/startup_stm32f103zetx.o + 0x00000000080007b8 Reset_Handler .text.Default_Handler - 0x0000000008000778 0x2 Core/Startup/startup_stm32f103zetx.o - 0x0000000008000778 RTC_Alarm_IRQHandler - 0x0000000008000778 EXTI2_IRQHandler - 0x0000000008000778 TIM8_TRG_COM_IRQHandler - 0x0000000008000778 TIM8_CC_IRQHandler - 0x0000000008000778 TIM1_CC_IRQHandler - 0x0000000008000778 TIM6_IRQHandler - 0x0000000008000778 PVD_IRQHandler - 0x0000000008000778 SDIO_IRQHandler - 0x0000000008000778 EXTI3_IRQHandler - 0x0000000008000778 EXTI0_IRQHandler - 0x0000000008000778 I2C2_EV_IRQHandler - 0x0000000008000778 ADC1_2_IRQHandler - 0x0000000008000778 SPI1_IRQHandler - 0x0000000008000778 TAMPER_IRQHandler - 0x0000000008000778 TIM8_UP_IRQHandler - 0x0000000008000778 DMA2_Channel2_IRQHandler - 0x0000000008000778 DMA1_Channel4_IRQHandler - 0x0000000008000778 USART3_IRQHandler - 0x0000000008000778 RTC_IRQHandler - 0x0000000008000778 DMA1_Channel7_IRQHandler - 0x0000000008000778 CAN1_RX1_IRQHandler - 0x0000000008000778 UART5_IRQHandler - 0x0000000008000778 ADC3_IRQHandler - 0x0000000008000778 TIM4_IRQHandler - 0x0000000008000778 DMA2_Channel1_IRQHandler - 0x0000000008000778 I2C1_EV_IRQHandler - 0x0000000008000778 DMA1_Channel6_IRQHandler - 0x0000000008000778 UART4_IRQHandler - 0x0000000008000778 TIM3_IRQHandler - 0x0000000008000778 RCC_IRQHandler - 0x0000000008000778 TIM1_TRG_COM_IRQHandler - 0x0000000008000778 DMA1_Channel1_IRQHandler - 0x0000000008000778 Default_Handler - 0x0000000008000778 EXTI15_10_IRQHandler - 0x0000000008000778 TIM7_IRQHandler - 0x0000000008000778 TIM5_IRQHandler - 0x0000000008000778 EXTI9_5_IRQHandler - 0x0000000008000778 SPI2_IRQHandler - 0x0000000008000778 DMA1_Channel5_IRQHandler - 0x0000000008000778 EXTI4_IRQHandler - 0x0000000008000778 USB_LP_CAN1_RX0_IRQHandler - 0x0000000008000778 USB_HP_CAN1_TX_IRQHandler - 0x0000000008000778 DMA1_Channel3_IRQHandler - 0x0000000008000778 FSMC_IRQHandler - 0x0000000008000778 TIM1_UP_IRQHandler - 0x0000000008000778 WWDG_IRQHandler - 0x0000000008000778 TIM2_IRQHandler - 0x0000000008000778 TIM1_BRK_IRQHandler - 0x0000000008000778 EXTI1_IRQHandler - 0x0000000008000778 DMA2_Channel4_5_IRQHandler - 0x0000000008000778 USART2_IRQHandler - 0x0000000008000778 I2C2_ER_IRQHandler - 0x0000000008000778 DMA1_Channel2_IRQHandler - 0x0000000008000778 TIM8_BRK_IRQHandler - 0x0000000008000778 CAN1_SCE_IRQHandler - 0x0000000008000778 FLASH_IRQHandler - 0x0000000008000778 USART1_IRQHandler - 0x0000000008000778 SPI3_IRQHandler - 0x0000000008000778 I2C1_ER_IRQHandler - 0x0000000008000778 USBWakeUp_IRQHandler - 0x0000000008000778 DMA2_Channel3_IRQHandler - *fill* 0x000000000800077a 0x2 + 0x0000000008000800 0x2 Core/Startup/startup_stm32f103zetx.o + 0x0000000008000800 RTC_Alarm_IRQHandler + 0x0000000008000800 EXTI2_IRQHandler + 0x0000000008000800 TIM8_TRG_COM_IRQHandler + 0x0000000008000800 TIM8_CC_IRQHandler + 0x0000000008000800 TIM1_CC_IRQHandler + 0x0000000008000800 TIM6_IRQHandler + 0x0000000008000800 PVD_IRQHandler + 0x0000000008000800 SDIO_IRQHandler + 0x0000000008000800 EXTI3_IRQHandler + 0x0000000008000800 EXTI0_IRQHandler + 0x0000000008000800 I2C2_EV_IRQHandler + 0x0000000008000800 ADC1_2_IRQHandler + 0x0000000008000800 SPI1_IRQHandler + 0x0000000008000800 TAMPER_IRQHandler + 0x0000000008000800 TIM8_UP_IRQHandler + 0x0000000008000800 DMA2_Channel2_IRQHandler + 0x0000000008000800 DMA1_Channel4_IRQHandler + 0x0000000008000800 USART3_IRQHandler + 0x0000000008000800 RTC_IRQHandler + 0x0000000008000800 DMA1_Channel7_IRQHandler + 0x0000000008000800 CAN1_RX1_IRQHandler + 0x0000000008000800 UART5_IRQHandler + 0x0000000008000800 ADC3_IRQHandler + 0x0000000008000800 TIM4_IRQHandler + 0x0000000008000800 DMA2_Channel1_IRQHandler + 0x0000000008000800 I2C1_EV_IRQHandler + 0x0000000008000800 DMA1_Channel6_IRQHandler + 0x0000000008000800 UART4_IRQHandler + 0x0000000008000800 TIM3_IRQHandler + 0x0000000008000800 RCC_IRQHandler + 0x0000000008000800 TIM1_TRG_COM_IRQHandler + 0x0000000008000800 DMA1_Channel1_IRQHandler + 0x0000000008000800 Default_Handler + 0x0000000008000800 EXTI15_10_IRQHandler + 0x0000000008000800 TIM7_IRQHandler + 0x0000000008000800 TIM5_IRQHandler + 0x0000000008000800 EXTI9_5_IRQHandler + 0x0000000008000800 SPI2_IRQHandler + 0x0000000008000800 DMA1_Channel5_IRQHandler + 0x0000000008000800 EXTI4_IRQHandler + 0x0000000008000800 USB_LP_CAN1_RX0_IRQHandler + 0x0000000008000800 USB_HP_CAN1_TX_IRQHandler + 0x0000000008000800 DMA1_Channel3_IRQHandler + 0x0000000008000800 FSMC_IRQHandler + 0x0000000008000800 TIM1_UP_IRQHandler + 0x0000000008000800 WWDG_IRQHandler + 0x0000000008000800 TIM2_IRQHandler + 0x0000000008000800 TIM1_BRK_IRQHandler + 0x0000000008000800 EXTI1_IRQHandler + 0x0000000008000800 DMA2_Channel4_5_IRQHandler + 0x0000000008000800 USART2_IRQHandler + 0x0000000008000800 I2C2_ER_IRQHandler + 0x0000000008000800 DMA1_Channel2_IRQHandler + 0x0000000008000800 TIM8_BRK_IRQHandler + 0x0000000008000800 CAN1_SCE_IRQHandler + 0x0000000008000800 FLASH_IRQHandler + 0x0000000008000800 USART1_IRQHandler + 0x0000000008000800 SPI3_IRQHandler + 0x0000000008000800 I2C1_ER_IRQHandler + 0x0000000008000800 USBWakeUp_IRQHandler + 0x0000000008000800 DMA2_Channel3_IRQHandler + *fill* 0x0000000008000802 0x2 .text.HAL_Init - 0x000000000800077c 0x2c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x000000000800077c HAL_Init + 0x0000000008000804 0x2c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000008000804 HAL_Init .text.HAL_InitTick - 0x00000000080007a8 0x60 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x00000000080007a8 HAL_InitTick + 0x0000000008000830 0x60 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000008000830 HAL_InitTick .text.HAL_IncTick - 0x0000000008000808 0x24 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x0000000008000808 HAL_IncTick + 0x0000000008000890 0x24 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000008000890 HAL_IncTick .text.HAL_GetTick - 0x000000000800082c 0x14 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x000000000800082c HAL_GetTick + 0x00000000080008b4 0x14 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x00000000080008b4 HAL_GetTick .text.HAL_Delay - 0x0000000008000840 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x0000000008000840 HAL_Delay + 0x00000000080008c8 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x00000000080008c8 HAL_Delay .text.__NVIC_SetPriorityGrouping - 0x0000000008000888 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000910 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.__NVIC_GetPriorityGrouping - 0x00000000080008d0 0x1c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000958 0x1c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.__NVIC_SetPriority - 0x00000000080008ec 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000974 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.NVIC_EncodePriority - 0x0000000008000940 0x64 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x00000000080009c8 0x64 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.SysTick_Config - 0x00000000080009a4 0x44 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000a2c 0x44 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.HAL_NVIC_SetPriorityGrouping - 0x00000000080009e8 0x16 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - 0x00000000080009e8 HAL_NVIC_SetPriorityGrouping + 0x0000000008000a70 0x16 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000a70 HAL_NVIC_SetPriorityGrouping .text.HAL_NVIC_SetPriority - 0x00000000080009fe 0x38 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - 0x00000000080009fe HAL_NVIC_SetPriority + 0x0000000008000a86 0x38 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000a86 HAL_NVIC_SetPriority .text.HAL_SYSTICK_Config - 0x0000000008000a36 0x18 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - 0x0000000008000a36 HAL_SYSTICK_Config - *fill* 0x0000000008000a4e 0x2 + 0x0000000008000abe 0x18 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000abe HAL_SYSTICK_Config + *fill* 0x0000000008000ad6 0x2 .text.HAL_GPIO_Init - 0x0000000008000a50 0x328 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - 0x0000000008000a50 HAL_GPIO_Init + 0x0000000008000ad8 0x328 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000008000ad8 HAL_GPIO_Init + .text.HAL_GPIO_ReadPin + 0x0000000008000e00 0x2e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000008000e00 HAL_GPIO_ReadPin .text.HAL_GPIO_WritePin - 0x0000000008000d78 0x30 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - 0x0000000008000d78 HAL_GPIO_WritePin + 0x0000000008000e2e 0x30 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000008000e2e HAL_GPIO_WritePin + *fill* 0x0000000008000e5e 0x2 .text.HAL_RCC_OscConfig - 0x0000000008000da8 0x500 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - 0x0000000008000da8 HAL_RCC_OscConfig + 0x0000000008000e60 0x500 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x0000000008000e60 HAL_RCC_OscConfig .text.HAL_RCC_ClockConfig - 0x00000000080012a8 0x1d4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - 0x00000000080012a8 HAL_RCC_ClockConfig + 0x0000000008001360 0x1d4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x0000000008001360 HAL_RCC_ClockConfig .text.HAL_RCC_GetSysClockFreq - 0x000000000800147c 0xc0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - 0x000000000800147c HAL_RCC_GetSysClockFreq + 0x0000000008001534 0xc0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x0000000008001534 HAL_RCC_GetSysClockFreq .text.RCC_Delay - 0x000000000800153c 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x00000000080015f4 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o .text.HAL_SPI_Init - 0x0000000008001578 0x108 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x0000000008001578 HAL_SPI_Init + 0x0000000008001630 0x108 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001630 HAL_SPI_Init .text.HAL_SPI_Transmit - 0x0000000008001680 0x278 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x0000000008001680 HAL_SPI_Transmit + 0x0000000008001738 0x278 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001738 HAL_SPI_Transmit .text.HAL_SPI_Receive - 0x00000000080018f8 0x222 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x00000000080018f8 HAL_SPI_Receive + 0x00000000080019b0 0x222 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x00000000080019b0 HAL_SPI_Receive .text.HAL_SPI_TransmitReceive - 0x0000000008001b1a 0x344 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x0000000008001b1a HAL_SPI_TransmitReceive + 0x0000000008001bd2 0x344 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001bd2 HAL_SPI_TransmitReceive .text.HAL_SPI_GetState - 0x0000000008001e5e 0x1a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x0000000008001e5e HAL_SPI_GetState + 0x0000000008001f16 0x1a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001f16 HAL_SPI_GetState .text.SPI_WaitFlagStateUntilTimeout - 0x0000000008001e78 0x110 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001f30 0x110 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .text.SPI_EndRxTransaction - 0x0000000008001f88 0xa4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008002040 0xa4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .text.SPI_EndRxTxTransaction - 0x000000000800202c 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x00000000080020e4 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .text.HAL_SRAM_Init - 0x0000000008002068 0x9a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - 0x0000000008002068 HAL_SRAM_Init - *fill* 0x0000000008002102 0x2 + 0x0000000008002120 0x9a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + 0x0000000008002120 HAL_SRAM_Init + *fill* 0x00000000080021ba 0x2 .text.FSMC_NORSRAM_Init - 0x0000000008002104 0xd4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - 0x0000000008002104 FSMC_NORSRAM_Init + 0x00000000080021bc 0xd4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x00000000080021bc FSMC_NORSRAM_Init .text.FSMC_NORSRAM_Timing_Init - 0x00000000080021d8 0x68 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - 0x00000000080021d8 FSMC_NORSRAM_Timing_Init + 0x0000000008002290 0x68 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x0000000008002290 FSMC_NORSRAM_Timing_Init .text.FSMC_NORSRAM_Extended_Timing_Init - 0x0000000008002240 0x70 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - 0x0000000008002240 FSMC_NORSRAM_Extended_Timing_Init + 0x00000000080022f8 0x70 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x00000000080022f8 FSMC_NORSRAM_Extended_Timing_Init .text.MX_FATFS_Init - 0x00000000080022b0 0x24 FATFS/App/fatfs.o - 0x00000000080022b0 MX_FATFS_Init + 0x0000000008002368 0x24 FATFS/App/fatfs.o + 0x0000000008002368 MX_FATFS_Init .text.get_fattime - 0x00000000080022d4 0xe FATFS/App/fatfs.o - 0x00000000080022d4 get_fattime - *fill* 0x00000000080022e2 0x2 + 0x000000000800238c 0xe FATFS/App/fatfs.o + 0x000000000800238c get_fattime + *fill* 0x000000000800239a 0x2 .text.USER_initialize - 0x00000000080022e4 0x2c FATFS/Target/user_diskio.o - 0x00000000080022e4 USER_initialize + 0x000000000800239c 0x2c FATFS/Target/user_diskio.o + 0x000000000800239c USER_initialize .text.USER_status - 0x0000000008002310 0x2c FATFS/Target/user_diskio.o - 0x0000000008002310 USER_status + 0x00000000080023c8 0x2c FATFS/Target/user_diskio.o + 0x00000000080023c8 USER_status .text.USER_read - 0x000000000800233c 0x26 FATFS/Target/user_diskio.o - 0x000000000800233c USER_read + 0x00000000080023f4 0x26 FATFS/Target/user_diskio.o + 0x00000000080023f4 USER_read .text.USER_write - 0x0000000008002362 0x26 FATFS/Target/user_diskio.o - 0x0000000008002362 USER_write + 0x000000000800241a 0x26 FATFS/Target/user_diskio.o + 0x000000000800241a USER_write .text.USER_ioctl - 0x0000000008002388 0x2a FATFS/Target/user_diskio.o - 0x0000000008002388 USER_ioctl - *fill* 0x00000000080023b2 0x2 + 0x0000000008002440 0x2a FATFS/Target/user_diskio.o + 0x0000000008002440 USER_ioctl + *fill* 0x000000000800246a 0x2 .text.disk_status - 0x00000000080023b4 0x34 Middlewares/Third_Party/FatFs/src/diskio.o - 0x00000000080023b4 disk_status + 0x000000000800246c 0x34 Middlewares/Third_Party/FatFs/src/diskio.o + 0x000000000800246c disk_status .text.disk_initialize - 0x00000000080023e8 0x4c Middlewares/Third_Party/FatFs/src/diskio.o - 0x00000000080023e8 disk_initialize + 0x00000000080024a0 0x4c Middlewares/Third_Party/FatFs/src/diskio.o + 0x00000000080024a0 disk_initialize .text.disk_read - 0x0000000008002434 0x40 Middlewares/Third_Party/FatFs/src/diskio.o - 0x0000000008002434 disk_read + 0x00000000080024ec 0x40 Middlewares/Third_Party/FatFs/src/diskio.o + 0x00000000080024ec disk_read .text.disk_write - 0x0000000008002474 0x40 Middlewares/Third_Party/FatFs/src/diskio.o - 0x0000000008002474 disk_write - .text.mem_cpy 0x00000000080024b4 0x3c Middlewares/Third_Party/FatFs/src/ff.o - .text.mem_set 0x00000000080024f0 0x34 Middlewares/Third_Party/FatFs/src/ff.o - .text.mem_cmp 0x0000000008002524 0x4c Middlewares/Third_Party/FatFs/src/ff.o - .text.chk_chr 0x0000000008002570 0x34 Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800252c 0x40 Middlewares/Third_Party/FatFs/src/diskio.o + 0x000000000800252c disk_write + .text.mem_cpy 0x000000000800256c 0x3c Middlewares/Third_Party/FatFs/src/ff.o + .text.mem_set 0x00000000080025a8 0x34 Middlewares/Third_Party/FatFs/src/ff.o + .text.mem_cmp 0x00000000080025dc 0x4c Middlewares/Third_Party/FatFs/src/ff.o + .text.chk_chr 0x0000000008002628 0x34 Middlewares/Third_Party/FatFs/src/ff.o .text.chk_lock - 0x00000000080025a4 0xd8 Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800265c 0xd8 Middlewares/Third_Party/FatFs/src/ff.o .text.enq_lock - 0x000000000800267c 0x48 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002734 0x48 Middlewares/Third_Party/FatFs/src/ff.o .text.inc_lock - 0x00000000080026c4 0x16c Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800277c 0x16c Middlewares/Third_Party/FatFs/src/ff.o .text.clear_lock - 0x0000000008002830 0x54 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080028e8 0x54 Middlewares/Third_Party/FatFs/src/ff.o .text.sync_window - 0x0000000008002884 0x92 Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800293c 0x92 Middlewares/Third_Party/FatFs/src/ff.o .text.move_window - 0x0000000008002916 0x5c Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080029ce 0x5c Middlewares/Third_Party/FatFs/src/ff.o .text.clust2sect - 0x0000000008002972 0x42 Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008002972 clust2sect - .text.get_fat 0x00000000080029b4 0x174 Middlewares/Third_Party/FatFs/src/ff.o - 0x00000000080029b4 get_fat - .text.put_fat 0x0000000008002b28 0x21c Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008002b28 put_fat + 0x0000000008002a2a 0x42 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002a2a clust2sect + .text.get_fat 0x0000000008002a6c 0x174 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002a6c get_fat + .text.put_fat 0x0000000008002be0 0x21c Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002be0 put_fat .text.remove_chain - 0x0000000008002d44 0xb4 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002dfc 0xb4 Middlewares/Third_Party/FatFs/src/ff.o .text.create_chain - 0x0000000008002df8 0x13a Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002eb0 0x13a Middlewares/Third_Party/FatFs/src/ff.o .text.clmt_clust - 0x0000000008002f32 0x68 Middlewares/Third_Party/FatFs/src/ff.o - .text.dir_sdi 0x0000000008002f9a 0x128 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002fea 0x68 Middlewares/Third_Party/FatFs/src/ff.o + .text.dir_sdi 0x0000000008003052 0x128 Middlewares/Third_Party/FatFs/src/ff.o .text.dir_next - 0x00000000080030c2 0x1ee Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800317a 0x1ee Middlewares/Third_Party/FatFs/src/ff.o .text.dir_alloc - 0x00000000080032b0 0x94 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003368 0x94 Middlewares/Third_Party/FatFs/src/ff.o .text.ld_clust - 0x0000000008003344 0x5a Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080033fc 0x5a Middlewares/Third_Party/FatFs/src/ff.o .text.st_clust - 0x000000000800339e 0x4c Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003456 0x4c Middlewares/Third_Party/FatFs/src/ff.o .text.dir_find - 0x00000000080033ea 0x9e Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080034a2 0x9e Middlewares/Third_Party/FatFs/src/ff.o .text.dir_register - 0x0000000008003488 0x72 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x00000000080034fa 0x2 + 0x0000000008003540 0x72 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x00000000080035b2 0x2 .text.create_name - 0x00000000080034fc 0x180 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080035b4 0x180 Middlewares/Third_Party/FatFs/src/ff.o .text.follow_path - 0x000000000800367c 0xdc Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003734 0xdc Middlewares/Third_Party/FatFs/src/ff.o .text.get_ldnumber - 0x0000000008003758 0x86 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x00000000080037de 0x2 + 0x0000000008003810 0x86 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x0000000008003896 0x2 .text.check_fs - 0x00000000080037e0 0xd4 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003898 0xd4 Middlewares/Third_Party/FatFs/src/ff.o .text.find_volume - 0x00000000080038b4 0x594 Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800396c 0x594 Middlewares/Third_Party/FatFs/src/ff.o .text.validate - 0x0000000008003e48 0x66 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x0000000008003eae 0x2 - .text.f_mount 0x0000000008003eb0 0x90 Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008003eb0 f_mount - .text.f_open 0x0000000008003f40 0x416 Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008003f40 f_open - .text.f_read 0x0000000008004356 0x2d6 Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008004356 f_read + 0x0000000008003f00 0x66 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x0000000008003f66 0x2 + .text.f_mount 0x0000000008003f68 0x90 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003f68 f_mount + .text.f_open 0x0000000008003ff8 0x416 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003ff8 f_open + .text.f_read 0x000000000800440e 0x2d6 Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800440e f_read .text.FATFS_LinkDriverEx - 0x000000000800462c 0x94 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - 0x000000000800462c FATFS_LinkDriverEx + 0x00000000080046e4 0x94 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x00000000080046e4 FATFS_LinkDriverEx .text.FATFS_LinkDriver - 0x00000000080046c0 0x1e Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - 0x00000000080046c0 FATFS_LinkDriver - *fill* 0x00000000080046de 0x2 - .text.my_main 0x00000000080046e0 0xb4 mycode/c.o - 0x00000000080046e0 my_main + 0x0000000008004778 0x1e Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x0000000008004778 FATFS_LinkDriver + *fill* 0x0000000008004796 0x2 + .text.my_main 0x0000000008004798 0x1f4 mycode/c.o + 0x0000000008004798 my_main .text.W25QXX_Read - 0x0000000008004794 0x6c mycode/falsh.o - 0x0000000008004794 W25QXX_Read - .text.SELECT 0x0000000008004800 0x18 mycode/fatfs_sd.o + 0x000000000800498c 0x6c mycode/falsh.o + 0x000000000800498c W25QXX_Read + .text.SELECT 0x00000000080049f8 0x18 mycode/fatfs_sd.o .text.DESELECT - 0x0000000008004818 0x18 mycode/fatfs_sd.o + 0x0000000008004a10 0x18 mycode/fatfs_sd.o .text.SPI_TxByte - 0x0000000008004830 0x34 mycode/fatfs_sd.o + 0x0000000008004a28 0x34 mycode/fatfs_sd.o .text.SPI_RxByte - 0x0000000008004864 0x3c mycode/fatfs_sd.o + 0x0000000008004a5c 0x3c mycode/fatfs_sd.o .text.SPI_RxBytePtr - 0x00000000080048a0 0x1c mycode/fatfs_sd.o + 0x0000000008004a98 0x1c mycode/fatfs_sd.o .text.SD_ReadyWait - 0x00000000080048bc 0x38 mycode/fatfs_sd.o + 0x0000000008004ab4 0x40 mycode/fatfs_sd.o .text.SD_PowerOn - 0x00000000080048f4 0x98 mycode/fatfs_sd.o + 0x0000000008004af4 0x98 mycode/fatfs_sd.o .text.SD_PowerOff - 0x000000000800498c 0x18 mycode/fatfs_sd.o + 0x0000000008004b8c 0x18 mycode/fatfs_sd.o .text.SD_CheckPower - 0x00000000080049a4 0x14 mycode/fatfs_sd.o + 0x0000000008004ba4 0x14 mycode/fatfs_sd.o .text.SD_RxDataBlock - 0x00000000080049b8 0x6c mycode/fatfs_sd.o + 0x0000000008004bb8 0x78 mycode/fatfs_sd.o .text.SD_TxDataBlock - 0x0000000008004a24 0xa8 mycode/fatfs_sd.o + 0x0000000008004c30 0xa8 mycode/fatfs_sd.o .text.SD_SendCmd - 0x0000000008004acc 0xa4 mycode/fatfs_sd.o + 0x0000000008004cd8 0xa4 mycode/fatfs_sd.o .text.SD_disk_initialize - 0x0000000008004b70 0x1d4 mycode/fatfs_sd.o - 0x0000000008004b70 SD_disk_initialize + 0x0000000008004d7c 0x1e8 mycode/fatfs_sd.o + 0x0000000008004d7c SD_disk_initialize .text.SD_disk_status - 0x0000000008004d44 0x28 mycode/fatfs_sd.o - 0x0000000008004d44 SD_disk_status + 0x0000000008004f64 0x28 mycode/fatfs_sd.o + 0x0000000008004f64 SD_disk_status .text.SD_disk_read - 0x0000000008004d6c 0xd4 mycode/fatfs_sd.o - 0x0000000008004d6c SD_disk_read + 0x0000000008004f8c 0xd4 mycode/fatfs_sd.o + 0x0000000008004f8c SD_disk_read .text.SD_disk_write - 0x0000000008004e40 0x108 mycode/fatfs_sd.o - 0x0000000008004e40 SD_disk_write + 0x0000000008005060 0x108 mycode/fatfs_sd.o + 0x0000000008005060 SD_disk_write .text.SD_disk_ioctl - 0x0000000008004f48 0x264 mycode/fatfs_sd.o - 0x0000000008004f48 SD_disk_ioctl + 0x0000000008005168 0x264 mycode/fatfs_sd.o + 0x0000000008005168 SD_disk_ioctl .text.LCD_WR_REG - 0x00000000080051ac 0x1c mycode/lcd.o - 0x00000000080051ac LCD_WR_REG + 0x00000000080053cc 0x1c mycode/lcd.o + 0x00000000080053cc LCD_WR_REG .text.LCD_WR_DATA - 0x00000000080051c8 0x20 mycode/lcd.o - 0x00000000080051c8 LCD_WR_DATA + 0x00000000080053e8 0x20 mycode/lcd.o + 0x00000000080053e8 LCD_WR_DATA .text.LCD_WriteReg - 0x00000000080051e8 0x2c mycode/lcd.o - 0x00000000080051e8 LCD_WriteReg + 0x0000000008005408 0x2c mycode/lcd.o + 0x0000000008005408 LCD_WriteReg .text.LCD_ReadReg - 0x0000000008005214 0x28 mycode/lcd.o - 0x0000000008005214 LCD_ReadReg + 0x0000000008005434 0x28 mycode/lcd.o + 0x0000000008005434 LCD_ReadReg .text.LCD_Scan_Dir - 0x000000000800523c 0x2dc mycode/lcd.o - 0x000000000800523c LCD_Scan_Dir + 0x000000000800545c 0x2dc mycode/lcd.o + 0x000000000800545c LCD_Scan_Dir .text.LCD_Display_Dir - 0x0000000008005518 0x18c mycode/lcd.o - 0x0000000008005518 LCD_Display_Dir + 0x0000000008005738 0x18c mycode/lcd.o + 0x0000000008005738 LCD_Display_Dir .text.LCDx_Init - 0x00000000080056a4 0x1ec mycode/lcd.o - 0x00000000080056a4 LCDx_Init + 0x00000000080058c4 0x1ec mycode/lcd.o + 0x00000000080058c4 LCDx_Init .text.LCD_SetCursor - 0x0000000008005890 0x120 mycode/lcd.o - 0x0000000008005890 LCD_SetCursor + 0x0000000008005ab0 0x120 mycode/lcd.o + 0x0000000008005ab0 LCD_SetCursor .text.LCD_set_dot - 0x00000000080059b0 0x40 mycode/lcd.o - 0x00000000080059b0 LCD_set_dot + 0x0000000008005bd0 0x40 mycode/lcd.o + 0x0000000008005bd0 LCD_set_dot .text.LCD_Clear - 0x00000000080059f0 0xa4 mycode/lcd.o - 0x00000000080059f0 LCD_Clear + 0x0000000008005c10 0xa4 mycode/lcd.o + 0x0000000008005c10 LCD_Clear .text.font_init - 0x0000000008005a94 0x5c mycode/text.o - 0x0000000008005a94 font_init + 0x0000000008005cb4 0x5c mycode/text.o + 0x0000000008005cb4 font_init .text.Get_HzMat - 0x0000000008005af0 0x10c mycode/text.o - 0x0000000008005af0 Get_HzMat + 0x0000000008005d10 0x10c mycode/text.o + 0x0000000008005d10 Get_HzMat .text.Show_Font - 0x0000000008005bfc 0x110 mycode/text.o - 0x0000000008005bfc Show_Font + 0x0000000008005e1c 0x110 mycode/text.o + 0x0000000008005e1c Show_Font .text.LCD_ShowChar - 0x0000000008005d0c 0xf8 mycode/text.o - 0x0000000008005d0c LCD_ShowChar + 0x0000000008005f2c 0xf8 mycode/text.o + 0x0000000008005f2c LCD_ShowChar .text.LCD_ShowString - 0x0000000008005e04 0xd8 mycode/text.o - 0x0000000008005e04 LCD_ShowString + 0x0000000008006024 0xe4 mycode/text.o + 0x0000000008006024 LCD_ShowString + .text.__errno 0x0000000008006108 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) + 0x0000000008006108 __errno .text.__libc_init_array - 0x0000000008005edc 0x48 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) - 0x0000000008005edc __libc_init_array - .text.memset 0x0000000008005f24 0x10 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) - 0x0000000008005f24 memset + 0x0000000008006114 0x48 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) + 0x0000000008006114 __libc_init_array + .text.memset 0x000000000800615c 0x10 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) + 0x000000000800615c memset + .text.sprintf 0x000000000800616c 0x40 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + 0x000000000800616c siprintf + 0x000000000800616c sprintf + .text.__ssputs_r + 0x00000000080061ac 0xb6 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + 0x00000000080061ac __ssputs_r + *fill* 0x0000000008006262 0x2 + .text._svfprintf_r + 0x0000000008006264 0x200 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + 0x0000000008006264 _svfiprintf_r + 0x0000000008006264 _svfprintf_r + .text._printf_common + 0x0000000008006464 0xde c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + 0x0000000008006464 _printf_common + *fill* 0x0000000008006542 0x2 + .text._printf_i + 0x0000000008006544 0x24c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + 0x0000000008006544 _printf_i + .text.memchr 0x0000000008006790 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) + 0x0000000008006790 memchr + .text.memcpy 0x00000000080067ac 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) + 0x00000000080067ac memcpy + .text.memmove 0x00000000080067c8 0x34 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) + 0x00000000080067c8 memmove + .text._free_r 0x00000000080067fc 0x98 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) + 0x00000000080067fc _free_r + .text._malloc_r + 0x0000000008006894 0xb4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + 0x0000000008006894 _malloc_r + .text._realloc_r + 0x0000000008006948 0x4c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) + 0x0000000008006948 _realloc_r + .text._sbrk_r 0x0000000008006994 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) + 0x0000000008006994 _sbrk_r + .text.__malloc_lock + 0x00000000080069b4 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + 0x00000000080069b4 __malloc_lock + .text.__malloc_unlock + 0x00000000080069c0 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + 0x00000000080069c0 __malloc_unlock + .text._malloc_usable_size_r + 0x00000000080069cc 0x10 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) + 0x00000000080069cc _malloc_usable_size_r + .text.__retarget_lock_acquire_recursive + 0x00000000080069dc 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + 0x00000000080069dc __retarget_lock_acquire_recursive + .text.__retarget_lock_release_recursive + 0x00000000080069de 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + 0x00000000080069de __retarget_lock_release_recursive *(.glue_7) - .glue_7 0x0000000008005f34 0x0 linker stubs + .glue_7 0x00000000080069e0 0x0 linker stubs *(.glue_7t) - .glue_7t 0x0000000008005f34 0x0 linker stubs + .glue_7t 0x00000000080069e0 0x0 linker stubs *(.eh_frame) - .eh_frame 0x0000000008005f34 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + .eh_frame 0x00000000080069e0 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o *(.init) - .init 0x0000000008005f34 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o - 0x0000000008005f34 _init - .init 0x0000000008005f38 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o + .init 0x00000000080069e0 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o + 0x00000000080069e0 _init + .init 0x00000000080069e4 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o *(.fini) - .fini 0x0000000008005f40 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o - 0x0000000008005f40 _fini - .fini 0x0000000008005f44 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o - 0x0000000008005f4c . = ALIGN (0x4) - 0x0000000008005f4c _etext = . + .fini 0x00000000080069ec 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o + 0x00000000080069ec _fini + .fini 0x00000000080069f0 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o + 0x00000000080069f8 . = ALIGN (0x4) + 0x00000000080069f8 _etext = . -.vfp11_veneer 0x0000000008005f4c 0x0 - .vfp11_veneer 0x0000000008005f4c 0x0 linker stubs +.vfp11_veneer 0x00000000080069f8 0x0 + .vfp11_veneer 0x00000000080069f8 0x0 linker stubs -.v4_bx 0x0000000008005f4c 0x0 - .v4_bx 0x0000000008005f4c 0x0 linker stubs +.v4_bx 0x00000000080069f8 0x0 + .v4_bx 0x00000000080069f8 0x0 linker stubs -.iplt 0x0000000008005f4c 0x0 - .iplt 0x0000000008005f4c 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o +.iplt 0x00000000080069f8 0x0 + .iplt 0x00000000080069f8 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o -.rodata 0x0000000008005f4c 0xb60 - 0x0000000008005f4c . = ALIGN (0x4) +.rodata 0x00000000080069f8 0xb98 + 0x00000000080069f8 . = ALIGN (0x4) *(.rodata) - .rodata 0x0000000008005f4c 0x10 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .rodata 0x0000000008005f5c 0x44 Middlewares/Third_Party/FatFs/src/ff.o - .rodata 0x0000000008005fa0 0x18 mycode/c.o + .rodata 0x00000000080069f8 0x10 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .rodata 0x0000000008006a08 0x44 Middlewares/Third_Party/FatFs/src/ff.o + .rodata 0x0000000008006a4c 0x1c mycode/c.o *(.rodata*) .rodata.AHBPrescTable - 0x0000000008005fb8 0x10 Core/Src/system_stm32f1xx.o - 0x0000000008005fb8 AHBPrescTable - .rodata.ExCvt 0x0000000008005fc8 0x80 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008006a68 0x10 Core/Src/system_stm32f1xx.o + 0x0000000008006a68 AHBPrescTable + .rodata.ExCvt 0x0000000008006a78 0x80 Middlewares/Third_Party/FatFs/src/ff.o .rodata.asc2_1206 - 0x0000000008006048 0x474 mycode/text.o - 0x0000000008006048 asc2_1206 + 0x0000000008006af8 0x474 mycode/text.o + 0x0000000008006af8 asc2_1206 .rodata.asc2_1608 - 0x00000000080064bc 0x5f0 mycode/text.o - 0x00000000080064bc asc2_1608 - 0x0000000008006aac . = ALIGN (0x4) + 0x0000000008006f6c 0x5f0 mycode/text.o + 0x0000000008006f6c asc2_1608 + .rodata._svfprintf_r.str1.1 + 0x000000000800755c 0x11 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + .rodata._printf_i.str1.1 + 0x000000000800756d 0x22 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + 0x0000000008007590 . = ALIGN (0x4) + *fill* 0x000000000800758f 0x1 -.rel.dyn 0x0000000008006aac 0x0 - .rel.iplt 0x0000000008006aac 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o +.rel.dyn 0x0000000008007590 0x0 + .rel.iplt 0x0000000008007590 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o -.ARM.extab 0x0000000008006aac 0x0 - 0x0000000008006aac . = ALIGN (0x4) +.ARM.extab 0x0000000008007590 0x0 + 0x0000000008007590 . = ALIGN (0x4) *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x0000000008006aac . = ALIGN (0x4) + 0x0000000008007590 . = ALIGN (0x4) -.ARM 0x0000000008006aac 0x0 - 0x0000000008006aac . = ALIGN (0x4) - 0x0000000008006aac __exidx_start = . +.ARM 0x0000000008007590 0x0 + 0x0000000008007590 . = ALIGN (0x4) + 0x0000000008007590 __exidx_start = . *(.ARM.exidx*) - 0x0000000008006aac __exidx_end = . - 0x0000000008006aac . = ALIGN (0x4) + 0x0000000008007590 __exidx_end = . + 0x0000000008007590 . = ALIGN (0x4) -.preinit_array 0x0000000008006aac 0x0 - 0x0000000008006aac . = ALIGN (0x4) - 0x0000000008006aac PROVIDE (__preinit_array_start = .) +.preinit_array 0x0000000008007590 0x0 + 0x0000000008007590 . = ALIGN (0x4) + 0x0000000008007590 PROVIDE (__preinit_array_start = .) *(.preinit_array*) - 0x0000000008006aac PROVIDE (__preinit_array_end = .) - 0x0000000008006aac . = ALIGN (0x4) + 0x0000000008007590 PROVIDE (__preinit_array_end = .) + 0x0000000008007590 . = ALIGN (0x4) -.init_array 0x0000000008006aac 0x4 - 0x0000000008006aac . = ALIGN (0x4) - 0x0000000008006aac PROVIDE (__init_array_start = .) +.init_array 0x0000000008007590 0x4 + 0x0000000008007590 . = ALIGN (0x4) + 0x0000000008007590 PROVIDE (__init_array_start = .) *(SORT_BY_NAME(.init_array.*)) *(.init_array*) - .init_array 0x0000000008006aac 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o - 0x0000000008006ab0 PROVIDE (__init_array_end = .) - 0x0000000008006ab0 . = ALIGN (0x4) + .init_array 0x0000000008007590 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + 0x0000000008007594 PROVIDE (__init_array_end = .) + 0x0000000008007594 . = ALIGN (0x4) -.fini_array 0x0000000008006ab0 0x4 - 0x0000000008006ab0 . = ALIGN (0x4) +.fini_array 0x0000000008007594 0x4 + 0x0000000008007594 . = ALIGN (0x4) [!provide] PROVIDE (__fini_array_start = .) *(SORT_BY_NAME(.fini_array.*)) *(.fini_array*) - .fini_array 0x0000000008006ab0 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + .fini_array 0x0000000008007594 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o [!provide] PROVIDE (__fini_array_end = .) - 0x0000000008006ab4 . = ALIGN (0x4) - 0x0000000008006ab4 _sidata = LOADADDR (.data) + 0x0000000008007598 . = ALIGN (0x4) + 0x0000000008007598 _sidata = LOADADDR (.data) -.data 0x0000000020000000 0x24 load address 0x0000000008006ab4 +.data 0x0000000020000000 0x88 load address 0x0000000008007598 0x0000000020000000 . = ALIGN (0x4) 0x0000000020000000 _sdata = . *(.data) @@ -3946,70 +4092,96 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte 0x000000002000000c 0x14 FATFS/Target/user_diskio.o 0x000000002000000c USER_Driver .data.Stat 0x0000000020000020 0x1 mycode/fatfs_sd.o + *fill* 0x0000000020000021 0x3 + .data._impure_ptr + 0x0000000020000024 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) + 0x0000000020000024 _impure_ptr + .data.impure_data + 0x0000000020000028 0x60 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) *(.RamFunc) *(.RamFunc*) - 0x0000000020000024 . = ALIGN (0x4) - *fill* 0x0000000020000021 0x3 - 0x0000000020000024 _edata = . + 0x0000000020000088 . = ALIGN (0x4) + 0x0000000020000088 _edata = . -.igot.plt 0x0000000020000024 0x0 load address 0x0000000008006ad8 - .igot.plt 0x0000000020000024 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o - 0x0000000020000024 . = ALIGN (0x4) +.igot.plt 0x0000000020000088 0x0 load address 0x0000000008007620 + .igot.plt 0x0000000020000088 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + 0x0000000020000088 . = ALIGN (0x4) -.bss 0x0000000020000024 0x7bc load address 0x0000000008006ad8 - 0x0000000020000024 _sbss = . - 0x0000000020000024 __bss_start__ = _sbss +.bss 0x0000000020000088 0x7dc load address 0x0000000008007620 + 0x0000000020000088 _sbss = . + 0x0000000020000088 __bss_start__ = _sbss *(.bss) - .bss 0x0000000020000024 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + .bss 0x0000000020000088 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o *(.bss*) .bss.FSMC_Initialized - 0x0000000020000040 0x4 Core/Src/stm32f1xx_hal_msp.o - .bss.FatFs 0x0000000020000044 0x4 Middlewares/Third_Party/FatFs/src/ff.o - .bss.Fsid 0x0000000020000048 0x2 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x000000002000004a 0x2 - .bss.Files 0x000000002000004c 0x18 Middlewares/Third_Party/FatFs/src/ff.o - .bss.disk 0x0000000020000064 0xc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - 0x0000000020000064 disk - .bss.CardType 0x0000000020000070 0x1 mycode/fatfs_sd.o + 0x00000000200000a4 0x4 Core/Src/stm32f1xx_hal_msp.o + .bss.__sbrk_heap_end + 0x00000000200000a8 0x4 Core/Src/sysmem.o + .bss.FatFs 0x00000000200000ac 0x4 Middlewares/Third_Party/FatFs/src/ff.o + .bss.Fsid 0x00000000200000b0 0x2 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x00000000200000b2 0x2 + .bss.Files 0x00000000200000b4 0x18 Middlewares/Third_Party/FatFs/src/ff.o + .bss.disk 0x00000000200000cc 0xc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x00000000200000cc disk + .bss.CardType 0x00000000200000d8 0x1 mycode/fatfs_sd.o .bss.PowerFlag - 0x0000000020000071 0x1 mycode/fatfs_sd.o + 0x00000000200000d9 0x1 mycode/fatfs_sd.o + *fill* 0x00000000200000da 0x2 + .bss.__malloc_free_list + 0x00000000200000dc 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + 0x00000000200000dc __malloc_free_list + .bss.__malloc_sbrk_start + 0x00000000200000e0 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + 0x00000000200000e0 __malloc_sbrk_start *(COMMON) - *fill* 0x0000000020000072 0x2 - COMMON 0x0000000020000074 0xa0 Core/Src/main.o - 0x0000000020000074 hspi2 - 0x00000000200000cc hsram1 - COMMON 0x0000000020000114 0x4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x0000000020000114 uwTick - COMMON 0x0000000020000118 0x464 FATFS/App/fatfs.o - 0x0000000020000118 USERPath - 0x000000002000011c retUSER - 0x0000000020000120 USERFile - 0x000000002000034c USERFatFS - COMMON 0x000000002000057c 0x230 mycode/c.o - 0x000000002000057c SD - COMMON 0x00000000200007ac 0x2 mycode/fatfs_sd.o - 0x00000000200007ac Timer2 - 0x00000000200007ad Timer1 - *fill* 0x00000000200007ae 0x2 - COMMON 0x00000000200007b0 0xa mycode/lcd.o - 0x00000000200007b0 lcddev - *fill* 0x00000000200007ba 0x2 - COMMON 0x00000000200007bc 0x24 mycode/text.o - 0x00000000200007bc ftinfo - 0x00000000200007e0 . = ALIGN (0x4) - 0x00000000200007e0 _ebss = . - 0x00000000200007e0 __bss_end__ = _ebss + COMMON 0x00000000200000e4 0xa0 Core/Src/main.o + 0x00000000200000e4 hspi2 + 0x000000002000013c hsram1 + COMMON 0x0000000020000184 0x4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000020000184 uwTick + COMMON 0x0000000020000188 0x464 FATFS/App/fatfs.o + 0x0000000020000188 USERPath + 0x000000002000018c retUSER + 0x0000000020000190 USERFile + 0x00000000200003bc USERFatFS + COMMON 0x00000000200005ec 0x230 mycode/c.o + 0x00000000200005ec SD + COMMON 0x000000002000081c 0x8 mycode/fatfs_sd.o + 0x000000002000081c Timer2 + 0x0000000020000820 Timer1 + COMMON 0x0000000020000824 0xa mycode/lcd.o + 0x0000000020000824 lcddev + *fill* 0x000000002000082e 0x2 + COMMON 0x0000000020000830 0x24 mycode/text.o + 0x0000000020000830 ftinfo + COMMON 0x0000000020000854 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + 0x0000000020000854 errno + COMMON 0x0000000020000858 0x9 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + 0x0000000020000858 __lock___atexit_recursive_mutex + 0x0000000020000859 __lock___arc4random_mutex + 0x000000002000085a __lock___env_recursive_mutex + 0x000000002000085b __lock___sinit_recursive_mutex + 0x000000002000085c __lock___malloc_recursive_mutex + 0x000000002000085d __lock___at_quick_exit_mutex + 0x000000002000085e __lock___dd_hash_mutex + 0x000000002000085f __lock___tz_mutex + 0x0000000020000860 __lock___sfp_recursive_mutex + 0x0000000020000864 . = ALIGN (0x4) + *fill* 0x0000000020000861 0x3 + 0x0000000020000864 _ebss = . + 0x0000000020000864 __bss_end__ = _ebss ._user_heap_stack - 0x00000000200007e0 0x1000 load address 0x0000000008006ad8 - 0x00000000200007e0 . = ALIGN (0x8) + 0x0000000020000864 0x1004 load address 0x0000000008007620 + 0x0000000020000868 . = ALIGN (0x8) + *fill* 0x0000000020000864 0x4 [!provide] PROVIDE (end = .) - 0x00000000200007e0 PROVIDE (_end = .) - 0x0000000020000fe0 . = (. + _Min_Heap_Size) - *fill* 0x00000000200007e0 0x800 - 0x00000000200017e0 . = (. + _Min_Stack_Size) - *fill* 0x0000000020000fe0 0x800 - 0x00000000200017e0 . = ALIGN (0x8) + 0x0000000020000868 PROVIDE (_end = .) + 0x0000000020001068 . = (. + _Min_Heap_Size) + *fill* 0x0000000020000868 0x800 + 0x0000000020001868 . = (. + _Min_Stack_Size) + *fill* 0x0000000020001068 0x800 + 0x0000000020001868 . = ALIGN (0x8) /DISCARD/ libc.a(*) @@ -4030,104 +4202,140 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .ARM.attributes 0x00000000000000a4 0x2d Core/Src/stm32f1xx_it.o .ARM.attributes - 0x00000000000000d1 0x2d Core/Src/system_stm32f1xx.o + 0x00000000000000d1 0x2d Core/Src/sysmem.o .ARM.attributes - 0x00000000000000fe 0x21 Core/Startup/startup_stm32f103zetx.o + 0x00000000000000fe 0x2d Core/Src/system_stm32f1xx.o .ARM.attributes - 0x000000000000011f 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x000000000000012b 0x21 Core/Startup/startup_stm32f103zetx.o .ARM.attributes - 0x000000000000014c 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x000000000000014c 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o .ARM.attributes - 0x0000000000000179 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000000000179 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .ARM.attributes - 0x00000000000001a6 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x00000000000001a6 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o .ARM.attributes - 0x00000000000001d3 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x00000000000001d3 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o .ARM.attributes - 0x0000000000000200 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + 0x0000000000000200 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .ARM.attributes - 0x000000000000022d 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x000000000000022d 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o .ARM.attributes - 0x000000000000025a 0x2d FATFS/App/fatfs.o + 0x000000000000025a 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o .ARM.attributes - 0x0000000000000287 0x2d FATFS/Target/user_diskio.o + 0x0000000000000287 0x2d FATFS/App/fatfs.o .ARM.attributes - 0x00000000000002b4 0x2d Middlewares/Third_Party/FatFs/src/diskio.o + 0x00000000000002b4 0x2d FATFS/Target/user_diskio.o .ARM.attributes - 0x00000000000002e1 0x2d Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000000002e1 0x2d Middlewares/Third_Party/FatFs/src/diskio.o .ARM.attributes - 0x000000000000030e 0x2d Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x000000000000030e 0x2d Middlewares/Third_Party/FatFs/src/ff.o .ARM.attributes - 0x000000000000033b 0x2d mycode/c.o + 0x000000000000033b 0x2d Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .ARM.attributes - 0x0000000000000368 0x2d mycode/falsh.o + 0x0000000000000368 0x2d mycode/c.o .ARM.attributes - 0x0000000000000395 0x2d mycode/fatfs_sd.o + 0x0000000000000395 0x2d mycode/falsh.o .ARM.attributes - 0x00000000000003c2 0x2d mycode/lcd.o + 0x00000000000003c2 0x2d mycode/fatfs_sd.o .ARM.attributes - 0x00000000000003ef 0x2d mycode/text.o + 0x00000000000003ef 0x2d mycode/lcd.o .ARM.attributes - 0x000000000000041c 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) + 0x000000000000041c 0x2d mycode/text.o .ARM.attributes - 0x0000000000000449 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) + 0x0000000000000449 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) .ARM.attributes - 0x0000000000000476 0x1d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o + 0x0000000000000476 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) + .ARM.attributes + 0x00000000000004a3 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) + .ARM.attributes + 0x00000000000004d0 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) + .ARM.attributes + 0x00000000000004fd 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + .ARM.attributes + 0x000000000000052a 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + .ARM.attributes + 0x0000000000000557 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + .ARM.attributes + 0x0000000000000584 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) + .ARM.attributes + 0x00000000000005b1 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) + .ARM.attributes + 0x00000000000005de 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) + .ARM.attributes + 0x000000000000060b 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) + .ARM.attributes + 0x0000000000000638 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + .ARM.attributes + 0x0000000000000665 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) + .ARM.attributes + 0x0000000000000692 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) + .ARM.attributes + 0x00000000000006bf 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + .ARM.attributes + 0x00000000000006ec 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) + .ARM.attributes + 0x0000000000000719 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + .ARM.attributes + 0x0000000000000746 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .ARM.attributes + 0x0000000000000773 0x1d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o OUTPUT(103ze_code.elf elf32-littlearm) LOAD linker stubs LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc.a LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libm.a LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp\libgcc.a -.debug_info 0x0000000000000000 0xe347 +.debug_info 0x0000000000000000 0xede2 .debug_info 0x0000000000000000 0x117c Core/Src/main.o .debug_info 0x000000000000117c 0xbe6 Core/Src/stm32f1xx_hal_msp.o .debug_info 0x0000000000001d62 0x222 Core/Src/stm32f1xx_it.o - .debug_info 0x0000000000001f84 0x2be Core/Src/system_stm32f1xx.o - .debug_info 0x0000000000002242 0x22 Core/Startup/startup_stm32f103zetx.o - .debug_info 0x0000000000002264 0x7d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_info 0x0000000000002a34 0xc42 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_info 0x0000000000003676 0x701 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_info 0x0000000000003d77 0x88e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_info 0x0000000000004605 0x16bd Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_info 0x0000000000005cc2 0xd4b Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_info 0x0000000000006a0d 0xae7 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_info 0x00000000000074f4 0x5e8 FATFS/App/fatfs.o - .debug_info 0x0000000000007adc 0xced FATFS/Target/user_diskio.o - .debug_info 0x00000000000087c9 0x4fe Middlewares/Third_Party/FatFs/src/diskio.o - .debug_info 0x0000000000008cc7 0x2333 Middlewares/Third_Party/FatFs/src/ff.o - .debug_info 0x000000000000affa 0x495 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_info 0x000000000000b48f 0x7c3 mycode/c.o - .debug_info 0x000000000000bc52 0x73b mycode/falsh.o - .debug_info 0x000000000000c38d 0xc6d mycode/fatfs_sd.o - .debug_info 0x000000000000cffa 0x8a2 mycode/lcd.o - .debug_info 0x000000000000d89c 0xaab mycode/text.o + .debug_info 0x0000000000001f84 0xa25 Core/Src/sysmem.o + .debug_info 0x00000000000029a9 0x2be Core/Src/system_stm32f1xx.o + .debug_info 0x0000000000002c67 0x22 Core/Startup/startup_stm32f103zetx.o + .debug_info 0x0000000000002c89 0x7d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_info 0x0000000000003459 0xc42 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_info 0x000000000000409b 0x701 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_info 0x000000000000479c 0x88e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_info 0x000000000000502a 0x16bd Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_info 0x00000000000066e7 0xd4b Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_info 0x0000000000007432 0xae7 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_info 0x0000000000007f19 0x5e8 FATFS/App/fatfs.o + .debug_info 0x0000000000008501 0xced FATFS/Target/user_diskio.o + .debug_info 0x00000000000091ee 0x4fe Middlewares/Third_Party/FatFs/src/diskio.o + .debug_info 0x00000000000096ec 0x2333 Middlewares/Third_Party/FatFs/src/ff.o + .debug_info 0x000000000000ba1f 0x495 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_info 0x000000000000beb4 0x83e mycode/c.o + .debug_info 0x000000000000c6f2 0x73b mycode/falsh.o + .debug_info 0x000000000000ce2d 0xc68 mycode/fatfs_sd.o + .debug_info 0x000000000000da95 0x8a2 mycode/lcd.o + .debug_info 0x000000000000e337 0xaab mycode/text.o -.debug_abbrev 0x0000000000000000 0x2b1d +.debug_abbrev 0x0000000000000000 0x2d03 .debug_abbrev 0x0000000000000000 0x292 Core/Src/main.o .debug_abbrev 0x0000000000000292 0x20b Core/Src/stm32f1xx_hal_msp.o .debug_abbrev 0x000000000000049d 0xd2 Core/Src/stm32f1xx_it.o - .debug_abbrev 0x000000000000056f 0x14e Core/Src/system_stm32f1xx.o - .debug_abbrev 0x00000000000006bd 0x12 Core/Startup/startup_stm32f103zetx.o - .debug_abbrev 0x00000000000006cf 0x1ed Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_abbrev 0x00000000000008bc 0x313 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_abbrev 0x0000000000000bcf 0x1e8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_abbrev 0x0000000000000db7 0x273 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_abbrev 0x000000000000102a 0x26e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_abbrev 0x0000000000001298 0x1f2 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_abbrev 0x000000000000148a 0x1ae Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_abbrev 0x0000000000001638 0x19d FATFS/App/fatfs.o - .debug_abbrev 0x00000000000017d5 0x22e FATFS/Target/user_diskio.o - .debug_abbrev 0x0000000000001a03 0x18b Middlewares/Third_Party/FatFs/src/diskio.o - .debug_abbrev 0x0000000000001b8e 0x2bf Middlewares/Third_Party/FatFs/src/ff.o - .debug_abbrev 0x0000000000001e4d 0x1bc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_abbrev 0x0000000000002009 0x1f0 mycode/c.o - .debug_abbrev 0x00000000000021f9 0x185 mycode/falsh.o - .debug_abbrev 0x000000000000237e 0x2c5 mycode/fatfs_sd.o - .debug_abbrev 0x0000000000002643 0x29c mycode/lcd.o - .debug_abbrev 0x00000000000028df 0x23e mycode/text.o + .debug_abbrev 0x000000000000056f 0x1bf Core/Src/sysmem.o + .debug_abbrev 0x000000000000072e 0x14e Core/Src/system_stm32f1xx.o + .debug_abbrev 0x000000000000087c 0x12 Core/Startup/startup_stm32f103zetx.o + .debug_abbrev 0x000000000000088e 0x1ed Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_abbrev 0x0000000000000a7b 0x313 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_abbrev 0x0000000000000d8e 0x1e8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_abbrev 0x0000000000000f76 0x273 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_abbrev 0x00000000000011e9 0x26e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_abbrev 0x0000000000001457 0x1f2 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_abbrev 0x0000000000001649 0x1ae Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_abbrev 0x00000000000017f7 0x19d FATFS/App/fatfs.o + .debug_abbrev 0x0000000000001994 0x22e FATFS/Target/user_diskio.o + .debug_abbrev 0x0000000000001bc2 0x18b Middlewares/Third_Party/FatFs/src/diskio.o + .debug_abbrev 0x0000000000001d4d 0x2bf Middlewares/Third_Party/FatFs/src/ff.o + .debug_abbrev 0x000000000000200c 0x1bc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_abbrev 0x00000000000021c8 0x217 mycode/c.o + .debug_abbrev 0x00000000000023df 0x185 mycode/falsh.o + .debug_abbrev 0x0000000000002564 0x2c5 mycode/fatfs_sd.o + .debug_abbrev 0x0000000000002829 0x29c mycode/lcd.o + .debug_abbrev 0x0000000000002ac5 0x23e mycode/text.o -.debug_aranges 0x0000000000000000 0xbf8 +.debug_aranges 0x0000000000000000 0xc18 .debug_aranges 0x0000000000000000 0x48 Core/Src/main.o .debug_aranges @@ -4135,69 +4343,72 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .debug_aranges 0x0000000000000098 0x60 Core/Src/stm32f1xx_it.o .debug_aranges - 0x00000000000000f8 0x28 Core/Src/system_stm32f1xx.o + 0x00000000000000f8 0x20 Core/Src/sysmem.o .debug_aranges - 0x0000000000000120 0x28 Core/Startup/startup_stm32f103zetx.o + 0x0000000000000118 0x28 Core/Src/system_stm32f1xx.o .debug_aranges - 0x0000000000000148 0xe0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000000000140 0x28 Core/Startup/startup_stm32f103zetx.o .debug_aranges - 0x0000000000000228 0x100 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000000000168 0xe0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o .debug_aranges - 0x0000000000000328 0x58 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000000000248 0x100 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .debug_aranges - 0x0000000000000380 0x90 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x0000000000000348 0x58 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o .debug_aranges - 0x0000000000000410 0x1d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x00000000000003a0 0x90 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o .debug_aranges - 0x00000000000005e0 0xb8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + 0x0000000000000430 0x1d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .debug_aranges - 0x0000000000000698 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x0000000000000600 0xb8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o .debug_aranges - 0x0000000000000740 0x28 FATFS/App/fatfs.o + 0x00000000000006b8 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o .debug_aranges - 0x0000000000000768 0x40 FATFS/Target/user_diskio.o + 0x0000000000000760 0x28 FATFS/App/fatfs.o .debug_aranges - 0x00000000000007a8 0x48 Middlewares/Third_Party/FatFs/src/diskio.o + 0x0000000000000788 0x40 FATFS/Target/user_diskio.o .debug_aranges - 0x00000000000007f0 0x1e8 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000000007c8 0x48 Middlewares/Third_Party/FatFs/src/diskio.o .debug_aranges - 0x00000000000009d8 0x40 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x0000000000000810 0x1e8 Middlewares/Third_Party/FatFs/src/ff.o .debug_aranges - 0x0000000000000a18 0x20 mycode/c.o + 0x00000000000009f8 0x40 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .debug_aranges - 0x0000000000000a38 0x20 mycode/falsh.o + 0x0000000000000a38 0x20 mycode/c.o .debug_aranges - 0x0000000000000a58 0xa8 mycode/fatfs_sd.o + 0x0000000000000a58 0x20 mycode/falsh.o .debug_aranges - 0x0000000000000b00 0xb8 mycode/lcd.o + 0x0000000000000a78 0xa8 mycode/fatfs_sd.o .debug_aranges - 0x0000000000000bb8 0x40 mycode/text.o + 0x0000000000000b20 0xb8 mycode/lcd.o + .debug_aranges + 0x0000000000000bd8 0x40 mycode/text.o -.debug_ranges 0x0000000000000000 0xaa0 +.debug_ranges 0x0000000000000000 0xab0 .debug_ranges 0x0000000000000000 0x38 Core/Src/main.o .debug_ranges 0x0000000000000038 0x40 Core/Src/stm32f1xx_hal_msp.o .debug_ranges 0x0000000000000078 0x50 Core/Src/stm32f1xx_it.o - .debug_ranges 0x00000000000000c8 0x18 Core/Src/system_stm32f1xx.o - .debug_ranges 0x00000000000000e0 0x20 Core/Startup/startup_stm32f103zetx.o - .debug_ranges 0x0000000000000100 0xd0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_ranges 0x00000000000001d0 0xf0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_ranges 0x00000000000002c0 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_ranges 0x0000000000000308 0x80 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_ranges 0x0000000000000388 0x1c0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_ranges 0x0000000000000548 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_ranges 0x00000000000005f0 0x98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_ranges 0x0000000000000688 0x18 FATFS/App/fatfs.o - .debug_ranges 0x00000000000006a0 0x30 FATFS/Target/user_diskio.o - .debug_ranges 0x00000000000006d0 0x38 Middlewares/Third_Party/FatFs/src/diskio.o - .debug_ranges 0x0000000000000708 0x1d8 Middlewares/Third_Party/FatFs/src/ff.o - .debug_ranges 0x00000000000008e0 0x30 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_ranges 0x0000000000000910 0x10 mycode/c.o - .debug_ranges 0x0000000000000920 0x10 mycode/falsh.o - .debug_ranges 0x0000000000000930 0x98 mycode/fatfs_sd.o - .debug_ranges 0x00000000000009c8 0xa8 mycode/lcd.o - .debug_ranges 0x0000000000000a70 0x30 mycode/text.o + .debug_ranges 0x00000000000000c8 0x10 Core/Src/sysmem.o + .debug_ranges 0x00000000000000d8 0x18 Core/Src/system_stm32f1xx.o + .debug_ranges 0x00000000000000f0 0x20 Core/Startup/startup_stm32f103zetx.o + .debug_ranges 0x0000000000000110 0xd0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_ranges 0x00000000000001e0 0xf0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_ranges 0x00000000000002d0 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_ranges 0x0000000000000318 0x80 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_ranges 0x0000000000000398 0x1c0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_ranges 0x0000000000000558 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_ranges 0x0000000000000600 0x98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_ranges 0x0000000000000698 0x18 FATFS/App/fatfs.o + .debug_ranges 0x00000000000006b0 0x30 FATFS/Target/user_diskio.o + .debug_ranges 0x00000000000006e0 0x38 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_ranges 0x0000000000000718 0x1d8 Middlewares/Third_Party/FatFs/src/ff.o + .debug_ranges 0x00000000000008f0 0x30 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_ranges 0x0000000000000920 0x10 mycode/c.o + .debug_ranges 0x0000000000000930 0x10 mycode/falsh.o + .debug_ranges 0x0000000000000940 0x98 mycode/fatfs_sd.o + .debug_ranges 0x00000000000009d8 0xa8 mycode/lcd.o + .debug_ranges 0x0000000000000a80 0x30 mycode/text.o -.debug_macro 0x0000000000000000 0x1a88f +.debug_macro 0x0000000000000000 0x1ac05 .debug_macro 0x0000000000000000 0x20e Core/Src/main.o .debug_macro 0x000000000000020e 0xa9c Core/Src/main.o .debug_macro 0x0000000000000caa 0x21b Core/Src/main.o @@ -4235,119 +4446,125 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .debug_macro 0x0000000000016ef9 0x141 Core/Src/main.o .debug_macro 0x000000000001703a 0x217 Core/Src/main.o .debug_macro 0x0000000000017251 0xb5 Core/Src/main.o - .debug_macro 0x0000000000017306 0x28 Core/Src/main.o - .debug_macro 0x000000000001732e 0xde Core/Src/main.o - .debug_macro 0x000000000001740c 0xf5 Core/Src/main.o - .debug_macro 0x0000000000017501 0x8e Core/Src/main.o - .debug_macro 0x000000000001758f 0x1b7 Core/Src/stm32f1xx_hal_msp.o - .debug_macro 0x0000000000017746 0x1c1 Core/Src/stm32f1xx_it.o - .debug_macro 0x0000000000017907 0x1a8 Core/Src/system_stm32f1xx.o - .debug_macro 0x0000000000017aaf 0x1cc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_macro 0x0000000000017c7b 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_macro 0x0000000000017e23 0x213 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_macro 0x0000000000018036 0x1ba Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_macro 0x00000000000181f0 0x1b0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_macro 0x00000000000183a0 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_macro 0x0000000000018548 0x1e1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_macro 0x0000000000018729 0x20a FATFS/App/fatfs.o - .debug_macro 0x0000000000018933 0xd8 FATFS/App/fatfs.o - .debug_macro 0x0000000000018a0b 0x2dc FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018ce7 0x10 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018cf7 0x20 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018d17 0x16 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018d2d 0x7c FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018da9 0xbd FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018e66 0x56 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018ebc 0x64 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000018f20 0x1f7 Middlewares/Third_Party/FatFs/src/diskio.o - .debug_macro 0x0000000000019117 0x43e Middlewares/Third_Party/FatFs/src/ff.o - .debug_macro 0x0000000000019555 0x58 Middlewares/Third_Party/FatFs/src/ff.o - .debug_macro 0x00000000000195ad 0x1f7 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_macro 0x00000000000197a4 0x233 mycode/c.o - .debug_macro 0x00000000000199d7 0x38a mycode/c.o - .debug_macro 0x0000000000019d61 0x10 mycode/c.o - .debug_macro 0x0000000000019d71 0x1d1 mycode/falsh.o - .debug_macro 0x0000000000019f42 0x206 mycode/fatfs_sd.o - .debug_macro 0x000000000001a148 0x1d0 mycode/lcd.o - .debug_macro 0x000000000001a318 0x384 mycode/lcd.o - .debug_macro 0x000000000001a69c 0x1e3 mycode/text.o - .debug_macro 0x000000000001a87f 0x10 mycode/text.o + .debug_macro 0x0000000000017306 0x4c Core/Src/main.o + .debug_macro 0x0000000000017352 0xde Core/Src/main.o + .debug_macro 0x0000000000017430 0xf5 Core/Src/main.o + .debug_macro 0x0000000000017525 0x8e Core/Src/main.o + .debug_macro 0x00000000000175b3 0x1b7 Core/Src/stm32f1xx_hal_msp.o + .debug_macro 0x000000000001776a 0x1c1 Core/Src/stm32f1xx_it.o + .debug_macro 0x000000000001792b 0xff Core/Src/sysmem.o + .debug_macro 0x0000000000017a2a 0x23b Core/Src/sysmem.o + .debug_macro 0x0000000000017c65 0x1a8 Core/Src/system_stm32f1xx.o + .debug_macro 0x0000000000017e0d 0x1cc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_macro 0x0000000000017fd9 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_macro 0x0000000000018181 0x213 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_macro 0x0000000000018394 0x1ba Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_macro 0x000000000001854e 0x1b0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_macro 0x00000000000186fe 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_macro 0x00000000000188a6 0x1e1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_macro 0x0000000000018a87 0x20a FATFS/App/fatfs.o + .debug_macro 0x0000000000018c91 0xd8 FATFS/App/fatfs.o + .debug_macro 0x0000000000018d69 0x2dc FATFS/Target/user_diskio.o + .debug_macro 0x0000000000019045 0x10 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000019055 0x20 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000019075 0x16 FATFS/Target/user_diskio.o + .debug_macro 0x000000000001908b 0x7c FATFS/Target/user_diskio.o + .debug_macro 0x0000000000019107 0xbd FATFS/Target/user_diskio.o + .debug_macro 0x00000000000191c4 0x56 FATFS/Target/user_diskio.o + .debug_macro 0x000000000001921a 0x64 FATFS/Target/user_diskio.o + .debug_macro 0x000000000001927e 0x1f7 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_macro 0x0000000000019475 0x43e Middlewares/Third_Party/FatFs/src/ff.o + .debug_macro 0x00000000000198b3 0x58 Middlewares/Third_Party/FatFs/src/ff.o + .debug_macro 0x000000000001990b 0x1f7 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_macro 0x0000000000019b02 0x24b mycode/c.o + .debug_macro 0x0000000000019d4d 0x38a mycode/c.o + .debug_macro 0x000000000001a0d7 0x10 mycode/c.o + .debug_macro 0x000000000001a0e7 0x1d1 mycode/falsh.o + .debug_macro 0x000000000001a2b8 0x206 mycode/fatfs_sd.o + .debug_macro 0x000000000001a4be 0x1d0 mycode/lcd.o + .debug_macro 0x000000000001a68e 0x384 mycode/lcd.o + .debug_macro 0x000000000001aa12 0x1e3 mycode/text.o + .debug_macro 0x000000000001abf5 0x10 mycode/text.o -.debug_line 0x0000000000000000 0xfdb5 - .debug_line 0x0000000000000000 0x884 Core/Src/main.o - .debug_line 0x0000000000000884 0x77c Core/Src/stm32f1xx_hal_msp.o - .debug_line 0x0000000000001000 0x73c Core/Src/stm32f1xx_it.o - .debug_line 0x000000000000173c 0x6f8 Core/Src/system_stm32f1xx.o - .debug_line 0x0000000000001e34 0x84 Core/Startup/startup_stm32f103zetx.o - .debug_line 0x0000000000001eb8 0x925 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_line 0x00000000000027dd 0xb0d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_line 0x00000000000032ea 0x9e4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_line 0x0000000000003cce 0xd33 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_line 0x0000000000004a01 0x1b9d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_line 0x000000000000659e 0xc98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_line 0x0000000000007236 0x981 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_line 0x0000000000007bb7 0x715 FATFS/App/fatfs.o - .debug_line 0x00000000000082cc 0x8c7 FATFS/Target/user_diskio.o - .debug_line 0x0000000000008b93 0x786 Middlewares/Third_Party/FatFs/src/diskio.o - .debug_line 0x0000000000009319 0x2f22 Middlewares/Third_Party/FatFs/src/ff.o - .debug_line 0x000000000000c23b 0x7a3 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_line 0x000000000000c9de 0x745 mycode/c.o - .debug_line 0x000000000000d123 0x69c mycode/falsh.o - .debug_line 0x000000000000d7bf 0xd6a mycode/fatfs_sd.o - .debug_line 0x000000000000e529 0xfac mycode/lcd.o - .debug_line 0x000000000000f4d5 0x8e0 mycode/text.o +.debug_line 0x0000000000000000 0x10388 + .debug_line 0x0000000000000000 0x88e Core/Src/main.o + .debug_line 0x000000000000088e 0x77c Core/Src/stm32f1xx_hal_msp.o + .debug_line 0x000000000000100a 0x73c Core/Src/stm32f1xx_it.o + .debug_line 0x0000000000001746 0x4f8 Core/Src/sysmem.o + .debug_line 0x0000000000001c3e 0x6f8 Core/Src/system_stm32f1xx.o + .debug_line 0x0000000000002336 0x84 Core/Startup/startup_stm32f103zetx.o + .debug_line 0x00000000000023ba 0x925 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_line 0x0000000000002cdf 0xb0d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_line 0x00000000000037ec 0x9e4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_line 0x00000000000041d0 0xd33 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_line 0x0000000000004f03 0x1b9d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_line 0x0000000000006aa0 0xc98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_line 0x0000000000007738 0x981 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_line 0x00000000000080b9 0x715 FATFS/App/fatfs.o + .debug_line 0x00000000000087ce 0x8c7 FATFS/Target/user_diskio.o + .debug_line 0x0000000000009095 0x786 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_line 0x000000000000981b 0x2f22 Middlewares/Third_Party/FatFs/src/ff.o + .debug_line 0x000000000000c73d 0x7a3 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_line 0x000000000000cee0 0x7f6 mycode/c.o + .debug_line 0x000000000000d6d6 0x69c mycode/falsh.o + .debug_line 0x000000000000dd72 0xd7c mycode/fatfs_sd.o + .debug_line 0x000000000000eaee 0xfac mycode/lcd.o + .debug_line 0x000000000000fa9a 0x8ee mycode/text.o -.debug_str 0x0000000000000000 0x93ad3 - .debug_str 0x0000000000000000 0x8cef8 Core/Src/main.o - 0x8d419 (size before relaxing) - .debug_str 0x000000000008cef8 0xc5 Core/Src/stm32f1xx_hal_msp.o - 0x8c968 (size before relaxing) - .debug_str 0x000000000008cfbd 0xbd Core/Src/stm32f1xx_it.o - 0x8c33b (size before relaxing) - .debug_str 0x000000000008d07a 0x52 Core/Src/system_stm32f1xx.o +.debug_str 0x0000000000000000 0x94106 + .debug_str 0x0000000000000000 0x8cf81 Core/Src/main.o + 0x8d4a2 (size before relaxing) + .debug_str 0x000000000008cf81 0xc5 Core/Src/stm32f1xx_hal_msp.o + 0x8c9f1 (size before relaxing) + .debug_str 0x000000000008d046 0xbd Core/Src/stm32f1xx_it.o + 0x8c3c4 (size before relaxing) + .debug_str 0x000000000008d103 0x220a Core/Src/sysmem.o + 0x6250 (size before relaxing) + .debug_str 0x000000000008f30d 0x52 Core/Src/system_stm32f1xx.o 0x8c285 (size before relaxing) - .debug_str 0x000000000008d0cc 0x36 Core/Startup/startup_stm32f103zetx.o + .debug_str 0x000000000008f35f 0x36 Core/Startup/startup_stm32f103zetx.o 0x64 (size before relaxing) - .debug_str 0x000000000008d102 0x5f6 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_str 0x000000000008f395 0x5f6 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o 0x8c9fa (size before relaxing) - .debug_str 0x000000000008d6f8 0x300 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_str 0x000000000008f98b 0x300 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o 0x8ca02 (size before relaxing) - .debug_str 0x000000000008d9f8 0x324 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_str 0x000000000008fc8b 0x324 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o 0x8c649 (size before relaxing) - .debug_str 0x000000000008dd1c 0x24f Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_str 0x000000000008ffaf 0x24f Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o 0x8c682 (size before relaxing) - .debug_str 0x000000000008df6b 0x544 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_str 0x00000000000901fe 0x544 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o 0x8cb90 (size before relaxing) - .debug_str 0x000000000008e4af 0x1fd Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_str 0x0000000000090742 0x1f7 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o 0x8c87b (size before relaxing) - .debug_str 0x000000000008e6ac 0x7ef Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_str 0x0000000000090939 0x7ef Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o 0x8cc1c (size before relaxing) - .debug_str 0x000000000008ee9b 0x2f FATFS/App/fatfs.o - 0x8cbc6 (size before relaxing) - .debug_str 0x000000000008eeca 0x32fd FATFS/Target/user_diskio.o - 0x8fe1e (size before relaxing) - .debug_str 0x00000000000921c7 0x52 Middlewares/Third_Party/FatFs/src/diskio.o - 0x8cb03 (size before relaxing) - .debug_str 0x0000000000092219 0xd6b Middlewares/Third_Party/FatFs/src/ff.o - 0x8d8f0 (size before relaxing) - .debug_str 0x0000000000092f84 0xa2 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - 0x8cb54 (size before relaxing) - .debug_str 0x0000000000093026 0x6e0 mycode/c.o - 0x8d3ae (size before relaxing) - .debug_str 0x0000000000093706 0x5a mycode/falsh.o - 0x8c6c7 (size before relaxing) - .debug_str 0x0000000000093760 0x17b mycode/fatfs_sd.o - 0x8cafc (size before relaxing) - .debug_str 0x00000000000938db 0x18c mycode/lcd.o - 0x8ca89 (size before relaxing) - .debug_str 0x0000000000093a67 0x6c mycode/text.o - 0x8cdb6 (size before relaxing) + .debug_str 0x0000000000091128 0x2f FATFS/App/fatfs.o + 0x8cc4f (size before relaxing) + .debug_str 0x0000000000091157 0x15dc FATFS/Target/user_diskio.o + 0x8fea7 (size before relaxing) + .debug_str 0x0000000000092733 0x52 Middlewares/Third_Party/FatFs/src/diskio.o + 0x8cb8c (size before relaxing) + .debug_str 0x0000000000092785 0xd6b Middlewares/Third_Party/FatFs/src/ff.o + 0x8d979 (size before relaxing) + .debug_str 0x00000000000934f0 0xa2 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x8cbdd (size before relaxing) + .debug_str 0x0000000000093592 0x7a7 mycode/c.o + 0x8d4fe (size before relaxing) + .debug_str 0x0000000000093d39 0x5a mycode/falsh.o + 0x8c750 (size before relaxing) + .debug_str 0x0000000000093d93 0x17b mycode/fatfs_sd.o + 0x8cb85 (size before relaxing) + .debug_str 0x0000000000093f0e 0x18c mycode/lcd.o + 0x8cb12 (size before relaxing) + .debug_str 0x000000000009409a 0x6c mycode/text.o + 0x8ce3f (size before relaxing) .comment 0x0000000000000000 0x53 .comment 0x0000000000000000 0x53 Core/Src/main.o 0x54 (size before relaxing) .comment 0x0000000000000053 0x54 Core/Src/stm32f1xx_hal_msp.o .comment 0x0000000000000053 0x54 Core/Src/stm32f1xx_it.o + .comment 0x0000000000000053 0x54 Core/Src/sysmem.o .comment 0x0000000000000053 0x54 Core/Src/system_stm32f1xx.o .comment 0x0000000000000053 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o .comment 0x0000000000000053 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o @@ -4367,27 +4584,43 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .comment 0x0000000000000053 0x54 mycode/lcd.o .comment 0x0000000000000053 0x54 mycode/text.o -.debug_frame 0x0000000000000000 0x2e84 +.debug_frame 0x0000000000000000 0x32d8 .debug_frame 0x0000000000000000 0xcc Core/Src/main.o .debug_frame 0x00000000000000cc 0x108 Core/Src/stm32f1xx_hal_msp.o .debug_frame 0x00000000000001d4 0x104 Core/Src/stm32f1xx_it.o - .debug_frame 0x00000000000002d8 0x58 Core/Src/system_stm32f1xx.o - .debug_frame 0x0000000000000330 0x334 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_frame 0x0000000000000664 0x428 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_frame 0x0000000000000a8c 0x14c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_frame 0x0000000000000bd8 0x21c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_frame 0x0000000000000df4 0x824 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_frame 0x0000000000001618 0x30c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_frame 0x0000000000001924 0x2dc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_frame 0x0000000000001c00 0x4c FATFS/App/fatfs.o - .debug_frame 0x0000000000001c4c 0xc4 FATFS/Target/user_diskio.o - .debug_frame 0x0000000000001d10 0xec Middlewares/Third_Party/FatFs/src/diskio.o - .debug_frame 0x0000000000001dfc 0x8d0 Middlewares/Third_Party/FatFs/src/ff.o - .debug_frame 0x00000000000026cc 0xc8 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_frame 0x0000000000002794 0x30 mycode/c.o - .debug_frame 0x00000000000027c4 0x34 mycode/falsh.o - .debug_frame 0x00000000000027f8 0x288 mycode/fatfs_sd.o - .debug_frame 0x0000000000002a80 0x2ec mycode/lcd.o - .debug_frame 0x0000000000002d6c 0xcc mycode/text.o - .debug_frame 0x0000000000002e38 0x2c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) - .debug_frame 0x0000000000002e64 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) + .debug_frame 0x00000000000002d8 0x34 Core/Src/sysmem.o + .debug_frame 0x000000000000030c 0x58 Core/Src/system_stm32f1xx.o + .debug_frame 0x0000000000000364 0x334 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_frame 0x0000000000000698 0x428 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_frame 0x0000000000000ac0 0x14c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_frame 0x0000000000000c0c 0x21c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_frame 0x0000000000000e28 0x824 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_frame 0x000000000000164c 0x30c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_frame 0x0000000000001958 0x2dc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_frame 0x0000000000001c34 0x4c FATFS/App/fatfs.o + .debug_frame 0x0000000000001c80 0xc4 FATFS/Target/user_diskio.o + .debug_frame 0x0000000000001d44 0xec Middlewares/Third_Party/FatFs/src/diskio.o + .debug_frame 0x0000000000001e30 0x8d0 Middlewares/Third_Party/FatFs/src/ff.o + .debug_frame 0x0000000000002700 0xc8 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_frame 0x00000000000027c8 0x30 mycode/c.o + .debug_frame 0x00000000000027f8 0x34 mycode/falsh.o + .debug_frame 0x000000000000282c 0x288 mycode/fatfs_sd.o + .debug_frame 0x0000000000002ab4 0x2ec mycode/lcd.o + .debug_frame 0x0000000000002da0 0xcc mycode/text.o + .debug_frame 0x0000000000002e6c 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) + .debug_frame 0x0000000000002e8c 0x2c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) + .debug_frame 0x0000000000002eb8 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) + .debug_frame 0x0000000000002ed8 0x6c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) + .debug_frame 0x0000000000002f44 0x90 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) + .debug_frame 0x0000000000002fd4 0x60 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) + .debug_frame 0x0000000000003034 0x28 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) + .debug_frame 0x000000000000305c 0x28 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) + .debug_frame 0x0000000000003084 0x28 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) + .debug_frame 0x00000000000030ac 0x38 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) + .debug_frame 0x00000000000030e4 0x30 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) + .debug_frame 0x0000000000003114 0x3c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) + .debug_frame 0x0000000000003150 0x2c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) + .debug_frame 0x000000000000317c 0x30 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) + .debug_frame 0x00000000000031ac 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) + .debug_frame 0x00000000000031cc 0x5c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) + .debug_frame 0x0000000000003228 0xb0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) diff --git a/103ze/Debug/Core/Src/main.o b/103ze/Debug/Core/Src/main.o index 81e84040a01eb18c12d6b039fb548ca1eb682f20..d1369fee54db3e7502a09c8de92c0a91dde6fe42 100644 GIT binary patch delta 101093 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 PvFV-(D4ZQ|94Gz*vjvs2 delta 100774 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